commit 14ad828e3ee683d8c8e03f56b8dd40d4b5a5c4b7 Author: akumadoferudi Date: Thu May 7 13:31:42 2026 +0700 clone to branch ferdi_feature diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..e69de29 diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..7fc84ba --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +# EditorConfig is awesome: http://EditorConfig.org + +root = true + +[*] +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true +insert_final_newline = true +end_of_line = lf + +[*.md] +trim_trailing_whitespace = false + +[Makefile] +indent_style = tab +trim_trailing_whitespace = false diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..313f871 --- /dev/null +++ b/.env.example @@ -0,0 +1,35 @@ +LOG_LEVEL=INFO +ENV=local +PORT=8000 +HOST=localhost + +# Database +DATABASE_HOSTNAME=localhost +DATABASE_CREDENTIAL_USER=user +DATABASE_CREDENTIAL_PASSWORD=password +DATABASE_NAME=digital_twin +DATABASE_PORT=5432 + +# Collector +COLLECTOR_HOSTNAME=localhost +COLLECTOR_PORT=5432 +COLLECTOR_CREDENTIAL_USER=user +COLLECTOR_CREDENTIAL_PASSWORD=password +COLLECTOR_NAME=collector + +# Services +AUTH_SERVICE_API=http://192.168.1.82:8000/auth +AEROS_BASE_URL=http://192.168.1.102 +WINDOWS_AEROS_BASE_URL=http://192.168.1.102:8800 +TEMPORAL_URL=http://192.168.1.86:7233 +RELIABILITY_SERVICE_API=http://192.168.1.82:8000/reliability + +# Aeros License (Fallback if Vault is not used) +AEROS_LICENSE_ID= +AEROS_LICENSE_SECRET= + +# Vault (Optional if using .env fallback) +VAULT_URL= +ROLE_ID= +SECRET_ID= +AEROS_SECRET_PATH= diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..7402e93 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,6 @@ +# Set the default behavior for all files. +* text=auto eol=lf + +# Normalized and converts to native line endings on checkout. +*.py text +*.pyx text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6ef35d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +env/ +__pycache__/ +venv/ +.env \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..22a6e60 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,42 @@ +default_language_version: + python: python3 +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: check-ast + - id: check-builtin-literals + - id: check-merge-conflict + - id: check-yaml + - id: check-toml + +- repo: https://github.com/nbQA-dev/nbQA + rev: 1.7.1 + hooks: + - id: nbqa-isort + +- repo: https://github.com/PyCQA/isort + rev: 5.13.2 + hooks: + - id: isort + +- repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.2.1 + hooks: + - id: ruff-format + types_or: [python, pyi, jupyter] + +- repo: https://github.com/astral-sh/ruff-pre-commit + rev: 'v0.2.0' + hooks: + - id: ruff + types_or: [python, pyi, jupyter] + args: [ --fix, --exit-non-zero-on-fix ] + +- repo: https://github.com/pre-commit/mirrors-mypy + rev: v1.8.0 + hooks: + - id: mypy + language: system + pass_filenames: false + args: ['.'] diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..ba6db73 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,23 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "PyDebug: Current File", + "type": "debugpy", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal", + "args": [], + "justMyCode": true + }, + { + "name": "PyDebug: Main File", + "type": "debugpy", + "request": "launch", + "program": "${workspaceFolder}/main.py", + "console": "integratedTerminal", + "args": [], + "justMyCode": true + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1 @@ +{} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..cb472c1 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,19 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Python: Current File", + "type": "shell", + "command": "${command:python.interpreterPath} ${file}", + "args": [], + "group": "build" + }, + { + "label": "Python: Main File", + "type": "shell", + "command": "${command:python.interpreterPath} ${workspaceFolder}/main.py", + "args": [], + "group": "build" + } + ] +} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..415ec6d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,54 @@ +# Use the official Python 3.11 image from the Docker Hub +FROM python:3.11-slim as builder + +# Install Poetry +RUN pip install poetry + +ARG GITEA_USERNAME +ARG GITEA_PASSWORD + +# Set environment variables for Poetry +ENV POETRY_NO_INTERACTION=1 \ + POETRY_VIRTUALENVS_IN_PROJECT=1 \ + POETRY_VIRTUALENVS_CREATE=1 \ + POETRY_CACHE_DIR=/tmp/poetry_cache + +# Set the working directory +WORKDIR /app + +RUN poetry config http-basic.licaeros-repo ${GITEA_USERNAME} ${GITEA_PASSWORD} + +# Copy the Poetry configuration files +COPY pyproject.toml poetry.lock ./ + +# Install dependencies +RUN poetry install --no-root + +# Use a new slim image for the runtime +FROM python:3.11-slim as runtime + +# Install necessary tools for running the app, including `make` +RUN apt-get update && apt-get install -y --no-install-recommends \ + make \ + python3-tk \ + tk-dev \ + && rm -rf /var/lib/apt/lists/* + +# Set environment variables for Poetry +ENV POETRY_VIRTUALENVS_IN_PROJECT=1 \ + PATH="/app/.venv/bin:$PATH" + +# Copy Poetry installation from builder +COPY --from=builder /app/.venv /app/.venv + +# Copy application files +COPY . /app/ + +# Expose port for the application +EXPOSE 3000 + +# Set the working directory +WORKDIR /app + +# Run `make run` as the entry point +CMD ["make", "run"] diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..640a011 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,101 @@ +pipeline { + agent any + + environment { + DOCKER_HUB_USERNAME = 'aimodocker' + // This creates DOCKER_AUTH_USR and DOCKER_AUTH_PSW + DOCKER_AUTH = credentials('aimodocker') + GITEA_CREDS = credentials('gitea-credentials') + IMAGE_NAME = 'rbd-service' + SERVICE_NAME = 'ahm-app' + + SECURITY_PREFIX = 'security' + + // Initialize variables to be updated in script blocks + GIT_COMMIT_HASH = "" + IMAGE_TAG = "" + SECONDARY_TAG = "" + } + + stages { + stage('Checkout & Setup') { + steps { + script { + checkout scm + GIT_COMMIT_HASH = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim() + + // Use env.BRANCH_NAME or logic to handle detached HEAD if necessary + def branch = env.BRANCH_NAME ?: 'unknown' + echo "Current Branch: ${branch}" + + if (branch == 'main') { + IMAGE_TAG = GIT_COMMIT_HASH + SECONDARY_TAG = 'latest' + } else if (branch == 'rbd_security') { + IMAGE_TAG = "${SECURITY_PREFIX}-${GIT_COMMIT_HASH}" + SECONDARY_TAG = "${SECURITY_PREFIX}-latest" + } else { + IMAGE_TAG = "temp-${GIT_COMMIT_HASH}" + SECONDARY_TAG = "" // Ensure it's empty for other branches + } + + echo "Primary Tag: ${IMAGE_TAG}" + } + } + } + + stage('Docker Login') { + steps { + // Fixed variable names based on the 'DOCKER_AUTH' environment key + sh "echo ${DOCKER_AUTH_PSW} | docker login -u ${DOCKER_AUTH_USR} --password-stdin" + } + } + + stage('Build & Tag') { + steps { + withCredentials([usernamePassword(credentialsId: 'gitea-credentials', usernameVariable: 'GITEA_USERNAME', passwordVariable: 'GITEA_PASSWORD')]) { + // Logic and variable definitions go inside 'script' + script { + def fullImageName = "${DOCKER_HUB_USERNAME}/${IMAGE_NAME}" + + sh "docker build --build-arg GITEA_USERNAME=${GITEA_USERNAME} --build-arg GITEA_PASSWORD=${GITEA_PASSWORD} -t ${fullImageName}:${IMAGE_TAG} ." + + if (SECONDARY_TAG) { + sh "docker tag ${fullImageName}:${IMAGE_TAG} ${fullImageName}:${SECONDARY_TAG}" + } + } + } + } + } + + stage('Push to Docker Hub') { + steps { + script { + def fullImageName = "${DOCKER_HUB_USERNAME}/${IMAGE_NAME}" + sh "docker push ${fullImageName}:${IMAGE_TAG}" + + if (SECONDARY_TAG) { + sh "docker push ${fullImageName}:${SECONDARY_TAG}" + } + } + } + } + } + + post { + always { + script { + sh 'docker logout' + def fullImageName = "${DOCKER_HUB_USERNAME}/${IMAGE_NAME}" + // Clean up images to save agent disk space + sh "docker rmi ${fullImageName}:${IMAGE_TAG} || true" + if (SECONDARY_TAG) { + sh "docker rmi ${fullImageName}:${SECONDARY_TAG} || true" + } + } + } + success { + echo "Successfully processed ${env.BRANCH_NAME}." + } + } +} \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..22b64a5 --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +# Define variables +POETRY = poetry +PYTHON = $(POETRY) run python +APP = src/server.py + +# Targets and their rules + +# Install dependencies +install: + $(POETRY) install + +# Run the application +run: + python run.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..ec8406f --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +Test 5 diff --git a/TESTING.md b/TESTING.md new file mode 100644 index 0000000..f4c36a9 --- /dev/null +++ b/TESTING.md @@ -0,0 +1,44 @@ +# Unit Testing Guide - be-rbd + +This document provides instructions on how to set up and run unit tests for the **be-rbd** project. + +## 1. Preparation + +### Install Dependencies +Ensure you have all dependencies installed. This project uses `poetry`. + +```bash +# Install dependencies +poetry install +``` + +## 2. Configuration + +### Pytest Configuration +Ensure the `pytest.ini` file in the root directory points to the `unit` test folder: + +```ini +[pytest] +testpaths = tests/unit +python_files = test_*.py +asyncio_mode = auto +``` + +## 3. Running Tests + +### Run Unit Tests +To run all unit tests in the project: + +```bash +poetry run pytest tests/unit +``` + +### Run Specific Unit Test File +```bash +poetry run pytest tests/unit/test_specific_feature.py +``` + +## 4. Best Practices + +- **Isolation**: Unit tests should be isolated from external services. Use mocking for APIs and databases. +- **Async Testing**: Use `@pytest.mark.asyncio` for asynchronous test functions. diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- BTG -.json b/model/RBD Model/- BTG -.json new file mode 100644 index 0000000..714a5b4 --- /dev/null +++ b/model/RBD Model/- BTG -.json @@ -0,0 +1,17 @@ +{ + "series": [ + "- BTG_PC -", + "- BTG_SAC -", + "- BTG_SCR -", + "- BTG_FW -", + "- BTG_BOL -", + "- BTG_TUR -", + "- BTG_GEN -", + "- BTG_COND -", + "- BTG_CW -", + "- BTG_AFG -", + "- BTG_ASH -", + "- BTG_SPS -", + "- BTG_KLH -" + ] +} \ No newline at end of file diff --git a/model/RBD Model/- BTG -.json_Zone.Identifier b/model/RBD Model/- BTG -.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- BTG_AFG -.json b/model/RBD Model/- BTG_AFG -.json new file mode 100644 index 0000000..09b294c --- /dev/null +++ b/model/RBD Model/- BTG_AFG -.json @@ -0,0 +1,10 @@ +{ + "parallel_no_redundancy": [ + { + "series": ["AFG_FDF A", "AFG_PAF A", "AFG_RAPH A", "AFG_ESP A", "AFG_IDF A", "AFG_FGD A"] + }, + { + "series": ["AFG_FDF B", "AFG_PAF B", "AFG_RAPH B", "AFG_ESP B", "AFG_IDF B", "AFG_FGD B"] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/- BTG_AFG -.json_Zone.Identifier b/model/RBD Model/- BTG_AFG -.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- BTG_ASH -.json b/model/RBD Model/- BTG_ASH -.json new file mode 100644 index 0000000..75f5263 --- /dev/null +++ b/model/RBD Model/- BTG_ASH -.json @@ -0,0 +1,32 @@ +{ + "series": [ + "3BAD-PAN501", + "3BAD-M531", + "3BAD-AG531", + "3BAD-PN501", + { + "parallel": [ + { + "series": ["3BAD-H511A", "3BAD-M511A", "3BAD-P511A"] + }, + { + "series": ["3BAD-H511B", "3BAD-M511B", "3BAD-P511B"] + } + ] + }, + "3BAD-M501", + "3BAD-CV501", + "3BAD-T531", + "3BAD-T532", + { + "parallel": [ + { + "series": ["3BAD-M521A", "3BAD-P521A"] + }, + { + "series": ["3BAD-M521B", "3BAD-P521B"] + } + ] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/- BTG_ASH-.json_Zone.Identifier b/model/RBD Model/- BTG_ASH-.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- BTG_BOL -.json b/model/RBD Model/- BTG_BOL -.json new file mode 100644 index 0000000..d8feb56 --- /dev/null +++ b/model/RBD Model/- BTG_BOL -.json @@ -0,0 +1,14 @@ +{ + "series": [ + "BOL_DP", + "BOL_OB", + "BOL_BDW", + "3BOL-H501", + "BOL_MS", + "BOL_BSS", + "3CRH-W002", + "BOL_BRS", + "BOL_HRH", + "BOL_SB" + ] +} \ No newline at end of file diff --git a/model/RBD Model/- BTG_BOL -.json_Zone.Identifier b/model/RBD Model/- BTG_BOL -.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- BTG_COND -.json b/model/RBD Model/- BTG_COND -.json new file mode 100644 index 0000000..8d8393b --- /dev/null +++ b/model/RBD Model/- BTG_COND -.json @@ -0,0 +1,29 @@ +{ + "series": [ + "3CO-H001", + { + "parallel": [ + { + "series": ["3CO-M001A", "3CO-P001A"] + }, + { + "series": ["3CO-M001B", "3CO-P001B"] + } + ] + }, + { + "parallel": [ + { + "series": ["3CAE-M010A", "3CAE-P010A", "3CAE-H010A"] + }, + { + "series": ["3CAE-M010B", "3CAE-P010B", "3CAE-H010B"] + } + ] + }, + "3CO-FCV001", + "3CO-H010", + "3CO-H020", + "3CO-H030" + ] +} \ No newline at end of file diff --git a/model/RBD Model/- BTG_COND -.json_Zone.Identifier b/model/RBD Model/- BTG_COND -.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- BTG_CW -.json b/model/RBD Model/- BTG_CW -.json new file mode 100644 index 0000000..5bb172d --- /dev/null +++ b/model/RBD Model/- BTG_CW -.json @@ -0,0 +1,17 @@ +{ + "series": [ + "3CCCW-T010", + "3CCCW-M090", + "3CCCW-P090", + { + "parallel": [ + { + "series": ["3CCCW-M010A", "3CCCW-P010A", "3CCCW-H010A"] + }, + { + "series": ["3CCCW-M010B", "3CCCW-P010B", "3CCCW-H010B"] + } + ] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/- BTG_CW -.json_Zone.Identifier b/model/RBD Model/- BTG_CW -.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- BTG_FW -.json b/model/RBD Model/- BTG_FW -.json new file mode 100644 index 0000000..e3cc4ca --- /dev/null +++ b/model/RBD Model/- BTG_FW -.json @@ -0,0 +1,29 @@ +{ + "series": [ + "3FW-H040", + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOT-T010A", + "FW_BFT A" + ] + }, + { + "series": [ + "3LOT-T010B", + "FW_BFT B" + ] + } + ] + }, + "FW_MBFP" + ] + }, + "3FW-H070", + "3FW-H060", + "3FW-H050" + ] +} \ No newline at end of file diff --git a/model/RBD Model/- BTG_FW-.json_Zone.Identifier b/model/RBD Model/- BTG_FW-.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- BTG_GEN -.json b/model/RBD Model/- BTG_GEN -.json new file mode 100644 index 0000000..368fc13 --- /dev/null +++ b/model/RBD Model/- BTG_GEN -.json @@ -0,0 +1,10 @@ +{ + "series": [ + "GEN_SCW", + "3GEN-GM001", + "GEN_SO", + "GEN_GEN", + "GEN_GMC", + "GEN_TR" + ] +} \ No newline at end of file diff --git a/model/RBD Model/- BTG_GEN -.json_Zone.Identifier b/model/RBD Model/- BTG_GEN -.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- BTG_KLH -.json b/model/RBD Model/- BTG_KLH -.json new file mode 100644 index 0000000..c0a40f8 --- /dev/null +++ b/model/RBD Model/- BTG_KLH -.json @@ -0,0 +1,3 @@ +{ + "series": ["KLH_ABS"] +} \ No newline at end of file diff --git a/model/RBD Model/- BTG_KLH -.json_Zone.Identifier b/model/RBD Model/- BTG_KLH -.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- BTG_PC -.json b/model/RBD Model/- BTG_PC -.json new file mode 100644 index 0000000..d3ccce5 --- /dev/null +++ b/model/RBD Model/- BTG_PC -.json @@ -0,0 +1,107 @@ +{ + "series": [ + { + "parallel_no_redundancy": [ + "3DCS-CAB001A", + "3DCS-CAB001B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB002A", + "3DCS-CAB002B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB003A", + "3DCS-CAB003B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB004A", + "3DCS-CAB004B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB005A", + "3DCS-CAB005B", + "3DCS-CAB005C" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB006A", + "3DCS-CAB006B" + ] + }, + "3DCS-CAB007", + "3DCS-CAB008", + { + "parallel_no_redundancy": [ + "3DCS-CAB009A", + "3DCS-CAB009B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB010A", + "3DCS-CAB010B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB011A", + "3DCS-CAB011B" + ] + }, + "3DCS-CAB012", + { + "parallel_no_redundancy": [ + "3DCS-CAB013A", + "3DCS-CAB013B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB014A", + "3DCS-CAB014B" + ] + }, + "3DCS-CAB015", + "3DCS-CO001", + { + "parallel_no_redundancy": [ + "3DCS-CO002A", + "3DCS-CO002B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CO003A", + "3DCS-CO003B", + "3DCS-CO003C", + "3DCS-CO003D" + ] + }, + "3DCS-CO004", + { + "parallel_no_redundancy": [ + "3DCS-CO005A", + "3DCS-CO005B", + "3DCS-CO005C" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CO006A", + "3DCS-CO006B", + "3DCS-CO006C" + ] + }, + "3DCS-CO007", + "3DCS-CO008" + ] +} \ No newline at end of file diff --git a/model/RBD Model/- BTG_PC -.json_Zone.Identifier b/model/RBD Model/- BTG_PC -.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- BTG_SAC -.json b/model/RBD Model/- BTG_SAC -.json new file mode 100644 index 0000000..212679f --- /dev/null +++ b/model/RBD Model/- BTG_SAC -.json @@ -0,0 +1,20 @@ +{ + "series": [ + { + "parallel": [ + { + "parallel_no_redundancy": [ + {"series": ["00ACR-M001A", "00ACR-C001A"]}, + {"series": ["00ACR-M001B", "00ACR-C001B"]} + ] + }, + {"series": ["00ACR-M001C", "00ACR-C001C"]}, + {"series": ["00ACR-M001D", "00ACR-C001D"]} + ] + }, + { + "parallel": ["00IA-A001A", "00IA-A001B"] + }, + "3IA-T005" + ] +} diff --git a/model/RBD Model/- BTG_SAC -.json_Zone.Identifier b/model/RBD Model/- BTG_SAC -.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- BTG_SCR -.json b/model/RBD Model/- BTG_SCR -.json new file mode 100644 index 0000000..0cc4eed --- /dev/null +++ b/model/RBD Model/- BTG_SCR -.json @@ -0,0 +1,3 @@ +{ + "series": ["00SCR-Z001", "00SCR-Z015"] +} \ No newline at end of file diff --git a/model/RBD Model/- BTG_SCR -.json_Zone.Identifier b/model/RBD Model/- BTG_SCR -.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- BTG_SPS -.json b/model/RBD Model/- BTG_SPS -.json new file mode 100644 index 0000000..d180f05 --- /dev/null +++ b/model/RBD Model/- BTG_SPS -.json @@ -0,0 +1,7 @@ +{ + "series": [ + "SPS_APC", + "SPS_APE", + "SPS_EG" + ] +} \ No newline at end of file diff --git a/model/RBD Model/- BTG_SPS -.json_Zone.Identifier b/model/RBD Model/- BTG_SPS -.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- BTG_TUR -.json b/model/RBD Model/- BTG_TUR -.json new file mode 100644 index 0000000..7447421 --- /dev/null +++ b/model/RBD Model/- BTG_TUR -.json @@ -0,0 +1,23 @@ +{ + "series": [ + "TUR_LOS", + "TUR_EHS", + { + "parallel": [ + { + "series": ["3MT-ST010", "3MT-ST020"] + }, + { + "series": ["3HPB-PCV010", "TUR_EHB"] + } + ] + }, + "3MT-ST030A", + "3MT-ST030B", + "3MT-AU040", + "3AS-T010", + "3AS-BS010", + "TUR_GSS", + "TUR_CW" + ] +} \ No newline at end of file diff --git a/model/RBD Model/- BTG_TUR -.json_Zone.Identifier b/model/RBD Model/- BTG_TUR -.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- CMN -.json b/model/RBD Model/- CMN -.json new file mode 100644 index 0000000..8b64f39 --- /dev/null +++ b/model/RBD Model/- CMN -.json @@ -0,0 +1,10 @@ +{ + "series": [ + "- CMN_CHS -", + "- CMN_CL -", + "- CMN_CP -", + "WTP", + "- CMN_FGD -", + "- CMN_SSB -" + ] +} \ No newline at end of file diff --git a/model/RBD Model/- CMN -.json_Zone.Identifier b/model/RBD Model/- CMN -.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- CMN_CHS -.json b/model/RBD Model/- CMN_CHS -.json new file mode 100644 index 0000000..b5991e1 --- /dev/null +++ b/model/RBD Model/- CMN_CHS -.json @@ -0,0 +1,17 @@ +{ + "series": [ + { + "parallel": [ + {"series": ["00CHA-SU801A", "00CHA-CV801A", "00CHA-MS801A", "00CHA-BW802A", "00CHA-CV802A", "00CHA-CV803A", "00CHA-SWT801"]}, + {"series": ["00CHA-SU801B", "00CHA-CV801B", "00CHA-MS801B", "00CHA-BW802B", "00CHA-CV802B", "00CHA-CV803B", "00CHA-SWT802"]} + ] + }, + { + "parallel": [ + {"series": ["00CHA-CV805A", "00CHB-SKR805A"]}, + {"series": ["00CHA-CV804", "00CHA-CV805B", "00CHB-SKR805B"]} + ] + }, + "COAL YARD" + ] +} \ No newline at end of file diff --git a/model/RBD Model/- CMN_CHS -.json_Zone.Identifier b/model/RBD Model/- CMN_CHS -.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- CMN_CL -.json b/model/RBD Model/- CMN_CL -.json new file mode 100644 index 0000000..897fd5b --- /dev/null +++ b/model/RBD Model/- CMN_CL -.json @@ -0,0 +1,3 @@ +{ + "series": ["BOOSTER", "FILTER", "TRAFO", "CELL", "SUMP PUMP"] +} \ No newline at end of file diff --git a/model/RBD Model/- CMN_CP -.json b/model/RBD Model/- CMN_CP -.json new file mode 100644 index 0000000..602cc1c --- /dev/null +++ b/model/RBD Model/- CMN_CP -.json @@ -0,0 +1,91 @@ +{ + "series": [ + { + "parallel_no_redundancy": [ + {"series": ["00RO-M110A", "00RO-P110A"]}, + {"series": ["00RO-M110B", "00RO-P110B"]}, + {"series": ["00RO-M110C", "00RO-P110C"]}, + {"series": ["00RO-M110D", "00RO-P110D"]} + ] + }, + "00RO-T120", + "FeCl3 DOSING", + "ANIONIC POLYMER DOSING", + "CLEAR WATER", + "CLARIFIER", + "00RO-T170", + { + "parallel": [ + {"series": ["00RO-M195A", "00RO-P195A"]}, + {"series": ["00RO-M195B", "00RO-P195B"]} + ] + }, + "00RO-T320", + "00RO-T130", + { + "parallel_no_redundancy": [ + {"series": ["00RO-M126A", "00RO-P126A"]}, + {"series": ["00RO-M126B", "00RO-P126B"]}, + {"series": ["00RO-M126C", "00RO-P126C"]}, + {"series": ["00RO-M126D", "00RO-P126D"]} + ] + }, + "NaOCL DOSING", + { + "parallel": [ + {"series": ["00RO-F161A", "00RO-M152A", "00RO-F152A"]}, + {"series": ["00RO-F161B", "00RO-M152B", "00RO-F152B"]} + ] + }, + "00RO-T150", + { + "parallel": [ + {"series": ["00RO-M150A", "00RO-P150A"]}, + {"series": ["00RO-M150B", "00RO-P150B"]} + ] + }, + { + "parallel_no_redundancy": [ + {"series": ["00RO-M160A", "00RO-P160A"]}, + {"series": ["00RO-M160B", "00RO-P160B"]}, + {"series": ["00RO-M160C", "00RO-P160C"]}, + {"series": ["00RO-M160D", "00RO-P160D"]} + ] + }, + "H2SO4 DOSING", + "SBS DOSING", + "ANTI SCALANT DOSING", + { + "parallel_no_redundancy": [ + {"series": ["00RO-M170A", "00RO-P170A", "00RO-T160A", "00RO-Z110A"]}, + {"series": ["00RO-M170B", "00RO-P170B", "00RO-T160B", "00RO-Z110B"]}, + {"series": ["00RO-M170C", "00RO-P170C", "00RO-T160C", "00RO-Z110C"]}, + {"series": ["00RO-M170D", "00RO-P170D", "00RO-T160D", "00RO-Z110D"]} + ] + }, + "NaOH DOSING", + "00RO-H181", + "00RO-AG181", + "00RO-M181", + { + "parallel": [ + {"series": ["00RO-M180A", "00RO-P180A"]}, + {"series": ["00RO-M180B", "00RO-P180B"]} + ] + }, + "header 3", + { + "parallel": [ + {"series": ["00RO-M340A", "00RO-P340A"]}, + {"series": ["00RO-M340B", "00RO-P340B"]} + ] + }, + "00RO-T162", + { + "parallel_no_redundancy": [ + {"series": ["00RO-M190A", "00RO-P190A"]}, + {"series": ["00RO-M190B", "00RO-P190B"]} + ] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/- CMN_CP -.json_Zone.Identifier b/model/RBD Model/- CMN_CP -.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- CMN_FGD -.json b/model/RBD Model/- CMN_FGD -.json new file mode 100644 index 0000000..e741f2c --- /dev/null +++ b/model/RBD Model/- CMN_FGD -.json @@ -0,0 +1,3 @@ +{ + "series": ["FGD_DS", "FGD_OA", "FGD_LSH", "FGD_RP"] +} \ No newline at end of file diff --git a/model/RBD Model/- CMN_FGD-.json_Zone.Identifier b/model/RBD Model/- CMN_FGD-.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- CMN_SSB -.json b/model/RBD Model/- CMN_SSB -.json new file mode 100644 index 0000000..f80c06a --- /dev/null +++ b/model/RBD Model/- CMN_SSB -.json @@ -0,0 +1,16 @@ +{ + "series": [ + "00SSB-EV001", + "00SSB-EV002", + "00SSB-EV003", + { + "parallel_no_redundancy": ["00SSB-EV004", "00SSB-EV005"] + }, + "00SSB-EV006", + "00SSB-EV007", + "00SSB-EV012", + "00SSB-LA008", + "00SSB-LA009", + "00SSB-TF010" + ] +} \ No newline at end of file diff --git a/model/RBD Model/- CMN_SSB -.json_Zone.Identifier b/model/RBD Model/- CMN_SSB -.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/- TJB - Unit 3 -.json b/model/RBD Model/- TJB - Unit 3 -.json new file mode 100644 index 0000000..b630a5c --- /dev/null +++ b/model/RBD Model/- TJB - Unit 3 -.json @@ -0,0 +1,6 @@ +{ + "series": [ + "- BTG -", + "- CMN -" + ] +} \ No newline at end of file diff --git a/model/RBD Model/- TJB - Unit 3 -.json_Zone.Identifier b/model/RBD Model/- TJB - Unit 3 -.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/AFG_ESP A.json b/model/RBD Model/AFG_ESP A.json new file mode 100644 index 0000000..6ae3b0e --- /dev/null +++ b/model/RBD Model/AFG_ESP A.json @@ -0,0 +1,8 @@ +{ + "series": [ + { + "parallel_no_redundancy": ["ESP_A1", "ESP_A2"] + }, + "3GG-AX801A" + ] +} \ No newline at end of file diff --git a/model/RBD Model/AFG_ESP A.json_Zone.Identifier b/model/RBD Model/AFG_ESP A.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/AFG_ESP B.json b/model/RBD Model/AFG_ESP B.json new file mode 100644 index 0000000..c1c7c3c --- /dev/null +++ b/model/RBD Model/AFG_ESP B.json @@ -0,0 +1,8 @@ +{ + "series": [ + { + "parallel_no_redundancy": ["ESP_B1", "ESP_B2"] + }, + "3GG-AX801B" + ] +} \ No newline at end of file diff --git a/model/RBD Model/AFG_ESP B.json_Zone.Identifier b/model/RBD Model/AFG_ESP B.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/AFG_FDF A.json b/model/RBD Model/AFG_FDF A.json new file mode 100644 index 0000000..a96aa7f --- /dev/null +++ b/model/RBD Model/AFG_FDF A.json @@ -0,0 +1,7 @@ +{ + "series": [ + "3AF-FCV501A", + "3AF-M501A", + "3AF-F501A" + ] +} \ No newline at end of file diff --git a/model/RBD Model/AFG_FDF A.json_Zone.Identifier b/model/RBD Model/AFG_FDF A.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/AFG_FDF B.json b/model/RBD Model/AFG_FDF B.json new file mode 100644 index 0000000..bd22515 --- /dev/null +++ b/model/RBD Model/AFG_FDF B.json @@ -0,0 +1,7 @@ +{ + "series": [ + "3AF-FCV501B", + "3AF-M501B", + "3AF-F501B" + ] +} \ No newline at end of file diff --git a/model/RBD Model/AFG_FDF B.json_Zone.Identifier b/model/RBD Model/AFG_FDF B.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/AFG_FGD A.json b/model/RBD Model/AFG_FGD A.json new file mode 100644 index 0000000..a9e99e9 --- /dev/null +++ b/model/RBD Model/AFG_FGD A.json @@ -0,0 +1,26 @@ +{ + "series": [ + { + "parallel_no_redundancy": ["3GG-F853A", "3GG-F853B", "3GG-F853C", "3GG-F853D"] + }, + "3GG-M851", + "3GG-M851A", + "3GG-F851", + "3GG-H877", + "3GG-F865A", + "3GG-M870A", + "3GG-F870A", + { + "parallel": [ + {"series": ["3GG-M875A", "3GG-F875A"]}, + {"series": ["3GG-M875B", "3GG-F875B"]} + ] + }, + { + "parallel": [ + {"series": ["3GG-M877A", "3GG-P877A"]}, + {"series": ["3GG-M877B", "3GG-P877B"]} + ] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/AFG_FGD A.json_Zone.Identifier b/model/RBD Model/AFG_FGD A.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/AFG_FGD B.json b/model/RBD Model/AFG_FGD B.json new file mode 100644 index 0000000..0f35fa1 --- /dev/null +++ b/model/RBD Model/AFG_FGD B.json @@ -0,0 +1,26 @@ +{ + "series": [ + { + "parallel_no_redundancy": ["3GG-F854A", "3GG-F854B", "3GG-F854C", "3GG-F854D"] + }, + "3GG-M852", + "3GG-M851B", + "3GG-F852", + "3GG-H878", + "3GG-F865B", + "3GG-M870B", + "3GG-F870B", + { + "parallel": [ + {"series": ["3GG-M880A", "3GG-F880A"]}, + {"series": ["3GG-M880B", "3GG-F880B"]} + ] + }, + { + "parallel": [ + {"series": ["3GG-M878A", "3GG-P878A"]}, + {"series": ["3GG-M878B", "3GG-P878B"]} + ] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/AFG_FGD B.json_Zone.Identifier b/model/RBD Model/AFG_FGD B.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/AFG_IDF A.json b/model/RBD Model/AFG_IDF A.json new file mode 100644 index 0000000..9f1cc20 --- /dev/null +++ b/model/RBD Model/AFG_IDF A.json @@ -0,0 +1,16 @@ +{ + "series": [ + "3GG-M810A", + "3GG-F801A", + { + "parallel": ["3GG-F802A", "3GG-F802B"] + }, + "3GG-M801A", + { + "parallel": ["3GG-F803A", "3GG-F803B"] + }, + { + "parallel": ["3GG-P801A", "3GG-P801B"] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/AFG_IDF A.json_Zone.Identifier b/model/RBD Model/AFG_IDF A.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/AFG_IDF B.json b/model/RBD Model/AFG_IDF B.json new file mode 100644 index 0000000..83d0a40 --- /dev/null +++ b/model/RBD Model/AFG_IDF B.json @@ -0,0 +1,17 @@ +{ + "series": [ + "3GG-M810B", + "3GG-F801B", + { + "parallel": ["3GG-F804A", "3GG-F804B"] + }, + { + "parallel": ["3GG-F805A", "3GG-F805B"] + }, + "3GG-M801B", + "3GG-T801B", + { + "parallel": ["3GG-P802A", "3GG-P802B"] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/AFG_IDF B.json_Zone.Identifier b/model/RBD Model/AFG_IDF B.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/AFG_PAF A.json b/model/RBD Model/AFG_PAF A.json new file mode 100644 index 0000000..69ae447 --- /dev/null +++ b/model/RBD Model/AFG_PAF A.json @@ -0,0 +1,7 @@ +{ + "series": [ + "3AL-PCV501A", + "3AL-M501A", + "3AL-F501A" + ] +} \ No newline at end of file diff --git a/model/RBD Model/AFG_PAF A.json_Zone.Identifier b/model/RBD Model/AFG_PAF A.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/AFG_PAF B.json b/model/RBD Model/AFG_PAF B.json new file mode 100644 index 0000000..892ca27 --- /dev/null +++ b/model/RBD Model/AFG_PAF B.json @@ -0,0 +1,7 @@ +{ + "series": [ + "3AL-PCV501B", + "3AL-M501B", + "3AL-F501B" + ] +} \ No newline at end of file diff --git a/model/RBD Model/AFG_PAF B.json_Zone.Identifier b/model/RBD Model/AFG_PAF B.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/AFG_RAPH A .json b/model/RBD Model/AFG_RAPH A .json new file mode 100644 index 0000000..4761a5e --- /dev/null +++ b/model/RBD Model/AFG_RAPH A .json @@ -0,0 +1,11 @@ +{ + "series": [ + "3AH-AU501A", + "3AH-M531A", + "3AH-P531A", + "3AH-H531A", + "3AH-M502A", + "3AH-M501A", + "3AH-H501A" + ] +} \ No newline at end of file diff --git a/model/RBD Model/AFG_RAPH A .json_Zone.Identifier b/model/RBD Model/AFG_RAPH A .json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/AFG_RAPH B.json b/model/RBD Model/AFG_RAPH B.json new file mode 100644 index 0000000..83df183 --- /dev/null +++ b/model/RBD Model/AFG_RAPH B.json @@ -0,0 +1,11 @@ +{ + "series": [ + "3AH-AU501B", + "3AH-M531B", + "3AH-P531B", + "3AH-H531B", + "3AH-M502B", + "3AH-M501B", + "3AH-H501B" + ] +} \ No newline at end of file diff --git a/model/RBD Model/AFG_RAPH B.json_Zone.Identifier b/model/RBD Model/AFG_RAPH B.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_ASH_3BAD-CV501.json b/model/RBD Model/BOL_ASH_3BAD-CV501.json new file mode 100644 index 0000000..4124df3 --- /dev/null +++ b/model/RBD Model/BOL_ASH_3BAD-CV501.json @@ -0,0 +1,3 @@ +{ + "series": ["3BAD-CV501", "203596"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_ASH_3BAD-CV501.json_Zone.Identifier b/model/RBD Model/BOL_ASH_3BAD-CV501.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_BDW.json b/model/RBD Model/BOL_BDW.json new file mode 100644 index 0000000..152faed --- /dev/null +++ b/model/RBD Model/BOL_BDW.json @@ -0,0 +1,16 @@ +{ + "series": [ + "3BDW-H601", + "3BDW-T601", + "3BDW-H611", + "3BDW-H621", + "3BDW-H631", + "3BDW-H641", + { + "parallel_no_redundancy": [ + {"series": ["3BDW-M521A", "3BDW-P521A", "3BDW-H521A"]}, + {"series": ["3BDW-M521B", "3BDW-P521B", "3BDW-H521B"]} + ] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_BDW.json_Zone.Identifier b/model/RBD Model/BOL_BDW.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_BRS.json b/model/RBD Model/BOL_BRS.json new file mode 100644 index 0000000..0712676 --- /dev/null +++ b/model/RBD Model/BOL_BRS.json @@ -0,0 +1,10 @@ +{ + "series": [ + { + "parallel_no_redundancy": ["3ATT-N503A", "3ATT-N503B"] + }, + "3BRS-H611", + "3BRS-H621", + "3BRS-H631" + ] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_BRS.json_Zone.Identifier b/model/RBD Model/BOL_BRS.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_BSS.json b/model/RBD Model/BOL_BSS.json new file mode 100644 index 0000000..8af6c56 --- /dev/null +++ b/model/RBD Model/BOL_BSS.json @@ -0,0 +1,13 @@ +{ + "series": [ + "3BSS-H611", + { + "parallel_no_redundancy": ["3ATT-N501A", "3ATT-N501B"] + }, + "3BSS-H621", + { + "parallel_no_redundancy": ["3ATT-N502A", "3ATT-N502B"] + }, + "3BSS-H631" + ] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_BSS.json_Zone.Identifier b/model/RBD Model/BOL_BSS.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP.json b/model/RBD Model/BOL_DP.json new file mode 100644 index 0000000..68e1fd4 --- /dev/null +++ b/model/RBD Model/BOL_DP.json @@ -0,0 +1,15 @@ +{ + "series": [ + "3BOL-FD501", + { + "parallel_no_redundancy": [ + {"series": ["BOL_DP_FDR A", "BOL_DP_MILL A", "BOL_DP_CB A"]}, + {"series": ["BOL_DP_FDR B", "BOL_DP_MILL B", "BOL_DP_CB B"]}, + {"series": ["BOL_DP_FDR C", "BOL_DP_MILL C", "BOL_DP_CB C"]}, + {"series": ["BOL_DP_FDR D", "BOL_DP_MILL D", "BOL_DP_CB D"]}, + {"series": ["BOL_DP_FDR E", "BOL_DP_MILL E", "BOL_DP_CB E"]}, + {"series": ["BOL_DP_FDR F", "BOL_DP_MILL F", "BOL_DP_CB F"]} + ] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP.json_Zone.Identifier b/model/RBD Model/BOL_DP.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_CB A.json b/model/RBD Model/BOL_DP_CB A.json new file mode 100644 index 0000000..50fa144 --- /dev/null +++ b/model/RBD Model/BOL_DP_CB A.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-B701A", "3DP-B702A", "3DP-B703A", "3DP-B704A"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_CB A.json_Zone.Identifier b/model/RBD Model/BOL_DP_CB A.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_CB B.json b/model/RBD Model/BOL_DP_CB B.json new file mode 100644 index 0000000..92f8416 --- /dev/null +++ b/model/RBD Model/BOL_DP_CB B.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-B701B", "3DP-B702B", "3DP-B703B", "3DP-B704B"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_CB B.json_Zone.Identifier b/model/RBD Model/BOL_DP_CB B.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_CB C.json b/model/RBD Model/BOL_DP_CB C.json new file mode 100644 index 0000000..0a5c3c2 --- /dev/null +++ b/model/RBD Model/BOL_DP_CB C.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-B701C", "3DP-B702C", "3DP-B703C", "3DP-B704C"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_CB C.json_Zone.Identifier b/model/RBD Model/BOL_DP_CB C.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_CB D.json b/model/RBD Model/BOL_DP_CB D.json new file mode 100644 index 0000000..5590ef8 --- /dev/null +++ b/model/RBD Model/BOL_DP_CB D.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-B701D", "3DP-B702D", "3DP-B703D", "3DP-B704D"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_CB D.json_Zone.Identifier b/model/RBD Model/BOL_DP_CB D.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_CB E.json b/model/RBD Model/BOL_DP_CB E.json new file mode 100644 index 0000000..37a8a52 --- /dev/null +++ b/model/RBD Model/BOL_DP_CB E.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-B701E", "3DP-B702E", "3DP-B703E", "3DP-B704E"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_CB E.json_Zone.Identifier b/model/RBD Model/BOL_DP_CB E.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_CB F.json b/model/RBD Model/BOL_DP_CB F.json new file mode 100644 index 0000000..b44b6e8 --- /dev/null +++ b/model/RBD Model/BOL_DP_CB F.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-B701F", "3DP-B702F", "3DP-B703F", "3DP-B704F"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_CB F.json_Zone.Identifier b/model/RBD Model/BOL_DP_CB F.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_FDR A.json b/model/RBD Model/BOL_DP_FDR A.json new file mode 100644 index 0000000..19f1ad5 --- /dev/null +++ b/model/RBD Model/BOL_DP_FDR A.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-FDR711A", "3DP-M712A", "3DP-M711A"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_FDR A.json_Zone.Identifier b/model/RBD Model/BOL_DP_FDR A.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_FDR B.json b/model/RBD Model/BOL_DP_FDR B.json new file mode 100644 index 0000000..d5645b8 --- /dev/null +++ b/model/RBD Model/BOL_DP_FDR B.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-FDR711B", "3DP-M712B", "3DP-M711B"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_FDR B.json_Zone.Identifier b/model/RBD Model/BOL_DP_FDR B.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_FDR C.json b/model/RBD Model/BOL_DP_FDR C.json new file mode 100644 index 0000000..fec8b8d --- /dev/null +++ b/model/RBD Model/BOL_DP_FDR C.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-FDR711C", "3DP-M712C", "3DP-M711C"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_FDR C.json_Zone.Identifier b/model/RBD Model/BOL_DP_FDR C.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_FDR D.json b/model/RBD Model/BOL_DP_FDR D.json new file mode 100644 index 0000000..df1d08c --- /dev/null +++ b/model/RBD Model/BOL_DP_FDR D.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-FDR711D", "3DP-M712D", "3DP-M711D"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_FDR D.json_Zone.Identifier b/model/RBD Model/BOL_DP_FDR D.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_FDR E.json b/model/RBD Model/BOL_DP_FDR E.json new file mode 100644 index 0000000..1275079 --- /dev/null +++ b/model/RBD Model/BOL_DP_FDR E.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-FDR711E", "3DP-M712E", "3DP-M711E"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_FDR E.json_Zone.Identifier b/model/RBD Model/BOL_DP_FDR E.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_FDR F.json b/model/RBD Model/BOL_DP_FDR F.json new file mode 100644 index 0000000..040ab0e --- /dev/null +++ b/model/RBD Model/BOL_DP_FDR F.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-FDR711F", "3DP-M712F", "3DP-M711F"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_FDR F.json_Zone.Identifier b/model/RBD Model/BOL_DP_FDR F.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_MILL A.json b/model/RBD Model/BOL_DP_MILL A.json new file mode 100644 index 0000000..feed186 --- /dev/null +++ b/model/RBD Model/BOL_DP_MILL A.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-M741A", "3DP-BM741A", "3DP-CVT701A", "3DP-CVT711A", "3DP-M761A", "3DP-P761A", "3DP-M781A", "3DP-P781A", "3DP-M731A", "3DP-BM731A"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_MILL A.json_Zone.Identifier b/model/RBD Model/BOL_DP_MILL A.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_MILL B.json b/model/RBD Model/BOL_DP_MILL B.json new file mode 100644 index 0000000..b7d3e93 --- /dev/null +++ b/model/RBD Model/BOL_DP_MILL B.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-M741B", "3DP-BM741B", "3DP-CVT701B", "3DP-CVT711B", "3DP-M761B", "3DP-P761B", "3DP-M781B", "3DP-P781B", "3DP-M731B", "3DP-BM731B"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_MILL B.json_Zone.Identifier b/model/RBD Model/BOL_DP_MILL B.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_MILL C.json b/model/RBD Model/BOL_DP_MILL C.json new file mode 100644 index 0000000..4f2a220 --- /dev/null +++ b/model/RBD Model/BOL_DP_MILL C.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-M741C", "3DP-BM741C", "3DP-CVT701C", "3DP-CVT711C", "3DP-M761C", "3DP-P761C", "3DP-M781C", "3DP-P781C", "3DP-M731C", "3DP-BM731C"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_MILL C.json_Zone.Identifier b/model/RBD Model/BOL_DP_MILL C.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_MILL D.json b/model/RBD Model/BOL_DP_MILL D.json new file mode 100644 index 0000000..e8df432 --- /dev/null +++ b/model/RBD Model/BOL_DP_MILL D.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-M741D", "3DP-BM741D", "3DP-CVT701D", "3DP-CVT711D", "3DP-M761D", "3DP-P761D", "3DP-M781D", "3DP-P781D", "3DP-M731D", "3DP-BM731D"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_MILL D.json_Zone.Identifier b/model/RBD Model/BOL_DP_MILL D.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_MILL E.json b/model/RBD Model/BOL_DP_MILL E.json new file mode 100644 index 0000000..1a3a930 --- /dev/null +++ b/model/RBD Model/BOL_DP_MILL E.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-M741E", "3DP-BM741E", "3DP-CVT701E", "3DP-CVT711E", "3DP-M761E", "3DP-P761E", "3DP-M781E", "3DP-P781E", "3DP-M731E", "3DP-BM731E"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_MILL E.json_Zone.Identifier b/model/RBD Model/BOL_DP_MILL E.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_DP_MILL F.json b/model/RBD Model/BOL_DP_MILL F.json new file mode 100644 index 0000000..362dfc9 --- /dev/null +++ b/model/RBD Model/BOL_DP_MILL F.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-M741F", "3DP-BM741F", "3DP-CVT701F", "3DP-CVT711F", "3DP-M761F", "3DP-P761F", "3DP-M781F", "3DP-P781F", "3DP-M731F", "3DP-BM731F"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_DP_MILL F.json_Zone.Identifier b/model/RBD Model/BOL_DP_MILL F.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_HRH.json b/model/RBD Model/BOL_HRH.json new file mode 100644 index 0000000..495bde8 --- /dev/null +++ b/model/RBD Model/BOL_HRH.json @@ -0,0 +1,10 @@ +{ + "series": [ + { + "parallel_no_redundancy": ["3HRH-HV020A", "3HRH-HV020B"] + }, + "3ATT-N561", + "3ATT-N571", + "3ATT-N581" + ] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_HRH.json_Zone.Identifier b/model/RBD Model/BOL_HRH.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_MILL A_3DP-BM731A.json b/model/RBD Model/BOL_MILL A_3DP-BM731A.json new file mode 100644 index 0000000..e888c3b --- /dev/null +++ b/model/RBD Model/BOL_MILL A_3DP-BM731A.json @@ -0,0 +1,3 @@ +{ + "series": ["3DP-BM731A", "208532"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_MILL A_3DP-BM731A.json_Zone.Identifier b/model/RBD Model/BOL_MILL A_3DP-BM731A.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_MS.json b/model/RBD Model/BOL_MS.json new file mode 100644 index 0000000..ae57553 --- /dev/null +++ b/model/RBD Model/BOL_MS.json @@ -0,0 +1,15 @@ +{ + "series": [ + "3MS-HV011", + "3MS-HV012", + "3MS-HV013", + "3MS-HV014", + { + "parallel_no_redundancy": ["3MS-HV010A", "3MS-HV010B"] + }, + { + "parallel_no_redundancy": ["3MS-W001A", "3MS-W001B"] + }, + "3MS-W004" + ] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_MS.json_Zone.Identifier b/model/RBD Model/BOL_MS.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_OB.json b/model/RBD Model/BOL_OB.json new file mode 100644 index 0000000..6d91c46 --- /dev/null +++ b/model/RBD Model/BOL_OB.json @@ -0,0 +1,12 @@ +{ + "series": [ + "3FO-FCV501", + { + "parallel_no_redundancy": [ + {"series": ["3DM-B701A", "3DM-B702A", "3DM-B703A", "3DM-B704A"]}, + {"series": ["3DM-B701C", "3DM-B702C", "3DM-B703C", "3DM-B704C"]}, + {"series": ["3DM-B701E", "3DM-B702E", "3DM-B703E", "3DM-B704E"]} + ] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_OB.json_Zone.Identifier b/model/RBD Model/BOL_OB.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_SB.json b/model/RBD Model/BOL_SB.json new file mode 100644 index 0000000..9cdf37e --- /dev/null +++ b/model/RBD Model/BOL_SB.json @@ -0,0 +1,8 @@ +{ + "series": [ + "3AI-SFV501", + { + "parallel_no_redundancy": ["BOL_SB_HALF", "BOL_SB_LONG", "BOL_SB_WD", "BOL_SB_RAPH"] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_SB.json_Zone.Identifier b/model/RBD Model/BOL_SB.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_SB_HALF.json b/model/RBD Model/BOL_SB_HALF.json new file mode 100644 index 0000000..7a7d0c8 --- /dev/null +++ b/model/RBD Model/BOL_SB_HALF.json @@ -0,0 +1,6 @@ +{ + "parallel_no_redundancy": [ + {"series": ["3AI-M501H", "3AI-Y501H", "3AI-M502H", "3AI-Y502H", "3AI-M503H", "3AI-Y503H", "3AI-M504H", "3AI-Y504H", "3AI-M505H", "3AI-Y505H", "3AI-M506H", "3AI-Y506H"]}, + {"series": ["3AI-M501I", "3AI-Y501I", "3AI-M502I", "3AI-Y502I", "3AI-M503I", "3AI-Y503I", "3AI-M504I", "3AI-Y504I", "3AI-M505I", "3AI-Y505I", "3AI-M506I", "3AI-Y506I"]} + ] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_SB_HALF.json_Zone.Identifier b/model/RBD Model/BOL_SB_HALF.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_SB_LONG.json b/model/RBD Model/BOL_SB_LONG.json new file mode 100644 index 0000000..cd138a3 --- /dev/null +++ b/model/RBD Model/BOL_SB_LONG.json @@ -0,0 +1,3 @@ +{ + "parallel_no_redundancy": ["BOL_SB_LONG_LEFT", "BOL_SB_LONG_RIGHT"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_SB_LONG.json_Zone.Identifier b/model/RBD Model/BOL_SB_LONG.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_SB_LONG_LEFT.json b/model/RBD Model/BOL_SB_LONG_LEFT.json new file mode 100644 index 0000000..d8ae1fb --- /dev/null +++ b/model/RBD Model/BOL_SB_LONG_LEFT.json @@ -0,0 +1,7 @@ +{ + "parallel_no_redundancy": [ + {"series": ["3AI-M501L", "3AI-Y501L", "3AI-M503L", "3AI-Y503L", "3AI-M504L", "3AI-Y504L", "3AI-M505L", "3AI-Y505L"]}, + {"series": ["3AI-M502L", "3AI-Y502L", "3AI-M506L", "3AI-Y506L", "3AI-M507L", "3AI-Y507L", "3AI-M508L", "3AI-Y508L", "3AI-M509L", "3AI-Y509L", "3AI-M510L", "3AI-Y510L"]}, + {"series": ["3AI-M511L", "3AI-Y511L", "3AI-M512L", "3AI-Y512L", "3AI-M513L", "3AI-Y513L", "3AI-M514L", "3AI-Y514L", "3AI-M515L", "3AI-Y515L", "3AI-M516L", "3AI-Y516L"]} + ] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_SB_LONG_LEFT.json_Zone.Identifier b/model/RBD Model/BOL_SB_LONG_LEFT.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_SB_LONG_RIGHT.json b/model/RBD Model/BOL_SB_LONG_RIGHT.json new file mode 100644 index 0000000..1758a01 --- /dev/null +++ b/model/RBD Model/BOL_SB_LONG_RIGHT.json @@ -0,0 +1,7 @@ +{ + "parallel_no_redundancy": [ + {"series": ["3AI-M501R", "3AI-Y501R", "3AI-M503R", "3AI-Y503R", "3AI-M504R", "3AI-Y504R", "3AI-M505R", "3AI-Y505R"]}, + {"series": ["3AI-M502R", "3AI-Y502R", "3AI-M506R", "3AI-Y506R", "3AI-M507R", "3AI-Y507R", "3AI-M508R", "3AI-Y508R", "3AI-M509R", "3AI-Y509R", "3AI-M510R", "3AI-Y510R"]}, + {"series": ["3AI-M511R", "3AI-Y511R", "3AI-M512R", "3AI-Y512R", "3AI-M513R", "3AI-Y513R", "3AI-M514R", "3AI-Y514R", "3AI-M515R", "3AI-Y515R", "3AI-M516R", "3AI-Y516R"]} + ] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_SB_LONG_RIGHT.json_Zone.Identifier b/model/RBD Model/BOL_SB_LONG_RIGHT.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_SB_RAPH.json b/model/RBD Model/BOL_SB_RAPH.json new file mode 100644 index 0000000..df7f91e --- /dev/null +++ b/model/RBD Model/BOL_SB_RAPH.json @@ -0,0 +1,6 @@ +{ + "parallel_no_redundancy": [ + {"series": ["3AI-M551A", "3AI-Y551A"]}, + {"series": ["3AI-M551B", "3AI-Y551B"]} + ] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_SB_RAPH.json_Zone.Identifier b/model/RBD Model/BOL_SB_RAPH.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_SB_WD.json b/model/RBD Model/BOL_SB_WD.json new file mode 100644 index 0000000..6a087c6 --- /dev/null +++ b/model/RBD Model/BOL_SB_WD.json @@ -0,0 +1,3 @@ +{ + "parallel_no_redundancy": ["BOL_SB_WD_FRONT", "BOL_SB_WD_RIGHT", "BOL_SB_WD_LEFT", "BOL_SB_WD_REAR"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_SB_WD.json_Zone.Identifier b/model/RBD Model/BOL_SB_WD.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_SB_WD_FRONT.json b/model/RBD Model/BOL_SB_WD_FRONT.json new file mode 100644 index 0000000..e60c242 --- /dev/null +++ b/model/RBD Model/BOL_SB_WD_FRONT.json @@ -0,0 +1,7 @@ +{ + "parallel_no_redundancy": [ + {"series": ["3AI-M501A", "3AI-Y501A", "3AI-M502A", "3AI-Y502A", "3AI-M503A", "3AI-Y503A", "3AI-M504A", "3AI-Y504A", "3AI-M505A", "3AI-Y505A"]}, + {"series": ["3AI-M501B", "3AI-Y501B", "3AI-M502B", "3AI-Y502B", "3AI-M503B", "3AI-Y503B", "3AI-M504B", "3AI-Y504B"]}, + {"series": ["3AI-M501C", "3AI-Y501C", "3AI-M502C", "3AI-Y502C", "3AI-M503C", "3AI-Y503C", "3AI-M504C", "3AI-Y504C", "3AI-M505C", "3AI-Y505C"]} + ] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_SB_WD_FRONT.json_Zone.Identifier b/model/RBD Model/BOL_SB_WD_FRONT.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_SB_WD_LEFT.json b/model/RBD Model/BOL_SB_WD_LEFT.json new file mode 100644 index 0000000..91f7a43 --- /dev/null +++ b/model/RBD Model/BOL_SB_WD_LEFT.json @@ -0,0 +1,7 @@ +{ + "parallel_no_redundancy": [ + {"series": ["3AI-M515A", "3AI-Y515A", "3AI-M516A", "3AI-Y516A", "3AI-M517A", "3AI-Y517A", "3AI-M518A", "3AI-Y518A"]}, + {"series": ["3AI-M512B", "3AI-Y512B", "3AI-M513B", "3AI-Y513B", "3AI-M514B", "3AI-Y514B"]}, + {"series": ["3AI-M515C", "3AI-Y515C", "3AI-M516C", "3AI-Y516C", "3AI-M517C", "3AI-Y517C", "3AI-M518C", "3AI-Y518C"]} + ] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_SB_WD_LEFT.json_Zone.Identifier b/model/RBD Model/BOL_SB_WD_LEFT.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_SB_WD_REAR.json b/model/RBD Model/BOL_SB_WD_REAR.json new file mode 100644 index 0000000..d6da642 --- /dev/null +++ b/model/RBD Model/BOL_SB_WD_REAR.json @@ -0,0 +1,7 @@ +{ + "parallel_no_redundancy": [ + {"series": ["3AI-M510A", "3AI-Y510A", "3AI-M511A", "3AI-Y511A", "3AI-M512A", "3AI-Y512A", "3AI-M513A", "3AI-Y513A", "3AI-M514A", "3AI-Y514A"]}, + {"series": ["3AI-M508B", "3AI-Y508B", "3AI-M509B", "3AI-Y509B", "3AI-M510B", "3AI-Y510B", "3AI-M511B", "3AI-Y511B"]}, + {"series": ["3AI-M510C", "3AI-Y510C", "3AI-M511C", "3AI-Y511C", "3AI-M512C", "3AI-Y512C", "3AI-M513C", "3AI-Y513C", "3AI-M514C", "3AI-Y514C"]} + ] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_SB_WD_REAR.json_Zone.Identifier b/model/RBD Model/BOL_SB_WD_REAR.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_SB_WD_RIGHT.json b/model/RBD Model/BOL_SB_WD_RIGHT.json new file mode 100644 index 0000000..0e145f3 --- /dev/null +++ b/model/RBD Model/BOL_SB_WD_RIGHT.json @@ -0,0 +1,7 @@ +{ + "parallel_no_redundancy": [ + {"series": ["3AI-M506A", "3AI-Y506A", "3AI-M507A", "3AI-Y507A", "3AI-M508A", "3AI-Y508A", "3AI-M509A", "3AI-Y509A"]}, + {"series": ["3AI-M505B", "3AI-Y505B", "3AI-M506B", "3AI-Y506B", "3AI-M507B", "3AI-Y507B"]}, + {"series": ["3AI-M506C", "3AI-Y506C", "3AI-M507C", "3AI-Y507C", "3AI-M508C", "3AI-Y508C", "3AI-M509C", "3AI-Y509C"]} + ] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_SB_WD_RIGHT.json_Zone.Identifier b/model/RBD Model/BOL_SB_WD_RIGHT.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/BOL_SOOTBLOWER_3AI-SFV501.json b/model/RBD Model/BOL_SOOTBLOWER_3AI-SFV501.json new file mode 100644 index 0000000..2ead6c8 --- /dev/null +++ b/model/RBD Model/BOL_SOOTBLOWER_3AI-SFV501.json @@ -0,0 +1,3 @@ +{ + "series": ["3AI-SFV501", "221786"] +} \ No newline at end of file diff --git a/model/RBD Model/BOL_SOOTBLOWER_3AI-SFV501.json_Zone.Identifier b/model/RBD Model/BOL_SOOTBLOWER_3AI-SFV501.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/ESP_A1.json b/model/RBD Model/ESP_A1.json new file mode 100644 index 0000000..b625482 --- /dev/null +++ b/model/RBD Model/ESP_A1.json @@ -0,0 +1,3 @@ +{ + "series": ["3ESP-CAB801", "3ESP-CAB821", "A1-FIELD 1", "A1-FIELD 2", "A1-FIELD 3", "A1-FIELD 4"] +} \ No newline at end of file diff --git a/model/RBD Model/ESP_A1.json_Zone.Identifier b/model/RBD Model/ESP_A1.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/ESP_A2.json b/model/RBD Model/ESP_A2.json new file mode 100644 index 0000000..ffc224f --- /dev/null +++ b/model/RBD Model/ESP_A2.json @@ -0,0 +1,3 @@ +{ + "series": ["3ESP-CAB802", "3ESP-CAB822", "A2-FIELD 1", "A2-FIELD 2", "A2-FIELD 3", "A2-FIELD 4"] +} \ No newline at end of file diff --git a/model/RBD Model/ESP_A2.json_Zone.Identifier b/model/RBD Model/ESP_A2.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/ESP_B1.json b/model/RBD Model/ESP_B1.json new file mode 100644 index 0000000..eacaa29 --- /dev/null +++ b/model/RBD Model/ESP_B1.json @@ -0,0 +1,3 @@ +{ + "series": ["3ESP-CAB803", "3ESP-CAB823", "B1-FIELD 1", "B1-FIELD 2", "B1-FIELD 3", "B1-FIELD 4"] +} \ No newline at end of file diff --git a/model/RBD Model/ESP_B1.json_Zone.Identifier b/model/RBD Model/ESP_B1.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/ESP_B2.json b/model/RBD Model/ESP_B2.json new file mode 100644 index 0000000..0e3ab9b --- /dev/null +++ b/model/RBD Model/ESP_B2.json @@ -0,0 +1,3 @@ +{ + "series": ["3ESP-CAB804", "3ESP-CAB824", "B2-FIELD 1", "B2-FIELD 2", "B2-FIELD 3", "B2-FIELD 4"] +} \ No newline at end of file diff --git a/model/RBD Model/ESP_B2.json_Zone.Identifier b/model/RBD Model/ESP_B2.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/FGD_DS.json b/model/RBD Model/FGD_DS.json new file mode 100644 index 0000000..ce56f42 --- /dev/null +++ b/model/RBD Model/FGD_DS.json @@ -0,0 +1,3 @@ +{ + "series": ["FGD_DS_CHLORIDE", "FGD_DS_GYPSUM", "FGD_DS_VACUUM"] +} \ No newline at end of file diff --git a/model/RBD Model/FGD_DS.json_Zone.Identifier b/model/RBD Model/FGD_DS.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/FGD_DS_CHLORIDE.json b/model/RBD Model/FGD_DS_CHLORIDE.json new file mode 100644 index 0000000..904ec27 --- /dev/null +++ b/model/RBD Model/FGD_DS_CHLORIDE.json @@ -0,0 +1,13 @@ +{ + "series": [ + "00DS-T888", + "00DS-M888", + "00DS-AG888", + { + "parallel": [ + {"series": ["00DS-M883A", "00DS-P883A"]}, + {"series": ["00DS-M883B", "00DS-P883B"]} + ] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/FGD_DS_CHLORIDE.json_Zone.Identifier b/model/RBD Model/FGD_DS_CHLORIDE.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/FGD_DS_GYPSUM.json b/model/RBD Model/FGD_DS_GYPSUM.json new file mode 100644 index 0000000..d68f645 --- /dev/null +++ b/model/RBD Model/FGD_DS_GYPSUM.json @@ -0,0 +1,18 @@ +{ + "series": [ + { + "parallel": ["00DS-CY851A", "00DS-CY851B"] + }, + "00DS-T851", + "00DS-M851", + "00DS-AG851", + { + "parallel": [ + {"series": ["00DS-M860A", "00DS-P860A"]}, + {"series": ["00DS-M860B", "00DS-P860B"]} + ] + }, + "00DS-T852", + "00DS-CY865" + ] +} \ No newline at end of file diff --git a/model/RBD Model/FGD_DS_GYPSUM.json_Zone.Identifier b/model/RBD Model/FGD_DS_GYPSUM.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/FGD_DS_VACUUM.json b/model/RBD Model/FGD_DS_VACUUM.json new file mode 100644 index 0000000..0a035b4 --- /dev/null +++ b/model/RBD Model/FGD_DS_VACUUM.json @@ -0,0 +1,30 @@ +{ + "parallel": [ + {"series": [ + "00DS-T901", + "00DS-M900", + "00DS-M901", + "00DS-P901", + "00DS-T900", + { + "parallel": [ + {"series": ["00DS-M902A", "00DS-P902A"]}, + {"series": ["00DS-M902B", "00DS-P902B"]} + ] + } + ]}, + {"series": [ + "00DS-T936", + "00DS-M935", + "00DS-M936", + "00DS-P936", + "00DS-T935", + { + "parallel": [ + {"series": ["00DS-M937A", "00DS-P937A"]}, + {"series": ["00DS-M937B", "00DS-P937B"]} + ] + } + ]} + ] +} \ No newline at end of file diff --git a/model/RBD Model/FGD_DS_VACUUM.json_Zone.Identifier b/model/RBD Model/FGD_DS_VACUUM.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/FGD_LSH.json b/model/RBD Model/FGD_LSH.json new file mode 100644 index 0000000..f206d74 --- /dev/null +++ b/model/RBD Model/FGD_LSH.json @@ -0,0 +1,3 @@ +{ + "series": ["00LSH-SU801", "00LSH-HO801", "00LSH-BW801", "00LSH-COG801", "00LSH-M851", "00LSH-VFD801", "00LSH-VI851", "00LSH-M853A", "00LSH-CR853", "00LSH-CV801", "00LSH-M901", "00LSH-F901", "00LSH-DC901", "00LSH-MS801", "00LSH-M852", "00LSH-CV852", "00LSH-HO851"] +} \ No newline at end of file diff --git a/model/RBD Model/FGD_LSH.json_Zone.Identifier b/model/RBD Model/FGD_LSH.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/FGD_OA.json b/model/RBD Model/FGD_OA.json new file mode 100644 index 0000000..2cd269c --- /dev/null +++ b/model/RBD Model/FGD_OA.json @@ -0,0 +1,7 @@ +{ + "parallel": [ + {"series": ["00OA-M851A", "00OA-F851A"]}, + {"series": ["00OA-M851B", "00OA-F851B"]}, + {"series": ["00OA-M851C", "00OA-F851C"]} + ] +} \ No newline at end of file diff --git a/model/RBD Model/FGD_OA.json_Zone.Identifier b/model/RBD Model/FGD_OA.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/FGD_RP.json b/model/RBD Model/FGD_RP.json new file mode 100644 index 0000000..fb22208 --- /dev/null +++ b/model/RBD Model/FGD_RP.json @@ -0,0 +1,109 @@ +{ + "series": [ + "00RP-T985", + "00RP-M985", + "00RP-AG985", + { + "parallel": [ + {"series": ["00RP-M986A", "00RP-P986A"]}, + {"series": ["00RP-M986B", "00RP-P986B"]} + ] + }, + { + "parallel": [{ + "series": [ + "00RP-BM871", + { + "parallel_no_redundancy": ["00RP-M871A", "00RP-M871B"] + } + ] + }, { + "series": [ + "00RP-BM911", + { + "parallel": ["00RP-M911A", "00RP-M911B"] + } + ] + }] + }, + { + "parallel": [{ + "series": [ + "00RP-CY871", + "00RP-DX897", + { + "parallel": [ + "00RP-F991A", + "00RP-F991B" + ] + }, + "00RP-T885", + "00RP-M885", + "00RP-AG885", + "00RP-P992", + { + "parallel": [ + {"series": ["00RP-P991A", "00RP-M891A", "00RP-P891A"]}, + {"series": ["00RP-P991B", "00RP-M891B", "00RP-P891B"]} + ] + } + ] +}, { + "series": [ + "00RP-CY911", + "00RP-DX837", + { + "parallel": [ + "00RP-F995A", + "00RP-F995B" + ] + }, + "00RP-F995A", + "00RP-T925", + "00RP-M925", + "00RP-AG925", + "00RP-P995", + { + "parallel": [ + {"series": ["00RP-P995A", "00RP-M931A", "00RP-P931A"]}, + {"series": ["00RP-P995B", "00RP-M931B", "00RP-P931B"]} + ] + } + ] +}] +}, + "00RP-T970", + "00RP-M970", + "00RP-AG970", + { + "parallel": [ + {"series": ["00RP-M972A", "00RP-P972A"]}, + {"series": ["00RP-M972B", "00RP-P972B"]} + ] + }, + "00RP-T950", + "00RP-M950", + "00RP-AG950", + { + "parallel": [ + {"series": ["00RP-M952A", "00RP-P952A"]}, + {"series": ["00RP-M952B", "00RP-P952B"]} + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": ["00RP-Z851A", "00RP-Z851B", "00RP-Z851C"] + }, + "00RP-Z851D" + ] + }, + { + "parallel_no_redundancy": [ + {"series": ["00RP-M856A", "00RP-Z856A"]}, + {"series": ["00RP-M856B", "00RP-Z856B"]} + ] + }, + "00RP-DX979" + ] +} \ No newline at end of file diff --git a/model/RBD Model/FGD_RP.json_Zone.Identifier b/model/RBD Model/FGD_RP.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/FGD_RP_00RP-Z856A.json b/model/RBD Model/FGD_RP_00RP-Z856A.json new file mode 100644 index 0000000..5c6cca8 --- /dev/null +++ b/model/RBD Model/FGD_RP_00RP-Z856A.json @@ -0,0 +1,3 @@ +{ + "series": ["00RP-2856A", "203554"] +} \ No newline at end of file diff --git a/model/RBD Model/FGD_RP_00RP-Z856A.json_Zone.Identifier b/model/RBD Model/FGD_RP_00RP-Z856A.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/FGD_RP_MILL A.json b/model/RBD Model/FGD_RP_MILL A.json new file mode 100644 index 0000000..136ff8b --- /dev/null +++ b/model/RBD Model/FGD_RP_MILL A.json @@ -0,0 +1,22 @@ +{ + "series": [ + "00RP-CY871", + "00RP-DX897", + { + "parallel": [ + "00RP-F991A", + "00RP-F991B" + ] + }, + "00RP-T885", + "00RP-M885", + "00RP-AG885", + "00RP-P992", + { + "parallel": [ + {"series": ["00RP-P991A", "00RP-M891A", "00RP-P891A"]}, + {"series": ["00RP-P991B", "00RP-M891B", "00RP-P891B"]} + ] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/FGD_RP_MILL A.json_Zone.Identifier b/model/RBD Model/FGD_RP_MILL A.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/FGD_RP_MILL B.json b/model/RBD Model/FGD_RP_MILL B.json new file mode 100644 index 0000000..4ba7cc3 --- /dev/null +++ b/model/RBD Model/FGD_RP_MILL B.json @@ -0,0 +1,23 @@ +{ + "series": [ + "00RP-CY911", + "00RP-DX837", + { + "parallel": [ + "00RP-F995A", + "00RP-F995B" + ] + }, + "00RP-F995A", + "00RP-T925", + "00RP-M925", + "00RP-AG925", + "00RP-P995", + { + "parallel": [ + {"series": ["00RP-P995A", "00RP-M931A", "00RP-P931A"]}, + {"series": ["00RP-P995B", "00RP-M931B", "00RP-P931B"]} + ] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/FGD_RP_MILL B.json_Zone.Identifier b/model/RBD Model/FGD_RP_MILL B.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/FGD_RP_MILL.json b/model/RBD Model/FGD_RP_MILL.json new file mode 100644 index 0000000..8e9ad0e --- /dev/null +++ b/model/RBD Model/FGD_RP_MILL.json @@ -0,0 +1,46 @@ +{ + "parallel": [{ + "series": [ + "00RP-CY871", + "00RP-DX897", + { + "parallel": [ + "00RP-F991A", + "00RP-F991B" + ] + }, + "00RP-T885", + "00RP-M885", + "00RP-AG885", + "00RP-P992", + { + "parallel": [ + {"series": ["00RP-P991A", "00RP-M891A", "00RP-P891A"]}, + {"series": ["00RP-P991B", "00RP-M891B", "00RP-P891B"]} + ] + } + ] +}, { + "series": [ + "00RP-CY911", + "00RP-DX837", + { + "parallel": [ + "00RP-F995A", + "00RP-F995B" + ] + }, + "00RP-F995A", + "00RP-T925", + "00RP-M925", + "00RP-AG925", + "00RP-P995", + { + "parallel": [ + {"series": ["00RP-P995A", "00RP-M931A", "00RP-P931A"]}, + {"series": ["00RP-P995B", "00RP-M931B", "00RP-P931B"]} + ] + } + ] +}] +} \ No newline at end of file diff --git a/model/RBD Model/FGD_RP_MILL.json_Zone.Identifier b/model/RBD Model/FGD_RP_MILL.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/FGD_RP_WET MILL A.json b/model/RBD Model/FGD_RP_WET MILL A.json new file mode 100644 index 0000000..2f0af21 --- /dev/null +++ b/model/RBD Model/FGD_RP_WET MILL A.json @@ -0,0 +1,8 @@ +{ + "series": [ + "00RP-BM871", + { + "parallel_no_redundancy": ["00RP-M871A", "00RP-M871B"] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/FGD_RP_WET MILL A.json_Zone.Identifier b/model/RBD Model/FGD_RP_WET MILL A.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/FGD_RP_WET MILL B.json b/model/RBD Model/FGD_RP_WET MILL B.json new file mode 100644 index 0000000..a6d48ce --- /dev/null +++ b/model/RBD Model/FGD_RP_WET MILL B.json @@ -0,0 +1,8 @@ +{ + "series": [ + "00RP-BM911", + { + "parallel": ["00RP-M911A", "00RP-M911B"] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/FGD_RP_WET MILL B.json_Zone.Identifier b/model/RBD Model/FGD_RP_WET MILL B.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/FGD_RP_WET MILL.json b/model/RBD Model/FGD_RP_WET MILL.json new file mode 100644 index 0000000..01c4910 --- /dev/null +++ b/model/RBD Model/FGD_RP_WET MILL.json @@ -0,0 +1,17 @@ +{ + "parallel": [{ + "series": [ + "00RP-BM871", + { + "parallel_no_redundancy": ["00RP-M871A", "00RP-M871B"] + } + ] +}, { + "series": [ + "00RP-BM911", + { + "parallel": ["00RP-M911A", "00RP-M911B"] + } + ] +}] +} \ No newline at end of file diff --git a/model/RBD Model/FGD_RP_WET MILL.json_Zone.Identifier b/model/RBD Model/FGD_RP_WET MILL.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/FW_BFT A.json b/model/RBD Model/FW_BFT A.json new file mode 100644 index 0000000..0601f72 --- /dev/null +++ b/model/RBD Model/FW_BFT A.json @@ -0,0 +1,34 @@ +{ + "series": [ + "3LOT-H010A", + { + "parallel": ["3LOT-T090A", "3LOT-T100A"] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + {"series": ["3LOT-M010A", "3LOT-P010A"]}, + {"series": ["3LOT-M020A", "3LOT-P020A"]} + ] + }, + {"series": ["3LOT-M050A", "3LOT-P050A"]} + ] + }, + "3LOT-M080A", + "3LOT-P080A", + { + "parallel": ["3LOT-S010A", "3LOT-S020A"] + }, + "3LOT-PF080A", + "3LOT-M120A", + "3LOT-F120A", + "3FW-P020A", + "3FW-H011A", + "3FW-H012A", + "3FW-AU030A", + "3FW-P010A", + "3BFT-ST010A", + "3BFT-AU040A" + ] +} \ No newline at end of file diff --git a/model/RBD Model/FW_BFT A.json_Zone.Identifier b/model/RBD Model/FW_BFT A.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/FW_BFT B.json b/model/RBD Model/FW_BFT B.json new file mode 100644 index 0000000..f8e9681 --- /dev/null +++ b/model/RBD Model/FW_BFT B.json @@ -0,0 +1,34 @@ +{ + "series": [ + "3LOT-H010B", + { + "parallel": ["3LOT-T090B", "3LOT-T100B"] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + {"series": ["3LOT-M010B", "3LOT-P010B"]}, + {"series": ["3LOT-M020B", "3LOT-P020B"]} + ] + }, + {"series": ["3LOT-M050B", "3LOT-P050B"]} + ] + }, + "3LOT-M080B", + "3LOT-P080B", + { + "parallel": ["3LOT-S010B", "3LOT-S020B"] + }, + "3LOT-PF080B", + "3LOT-M120B", + "3LOT-F120B", + "3FW-P020B", + "3FW-H011B", + "3FW-H012B", + "3FW-AU030B", + "3FW-P010B", + "3BFT-ST010B", + "3BFT-AU040B" + ] +} \ No newline at end of file diff --git a/model/RBD Model/FW_BFT B.json_Zone.Identifier b/model/RBD Model/FW_BFT B.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/FW_MBFP.json b/model/RBD Model/FW_MBFP.json new file mode 100644 index 0000000..39e7b4b --- /dev/null +++ b/model/RBD Model/FW_MBFP.json @@ -0,0 +1,3 @@ +{ + "series": ["3LOM-M330", "3LOM-P330", "3LOM-H310", "3LOM-P310", "3LOM-H370", "3LOM-P370", "3FW-P310", "3FW-M321", "3FW-M320", "3FW-AU330", "3FW-H301", "3FW-H302", "3FW-P300"] +} \ No newline at end of file diff --git a/model/RBD Model/FW_MBFP.json_Zone.Identifier b/model/RBD Model/FW_MBFP.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/GEN_GEN.json b/model/RBD Model/GEN_GEN.json new file mode 100644 index 0000000..32f52b9 --- /dev/null +++ b/model/RBD Model/GEN_GEN.json @@ -0,0 +1,3 @@ +{ + "series": ["3GEN-EXC008", "3GEN-EXC009", "3GEN-EXC004", "3GEN-EXC005", "3GEN-GM001", "3GEN-Z012", "GEN_GEN_THRS", "GEN_GEN_GMCB"] +} \ No newline at end of file diff --git a/model/RBD Model/GEN_GEN.json_Zone.Identifier b/model/RBD Model/GEN_GEN.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/GEN_GEN_GMCB.json b/model/RBD Model/GEN_GEN_GMCB.json new file mode 100644 index 0000000..cd7cc05 --- /dev/null +++ b/model/RBD Model/GEN_GEN_GMCB.json @@ -0,0 +1,8 @@ +{ + "parallel": [ + { + "parallel_no_redundancy": ["3GEN-M201A", "3GEN-M202A", "3GEN-M203A", "3GEN-M204A", "3GEN-M205A"] + }, + "3GEN-M206A" + ] +} \ No newline at end of file diff --git a/model/RBD Model/GEN_GEN_GMCB.json_Zone.Identifier b/model/RBD Model/GEN_GEN_GMCB.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/GEN_GEN_THRS.json b/model/RBD Model/GEN_GEN_THRS.json new file mode 100644 index 0000000..c7e0a07 --- /dev/null +++ b/model/RBD Model/GEN_GEN_THRS.json @@ -0,0 +1,6 @@ +{ + "parallel_no_redundancy": [ + {"series": ["3GEN-M101A", "3GEN-M102A", "3GEN-M103A"]}, + {"series": ["3GEN-M101B", "3GEN-M102B", "3GEN-M103B"]} + ] +} \ No newline at end of file diff --git a/model/RBD Model/GEN_GEN_THRS.json_Zone.Identifier b/model/RBD Model/GEN_GEN_THRS.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/GEN_GMC.json b/model/RBD Model/GEN_GMC.json new file mode 100644 index 0000000..c20f970 --- /dev/null +++ b/model/RBD Model/GEN_GMC.json @@ -0,0 +1,3 @@ +{ + "series": ["3GMC-Z002", "3GMC-Z001", "3GMC-Z003", "GEN_GMC_RCFM"] +} \ No newline at end of file diff --git a/model/RBD Model/GEN_GMC.json_Zone.Identifier b/model/RBD Model/GEN_GMC.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/GEN_GMC_RCFM.json b/model/RBD Model/GEN_GMC_RCFM.json new file mode 100644 index 0000000..32fe2eb --- /dev/null +++ b/model/RBD Model/GEN_GMC_RCFM.json @@ -0,0 +1,8 @@ +{ + "parallel_no_redundancy": [ + {"series": ["3GEN-M211A", "3GEN-M211B", "3GEN-M211C"]}, + {"series": ["3GEN-M212A", "3GEN-M212B", "3GEN-M212C"]}, + {"series": ["3GEN-M213A", "3GEN-M213B", "3GEN-M213C"]}, + {"series": ["3GEN-M214A", "3GEN-M214B", "3GEN-M214C"]} + ] +} \ No newline at end of file diff --git a/model/RBD Model/GEN_GMC_RCFM.json_Zone.Identifier b/model/RBD Model/GEN_GMC_RCFM.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/GEN_SCW.json b/model/RBD Model/GEN_SCW.json new file mode 100644 index 0000000..927cf45 --- /dev/null +++ b/model/RBD Model/GEN_SCW.json @@ -0,0 +1,11 @@ +{ + "series": [ + "3SCW-PF001", + { + "parallel": [ + {"series": ["3SCW-H023A", "3SCW-M001A", "3SCW-P001A"]}, + {"series": ["3SCW-H023B", "3SCW-M001B", "3SCW-P001B"]} + ] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/GEN_SCW.json_Zone.Identifier b/model/RBD Model/GEN_SCW.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/GEN_SO.json b/model/RBD Model/GEN_SO.json new file mode 100644 index 0000000..ff6063b --- /dev/null +++ b/model/RBD Model/GEN_SO.json @@ -0,0 +1,13 @@ +{ + "series": [ + "3SO-T116", + "3SO-T114", + "3SO-T113", + { + "parallel": [ + {"series": ["3SO-M001", "3SO-P001"]}, + {"series": ["3SO-M002", "3SO-P002"]} + ] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/GEN_SO.json_Zone.Identifier b/model/RBD Model/GEN_SO.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/GEN_TR.json b/model/RBD Model/GEN_TR.json new file mode 100644 index 0000000..f8a0e0e --- /dev/null +++ b/model/RBD Model/GEN_TR.json @@ -0,0 +1,15 @@ +{ + "series": [ + { + "parallel_no_redundancy": [ + {"series": ["3TR-TF002A", "3TR-Z003A"]}, + {"series": ["3TR-TF002B", "3TR-Z003B"]} + ] + }, + "3TR-TF001", + "3TR-TF005", + { + "parallel_no_redundancy": ["3TR-F301", "3TR-F302", "3TR-F303", "3TR-F304", "3TR-F305", "3TR-F306", "3TR-F307", "3TR-F308", "3TR-F309", "3TR-F310", "3TR-F311", "3TR-F312", "3TR-F313", "3TR-F314"] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/GEN_TR.json_Zone.Identifier b/model/RBD Model/GEN_TR.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG -.jpg b/model/RBD Model/Image/- BTG -.jpg new file mode 100644 index 0000000..17393cd Binary files /dev/null and b/model/RBD Model/Image/- BTG -.jpg differ diff --git a/model/RBD Model/Image/- BTG -.jpg_Zone.Identifier b/model/RBD Model/Image/- BTG -.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_AFG -.jpg b/model/RBD Model/Image/- BTG_AFG -.jpg new file mode 100644 index 0000000..ed5d66a Binary files /dev/null and b/model/RBD Model/Image/- BTG_AFG -.jpg differ diff --git a/model/RBD Model/Image/- BTG_AFG -.jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_AFG -.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_ASH-(1).jpg b/model/RBD Model/Image/- BTG_ASH-(1).jpg new file mode 100644 index 0000000..d30184c Binary files /dev/null and b/model/RBD Model/Image/- BTG_ASH-(1).jpg differ diff --git a/model/RBD Model/Image/- BTG_ASH-(1).jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_ASH-(1).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_ASH-(2).jpg b/model/RBD Model/Image/- BTG_ASH-(2).jpg new file mode 100644 index 0000000..3f9cfba Binary files /dev/null and b/model/RBD Model/Image/- BTG_ASH-(2).jpg differ diff --git a/model/RBD Model/Image/- BTG_ASH-(2).jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_ASH-(2).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_BOL -.jpg b/model/RBD Model/Image/- BTG_BOL -.jpg new file mode 100644 index 0000000..0cf271c Binary files /dev/null and b/model/RBD Model/Image/- BTG_BOL -.jpg differ diff --git a/model/RBD Model/Image/- BTG_BOL -.jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_BOL -.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_COND -(1).jpg b/model/RBD Model/Image/- BTG_COND -(1).jpg new file mode 100644 index 0000000..ce93848 Binary files /dev/null and b/model/RBD Model/Image/- BTG_COND -(1).jpg differ diff --git a/model/RBD Model/Image/- BTG_COND -(1).jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_COND -(1).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_COND -(2).jpg b/model/RBD Model/Image/- BTG_COND -(2).jpg new file mode 100644 index 0000000..68fb473 Binary files /dev/null and b/model/RBD Model/Image/- BTG_COND -(2).jpg differ diff --git a/model/RBD Model/Image/- BTG_COND -(2).jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_COND -(2).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_CW -.jpg b/model/RBD Model/Image/- BTG_CW -.jpg new file mode 100644 index 0000000..beb5742 Binary files /dev/null and b/model/RBD Model/Image/- BTG_CW -.jpg differ diff --git a/model/RBD Model/Image/- BTG_CW -.jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_CW -.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_FW-.jpg b/model/RBD Model/Image/- BTG_FW-.jpg new file mode 100644 index 0000000..a851962 Binary files /dev/null and b/model/RBD Model/Image/- BTG_FW-.jpg differ diff --git a/model/RBD Model/Image/- BTG_FW-.jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_FW-.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_GEN -.jpg b/model/RBD Model/Image/- BTG_GEN -.jpg new file mode 100644 index 0000000..a3b2524 Binary files /dev/null and b/model/RBD Model/Image/- BTG_GEN -.jpg differ diff --git a/model/RBD Model/Image/- BTG_GEN -.jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_GEN -.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_PC -(1).jpg b/model/RBD Model/Image/- BTG_PC -(1).jpg new file mode 100644 index 0000000..c5df359 Binary files /dev/null and b/model/RBD Model/Image/- BTG_PC -(1).jpg differ diff --git a/model/RBD Model/Image/- BTG_PC -(1).jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_PC -(1).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_PC -(2).jpg b/model/RBD Model/Image/- BTG_PC -(2).jpg new file mode 100644 index 0000000..cfbc817 Binary files /dev/null and b/model/RBD Model/Image/- BTG_PC -(2).jpg differ diff --git a/model/RBD Model/Image/- BTG_PC -(2).jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_PC -(2).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_PC -(3).jpg b/model/RBD Model/Image/- BTG_PC -(3).jpg new file mode 100644 index 0000000..fa71529 Binary files /dev/null and b/model/RBD Model/Image/- BTG_PC -(3).jpg differ diff --git a/model/RBD Model/Image/- BTG_PC -(3).jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_PC -(3).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_PC -(4).jpg b/model/RBD Model/Image/- BTG_PC -(4).jpg new file mode 100644 index 0000000..6562111 Binary files /dev/null and b/model/RBD Model/Image/- BTG_PC -(4).jpg differ diff --git a/model/RBD Model/Image/- BTG_PC -(4).jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_PC -(4).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_PC -(5).jpg b/model/RBD Model/Image/- BTG_PC -(5).jpg new file mode 100644 index 0000000..b683c4d Binary files /dev/null and b/model/RBD Model/Image/- BTG_PC -(5).jpg differ diff --git a/model/RBD Model/Image/- BTG_PC -(5).jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_PC -(5).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_SAC -.jpg b/model/RBD Model/Image/- BTG_SAC -.jpg new file mode 100644 index 0000000..dc22697 Binary files /dev/null and b/model/RBD Model/Image/- BTG_SAC -.jpg differ diff --git a/model/RBD Model/Image/- BTG_SAC -.jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_SAC -.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_SCR -.jpg b/model/RBD Model/Image/- BTG_SCR -.jpg new file mode 100644 index 0000000..9820473 Binary files /dev/null and b/model/RBD Model/Image/- BTG_SCR -.jpg differ diff --git a/model/RBD Model/Image/- BTG_SCR -.jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_SCR -.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_SPS -.jpg b/model/RBD Model/Image/- BTG_SPS -.jpg new file mode 100644 index 0000000..11e13cc Binary files /dev/null and b/model/RBD Model/Image/- BTG_SPS -.jpg differ diff --git a/model/RBD Model/Image/- BTG_SPS -.jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_SPS -.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- BTG_TUR -.jpg b/model/RBD Model/Image/- BTG_TUR -.jpg new file mode 100644 index 0000000..7b2739c Binary files /dev/null and b/model/RBD Model/Image/- BTG_TUR -.jpg differ diff --git a/model/RBD Model/Image/- BTG_TUR -.jpg_Zone.Identifier b/model/RBD Model/Image/- BTG_TUR -.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- CMN -.jpg b/model/RBD Model/Image/- CMN -.jpg new file mode 100644 index 0000000..30c27cf Binary files /dev/null and b/model/RBD Model/Image/- CMN -.jpg differ diff --git a/model/RBD Model/Image/- CMN -.jpg_Zone.Identifier b/model/RBD Model/Image/- CMN -.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- CMN_CHS -(1).jpg b/model/RBD Model/Image/- CMN_CHS -(1).jpg new file mode 100644 index 0000000..1522499 Binary files /dev/null and b/model/RBD Model/Image/- CMN_CHS -(1).jpg differ diff --git a/model/RBD Model/Image/- CMN_CHS -(1).jpg_Zone.Identifier b/model/RBD Model/Image/- CMN_CHS -(1).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- CMN_CHS -(2).jpg b/model/RBD Model/Image/- CMN_CHS -(2).jpg new file mode 100644 index 0000000..621833f Binary files /dev/null and b/model/RBD Model/Image/- CMN_CHS -(2).jpg differ diff --git a/model/RBD Model/Image/- CMN_CHS -(2).jpg_Zone.Identifier b/model/RBD Model/Image/- CMN_CHS -(2).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- CMN_CP -(1).jpg b/model/RBD Model/Image/- CMN_CP -(1).jpg new file mode 100644 index 0000000..1ea1913 Binary files /dev/null and b/model/RBD Model/Image/- CMN_CP -(1).jpg differ diff --git a/model/RBD Model/Image/- CMN_CP -(1).jpg_Zone.Identifier b/model/RBD Model/Image/- CMN_CP -(1).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- CMN_CP -(2).jpg b/model/RBD Model/Image/- CMN_CP -(2).jpg new file mode 100644 index 0000000..36968f1 Binary files /dev/null and b/model/RBD Model/Image/- CMN_CP -(2).jpg differ diff --git a/model/RBD Model/Image/- CMN_CP -(2).jpg_Zone.Identifier b/model/RBD Model/Image/- CMN_CP -(2).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- CMN_CP -(3).jpg b/model/RBD Model/Image/- CMN_CP -(3).jpg new file mode 100644 index 0000000..a7573b1 Binary files /dev/null and b/model/RBD Model/Image/- CMN_CP -(3).jpg differ diff --git a/model/RBD Model/Image/- CMN_CP -(3).jpg_Zone.Identifier b/model/RBD Model/Image/- CMN_CP -(3).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- CMN_CP -(4).jpg b/model/RBD Model/Image/- CMN_CP -(4).jpg new file mode 100644 index 0000000..df40037 Binary files /dev/null and b/model/RBD Model/Image/- CMN_CP -(4).jpg differ diff --git a/model/RBD Model/Image/- CMN_CP -(4).jpg_Zone.Identifier b/model/RBD Model/Image/- CMN_CP -(4).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- CMN_CP -(5).jpg b/model/RBD Model/Image/- CMN_CP -(5).jpg new file mode 100644 index 0000000..1047fb0 Binary files /dev/null and b/model/RBD Model/Image/- CMN_CP -(5).jpg differ diff --git a/model/RBD Model/Image/- CMN_CP -(5).jpg_Zone.Identifier b/model/RBD Model/Image/- CMN_CP -(5).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- CMN_CP -(6).jpg b/model/RBD Model/Image/- CMN_CP -(6).jpg new file mode 100644 index 0000000..6310825 Binary files /dev/null and b/model/RBD Model/Image/- CMN_CP -(6).jpg differ diff --git a/model/RBD Model/Image/- CMN_CP -(6).jpg_Zone.Identifier b/model/RBD Model/Image/- CMN_CP -(6).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- CMN_FGD-.jpg b/model/RBD Model/Image/- CMN_FGD-.jpg new file mode 100644 index 0000000..0cd6088 Binary files /dev/null and b/model/RBD Model/Image/- CMN_FGD-.jpg differ diff --git a/model/RBD Model/Image/- CMN_FGD-.jpg_Zone.Identifier b/model/RBD Model/Image/- CMN_FGD-.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- CMN_SSB -(1).jpg b/model/RBD Model/Image/- CMN_SSB -(1).jpg new file mode 100644 index 0000000..e19bbf6 Binary files /dev/null and b/model/RBD Model/Image/- CMN_SSB -(1).jpg differ diff --git a/model/RBD Model/Image/- CMN_SSB -(1).jpg_Zone.Identifier b/model/RBD Model/Image/- CMN_SSB -(1).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- CMN_SSB -(2).jpg b/model/RBD Model/Image/- CMN_SSB -(2).jpg new file mode 100644 index 0000000..2cc1715 Binary files /dev/null and b/model/RBD Model/Image/- CMN_SSB -(2).jpg differ diff --git a/model/RBD Model/Image/- CMN_SSB -(2).jpg_Zone.Identifier b/model/RBD Model/Image/- CMN_SSB -(2).jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/- TJB - Unit 3 -.jpg b/model/RBD Model/Image/- TJB - Unit 3 -.jpg new file mode 100644 index 0000000..1c35715 Binary files /dev/null and b/model/RBD Model/Image/- TJB - Unit 3 -.jpg differ diff --git a/model/RBD Model/Image/- TJB - Unit 3 -.jpg_Zone.Identifier b/model/RBD Model/Image/- TJB - Unit 3 -.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/AFG_ESP A.jpg b/model/RBD Model/Image/AFG_ESP A.jpg new file mode 100644 index 0000000..bb74ba0 Binary files /dev/null and b/model/RBD Model/Image/AFG_ESP A.jpg differ diff --git a/model/RBD Model/Image/AFG_ESP A.jpg_Zone.Identifier b/model/RBD Model/Image/AFG_ESP A.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/AFG_ESP B.jpg b/model/RBD Model/Image/AFG_ESP B.jpg new file mode 100644 index 0000000..dc7f51d Binary files /dev/null and b/model/RBD Model/Image/AFG_ESP B.jpg differ diff --git a/model/RBD Model/Image/AFG_ESP B.jpg_Zone.Identifier b/model/RBD Model/Image/AFG_ESP B.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/AFG_FDF A.jpg b/model/RBD Model/Image/AFG_FDF A.jpg new file mode 100644 index 0000000..2e2c4e6 Binary files /dev/null and b/model/RBD Model/Image/AFG_FDF A.jpg differ diff --git a/model/RBD Model/Image/AFG_FDF A.jpg_Zone.Identifier b/model/RBD Model/Image/AFG_FDF A.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/AFG_FDF B.jpg b/model/RBD Model/Image/AFG_FDF B.jpg new file mode 100644 index 0000000..b34a2ca Binary files /dev/null and b/model/RBD Model/Image/AFG_FDF B.jpg differ diff --git a/model/RBD Model/Image/AFG_FDF B.jpg_Zone.Identifier b/model/RBD Model/Image/AFG_FDF B.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/AFG_FGD A-1.jpg b/model/RBD Model/Image/AFG_FGD A-1.jpg new file mode 100644 index 0000000..ce9d6ce Binary files /dev/null and b/model/RBD Model/Image/AFG_FGD A-1.jpg differ diff --git a/model/RBD Model/Image/AFG_FGD A-1.jpg_Zone.Identifier b/model/RBD Model/Image/AFG_FGD A-1.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/AFG_FGD A-2.jpg b/model/RBD Model/Image/AFG_FGD A-2.jpg new file mode 100644 index 0000000..9332237 Binary files /dev/null and b/model/RBD Model/Image/AFG_FGD A-2.jpg differ diff --git a/model/RBD Model/Image/AFG_FGD A-2.jpg_Zone.Identifier b/model/RBD Model/Image/AFG_FGD A-2.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/AFG_FGD B-1.jpg b/model/RBD Model/Image/AFG_FGD B-1.jpg new file mode 100644 index 0000000..e9e4d58 Binary files /dev/null and b/model/RBD Model/Image/AFG_FGD B-1.jpg differ diff --git a/model/RBD Model/Image/AFG_FGD B-1.jpg_Zone.Identifier b/model/RBD Model/Image/AFG_FGD B-1.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/AFG_FGD B-2.jpg b/model/RBD Model/Image/AFG_FGD B-2.jpg new file mode 100644 index 0000000..3ecac5a Binary files /dev/null and b/model/RBD Model/Image/AFG_FGD B-2.jpg differ diff --git a/model/RBD Model/Image/AFG_FGD B-2.jpg_Zone.Identifier b/model/RBD Model/Image/AFG_FGD B-2.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/AFG_IDF A.jpg b/model/RBD Model/Image/AFG_IDF A.jpg new file mode 100644 index 0000000..b0c42c6 Binary files /dev/null and b/model/RBD Model/Image/AFG_IDF A.jpg differ diff --git a/model/RBD Model/Image/AFG_IDF A.jpg_Zone.Identifier b/model/RBD Model/Image/AFG_IDF A.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/AFG_IDF B.jpg b/model/RBD Model/Image/AFG_IDF B.jpg new file mode 100644 index 0000000..7ba4569 Binary files /dev/null and b/model/RBD Model/Image/AFG_IDF B.jpg differ diff --git a/model/RBD Model/Image/AFG_IDF B.jpg_Zone.Identifier b/model/RBD Model/Image/AFG_IDF B.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/AFG_PAF A.jpg b/model/RBD Model/Image/AFG_PAF A.jpg new file mode 100644 index 0000000..b0c42c6 Binary files /dev/null and b/model/RBD Model/Image/AFG_PAF A.jpg differ diff --git a/model/RBD Model/Image/AFG_PAF A.jpg_Zone.Identifier b/model/RBD Model/Image/AFG_PAF A.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/AFG_PAF B.jpg b/model/RBD Model/Image/AFG_PAF B.jpg new file mode 100644 index 0000000..89d0971 Binary files /dev/null and b/model/RBD Model/Image/AFG_PAF B.jpg differ diff --git a/model/RBD Model/Image/AFG_PAF B.jpg_Zone.Identifier b/model/RBD Model/Image/AFG_PAF B.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/AFG_RAPH A .jpg b/model/RBD Model/Image/AFG_RAPH A .jpg new file mode 100644 index 0000000..f642c18 Binary files /dev/null and b/model/RBD Model/Image/AFG_RAPH A .jpg differ diff --git a/model/RBD Model/Image/AFG_RAPH A .jpg_Zone.Identifier b/model/RBD Model/Image/AFG_RAPH A .jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/AFG_RAPH B.jpg b/model/RBD Model/Image/AFG_RAPH B.jpg new file mode 100644 index 0000000..f023b43 Binary files /dev/null and b/model/RBD Model/Image/AFG_RAPH B.jpg differ diff --git a/model/RBD Model/Image/AFG_RAPH B.jpg_Zone.Identifier b/model/RBD Model/Image/AFG_RAPH B.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_ASH_3BAD-CV501.jpg b/model/RBD Model/Image/BOL_ASH_3BAD-CV501.jpg new file mode 100644 index 0000000..57f5a95 Binary files /dev/null and b/model/RBD Model/Image/BOL_ASH_3BAD-CV501.jpg differ diff --git a/model/RBD Model/Image/BOL_ASH_3BAD-CV501.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_ASH_3BAD-CV501.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_BDW.jpg b/model/RBD Model/Image/BOL_BDW.jpg new file mode 100644 index 0000000..783dc64 Binary files /dev/null and b/model/RBD Model/Image/BOL_BDW.jpg differ diff --git a/model/RBD Model/Image/BOL_BDW.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_BDW.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_BRS.jpg b/model/RBD Model/Image/BOL_BRS.jpg new file mode 100644 index 0000000..1f5f4df Binary files /dev/null and b/model/RBD Model/Image/BOL_BRS.jpg differ diff --git a/model/RBD Model/Image/BOL_BRS.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_BRS.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_BSS.jpg b/model/RBD Model/Image/BOL_BSS.jpg new file mode 100644 index 0000000..1f5f4df Binary files /dev/null and b/model/RBD Model/Image/BOL_BSS.jpg differ diff --git a/model/RBD Model/Image/BOL_BSS.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_BSS.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP.jpg b/model/RBD Model/Image/BOL_DP.jpg new file mode 100644 index 0000000..bc46be2 Binary files /dev/null and b/model/RBD Model/Image/BOL_DP.jpg differ diff --git a/model/RBD Model/Image/BOL_DP.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP_CB A.jpg b/model/RBD Model/Image/BOL_DP_CB A.jpg new file mode 100644 index 0000000..c82fcfa Binary files /dev/null and b/model/RBD Model/Image/BOL_DP_CB A.jpg differ diff --git a/model/RBD Model/Image/BOL_DP_CB A.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP_CB A.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP_CB B.jpg b/model/RBD Model/Image/BOL_DP_CB B.jpg new file mode 100644 index 0000000..102fdb7 Binary files /dev/null and b/model/RBD Model/Image/BOL_DP_CB B.jpg differ diff --git a/model/RBD Model/Image/BOL_DP_CB B.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP_CB B.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP_CB C.jpg b/model/RBD Model/Image/BOL_DP_CB C.jpg new file mode 100644 index 0000000..0555116 Binary files /dev/null and b/model/RBD Model/Image/BOL_DP_CB C.jpg differ diff --git a/model/RBD Model/Image/BOL_DP_CB C.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP_CB C.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP_CB D.jpg b/model/RBD Model/Image/BOL_DP_CB D.jpg new file mode 100644 index 0000000..c3d266d Binary files /dev/null and b/model/RBD Model/Image/BOL_DP_CB D.jpg differ diff --git a/model/RBD Model/Image/BOL_DP_CB D.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP_CB D.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP_CB E.jpg b/model/RBD Model/Image/BOL_DP_CB E.jpg new file mode 100644 index 0000000..e2ed7ae Binary files /dev/null and b/model/RBD Model/Image/BOL_DP_CB E.jpg differ diff --git a/model/RBD Model/Image/BOL_DP_CB E.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP_CB E.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP_CB F.jpg b/model/RBD Model/Image/BOL_DP_CB F.jpg new file mode 100644 index 0000000..eb38f1f Binary files /dev/null and b/model/RBD Model/Image/BOL_DP_CB F.jpg differ diff --git a/model/RBD Model/Image/BOL_DP_CB F.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP_CB F.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP_FDR A.jpg b/model/RBD Model/Image/BOL_DP_FDR A.jpg new file mode 100644 index 0000000..57dcb35 Binary files /dev/null and b/model/RBD Model/Image/BOL_DP_FDR A.jpg differ diff --git a/model/RBD Model/Image/BOL_DP_FDR A.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP_FDR A.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP_FDR B.jpg b/model/RBD Model/Image/BOL_DP_FDR B.jpg new file mode 100644 index 0000000..9518e82 Binary files /dev/null and b/model/RBD Model/Image/BOL_DP_FDR B.jpg differ diff --git a/model/RBD Model/Image/BOL_DP_FDR B.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP_FDR B.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP_FDR C.jpg b/model/RBD Model/Image/BOL_DP_FDR C.jpg new file mode 100644 index 0000000..cb57c81 Binary files /dev/null and b/model/RBD Model/Image/BOL_DP_FDR C.jpg differ diff --git a/model/RBD Model/Image/BOL_DP_FDR C.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP_FDR C.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP_FDR D.jpg b/model/RBD Model/Image/BOL_DP_FDR D.jpg new file mode 100644 index 0000000..ca561c7 Binary files /dev/null and b/model/RBD Model/Image/BOL_DP_FDR D.jpg differ diff --git a/model/RBD Model/Image/BOL_DP_FDR D.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP_FDR D.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP_FDR E.jpg b/model/RBD Model/Image/BOL_DP_FDR E.jpg new file mode 100644 index 0000000..00d9a28 Binary files /dev/null and b/model/RBD Model/Image/BOL_DP_FDR E.jpg differ diff --git a/model/RBD Model/Image/BOL_DP_FDR E.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP_FDR E.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP_FDR F.jpg b/model/RBD Model/Image/BOL_DP_FDR F.jpg new file mode 100644 index 0000000..4d4687d Binary files /dev/null and b/model/RBD Model/Image/BOL_DP_FDR F.jpg differ diff --git a/model/RBD Model/Image/BOL_DP_FDR F.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP_FDR F.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP_MILL B.jpg b/model/RBD Model/Image/BOL_DP_MILL B.jpg new file mode 100644 index 0000000..9abeafa Binary files /dev/null and b/model/RBD Model/Image/BOL_DP_MILL B.jpg differ diff --git a/model/RBD Model/Image/BOL_DP_MILL B.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP_MILL B.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP_MILL C.jpg b/model/RBD Model/Image/BOL_DP_MILL C.jpg new file mode 100644 index 0000000..8b9521f Binary files /dev/null and b/model/RBD Model/Image/BOL_DP_MILL C.jpg differ diff --git a/model/RBD Model/Image/BOL_DP_MILL C.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP_MILL C.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP_MILL D.jpg b/model/RBD Model/Image/BOL_DP_MILL D.jpg new file mode 100644 index 0000000..a85db9f Binary files /dev/null and b/model/RBD Model/Image/BOL_DP_MILL D.jpg differ diff --git a/model/RBD Model/Image/BOL_DP_MILL D.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP_MILL D.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP_MILL E.jpg b/model/RBD Model/Image/BOL_DP_MILL E.jpg new file mode 100644 index 0000000..91be96a Binary files /dev/null and b/model/RBD Model/Image/BOL_DP_MILL E.jpg differ diff --git a/model/RBD Model/Image/BOL_DP_MILL E.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP_MILL E.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_DP_MILL F.jpg b/model/RBD Model/Image/BOL_DP_MILL F.jpg new file mode 100644 index 0000000..009ad54 Binary files /dev/null and b/model/RBD Model/Image/BOL_DP_MILL F.jpg differ diff --git a/model/RBD Model/Image/BOL_DP_MILL F.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_DP_MILL F.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_HRH.jpg b/model/RBD Model/Image/BOL_HRH.jpg new file mode 100644 index 0000000..00fcd63 Binary files /dev/null and b/model/RBD Model/Image/BOL_HRH.jpg differ diff --git a/model/RBD Model/Image/BOL_HRH.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_HRH.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_MILL A_3DP-BM731A.jpg b/model/RBD Model/Image/BOL_MILL A_3DP-BM731A.jpg new file mode 100644 index 0000000..050dd3a Binary files /dev/null and b/model/RBD Model/Image/BOL_MILL A_3DP-BM731A.jpg differ diff --git a/model/RBD Model/Image/BOL_MILL A_3DP-BM731A.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_MILL A_3DP-BM731A.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_MS.jpg b/model/RBD Model/Image/BOL_MS.jpg new file mode 100644 index 0000000..9afb93e Binary files /dev/null and b/model/RBD Model/Image/BOL_MS.jpg differ diff --git a/model/RBD Model/Image/BOL_MS.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_MS.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_OB.jpg b/model/RBD Model/Image/BOL_OB.jpg new file mode 100644 index 0000000..0ef52e6 Binary files /dev/null and b/model/RBD Model/Image/BOL_OB.jpg differ diff --git a/model/RBD Model/Image/BOL_OB.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_OB.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_SB.jpg b/model/RBD Model/Image/BOL_SB.jpg new file mode 100644 index 0000000..f291731 Binary files /dev/null and b/model/RBD Model/Image/BOL_SB.jpg differ diff --git a/model/RBD Model/Image/BOL_SB.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_SB.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_SB_HALF.jpg b/model/RBD Model/Image/BOL_SB_HALF.jpg new file mode 100644 index 0000000..6f90e9e Binary files /dev/null and b/model/RBD Model/Image/BOL_SB_HALF.jpg differ diff --git a/model/RBD Model/Image/BOL_SB_HALF.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_SB_HALF.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_SB_LONG.jpg b/model/RBD Model/Image/BOL_SB_LONG.jpg new file mode 100644 index 0000000..7ba748a Binary files /dev/null and b/model/RBD Model/Image/BOL_SB_LONG.jpg differ diff --git a/model/RBD Model/Image/BOL_SB_LONG.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_SB_LONG.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_SB_LONG_LEFT.jpg b/model/RBD Model/Image/BOL_SB_LONG_LEFT.jpg new file mode 100644 index 0000000..b88bfaa Binary files /dev/null and b/model/RBD Model/Image/BOL_SB_LONG_LEFT.jpg differ diff --git a/model/RBD Model/Image/BOL_SB_LONG_LEFT.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_SB_LONG_LEFT.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_SB_LONG_RIGHT.jpg b/model/RBD Model/Image/BOL_SB_LONG_RIGHT.jpg new file mode 100644 index 0000000..05215bb Binary files /dev/null and b/model/RBD Model/Image/BOL_SB_LONG_RIGHT.jpg differ diff --git a/model/RBD Model/Image/BOL_SB_LONG_RIGHT.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_SB_LONG_RIGHT.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_SB_RAPH.jpg b/model/RBD Model/Image/BOL_SB_RAPH.jpg new file mode 100644 index 0000000..f609e66 Binary files /dev/null and b/model/RBD Model/Image/BOL_SB_RAPH.jpg differ diff --git a/model/RBD Model/Image/BOL_SB_RAPH.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_SB_RAPH.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_SB_WD.jpg b/model/RBD Model/Image/BOL_SB_WD.jpg new file mode 100644 index 0000000..f1185eb Binary files /dev/null and b/model/RBD Model/Image/BOL_SB_WD.jpg differ diff --git a/model/RBD Model/Image/BOL_SB_WD.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_SB_WD.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_SB_WD_FRONT.jpg b/model/RBD Model/Image/BOL_SB_WD_FRONT.jpg new file mode 100644 index 0000000..137c34a Binary files /dev/null and b/model/RBD Model/Image/BOL_SB_WD_FRONT.jpg differ diff --git a/model/RBD Model/Image/BOL_SB_WD_FRONT.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_SB_WD_FRONT.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_SB_WD_LEFT-1.jpg b/model/RBD Model/Image/BOL_SB_WD_LEFT-1.jpg new file mode 100644 index 0000000..d407728 Binary files /dev/null and b/model/RBD Model/Image/BOL_SB_WD_LEFT-1.jpg differ diff --git a/model/RBD Model/Image/BOL_SB_WD_LEFT-1.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_SB_WD_LEFT-1.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_SB_WD_LEFT-2.jpg b/model/RBD Model/Image/BOL_SB_WD_LEFT-2.jpg new file mode 100644 index 0000000..ce13162 Binary files /dev/null and b/model/RBD Model/Image/BOL_SB_WD_LEFT-2.jpg differ diff --git a/model/RBD Model/Image/BOL_SB_WD_LEFT-2.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_SB_WD_LEFT-2.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_SB_WD_REAR-1.jpg b/model/RBD Model/Image/BOL_SB_WD_REAR-1.jpg new file mode 100644 index 0000000..3f27b1e Binary files /dev/null and b/model/RBD Model/Image/BOL_SB_WD_REAR-1.jpg differ diff --git a/model/RBD Model/Image/BOL_SB_WD_REAR-1.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_SB_WD_REAR-1.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_SB_WD_REAR-2.jpg b/model/RBD Model/Image/BOL_SB_WD_REAR-2.jpg new file mode 100644 index 0000000..f2db000 Binary files /dev/null and b/model/RBD Model/Image/BOL_SB_WD_REAR-2.jpg differ diff --git a/model/RBD Model/Image/BOL_SB_WD_REAR-2.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_SB_WD_REAR-2.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_SB_WD_RIGHT.jpg b/model/RBD Model/Image/BOL_SB_WD_RIGHT.jpg new file mode 100644 index 0000000..d4351e4 Binary files /dev/null and b/model/RBD Model/Image/BOL_SB_WD_RIGHT.jpg differ diff --git a/model/RBD Model/Image/BOL_SB_WD_RIGHT.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_SB_WD_RIGHT.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/BOL_SOOTBLOWER_3AI-SFV501.jpg b/model/RBD Model/Image/BOL_SOOTBLOWER_3AI-SFV501.jpg new file mode 100644 index 0000000..b6ff86b Binary files /dev/null and b/model/RBD Model/Image/BOL_SOOTBLOWER_3AI-SFV501.jpg differ diff --git a/model/RBD Model/Image/BOL_SOOTBLOWER_3AI-SFV501.jpg_Zone.Identifier b/model/RBD Model/Image/BOL_SOOTBLOWER_3AI-SFV501.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/CMN-CL.png b/model/RBD Model/Image/CMN-CL.png new file mode 100644 index 0000000..e720636 Binary files /dev/null and b/model/RBD Model/Image/CMN-CL.png differ diff --git a/model/RBD Model/Image/ESP_A1.jpg b/model/RBD Model/Image/ESP_A1.jpg new file mode 100644 index 0000000..2d75f76 Binary files /dev/null and b/model/RBD Model/Image/ESP_A1.jpg differ diff --git a/model/RBD Model/Image/ESP_A1.jpg_Zone.Identifier b/model/RBD Model/Image/ESP_A1.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/ESP_A2.jpg b/model/RBD Model/Image/ESP_A2.jpg new file mode 100644 index 0000000..0bfca7a Binary files /dev/null and b/model/RBD Model/Image/ESP_A2.jpg differ diff --git a/model/RBD Model/Image/ESP_A2.jpg_Zone.Identifier b/model/RBD Model/Image/ESP_A2.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/ESP_B1.jpg b/model/RBD Model/Image/ESP_B1.jpg new file mode 100644 index 0000000..448de60 Binary files /dev/null and b/model/RBD Model/Image/ESP_B1.jpg differ diff --git a/model/RBD Model/Image/ESP_B1.jpg_Zone.Identifier b/model/RBD Model/Image/ESP_B1.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/ESP_B2.jpg b/model/RBD Model/Image/ESP_B2.jpg new file mode 100644 index 0000000..54a8970 Binary files /dev/null and b/model/RBD Model/Image/ESP_B2.jpg differ diff --git a/model/RBD Model/Image/ESP_B2.jpg_Zone.Identifier b/model/RBD Model/Image/ESP_B2.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FGD_DS.jpg b/model/RBD Model/Image/FGD_DS.jpg new file mode 100644 index 0000000..754fcf6 Binary files /dev/null and b/model/RBD Model/Image/FGD_DS.jpg differ diff --git a/model/RBD Model/Image/FGD_DS.jpg_Zone.Identifier b/model/RBD Model/Image/FGD_DS.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FGD_DS_CHLORIDE.jpg b/model/RBD Model/Image/FGD_DS_CHLORIDE.jpg new file mode 100644 index 0000000..b9b50f7 Binary files /dev/null and b/model/RBD Model/Image/FGD_DS_CHLORIDE.jpg differ diff --git a/model/RBD Model/Image/FGD_DS_CHLORIDE.jpg_Zone.Identifier b/model/RBD Model/Image/FGD_DS_CHLORIDE.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FGD_DS_GYPSUM.jpg b/model/RBD Model/Image/FGD_DS_GYPSUM.jpg new file mode 100644 index 0000000..1d5f45d Binary files /dev/null and b/model/RBD Model/Image/FGD_DS_GYPSUM.jpg differ diff --git a/model/RBD Model/Image/FGD_DS_GYPSUM.jpg_Zone.Identifier b/model/RBD Model/Image/FGD_DS_GYPSUM.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FGD_DS_VACUUM.jpg b/model/RBD Model/Image/FGD_DS_VACUUM.jpg new file mode 100644 index 0000000..67d3392 Binary files /dev/null and b/model/RBD Model/Image/FGD_DS_VACUUM.jpg differ diff --git a/model/RBD Model/Image/FGD_DS_VACUUM.jpg_Zone.Identifier b/model/RBD Model/Image/FGD_DS_VACUUM.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FGD_LSH-1.jpg b/model/RBD Model/Image/FGD_LSH-1.jpg new file mode 100644 index 0000000..dfe74a2 Binary files /dev/null and b/model/RBD Model/Image/FGD_LSH-1.jpg differ diff --git a/model/RBD Model/Image/FGD_LSH-1.jpg_Zone.Identifier b/model/RBD Model/Image/FGD_LSH-1.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FGD_LSH-2.jpg b/model/RBD Model/Image/FGD_LSH-2.jpg new file mode 100644 index 0000000..bac2af5 Binary files /dev/null and b/model/RBD Model/Image/FGD_LSH-2.jpg differ diff --git a/model/RBD Model/Image/FGD_LSH-2.jpg_Zone.Identifier b/model/RBD Model/Image/FGD_LSH-2.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FGD_OA.jpg b/model/RBD Model/Image/FGD_OA.jpg new file mode 100644 index 0000000..e25c6df Binary files /dev/null and b/model/RBD Model/Image/FGD_OA.jpg differ diff --git a/model/RBD Model/Image/FGD_OA.jpg_Zone.Identifier b/model/RBD Model/Image/FGD_OA.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FGD_RP-1.jpg b/model/RBD Model/Image/FGD_RP-1.jpg new file mode 100644 index 0000000..3da290a Binary files /dev/null and b/model/RBD Model/Image/FGD_RP-1.jpg differ diff --git a/model/RBD Model/Image/FGD_RP-1.jpg_Zone.Identifier b/model/RBD Model/Image/FGD_RP-1.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FGD_RP-2.jpg b/model/RBD Model/Image/FGD_RP-2.jpg new file mode 100644 index 0000000..4663819 Binary files /dev/null and b/model/RBD Model/Image/FGD_RP-2.jpg differ diff --git a/model/RBD Model/Image/FGD_RP-2.jpg_Zone.Identifier b/model/RBD Model/Image/FGD_RP-2.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FGD_RP-3.jpg b/model/RBD Model/Image/FGD_RP-3.jpg new file mode 100644 index 0000000..6bc112b Binary files /dev/null and b/model/RBD Model/Image/FGD_RP-3.jpg differ diff --git a/model/RBD Model/Image/FGD_RP-3.jpg_Zone.Identifier b/model/RBD Model/Image/FGD_RP-3.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FGD_RP_00RP-Z856A.jpg b/model/RBD Model/Image/FGD_RP_00RP-Z856A.jpg new file mode 100644 index 0000000..65940b3 Binary files /dev/null and b/model/RBD Model/Image/FGD_RP_00RP-Z856A.jpg differ diff --git a/model/RBD Model/Image/FGD_RP_00RP-Z856A.jpg_Zone.Identifier b/model/RBD Model/Image/FGD_RP_00RP-Z856A.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FGD_RP_MILL A.jpg b/model/RBD Model/Image/FGD_RP_MILL A.jpg new file mode 100644 index 0000000..f811d90 Binary files /dev/null and b/model/RBD Model/Image/FGD_RP_MILL A.jpg differ diff --git a/model/RBD Model/Image/FGD_RP_MILL A.jpg_Zone.Identifier b/model/RBD Model/Image/FGD_RP_MILL A.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FGD_RP_MILL B.jpg b/model/RBD Model/Image/FGD_RP_MILL B.jpg new file mode 100644 index 0000000..4e33edd Binary files /dev/null and b/model/RBD Model/Image/FGD_RP_MILL B.jpg differ diff --git a/model/RBD Model/Image/FGD_RP_MILL B.jpg_Zone.Identifier b/model/RBD Model/Image/FGD_RP_MILL B.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FGD_RP_MILL.jpg b/model/RBD Model/Image/FGD_RP_MILL.jpg new file mode 100644 index 0000000..2c9dd93 Binary files /dev/null and b/model/RBD Model/Image/FGD_RP_MILL.jpg differ diff --git a/model/RBD Model/Image/FGD_RP_MILL.jpg_Zone.Identifier b/model/RBD Model/Image/FGD_RP_MILL.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FGD_RP_WET MILL A.jpg b/model/RBD Model/Image/FGD_RP_WET MILL A.jpg new file mode 100644 index 0000000..b0e4501 Binary files /dev/null and b/model/RBD Model/Image/FGD_RP_WET MILL A.jpg differ diff --git a/model/RBD Model/Image/FGD_RP_WET MILL A.jpg_Zone.Identifier b/model/RBD Model/Image/FGD_RP_WET MILL A.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FGD_RP_WET MILL B.jpg b/model/RBD Model/Image/FGD_RP_WET MILL B.jpg new file mode 100644 index 0000000..1131adb Binary files /dev/null and b/model/RBD Model/Image/FGD_RP_WET MILL B.jpg differ diff --git a/model/RBD Model/Image/FGD_RP_WET MILL B.jpg_Zone.Identifier b/model/RBD Model/Image/FGD_RP_WET MILL B.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FGD_RP_WET MILL.jpg b/model/RBD Model/Image/FGD_RP_WET MILL.jpg new file mode 100644 index 0000000..4ebd933 Binary files /dev/null and b/model/RBD Model/Image/FGD_RP_WET MILL.jpg differ diff --git a/model/RBD Model/Image/FGD_RP_WET MILL.jpg_Zone.Identifier b/model/RBD Model/Image/FGD_RP_WET MILL.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FW_BFT A-1.jpg b/model/RBD Model/Image/FW_BFT A-1.jpg new file mode 100644 index 0000000..a39e280 Binary files /dev/null and b/model/RBD Model/Image/FW_BFT A-1.jpg differ diff --git a/model/RBD Model/Image/FW_BFT A-1.jpg_Zone.Identifier b/model/RBD Model/Image/FW_BFT A-1.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FW_BFT A-2.jpg b/model/RBD Model/Image/FW_BFT A-2.jpg new file mode 100644 index 0000000..5905ba7 Binary files /dev/null and b/model/RBD Model/Image/FW_BFT A-2.jpg differ diff --git a/model/RBD Model/Image/FW_BFT A-2.jpg_Zone.Identifier b/model/RBD Model/Image/FW_BFT A-2.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FW_BFT B-1.jpg b/model/RBD Model/Image/FW_BFT B-1.jpg new file mode 100644 index 0000000..0de47ba Binary files /dev/null and b/model/RBD Model/Image/FW_BFT B-1.jpg differ diff --git a/model/RBD Model/Image/FW_BFT B-1.jpg_Zone.Identifier b/model/RBD Model/Image/FW_BFT B-1.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FW_BFT B-2.jpg b/model/RBD Model/Image/FW_BFT B-2.jpg new file mode 100644 index 0000000..5767cc7 Binary files /dev/null and b/model/RBD Model/Image/FW_BFT B-2.jpg differ diff --git a/model/RBD Model/Image/FW_BFT B-2.jpg_Zone.Identifier b/model/RBD Model/Image/FW_BFT B-2.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FW_MBFP-1.jpg b/model/RBD Model/Image/FW_MBFP-1.jpg new file mode 100644 index 0000000..ff45101 Binary files /dev/null and b/model/RBD Model/Image/FW_MBFP-1.jpg differ diff --git a/model/RBD Model/Image/FW_MBFP-1.jpg_Zone.Identifier b/model/RBD Model/Image/FW_MBFP-1.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/FW_MBFP-2.jpg b/model/RBD Model/Image/FW_MBFP-2.jpg new file mode 100644 index 0000000..05452b6 Binary files /dev/null and b/model/RBD Model/Image/FW_MBFP-2.jpg differ diff --git a/model/RBD Model/Image/FW_MBFP-2.jpg_Zone.Identifier b/model/RBD Model/Image/FW_MBFP-2.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/GEN_GEN.jpg b/model/RBD Model/Image/GEN_GEN.jpg new file mode 100644 index 0000000..b67769b Binary files /dev/null and b/model/RBD Model/Image/GEN_GEN.jpg differ diff --git a/model/RBD Model/Image/GEN_GEN.jpg_Zone.Identifier b/model/RBD Model/Image/GEN_GEN.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/GEN_GEN_GMCB.jpg b/model/RBD Model/Image/GEN_GEN_GMCB.jpg new file mode 100644 index 0000000..7f63805 Binary files /dev/null and b/model/RBD Model/Image/GEN_GEN_GMCB.jpg differ diff --git a/model/RBD Model/Image/GEN_GEN_GMCB.jpg_Zone.Identifier b/model/RBD Model/Image/GEN_GEN_GMCB.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/GEN_GEN_THRS.jpg b/model/RBD Model/Image/GEN_GEN_THRS.jpg new file mode 100644 index 0000000..801d7b2 Binary files /dev/null and b/model/RBD Model/Image/GEN_GEN_THRS.jpg differ diff --git a/model/RBD Model/Image/GEN_GEN_THRS.jpg_Zone.Identifier b/model/RBD Model/Image/GEN_GEN_THRS.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/GEN_GMC.jpg b/model/RBD Model/Image/GEN_GMC.jpg new file mode 100644 index 0000000..70a4dc0 Binary files /dev/null and b/model/RBD Model/Image/GEN_GMC.jpg differ diff --git a/model/RBD Model/Image/GEN_GMC.jpg_Zone.Identifier b/model/RBD Model/Image/GEN_GMC.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/GEN_GMC_RCFM.jpg b/model/RBD Model/Image/GEN_GMC_RCFM.jpg new file mode 100644 index 0000000..63609fc Binary files /dev/null and b/model/RBD Model/Image/GEN_GMC_RCFM.jpg differ diff --git a/model/RBD Model/Image/GEN_GMC_RCFM.jpg_Zone.Identifier b/model/RBD Model/Image/GEN_GMC_RCFM.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/GEN_SCW.jpg b/model/RBD Model/Image/GEN_SCW.jpg new file mode 100644 index 0000000..a0328c3 Binary files /dev/null and b/model/RBD Model/Image/GEN_SCW.jpg differ diff --git a/model/RBD Model/Image/GEN_SCW.jpg_Zone.Identifier b/model/RBD Model/Image/GEN_SCW.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/GEN_SO.jpg b/model/RBD Model/Image/GEN_SO.jpg new file mode 100644 index 0000000..d46308d Binary files /dev/null and b/model/RBD Model/Image/GEN_SO.jpg differ diff --git a/model/RBD Model/Image/GEN_SO.jpg_Zone.Identifier b/model/RBD Model/Image/GEN_SO.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/GEN_TR.jpg b/model/RBD Model/Image/GEN_TR.jpg new file mode 100644 index 0000000..ae332d6 Binary files /dev/null and b/model/RBD Model/Image/GEN_TR.jpg differ diff --git a/model/RBD Model/Image/GEN_TR.jpg_Zone.Identifier b/model/RBD Model/Image/GEN_TR.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/KLH_ABS-1.jpg b/model/RBD Model/Image/KLH_ABS-1.jpg new file mode 100644 index 0000000..65d33e4 Binary files /dev/null and b/model/RBD Model/Image/KLH_ABS-1.jpg differ diff --git a/model/RBD Model/Image/KLH_ABS-1.jpg_Zone.Identifier b/model/RBD Model/Image/KLH_ABS-1.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/KLH_ABS-2.jpg b/model/RBD Model/Image/KLH_ABS-2.jpg new file mode 100644 index 0000000..301a5a0 Binary files /dev/null and b/model/RBD Model/Image/KLH_ABS-2.jpg differ diff --git a/model/RBD Model/Image/KLH_ABS-2.jpg_Zone.Identifier b/model/RBD Model/Image/KLH_ABS-2.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/SPS_APC-1.jpg b/model/RBD Model/Image/SPS_APC-1.jpg new file mode 100644 index 0000000..19ca30c Binary files /dev/null and b/model/RBD Model/Image/SPS_APC-1.jpg differ diff --git a/model/RBD Model/Image/SPS_APC-1.jpg_Zone.Identifier b/model/RBD Model/Image/SPS_APC-1.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/SPS_APC-2.jpg b/model/RBD Model/Image/SPS_APC-2.jpg new file mode 100644 index 0000000..2e8e3b1 Binary files /dev/null and b/model/RBD Model/Image/SPS_APC-2.jpg differ diff --git a/model/RBD Model/Image/SPS_APC-2.jpg_Zone.Identifier b/model/RBD Model/Image/SPS_APC-2.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/SPS_APC-3.jpg b/model/RBD Model/Image/SPS_APC-3.jpg new file mode 100644 index 0000000..42f0bb2 Binary files /dev/null and b/model/RBD Model/Image/SPS_APC-3.jpg differ diff --git a/model/RBD Model/Image/SPS_APC-3.jpg_Zone.Identifier b/model/RBD Model/Image/SPS_APC-3.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/SPS_APC-4.jpg b/model/RBD Model/Image/SPS_APC-4.jpg new file mode 100644 index 0000000..4c42f9e Binary files /dev/null and b/model/RBD Model/Image/SPS_APC-4.jpg differ diff --git a/model/RBD Model/Image/SPS_APC-4.jpg_Zone.Identifier b/model/RBD Model/Image/SPS_APC-4.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/SPS_APE-1.jpg b/model/RBD Model/Image/SPS_APE-1.jpg new file mode 100644 index 0000000..774aa8b Binary files /dev/null and b/model/RBD Model/Image/SPS_APE-1.jpg differ diff --git a/model/RBD Model/Image/SPS_APE-1.jpg_Zone.Identifier b/model/RBD Model/Image/SPS_APE-1.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/SPS_APE-2.jpg b/model/RBD Model/Image/SPS_APE-2.jpg new file mode 100644 index 0000000..e18c324 Binary files /dev/null and b/model/RBD Model/Image/SPS_APE-2.jpg differ diff --git a/model/RBD Model/Image/SPS_APE-2.jpg_Zone.Identifier b/model/RBD Model/Image/SPS_APE-2.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/SPS_EG.jpg b/model/RBD Model/Image/SPS_EG.jpg new file mode 100644 index 0000000..3f07c35 Binary files /dev/null and b/model/RBD Model/Image/SPS_EG.jpg differ diff --git a/model/RBD Model/Image/SPS_EG.jpg_Zone.Identifier b/model/RBD Model/Image/SPS_EG.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/TUR_CW.jpg b/model/RBD Model/Image/TUR_CW.jpg new file mode 100644 index 0000000..79155fe Binary files /dev/null and b/model/RBD Model/Image/TUR_CW.jpg differ diff --git a/model/RBD Model/Image/TUR_CW.jpg_Zone.Identifier b/model/RBD Model/Image/TUR_CW.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/TUR_EHB.jpg b/model/RBD Model/Image/TUR_EHB.jpg new file mode 100644 index 0000000..7888212 Binary files /dev/null and b/model/RBD Model/Image/TUR_EHB.jpg differ diff --git a/model/RBD Model/Image/TUR_EHB.jpg_Zone.Identifier b/model/RBD Model/Image/TUR_EHB.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/TUR_EHS.jpg b/model/RBD Model/Image/TUR_EHS.jpg new file mode 100644 index 0000000..c08ceb2 Binary files /dev/null and b/model/RBD Model/Image/TUR_EHS.jpg differ diff --git a/model/RBD Model/Image/TUR_EHS.jpg_Zone.Identifier b/model/RBD Model/Image/TUR_EHS.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/TUR_GSS.jpg b/model/RBD Model/Image/TUR_GSS.jpg new file mode 100644 index 0000000..d334e6b Binary files /dev/null and b/model/RBD Model/Image/TUR_GSS.jpg differ diff --git a/model/RBD Model/Image/TUR_GSS.jpg_Zone.Identifier b/model/RBD Model/Image/TUR_GSS.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/TUR_LOS-1.jpg b/model/RBD Model/Image/TUR_LOS-1.jpg new file mode 100644 index 0000000..8e8e02c Binary files /dev/null and b/model/RBD Model/Image/TUR_LOS-1.jpg differ diff --git a/model/RBD Model/Image/TUR_LOS-1.jpg_Zone.Identifier b/model/RBD Model/Image/TUR_LOS-1.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/Image/TUR_LOS-2.jpg b/model/RBD Model/Image/TUR_LOS-2.jpg new file mode 100644 index 0000000..570f12f Binary files /dev/null and b/model/RBD Model/Image/TUR_LOS-2.jpg differ diff --git a/model/RBD Model/Image/TUR_LOS-2.jpg_Zone.Identifier b/model/RBD Model/Image/TUR_LOS-2.jpg_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/KLH_ABS.json b/model/RBD Model/KLH_ABS.json new file mode 100644 index 0000000..26d160e --- /dev/null +++ b/model/RBD Model/KLH_ABS.json @@ -0,0 +1,36 @@ +{ + "series": [ + { + "parallel_no_redundancy": [ + {"series": ["3ABS-M879A", "3ABS-AG879A"]}, + {"series": ["3ABS-M879B", "3ABS-AG879B"]}, + {"series": ["3ABS-M879C", "3ABS-AG879C"]}, + {"series": ["3ABS-M879D", "3ABS-AG879D"]}, + {"series": ["3ABS-M879E", "3ABS-AG879E"]} + ] + }, + "3ABS-T931", + "3ABS-M931", + "3ABS-AG931", + { + "parallel": [ + {"series": ["3ABS-M932A", "3ABS-P932A"]}, + {"series": ["3ABS-M932B", "3ABS-P932B"]} + ] + }, + { + "parallel_no_redundancy": [ + {"series": ["3ABS-M888A", "3ABS-P888A"]}, + {"series": ["3ABS-M888B", "3ABS-P888B"]}, + {"series": ["3ABS-M888C", "3ABS-P888C"]} + ] + }, + { + "parallel": [ + {"series": ["3ABS-M910A", "3ABS-P910A"]}, + {"series": ["3ABS-M910B", "3ABS-P910B"]} + ] + }, + "3ABS-ABT851" + ] +} \ No newline at end of file diff --git a/model/RBD Model/KLH_ABS.json_Zone.Identifier b/model/RBD Model/KLH_ABS.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/SPS_APC.json b/model/RBD Model/SPS_APC.json new file mode 100644 index 0000000..47df3a1 --- /dev/null +++ b/model/RBD Model/SPS_APC.json @@ -0,0 +1,52 @@ +{ + "series": [ + { + "parallel_no_redundancy": ["3APC-CB811", "3APC-CB812", "3APC-CB813", "3APC-CB814"] + }, + { + "parallel_no_redundancy": ["3APC-LV001A", "3APC-LV001B"] + }, + { + "parallel_no_redundancy": ["3APC-LV501A", "3APC-LV501B"] + }, + { + "parallel_no_redundancy": ["3APC-LV810A", "3APC-LV810B"] + }, + { + "parallel_no_redundancy": ["3APC-LV811P1", "3APC-LV811P2", "3APC-LV811P3", "3APC-LV811P4", "3APC-LV811P5", "3APC-LV811P21"] + }, + "3APC-LV851", + "3APC-MCC002", + { + "parallel_no_redundancy": ["3APC-MCC501A", "3APC-MCC501B"] + }, + { + "parallel_no_redundancy": ["3APC-MCC502A", "3APC-MCC502B", "3APC-MCC502C", "3APC-MCC502D", "3APC-MCC502E", "3APC-MCC502F"] + }, + "3APC-MCC510", + "3APC-MCC851", + { + "parallel_no_redundancy": ["3APC-PD501A", "3APC-PD501B"] + }, + { + "parallel_no_redundancy": ["3APC-PD901", "3APC-PD902"] + }, + { + "parallel_no_redundancy": ["3APC-PD921", "3APC-PD922"] + }, + { + "parallel_no_redundancy": ["3APC-TF001A", "3APC-TF001B"] + }, + { + "parallel_no_redundancy": ["3APC-TF501A", "3APC-TF501B"] + }, + { + "parallel_no_redundancy": ["3APC-TF502A", "3APC-TF502B"] + }, + { + "parallel_no_redundancy": ["3APC-TF810A", "3APC-TF810B"] + }, + "3APC-TF811", + "3APC-TF851" + ] +} \ No newline at end of file diff --git a/model/RBD Model/SPS_APC.json_Zone.Identifier b/model/RBD Model/SPS_APC.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/SPS_APE.json b/model/RBD Model/SPS_APE.json new file mode 100644 index 0000000..f4bdae5 --- /dev/null +++ b/model/RBD Model/SPS_APE.json @@ -0,0 +1,26 @@ +{ + "series": [ + "3APE-CAB852", + { + "parallel_no_redundancy": ["3APE-MV001A", "3APE-MV001B"] + }, + { + "parallel_no_redundancy": ["3APE-MV002A", "3APE-MV002B"] + }, + { + "parallel_no_redundancy": ["3APE-MV003A", "3APE-MV003B", "3APE-MV003C", "3APE-MV003D"] + }, + { + "parallel_no_redundancy": ["3APE-MV004A", "3APE-MV004B"] + }, + "3APE-MV851", + "3APE-MV852", + { + "parallel_no_redundancy": ["3APE-TF002A", "3APE-TF002B"] + }, + "3APE-TF852", + { + "parallel_no_redundancy": ["3APE-Z005A", "3APE-Z005B"] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/SPS_APE.json_Zone.Identifier b/model/RBD Model/SPS_APE.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/SPS_EG.json b/model/RBD Model/SPS_EG.json new file mode 100644 index 0000000..aca1673 --- /dev/null +++ b/model/RBD Model/SPS_EG.json @@ -0,0 +1,3 @@ +{ + "series": ["3EG-E001", "3EG-T003"] +} \ No newline at end of file diff --git a/model/RBD Model/SPS_EG.json_Zone.Identifier b/model/RBD Model/SPS_EG.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/TUR_CW.json b/model/RBD Model/TUR_CW.json new file mode 100644 index 0000000..d786588 --- /dev/null +++ b/model/RBD Model/TUR_CW.json @@ -0,0 +1,19 @@ +{ + "series": [ + { + "parallel": [ + {"series": ["3CW-M020A", "3CW-P020A"]}, + {"series": ["3CW-M020B", "3CW-P020B"]} + ] + }, + { + "parallel_no_redundancy": [ + {"series": ["3CW-M010A", "3CW-P010A"]}, + {"series": ["3CW-M010B", "3CW-P010B"]} + ] + }, + { + "parallel": ["3CW-P011A", "3CW-P011B"] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/TUR_CW.json_Zone.Identifier b/model/RBD Model/TUR_CW.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/TUR_EHB.json b/model/RBD Model/TUR_EHB.json new file mode 100644 index 0000000..d26b27e --- /dev/null +++ b/model/RBD Model/TUR_EHB.json @@ -0,0 +1,10 @@ +{ + "series": [ + "3EHB-Z010", + "3EHB-P020", + "3EHB-T110", + { + "parallel": ["3EHB-P010A", "3EHB-P010B"] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/TUR_EHB.json_Zone.Identifier b/model/RBD Model/TUR_EHB.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/TUR_EHS.json b/model/RBD Model/TUR_EHS.json new file mode 100644 index 0000000..10e03d4 --- /dev/null +++ b/model/RBD Model/TUR_EHS.json @@ -0,0 +1,20 @@ +{ + "series": [ + "3EHS-Z010", + { + "parallel": [ + {"series": ["3EHS-M010A", "3EHS-P010A"]}, + {"series": ["3EHS-M010B", "3EHS-P010B"]} + ] + }, + { + "parallel": ["3EHS-T090A", "3EHS-T090B"] + }, + { + "parallel": [ + {"series": ["3EHS-M015A", "3EHS-F015A", "3EHS-H010A"]}, + {"series": ["3EHS-M015B", "3EHS-F015B", "3EHS-H010B"]} + ] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/TUR_EHS.json_Zone.Identifier b/model/RBD Model/TUR_EHS.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/TUR_GSS.json b/model/RBD Model/TUR_GSS.json new file mode 100644 index 0000000..838bbfa --- /dev/null +++ b/model/RBD Model/TUR_GSS.json @@ -0,0 +1,11 @@ +{ + "series": [ + "3GSS-H010", + { + "parallel": [ + {"series": ["3GSS-M011A", "3GSS-F011A"]}, + {"series": ["3GSS-M011B", "3GSS-F011B"]} + ] + } + ] +} \ No newline at end of file diff --git a/model/RBD Model/TUR_GSS.json_Zone.Identifier b/model/RBD Model/TUR_GSS.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/RBD Model/TUR_LOS.json b/model/RBD Model/TUR_LOS.json new file mode 100644 index 0000000..2433b2e --- /dev/null +++ b/model/RBD Model/TUR_LOS.json @@ -0,0 +1,33 @@ +{ + "series": [ + { + "parallel": [ + { + "parallel_no_redundancy": [ + {"series": ["3LOS-M010A", "3LOS-P010A"]}, + {"series": ["3LOS-M010B", "3LOS-P010B"]} + ] + }, + {"series": ["3LOS-M050", "3LOS-P050"]} + ] + }, + { + "parallel": ["3LOS-H010A", "3LOS-H010B"] + }, + "3LOS-M080", + "3LOS-P080", + { + "parallel": ["3LOS-S010A", "3LOS-S010B"] + }, + "3LOS-PF080", + { + "parallel": [ + {"series": ["3LOS-M020A", "3LOS-F020A"]}, + {"series": ["3LOS-M020B", "3LOS-F020B"]} + ] + }, + "3LOS-ME020", + "3LOS-M060", + "3LOS-P060" + ] +} \ No newline at end of file diff --git a/model/RBD Model/TUR_LOS.json_Zone.Identifier b/model/RBD Model/TUR_LOS.json_Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/model/consolidated_models.json b/model/consolidated_models.json new file mode 100644 index 0000000..6b6c444 --- /dev/null +++ b/model/consolidated_models.json @@ -0,0 +1,11182 @@ +{ + "- TJB - Unit 3 -": { + "series": [ + { + "series": [ + { + "series": [ + { + "parallel_no_redundancy": [ + "3DCS-CAB001A", + "3DCS-CAB001B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB002A", + "3DCS-CAB002B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB003A", + "3DCS-CAB003B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB004A", + "3DCS-CAB004B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB005A", + "3DCS-CAB005B", + "3DCS-CAB005C" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB006A", + "3DCS-CAB006B" + ] + }, + "3DCS-CAB007", + "3DCS-CAB008", + { + "parallel_no_redundancy": [ + "3DCS-CAB009A", + "3DCS-CAB009B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB010A", + "3DCS-CAB010B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB011A", + "3DCS-CAB011B" + ] + }, + "3DCS-CAB012", + { + "parallel_no_redundancy": [ + "3DCS-CAB013A", + "3DCS-CAB013B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB014A", + "3DCS-CAB014B" + ] + }, + "3DCS-CAB015", + "3DCS-CO001", + { + "parallel_no_redundancy": [ + "3DCS-CO002A", + "3DCS-CO002B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CO003A", + "3DCS-CO003B", + "3DCS-CO003C", + "3DCS-CO003D" + ] + }, + "3DCS-CO004", + { + "parallel_no_redundancy": [ + "3DCS-CO005A", + "3DCS-CO005B", + "3DCS-CO005C" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CO006A", + "3DCS-CO006B", + "3DCS-CO006C" + ] + }, + "3DCS-CO007", + "3DCS-CO008" + ] + }, + { + "series": [ + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "00ACR-M001A", + "00ACR-C001A" + ] + }, + { + "series": [ + "00ACR-M001B", + "00ACR-C001B" + ] + } + ] + }, + { + "series": [ + "00ACR-M001C", + "00ACR-C001C" + ] + }, + { + "series": [ + "00ACR-M001D", + "00ACR-C001D" + ] + } + ] + }, + { + "parallel": [ + "00IA-A001A", + "00IA-A001B" + ] + }, + "3IA-T005" + ] + }, + { + "series": [ + "00SCR-Z001", + "00SCR-Z015" + ] + }, + { + "series": [ + "3FW-H040", + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOT-T010A", + { + "series": [ + "3LOT-H010A", + { + "parallel": [ + "3LOT-T090A", + "3LOT-T100A" + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOT-M010A", + "3LOT-P010A" + ] + }, + { + "series": [ + "3LOT-M020A", + "3LOT-P020A" + ] + } + ] + }, + { + "series": [ + "3LOT-M050A", + "3LOT-P050A" + ] + } + ] + }, + "3LOT-M080A", + "3LOT-P080A", + { + "parallel": [ + "3LOT-S010A", + "3LOT-S020A" + ] + }, + "3LOT-PF080A", + "3LOT-M120A", + "3LOT-F120A", + "3FW-P020A", + "3FW-H011A", + "3FW-H012A", + "3FW-AU030A", + "3FW-P010A", + "3BFT-ST010A", + "3BFT-AU040A" + ] + } + ] + }, + { + "series": [ + "3LOT-T010B", + { + "series": [ + "3LOT-H010B", + { + "parallel": [ + "3LOT-T090B", + "3LOT-T100B" + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOT-M010B", + "3LOT-P010B" + ] + }, + { + "series": [ + "3LOT-M020B", + "3LOT-P020B" + ] + } + ] + }, + { + "series": [ + "3LOT-M050B", + "3LOT-P050B" + ] + } + ] + }, + "3LOT-M080B", + "3LOT-P080B", + { + "parallel": [ + "3LOT-S010B", + "3LOT-S020B" + ] + }, + "3LOT-PF080B", + "3LOT-M120B", + "3LOT-F120B", + "3FW-P020B", + "3FW-H011B", + "3FW-H012B", + "3FW-AU030B", + "3FW-P010B", + "3BFT-ST010B", + "3BFT-AU040B" + ] + } + ] + } + ] + }, + { + "series": [ + "3LOM-M330", + "3LOM-P330", + "3LOM-H310", + "3LOM-P310", + "3LOM-H370", + "3LOM-P370", + "3FW-P310", + "3FW-M321", + "3FW-M320", + "3FW-AU330", + "3FW-H301", + "3FW-H302", + "3FW-P300" + ] + } + ] + }, + "3FW-H070", + "3FW-H060", + "3FW-H050" + ] + }, + { + "series": [ + { + "series": [ + "3BOL-FD501", + { + "parallel_no_redundancy": [ + { + "series": [ + { + "series": [ + "3DP-FDR711A", + "3DP-M712A", + "3DP-M711A" + ] + }, + { + "series": [ + "3DP-M741A", + "3DP-BM741A", + "3DP-CVT701A", + "3DP-CVT711A", + "3DP-M761A", + "3DP-P761A", + "3DP-M781A", + "3DP-P781A", + "3DP-M731A", + "3DP-BM731A" + ] + }, + { + "series": [ + "3DP-B701A", + "3DP-B702A", + "3DP-B703A", + "3DP-B704A" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711B", + "3DP-M712B", + "3DP-M711B" + ] + }, + { + "series": [ + "3DP-M741B", + "3DP-BM741B", + "3DP-CVT701B", + "3DP-CVT711B", + "3DP-M761B", + "3DP-P761B", + "3DP-M781B", + "3DP-P781B", + "3DP-M731B", + "3DP-BM731B" + ] + }, + { + "series": [ + "3DP-B701B", + "3DP-B702B", + "3DP-B703B", + "3DP-B704B" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711C", + "3DP-M712C", + "3DP-M711C" + ] + }, + { + "series": [ + "3DP-M741C", + "3DP-BM741C", + "3DP-CVT701C", + "3DP-CVT711C", + "3DP-M761C", + "3DP-P761C", + "3DP-M781C", + "3DP-P781C", + "3DP-M731C", + "3DP-BM731C" + ] + }, + { + "series": [ + "3DP-B701C", + "3DP-B702C", + "3DP-B703C", + "3DP-B704C" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711D", + "3DP-M712D", + "3DP-M711D" + ] + }, + { + "series": [ + "3DP-M741D", + "3DP-BM741D", + "3DP-CVT701D", + "3DP-CVT711D", + "3DP-M761D", + "3DP-P761D", + "3DP-M781D", + "3DP-P781D", + "3DP-M731D", + "3DP-BM731D" + ] + }, + { + "series": [ + "3DP-B701D", + "3DP-B702D", + "3DP-B703D", + "3DP-B704D" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711E", + "3DP-M712E", + "3DP-M711E" + ] + }, + { + "series": [ + "3DP-M741E", + "3DP-BM741E", + "3DP-CVT701E", + "3DP-CVT711E", + "3DP-M761E", + "3DP-P761E", + "3DP-M781E", + "3DP-P781E", + "3DP-M731E", + "3DP-BM731E" + ] + }, + { + "series": [ + "3DP-B701E", + "3DP-B702E", + "3DP-B703E", + "3DP-B704E" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711F", + "3DP-M712F", + "3DP-M711F" + ] + }, + { + "series": [ + "3DP-M741F", + "3DP-BM741F", + "3DP-CVT701F", + "3DP-CVT711F", + "3DP-M761F", + "3DP-P761F", + "3DP-M781F", + "3DP-P781F", + "3DP-M731F", + "3DP-BM731F" + ] + }, + { + "series": [ + "3DP-B701F", + "3DP-B702F", + "3DP-B703F", + "3DP-B704F" + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + "3FO-FCV501", + { + "parallel_no_redundancy": [ + { + "series": [ + "3DM-B701A", + "3DM-B702A", + "3DM-B703A", + "3DM-B704A" + ] + }, + { + "series": [ + "3DM-B701C", + "3DM-B702C", + "3DM-B703C", + "3DM-B704C" + ] + }, + { + "series": [ + "3DM-B701E", + "3DM-B702E", + "3DM-B703E", + "3DM-B704E" + ] + } + ] + } + ] + }, + { + "series": [ + "3BDW-H601", + "3BDW-T601", + "3BDW-H611", + "3BDW-H621", + "3BDW-H631", + "3BDW-H641", + { + "parallel_no_redundancy": [ + { + "series": [ + "3BDW-M521A", + "3BDW-P521A", + "3BDW-H521A" + ] + }, + { + "series": [ + "3BDW-M521B", + "3BDW-P521B", + "3BDW-H521B" + ] + } + ] + } + ] + }, + "3BOL-H501", + { + "series": [ + "3MS-HV011", + "3MS-HV012", + "3MS-HV013", + "3MS-HV014", + { + "parallel_no_redundancy": [ + "3MS-HV010A", + "3MS-HV010B" + ] + }, + { + "parallel_no_redundancy": [ + "3MS-W001A", + "3MS-W001B" + ] + }, + "3MS-W004" + ] + }, + { + "series": [ + "3BSS-H611", + { + "parallel_no_redundancy": [ + "3ATT-N501A", + "3ATT-N501B" + ] + }, + "3BSS-H621", + { + "parallel_no_redundancy": [ + "3ATT-N502A", + "3ATT-N502B" + ] + }, + "3BSS-H631" + ] + }, + "3CRH-W002", + { + "series": [ + "3BSS-H611", + { + "parallel_no_redundancy": [ + "3ATT-N501A", + "3ATT-N501B" + ] + }, + "3BSS-H621", + { + "parallel_no_redundancy": [ + "3ATT-N502A", + "3ATT-N502B" + ] + }, + "3BSS-H631" + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + "3HRH-HV020A", + "3HRH-HV020B" + ] + }, + "3ATT-N561", + "3ATT-N571", + "3ATT-N581" + ] + }, + { + "series": [ + "3AI-SFV501", + { + "parallel_no_redundancy": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501H", + "3AI-Y501H", + "3AI-M502H", + "3AI-Y502H", + "3AI-M503H", + "3AI-Y503H", + "3AI-M504H", + "3AI-Y504H", + "3AI-M505H", + "3AI-Y505H", + "3AI-M506H", + "3AI-Y506H" + ] + }, + { + "series": [ + "3AI-M501I", + "3AI-Y501I", + "3AI-M502I", + "3AI-Y502I", + "3AI-M503I", + "3AI-Y503I", + "3AI-M504I", + "3AI-Y504I", + "3AI-M505I", + "3AI-Y505I", + "3AI-M506I", + "3AI-Y506I" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501L", + "3AI-Y501L", + "3AI-M503L", + "3AI-Y503L", + "3AI-M504L", + "3AI-Y504L", + "3AI-M505L", + "3AI-Y505L" + ] + }, + { + "series": [ + "3AI-M502L", + "3AI-Y502L", + "3AI-M506L", + "3AI-Y506L", + "3AI-M507L", + "3AI-Y507L", + "3AI-M508L", + "3AI-Y508L", + "3AI-M509L", + "3AI-Y509L", + "3AI-M510L", + "3AI-Y510L" + ] + }, + { + "series": [ + "3AI-M511L", + "3AI-Y511L", + "3AI-M512L", + "3AI-Y512L", + "3AI-M513L", + "3AI-Y513L", + "3AI-M514L", + "3AI-Y514L", + "3AI-M515L", + "3AI-Y515L", + "3AI-M516L", + "3AI-Y516L" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501R", + "3AI-Y501R", + "3AI-M503R", + "3AI-Y503R", + "3AI-M504R", + "3AI-Y504R", + "3AI-M505R", + "3AI-Y505R" + ] + }, + { + "series": [ + "3AI-M502R", + "3AI-Y502R", + "3AI-M506R", + "3AI-Y506R", + "3AI-M507R", + "3AI-Y507R", + "3AI-M508R", + "3AI-Y508R", + "3AI-M509R", + "3AI-Y509R", + "3AI-M510R", + "3AI-Y510R" + ] + }, + { + "series": [ + "3AI-M511R", + "3AI-Y511R", + "3AI-M512R", + "3AI-Y512R", + "3AI-M513R", + "3AI-Y513R", + "3AI-M514R", + "3AI-Y514R", + "3AI-M515R", + "3AI-Y515R", + "3AI-M516R", + "3AI-Y516R" + ] + } + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501A", + "3AI-Y501A", + "3AI-M502A", + "3AI-Y502A", + "3AI-M503A", + "3AI-Y503A", + "3AI-M504A", + "3AI-Y504A", + "3AI-M505A", + "3AI-Y505A" + ] + }, + { + "series": [ + "3AI-M501B", + "3AI-Y501B", + "3AI-M502B", + "3AI-Y502B", + "3AI-M503B", + "3AI-Y503B", + "3AI-M504B", + "3AI-Y504B" + ] + }, + { + "series": [ + "3AI-M501C", + "3AI-Y501C", + "3AI-M502C", + "3AI-Y502C", + "3AI-M503C", + "3AI-Y503C", + "3AI-M504C", + "3AI-Y504C", + "3AI-M505C", + "3AI-Y505C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M506A", + "3AI-Y506A", + "3AI-M507A", + "3AI-Y507A", + "3AI-M508A", + "3AI-Y508A", + "3AI-M509A", + "3AI-Y509A" + ] + }, + { + "series": [ + "3AI-M505B", + "3AI-Y505B", + "3AI-M506B", + "3AI-Y506B", + "3AI-M507B", + "3AI-Y507B" + ] + }, + { + "series": [ + "3AI-M506C", + "3AI-Y506C", + "3AI-M507C", + "3AI-Y507C", + "3AI-M508C", + "3AI-Y508C", + "3AI-M509C", + "3AI-Y509C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M515A", + "3AI-Y515A", + "3AI-M516A", + "3AI-Y516A", + "3AI-M517A", + "3AI-Y517A", + "3AI-M518A", + "3AI-Y518A" + ] + }, + { + "series": [ + "3AI-M512B", + "3AI-Y512B", + "3AI-M513B", + "3AI-Y513B", + "3AI-M514B", + "3AI-Y514B" + ] + }, + { + "series": [ + "3AI-M515C", + "3AI-Y515C", + "3AI-M516C", + "3AI-Y516C", + "3AI-M517C", + "3AI-Y517C", + "3AI-M518C", + "3AI-Y518C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M510A", + "3AI-Y510A", + "3AI-M511A", + "3AI-Y511A", + "3AI-M512A", + "3AI-Y512A", + "3AI-M513A", + "3AI-Y513A", + "3AI-M514A", + "3AI-Y514A" + ] + }, + { + "series": [ + "3AI-M508B", + "3AI-Y508B", + "3AI-M509B", + "3AI-Y509B", + "3AI-M510B", + "3AI-Y510B", + "3AI-M511B", + "3AI-Y511B" + ] + }, + { + "series": [ + "3AI-M510C", + "3AI-Y510C", + "3AI-M511C", + "3AI-Y511C", + "3AI-M512C", + "3AI-Y512C", + "3AI-M513C", + "3AI-Y513C", + "3AI-M514C", + "3AI-Y514C" + ] + } + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M551A", + "3AI-Y551A" + ] + }, + { + "series": [ + "3AI-M551B", + "3AI-Y551B" + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOS-M010A", + "3LOS-P010A" + ] + }, + { + "series": [ + "3LOS-M010B", + "3LOS-P010B" + ] + } + ] + }, + { + "series": [ + "3LOS-M050", + "3LOS-P050" + ] + } + ] + }, + { + "parallel": [ + "3LOS-H010A", + "3LOS-H010B" + ] + }, + "3LOS-M080", + "3LOS-P080", + { + "parallel": [ + "3LOS-S010A", + "3LOS-S010B" + ] + }, + "3LOS-PF080", + { + "parallel": [ + { + "series": [ + "3LOS-M020A", + "3LOS-F020A" + ] + }, + { + "series": [ + "3LOS-M020B", + "3LOS-F020B" + ] + } + ] + }, + "3LOS-ME020", + "3LOS-M060", + "3LOS-P060" + ] + }, + { + "series": [ + "3EHS-Z010", + { + "parallel": [ + { + "series": [ + "3EHS-M010A", + "3EHS-P010A" + ] + }, + { + "series": [ + "3EHS-M010B", + "3EHS-P010B" + ] + } + ] + }, + { + "parallel": [ + "3EHS-T090A", + "3EHS-T090B" + ] + }, + { + "parallel": [ + { + "series": [ + "3EHS-M015A", + "3EHS-F015A", + "3EHS-H010A" + ] + }, + { + "series": [ + "3EHS-M015B", + "3EHS-F015B", + "3EHS-H010B" + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3MT-ST010", + "3MT-ST020" + ] + }, + { + "series": [ + "3HPB-PCV010", + "EHB (BYPASS VALVES)" + ] + } + ] + }, + "3MT-ST030A", + "3MT-ST030B", + "3MT-AU040", + "3AS-T010", + "3AS-BS010", + { + "series": [ + "3SCW-PF001", + { + "parallel": [ + { + "series": [ + "3SCW-H023A", + "3SCW-M001A", + "3SCW-P001A" + ] + }, + { + "series": [ + "3SCW-H023B", + "3SCW-M001B", + "3SCW-P001B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "parallel": [ + { + "series": [ + "3CW-M020A", + "3CW-P020A" + ] + }, + { + "series": [ + "3CW-M020B", + "3CW-P020B" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3CW-M010A", + "3CW-P010A" + ] + }, + { + "series": [ + "3CW-M010B", + "3CW-P010B" + ] + } + ] + }, + { + "parallel": [ + "3CW-P011A", + "3CW-P011B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3SCW-PF001", + { + "parallel": [ + { + "series": [ + "3SCW-H023A", + "3SCW-M001A", + "3SCW-P001A" + ] + }, + { + "series": [ + "3SCW-H023B", + "3SCW-M001B", + "3SCW-P001B" + ] + } + ] + } + ] + }, + "3GEN-GM001", + { + "series": [ + "3SO-T116", + "3SO-T114", + "3SO-T113", + { + "parallel": [ + { + "series": [ + "3SO-M001", + "3SO-P001" + ] + }, + { + "series": [ + "3SO-M002", + "3SO-P002" + ] + } + ] + } + ] + }, + { + "series": [ + "3GEN-EXC008", + "3GEN-EXC009", + "3GEN-EXC004", + "3GEN-EXC005", + "3GEN-GM001", + "3GEN-Z012", + { + "parallel_no_redundancy": [ + { + "series": [ + "3GEN-M101A", + "3GEN-M102A", + "3GEN-M103A" + ] + }, + { + "series": [ + "3GEN-M101B", + "3GEN-M102B", + "3GEN-M103B" + ] + } + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + "3GEN-M201A", + "3GEN-M202A", + "3GEN-M203A", + "3GEN-M204A", + "3GEN-M205A" + ] + }, + "3GEN-M206A" + ] + } + ] + }, + { + "series": [ + "3GMC-Z002", + "3GMC-Z001", + "3GMC-Z003", + { + "parallel_no_redundancy": [ + { + "series": [ + "3GEN-M211A", + "3GEN-M211B", + "3GEN-M211C" + ] + }, + { + "series": [ + "3GEN-M212A", + "3GEN-M212B", + "3GEN-M212C" + ] + }, + { + "series": [ + "3GEN-M213A", + "3GEN-M213B", + "3GEN-M213C" + ] + }, + { + "series": [ + "3GEN-M214A", + "3GEN-M214B", + "3GEN-M214C" + ] + } + ] + } + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3TR-TF002A", + "3TR-Z003A" + ] + }, + { + "series": [ + "3TR-TF002B", + "3TR-Z003B" + ] + } + ] + }, + "3TR-TF001", + "3TR-TF005", + { + "parallel_no_redundancy": [ + "3TR-F301", + "3TR-F302", + "3TR-F303", + "3TR-F304", + "3TR-F305", + "3TR-F306", + "3TR-F307", + "3TR-F308", + "3TR-F309", + "3TR-F310", + "3TR-F311", + "3TR-F312", + "3TR-F313", + "3TR-F314" + ] + } + ] + } + ] + }, + { + "series": [ + "3CO-M001", + { + "parallel": [ + { + "series": [ + "3CO-M001A", + "3CO-P001A" + ] + }, + { + "series": [ + "3CO-M001B", + "3CO-P001B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3CAE-M010A", + "3CAE-P010A", + "3CAE-H010A" + ] + }, + { + "series": [ + "3CAE-M010B", + "3CAE-P010B", + "3CAE-H010B" + ] + } + ] + }, + "3CO-FCV001", + "3CO-H010", + "3CO-H020", + "3CO-H030" + ] + }, + { + "series": [ + "3CCCW-T010", + "3CCCW-M090", + "3CCCW-P090", + { + "parallel": [ + { + "series": [ + "3CCCW-M010A", + "3CCCW-P010A", + "3CCCW-H010A" + ] + }, + { + "series": [ + "3CCCW-M010B", + "3CCCW-P010B", + "3CCCW-H010B" + ] + } + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + { + "series": [ + "3AF-FCV501A", + "3AF-M501A", + "3AF-F501A" + ] + }, + { + "series": [ + "3AL-PCV501A", + "3AL-M501A", + "3AL-F501A" + ] + }, + "AFG_RAPH A", + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3ESP-CAB801", + "3ESP-CAB821", + "A1-FIELD 1", + "A1-FIELD 2", + "A1-FIELD 3", + "A1-FIELD 4" + ] + }, + { + "series": [ + "3ESP-CAB802", + "3ESP-CAB822", + "A2-FIELD 1", + "A2-FIELD 2", + "A2-FIELD 3", + "A2-FIELD 4" + ] + } + ] + }, + "3GG-AX801A" + ] + }, + { + "series": [ + "3GG-M810A", + "3GG-F801A", + { + "parallel": [ + "3GG-F802A", + "3GG-F802B" + ] + }, + "3GG-M801A", + { + "parallel": [ + "3GG-F803A", + "3GG-F803B" + ] + }, + { + "parallel": [ + "3GG-P801A", + "3GG-P801B" + ] + } + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + "3GG-F853A", + "3GG-F853B", + "3GG-F853C", + "3GG-F853D" + ] + }, + "3GG-M851", + "3GG-M851A", + "3GG-F851", + "3GG-H877", + "3GG-F865A", + "3GG-M870A", + "3GG-F870A", + { + "parallel": [ + { + "series": [ + "3GG-M875A", + "3GG-F875A" + ] + }, + { + "series": [ + "3GG-M875B", + "3GG-F875B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3GG-M877A", + "3GG-P877A" + ] + }, + { + "series": [ + "3GG-M877B", + "3GG-P877B" + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3AF-FCV501B", + "3AF-M501B", + "3AF-F501B" + ] + }, + { + "series": [ + "3AL-PCV501B", + "3AL-M501B", + "3AL-F501B" + ] + }, + { + "series": [ + "3AH-AJ501B", + "3AH-M531B", + "3AH-P531B", + "3AH-H531B", + "3AH-M502B", + "3AH-M501B", + "3AH-H501B" + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3ESP-CAB803", + "3ESP-CAB823", + "B1-FIELD 1", + "B1-FIELD 2", + "B1-FIELD 3", + "B1-FIELD 4" + ] + }, + { + "series": [ + "3ESP-CAB804", + "3ESP-CAB824", + "B2-FIELD 1", + "B2-FIELD 2", + "B2-FIELD 3", + "B2-FIELD 4" + ] + } + ] + }, + "3GG-AX801B" + ] + }, + { + "series": [ + "3GG-M810B", + "3GG-F801B", + { + "parallel": [ + "3GG-F804A", + "3GG-F804B" + ] + }, + { + "parallel": [ + "3GG-F805A", + "3GG-F805B" + ] + }, + "3GG-M801B", + "3GG-T801B", + { + "parallel": [ + "3GG-P802A", + "3GG-P802B" + ] + } + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + "3GG-F854A", + "3GG-F854B", + "3GG-F854C", + "3GG-F854D" + ] + }, + "3GG-M852", + "3GG-M851B", + "3GG-F852", + "3GG-H878", + "3GG-F865B", + "3GG-M870B", + "3GG-F870B", + { + "parallel": [ + { + "series": [ + "3GG-M880A", + "3GG-F880A" + ] + }, + { + "series": [ + "3GG-M880B", + "3GG-F880B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3GG-M878A", + "3GG-P878A" + ] + }, + { + "series": [ + "3GG-M878B", + "3GG-P878B" + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + "3BAD-PAN501", + "3BAD-M531", + "3BAD-AGS31", + "3BAD-PN501", + { + "parallel": [ + { + "series": [ + "3BAD-H511A", + "3BAD-M511A", + "3BAD-P511A" + ] + }, + { + "series": [ + "3BAD-H511B", + "3BAD-M511B", + "3BAD-P511B" + ] + } + ] + }, + "3BAD-M501", + "3BAD-CV501", + "3BAD-T531", + "3BAD-T532", + { + "parallel": [ + { + "series": [ + "3BAD-M521A", + "3BAD-P521A" + ] + }, + { + "series": [ + "3BAD-M521B", + "3BAD-P521B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + { + "parallel_no_redundancy": [ + "3APC-CB811", + "3APC-CB812", + "3APC-CB813", + "3APC-CB814" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV001A", + "3APC-LV001B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV501A", + "3APC-LV501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV810A", + "3APC-LV810B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV811P1", + "3APC-LV811P2", + "3APC-LV811P3", + "3APC-LV811P4", + "3APC-LV811P5", + "3APC-LV811P21" + ] + }, + "3APC-LV851", + "3APC-MCC002", + { + "parallel_no_redundancy": [ + "3APC-MCC501A", + "3APC-MCC501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-MCC502A", + "3APC-MCC502B", + "3APC-MCC502C", + "3APC-MCC502D", + "3APC-MCC502E", + "3APC-MCC502F" + ] + }, + "3APC-MCC510", + "3APC-MCC851", + { + "parallel_no_redundancy": [ + "3APC-PD501A", + "3APC-PD501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-PD901", + "3APC-PD902" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-PD921", + "3APC-PD922" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF001A", + "3APC-TF001B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF501A", + "3APC-TF501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF502A", + "3APC-TF502B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF810A", + "3APC-TF810B" + ] + }, + "3APC-TF811", + "3APC-TF851" + ] + }, + { + "series": [ + "3APE-CAB552", + { + "parallel_no_redundancy": [ + "3APE-MV001A", + "3APE-MV001B" + ] + }, + { + "parallel_no_redundancy": [ + "3APE-MV002A", + "3APE-MV002B" + ] + }, + { + "parallel_no_redundancy": [ + "3APE-MV003A", + "3APE-MV003B", + "3APE-MV003C", + "3APE-MV003D" + ] + }, + { + "parallel_no_redundancy": [ + "3APE-MV004A", + "3APE-MV004B" + ] + }, + "3APE-MV851", + "3APE-MV852", + { + "parallel_no_redundancy": [ + "3APE-TF002A", + "3APE-TF002B" + ] + }, + "3APE-TF852", + { + "parallel_no_redundancy": [ + "3APE-Z005A", + "3APE-Z005B" + ] + } + ] + }, + { + "series": [ + "3EG-E001", + "3EG-T003" + ] + } + ] + }, + { + "series": [ + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3ABS-M879A", + "3ABS-AG879A" + ] + }, + { + "series": [ + "3ABS-M879B", + "3ABS-AG879B" + ] + }, + { + "series": [ + "3ABS-M879C", + "3ABS-AG879C" + ] + }, + { + "series": [ + "3ABS-M879D", + "3ABS-AG879D" + ] + }, + { + "series": [ + "3ABS-M879E", + "3ABS-AG879E" + ] + } + ] + }, + "3ABS-T931", + "3ABS-M931", + "3ABS-AG931", + { + "parallel": [ + { + "series": [ + "3ABS-M932A", + "3ABS-P932A" + ] + }, + { + "series": [ + "3ABS-M932B", + "3ABS-P932B" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3ABS-M888A", + "3ABS-P888A" + ] + }, + { + "series": [ + "3ABS-M888B", + "3ABS-P888B" + ] + }, + { + "series": [ + "3ABS-M888C", + "3ABS-P888C" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3ABS-M910A", + "3ABS-P910A" + ] + }, + { + "series": [ + "3ABS-M910B", + "3ABS-P910B" + ] + } + ] + }, + "3ABS-ABT858" + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + { + "parallel": [ + { + "series": [ + "00CHA-SU801A", + "00CHA-CV801A", + "00CHA-MS801A", + "00CHA-BW802A", + "00CHA-CV802A", + "00CHA-CV803A", + "00CHA-SWT801" + ] + }, + { + "series": [ + "00CHA-SU801B", + "00CHA-CV801B", + "00CHA-MS801B", + "00CHA-BW802B", + "00CHA-CV802B", + "00CHA-CV803B", + "00CHA-SWT802" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00CHA-CV805A", + "00CHB-SKR805A" + ] + }, + { + "series": [ + "00CHA-CV804", + "00CHA-CV805B", + "00CHB-SKR805B" + ] + } + ] + }, + "COAL YARD" + ] + }, + { + "series": [ + "BOOSTER", + "FILTER", + "TRAFO", + "CELL", + "SUMP PUMP" + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M110A", + "00RO-P110A" + ] + }, + { + "series": [ + "00RO-M110B", + "00RO-P110B" + ] + }, + { + "series": [ + "00RO-M110C", + "00RO-P110C" + ] + }, + { + "series": [ + "00RO-M110D", + "00RO-P110D" + ] + } + ] + }, + "00RO-T120", + "FeCl3 DOSING", + "ANIONIC POLYMER DOSING", + "CLEAR WATER", + "CLARIFIER", + "00RO-T170", + { + "parallel": [ + { + "series": [ + "00RO-M195A", + "00RO-P195A" + ] + }, + { + "series": [ + "00RO-M195B", + "00RO-P195B" + ] + } + ] + }, + "00RO-T320", + "00RO-T130", + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M126A", + "00RO-P126A" + ] + }, + { + "series": [ + "00RO-M126B", + "00RO-P126B" + ] + }, + { + "series": [ + "00RO-M126C", + "00RO-P126C" + ] + }, + { + "series": [ + "00RO-M126D", + "00RO-P126D" + ] + } + ] + }, + "NaOCL DOSING", + { + "parallel": [ + { + "series": [ + "00RO-F161A", + "00RO-M152A", + "00RO-F152A" + ] + }, + { + "series": [ + "00RO-F161B", + "00RO-M152B", + "00RO-F152B" + ] + } + ] + }, + "00RO-T150", + { + "parallel": [ + { + "series": [ + "00RO-M150A", + "00RO-P150A" + ] + }, + { + "series": [ + "00RO-M150B", + "00RO-P150B" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M160A", + "00RO-P160A" + ] + }, + { + "series": [ + "00RO-M160B", + "00RO-P160B" + ] + }, + { + "series": [ + "00RO-M160C", + "00RO-P160C" + ] + }, + { + "series": [ + "00RO-M160D", + "00RO-P160D" + ] + } + ] + }, + "H2SO4 DOSING", + "SBS DOSING", + "ANTI SCALANT DOSING", + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M170A", + "00RO-P170A", + "00RO-T160A", + "00RO-Z110A" + ] + }, + { + "series": [ + "00RO-M170B", + "00RO-P170B", + "00RO-T160B", + "00RO-Z110B" + ] + }, + { + "series": [ + "00RO-M170C", + "00RO-P170C", + "00RO-T160C", + "00RO-Z110C" + ] + }, + { + "series": [ + "00RO-M170D", + "00RO-P170D", + "00RO-T160D", + "00RO-Z110D" + ] + } + ] + }, + "NaOH DOSING", + "00RO-H181", + "00RO-AG181", + "00RO-M181", + { + "parallel": [ + { + "series": [ + "00RO-M180A", + "00RO-P180A" + ] + }, + { + "series": [ + "00RO-M180B", + "00RO-P180B" + ] + } + ] + }, + "header 3", + { + "parallel": [ + { + "series": [ + "00RO-M340A", + "00RO-P340A" + ] + }, + { + "series": [ + "00RO-M340B", + "00RO-P340B" + ] + } + ] + }, + "00RO-T162", + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M190A", + "00RO-P190A" + ] + }, + { + "series": [ + "00RO-M190B", + "00RO-P190B" + ] + } + ] + } + ] + }, + "WTP", + { + "series": [ + { + "series": [ + { + "series": [ + "00DS-T888", + "00DS-M888", + "00DS-AG888", + { + "parallel": [ + { + "series": [ + "00DS-M883A", + "00DS-P883A" + ] + }, + { + "series": [ + "00DS-M883B", + "00DS-P883B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "parallel": [ + "00DS-CY851A", + "00DS-CY851B" + ] + }, + "00DS-T851", + "00DS-M851", + "00DS-AG851", + { + "parallel": [ + { + "series": [ + "00DS-M860A", + "00DS-P860A" + ] + }, + { + "series": [ + "00DS-M860B", + "00DS-P860B" + ] + } + ] + }, + "00DS-T852", + "00DS-CY865" + ] + }, + { + "parallel": [ + { + "series": [ + "00DS-T901", + "00DS-M900", + "00DS-M901", + "00DS-P901", + "00DS-T900", + { + "parallel": [ + { + "series": [ + "00DS-M902A", + "00DS-P902A" + ] + }, + { + "series": [ + "00DS-M902B", + "00DS-P902B" + ] + } + ] + } + ] + }, + { + "series": [ + "00DS-T936", + "00DS-M935", + "00DS-M936", + "00DS-P936", + "00DS-T935", + { + "parallel": [ + { + "series": [ + "00DS-M937A", + "00DS-P937A" + ] + }, + { + "series": [ + "00DS-M937B", + "00DS-P937B" + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00OA-M851A", + "00OA-F851A" + ] + }, + { + "series": [ + "00OA-M851B", + "00OA-F851B" + ] + }, + { + "series": [ + "00OA-M851C", + "00OA-F851C" + ] + } + ] + }, + { + "series": [ + "00LSH-SU801", + "00LSH-HO801", + "00LSH-BW801", + "00LSH-COG801", + "00LSH-M851", + "00LSH-VFD801", + "00LSH-VI851", + "00LSH-M853A", + "00LSH-CR853", + "00LSH-CV801", + "00LSH-M901", + "00LSH-F901", + "00LSH-DC901", + "00LSH-M5801", + "00LSH-M852", + "00LSH-CV852", + "00LSH-HO851" + ] + }, + { + "series": [ + "00RP-T985", + "00RP-M985", + "00RP-AG985", + { + "parallel": [ + { + "series": [ + "00RP-M986A", + "00RP-P986A" + ] + }, + { + "series": [ + "00RP-M986B", + "00RP-P986B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00RP-BM871", + { + "parallel_no_redundancy": [ + "00RP-M871A", + "00RP-M871B" + ] + } + ] + }, + { + "series": [ + "00RP-BM911", + { + "parallel": [ + "00RP-M911A", + "00RP-M911B" + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00RP-CY871", + "00RP-DX897", + { + "parallel": [ + "00RP-F991A", + "00RP-F991B" + ] + }, + "00RP-T885", + "00RP-M885", + "00RP-AG885", + "00RP-P992", + { + "parallel": [ + { + "series": [ + "00RP-P991A", + "00RP-M891A", + "00RP-P891A" + ] + }, + { + "series": [ + "00RP-P991B", + "00RP-M891B", + "00RP-P891B" + ] + } + ] + } + ] + }, + { + "series": [ + "00RP-CY911", + "00RP-DX837", + { + "parallel": [ + "00RP-F995A", + "00RP-F995B" + ] + }, + "00RP-F995A", + "00RP-T925", + "00RP-M925", + "00RP-AG925", + "00RP-P995", + { + "parallel": [ + { + "series": [ + "00RP-P995A", + "00RP-M931A", + "00RP-P931A" + ] + }, + { + "series": [ + "00RP-P995B", + "00RP-M931B", + "00RP-P931B" + ] + } + ] + } + ] + } + ] + }, + "00RP-T970", + "00RP-M970", + "00RP-AG970", + { + "parallel": [ + { + "series": [ + "00RP-M972A", + "00RP-P972A" + ] + }, + { + "series": [ + "00RP-M972B", + "00RP-P972B" + ] + } + ] + }, + "00RP-T950", + "00RP-M950", + "00RP-AG950", + { + "parallel": [ + { + "series": [ + "00RP-M952A", + "00RP-P952A" + ] + }, + { + "series": [ + "00RP-M952B", + "00RP-P952B" + ] + } + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + "00RP-Z851A", + "00RP-Z851B", + "00RP-Z851C" + ] + }, + "00RP-Z851D" + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "00RP-M856A", + "00RP-Z856A" + ] + }, + { + "series": [ + "00RP-M856B", + "00RP-Z856B" + ] + } + ] + }, + "00RP-DX979" + ] + } + ] + }, + { + "series": [ + "00SSB-EV001", + "00SSB-EV002", + "00SSB-EV003", + { + "parallel_no_redundancy": [ + "00SSB-EV004", + "00SSB-EV005" + ] + }, + "00SSB-EV006", + "00SSB-EV007", + "00SSB-EV012", + "00SSB-LA008", + "00SSB-LA009", + "00SSB-TF010" + ] + } + ] + } + ] + }, + "BOL_SB": { + "series": [ + "3AI-SFV501", + { + "parallel_no_redundancy": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501H", + "3AI-Y501H", + "3AI-M502H", + "3AI-Y502H", + "3AI-M503H", + "3AI-Y503H", + "3AI-M504H", + "3AI-Y504H", + "3AI-M505H", + "3AI-Y505H", + "3AI-M506H", + "3AI-Y506H" + ] + }, + { + "series": [ + "3AI-M501I", + "3AI-Y501I", + "3AI-M502I", + "3AI-Y502I", + "3AI-M503I", + "3AI-Y503I", + "3AI-M504I", + "3AI-Y504I", + "3AI-M505I", + "3AI-Y505I", + "3AI-M506I", + "3AI-Y506I" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501L", + "3AI-Y501L", + "3AI-M503L", + "3AI-Y503L", + "3AI-M504L", + "3AI-Y504L", + "3AI-M505L", + "3AI-Y505L" + ] + }, + { + "series": [ + "3AI-M502L", + "3AI-Y502L", + "3AI-M506L", + "3AI-Y506L", + "3AI-M507L", + "3AI-Y507L", + "3AI-M508L", + "3AI-Y508L", + "3AI-M509L", + "3AI-Y509L", + "3AI-M510L", + "3AI-Y510L" + ] + }, + { + "series": [ + "3AI-M511L", + "3AI-Y511L", + "3AI-M512L", + "3AI-Y512L", + "3AI-M513L", + "3AI-Y513L", + "3AI-M514L", + "3AI-Y514L", + "3AI-M515L", + "3AI-Y515L", + "3AI-M516L", + "3AI-Y516L" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501R", + "3AI-Y501R", + "3AI-M503R", + "3AI-Y503R", + "3AI-M504R", + "3AI-Y504R", + "3AI-M505R", + "3AI-Y505R" + ] + }, + { + "series": [ + "3AI-M502R", + "3AI-Y502R", + "3AI-M506R", + "3AI-Y506R", + "3AI-M507R", + "3AI-Y507R", + "3AI-M508R", + "3AI-Y508R", + "3AI-M509R", + "3AI-Y509R", + "3AI-M510R", + "3AI-Y510R" + ] + }, + { + "series": [ + "3AI-M511R", + "3AI-Y511R", + "3AI-M512R", + "3AI-Y512R", + "3AI-M513R", + "3AI-Y513R", + "3AI-M514R", + "3AI-Y514R", + "3AI-M515R", + "3AI-Y515R", + "3AI-M516R", + "3AI-Y516R" + ] + } + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501A", + "3AI-Y501A", + "3AI-M502A", + "3AI-Y502A", + "3AI-M503A", + "3AI-Y503A", + "3AI-M504A", + "3AI-Y504A", + "3AI-M505A", + "3AI-Y505A" + ] + }, + { + "series": [ + "3AI-M501B", + "3AI-Y501B", + "3AI-M502B", + "3AI-Y502B", + "3AI-M503B", + "3AI-Y503B", + "3AI-M504B", + "3AI-Y504B" + ] + }, + { + "series": [ + "3AI-M501C", + "3AI-Y501C", + "3AI-M502C", + "3AI-Y502C", + "3AI-M503C", + "3AI-Y503C", + "3AI-M504C", + "3AI-Y504C", + "3AI-M505C", + "3AI-Y505C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M506A", + "3AI-Y506A", + "3AI-M507A", + "3AI-Y507A", + "3AI-M508A", + "3AI-Y508A", + "3AI-M509A", + "3AI-Y509A" + ] + }, + { + "series": [ + "3AI-M505B", + "3AI-Y505B", + "3AI-M506B", + "3AI-Y506B", + "3AI-M507B", + "3AI-Y507B" + ] + }, + { + "series": [ + "3AI-M506C", + "3AI-Y506C", + "3AI-M507C", + "3AI-Y507C", + "3AI-M508C", + "3AI-Y508C", + "3AI-M509C", + "3AI-Y509C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M515A", + "3AI-Y515A", + "3AI-M516A", + "3AI-Y516A", + "3AI-M517A", + "3AI-Y517A", + "3AI-M518A", + "3AI-Y518A" + ] + }, + { + "series": [ + "3AI-M512B", + "3AI-Y512B", + "3AI-M513B", + "3AI-Y513B", + "3AI-M514B", + "3AI-Y514B" + ] + }, + { + "series": [ + "3AI-M515C", + "3AI-Y515C", + "3AI-M516C", + "3AI-Y516C", + "3AI-M517C", + "3AI-Y517C", + "3AI-M518C", + "3AI-Y518C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M510A", + "3AI-Y510A", + "3AI-M511A", + "3AI-Y511A", + "3AI-M512A", + "3AI-Y512A", + "3AI-M513A", + "3AI-Y513A", + "3AI-M514A", + "3AI-Y514A" + ] + }, + { + "series": [ + "3AI-M508B", + "3AI-Y508B", + "3AI-M509B", + "3AI-Y509B", + "3AI-M510B", + "3AI-Y510B", + "3AI-M511B", + "3AI-Y511B" + ] + }, + { + "series": [ + "3AI-M510C", + "3AI-Y510C", + "3AI-M511C", + "3AI-Y511C", + "3AI-M512C", + "3AI-Y512C", + "3AI-M513C", + "3AI-Y513C", + "3AI-M514C", + "3AI-Y514C" + ] + } + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M551A", + "3AI-Y551A" + ] + }, + { + "series": [ + "3AI-M551B", + "3AI-Y551B" + ] + } + ] + } + ] + } + ] + }, + "BOL_SB_HALF": { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501H", + "3AI-Y501H", + "3AI-M502H", + "3AI-Y502H", + "3AI-M503H", + "3AI-Y503H", + "3AI-M504H", + "3AI-Y504H", + "3AI-M505H", + "3AI-Y505H", + "3AI-M506H", + "3AI-Y506H" + ] + }, + { + "series": [ + "3AI-M501I", + "3AI-Y501I", + "3AI-M502I", + "3AI-Y502I", + "3AI-M503I", + "3AI-Y503I", + "3AI-M504I", + "3AI-Y504I", + "3AI-M505I", + "3AI-Y505I", + "3AI-M506I", + "3AI-Y506I" + ] + } + ] + }, + "BOL_DP_CB A": { + "series": [ + "3DP-B701A", + "3DP-B702A", + "3DP-B703A", + "3DP-B704A" + ] + }, + "BOL_DP_FDR A": { + "series": [ + "3DP-FDR711A", + "3DP-M712A", + "3DP-M711A" + ] + }, + "BOL_SB_WD": { + "parallel_no_redundancy": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501A", + "3AI-Y501A", + "3AI-M502A", + "3AI-Y502A", + "3AI-M503A", + "3AI-Y503A", + "3AI-M504A", + "3AI-Y504A", + "3AI-M505A", + "3AI-Y505A" + ] + }, + { + "series": [ + "3AI-M501B", + "3AI-Y501B", + "3AI-M502B", + "3AI-Y502B", + "3AI-M503B", + "3AI-Y503B", + "3AI-M504B", + "3AI-Y504B" + ] + }, + { + "series": [ + "3AI-M501C", + "3AI-Y501C", + "3AI-M502C", + "3AI-Y502C", + "3AI-M503C", + "3AI-Y503C", + "3AI-M504C", + "3AI-Y504C", + "3AI-M505C", + "3AI-Y505C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M506A", + "3AI-Y506A", + "3AI-M507A", + "3AI-Y507A", + "3AI-M508A", + "3AI-Y508A", + "3AI-M509A", + "3AI-Y509A" + ] + }, + { + "series": [ + "3AI-M505B", + "3AI-Y505B", + "3AI-M506B", + "3AI-Y506B", + "3AI-M507B", + "3AI-Y507B" + ] + }, + { + "series": [ + "3AI-M506C", + "3AI-Y506C", + "3AI-M507C", + "3AI-Y507C", + "3AI-M508C", + "3AI-Y508C", + "3AI-M509C", + "3AI-Y509C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M515A", + "3AI-Y515A", + "3AI-M516A", + "3AI-Y516A", + "3AI-M517A", + "3AI-Y517A", + "3AI-M518A", + "3AI-Y518A" + ] + }, + { + "series": [ + "3AI-M512B", + "3AI-Y512B", + "3AI-M513B", + "3AI-Y513B", + "3AI-M514B", + "3AI-Y514B" + ] + }, + { + "series": [ + "3AI-M515C", + "3AI-Y515C", + "3AI-M516C", + "3AI-Y516C", + "3AI-M517C", + "3AI-Y517C", + "3AI-M518C", + "3AI-Y518C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M510A", + "3AI-Y510A", + "3AI-M511A", + "3AI-Y511A", + "3AI-M512A", + "3AI-Y512A", + "3AI-M513A", + "3AI-Y513A", + "3AI-M514A", + "3AI-Y514A" + ] + }, + { + "series": [ + "3AI-M508B", + "3AI-Y508B", + "3AI-M509B", + "3AI-Y509B", + "3AI-M510B", + "3AI-Y510B", + "3AI-M511B", + "3AI-Y511B" + ] + }, + { + "series": [ + "3AI-M510C", + "3AI-Y510C", + "3AI-M511C", + "3AI-Y511C", + "3AI-M512C", + "3AI-Y512C", + "3AI-M513C", + "3AI-Y513C", + "3AI-M514C", + "3AI-Y514C" + ] + } + ] + } + ] + }, + "ESP_A2": { + "series": [ + "3ESP-CAB802", + "3ESP-CAB822", + "A2-FIELD 1", + "A2-FIELD 2", + "A2-FIELD 3", + "A2-FIELD 4" + ] + }, + "BOL_SB_WD_RIGHT": { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M506A", + "3AI-Y506A", + "3AI-M507A", + "3AI-Y507A", + "3AI-M508A", + "3AI-Y508A", + "3AI-M509A", + "3AI-Y509A" + ] + }, + { + "series": [ + "3AI-M505B", + "3AI-Y505B", + "3AI-M506B", + "3AI-Y506B", + "3AI-M507B", + "3AI-Y507B" + ] + }, + { + "series": [ + "3AI-M506C", + "3AI-Y506C", + "3AI-M507C", + "3AI-Y507C", + "3AI-M508C", + "3AI-Y508C", + "3AI-M509C", + "3AI-Y509C" + ] + } + ] + }, + "AFG_FGD B": { + "series": [ + { + "parallel_no_redundancy": [ + "3GG-F854A", + "3GG-F854B", + "3GG-F854C", + "3GG-F854D" + ] + }, + "3GG-M852", + "3GG-M851B", + "3GG-F852", + "3GG-H878", + "3GG-F865B", + "3GG-M870B", + "3GG-F870B", + { + "parallel": [ + { + "series": [ + "3GG-M880A", + "3GG-F880A" + ] + }, + { + "series": [ + "3GG-M880B", + "3GG-F880B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3GG-M878A", + "3GG-P878A" + ] + }, + { + "series": [ + "3GG-M878B", + "3GG-P878B" + ] + } + ] + } + ] + }, + "AFG_PAF B": { + "series": [ + "3AL-PCV501B", + "3AL-M501B", + "3AL-F501B" + ] + }, + "BOL_DP_MILL F": { + "series": [ + "3DP-M741F", + "3DP-BM741F", + "3DP-CVT701F", + "3DP-CVT711F", + "3DP-M761F", + "3DP-P761F", + "3DP-M781F", + "3DP-P781F", + "3DP-M731F", + "3DP-BM731F" + ] + }, + "BOL_BSS": { + "series": [ + "3BSS-H611", + { + "parallel_no_redundancy": [ + "3ATT-N501A", + "3ATT-N501B" + ] + }, + "3BSS-H621", + { + "parallel_no_redundancy": [ + "3ATT-N502A", + "3ATT-N502B" + ] + }, + "3BSS-H631" + ] + }, + "BOL_MILL A_3DP-BM731A": { + "series": [ + "3DP-BM731A", + "208532" + ] + }, + "BOL_SB_LONG_LEFT": { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501L", + "3AI-Y501L", + "3AI-M503L", + "3AI-Y503L", + "3AI-M504L", + "3AI-Y504L", + "3AI-M505L", + "3AI-Y505L" + ] + }, + { + "series": [ + "3AI-M502L", + "3AI-Y502L", + "3AI-M506L", + "3AI-Y506L", + "3AI-M507L", + "3AI-Y507L", + "3AI-M508L", + "3AI-Y508L", + "3AI-M509L", + "3AI-Y509L", + "3AI-M510L", + "3AI-Y510L" + ] + }, + { + "series": [ + "3AI-M511L", + "3AI-Y511L", + "3AI-M512L", + "3AI-Y512L", + "3AI-M513L", + "3AI-Y513L", + "3AI-M514L", + "3AI-Y514L", + "3AI-M515L", + "3AI-Y515L", + "3AI-M516L", + "3AI-Y516L" + ] + } + ] + }, + "BOL_DP_FDR F": { + "series": [ + "3DP-FDR711F", + "3DP-M712F", + "3DP-M711F" + ] + }, + "- BTG_COND -": { + "series": [ + "3CO-M001", + { + "parallel": [ + { + "series": [ + "3CO-M001A", + "3CO-P001A" + ] + }, + { + "series": [ + "3CO-M001B", + "3CO-P001B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3CAE-M010A", + "3CAE-P010A", + "3CAE-H010A" + ] + }, + { + "series": [ + "3CAE-M010B", + "3CAE-P010B", + "3CAE-H010B" + ] + } + ] + }, + "3CO-FCV001", + "3CO-H010", + "3CO-H020", + "3CO-H030" + ] + }, + "BOL_DP_MILL B": { + "series": [ + "3DP-M741B", + "3DP-BM741B", + "3DP-CVT701B", + "3DP-CVT711B", + "3DP-M761B", + "3DP-P761B", + "3DP-M781B", + "3DP-P781B", + "3DP-M731B", + "3DP-BM731B" + ] + }, + "- BTG_FW -": { + "series": [ + "3FW-H040", + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOT-T010A", + { + "series": [ + "3LOT-H010A", + { + "parallel": [ + "3LOT-T090A", + "3LOT-T100A" + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOT-M010A", + "3LOT-P010A" + ] + }, + { + "series": [ + "3LOT-M020A", + "3LOT-P020A" + ] + } + ] + }, + { + "series": [ + "3LOT-M050A", + "3LOT-P050A" + ] + } + ] + }, + "3LOT-M080A", + "3LOT-P080A", + { + "parallel": [ + "3LOT-S010A", + "3LOT-S020A" + ] + }, + "3LOT-PF080A", + "3LOT-M120A", + "3LOT-F120A", + "3FW-P020A", + "3FW-H011A", + "3FW-H012A", + "3FW-AU030A", + "3FW-P010A", + "3BFT-ST010A", + "3BFT-AU040A" + ] + } + ] + }, + { + "series": [ + "3LOT-T010B", + { + "series": [ + "3LOT-H010B", + { + "parallel": [ + "3LOT-T090B", + "3LOT-T100B" + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOT-M010B", + "3LOT-P010B" + ] + }, + { + "series": [ + "3LOT-M020B", + "3LOT-P020B" + ] + } + ] + }, + { + "series": [ + "3LOT-M050B", + "3LOT-P050B" + ] + } + ] + }, + "3LOT-M080B", + "3LOT-P080B", + { + "parallel": [ + "3LOT-S010B", + "3LOT-S020B" + ] + }, + "3LOT-PF080B", + "3LOT-M120B", + "3LOT-F120B", + "3FW-P020B", + "3FW-H011B", + "3FW-H012B", + "3FW-AU030B", + "3FW-P010B", + "3BFT-ST010B", + "3BFT-AU040B" + ] + } + ] + } + ] + }, + { + "series": [ + "3LOM-M330", + "3LOM-P330", + "3LOM-H310", + "3LOM-P310", + "3LOM-H370", + "3LOM-P370", + "3FW-P310", + "3FW-M321", + "3FW-M320", + "3FW-AU330", + "3FW-H301", + "3FW-H302", + "3FW-P300" + ] + } + ] + }, + "3FW-H070", + "3FW-H060", + "3FW-H050" + ] + }, + "FGD_RP_WET MILL B": { + "series": [ + "00RP-BM911", + { + "parallel": [ + "00RP-M911A", + "00RP-M911B" + ] + } + ] + }, + "AFG_IDF A": { + "series": [ + "3GG-M810A", + "3GG-F801A", + { + "parallel": [ + "3GG-F802A", + "3GG-F802B" + ] + }, + "3GG-M801A", + { + "parallel": [ + "3GG-F803A", + "3GG-F803B" + ] + }, + { + "parallel": [ + "3GG-P801A", + "3GG-P801B" + ] + } + ] + }, + "BOL_DP_CB B": { + "series": [ + "3DP-B701B", + "3DP-B702B", + "3DP-B703B", + "3DP-B704B" + ] + }, + "GEN_GEN": { + "series": [ + "3GEN-EXC008", + "3GEN-EXC009", + "3GEN-EXC004", + "3GEN-EXC005", + "3GEN-GM001", + "3GEN-Z012", + { + "parallel_no_redundancy": [ + { + "series": [ + "3GEN-M101A", + "3GEN-M102A", + "3GEN-M103A" + ] + }, + { + "series": [ + "3GEN-M101B", + "3GEN-M102B", + "3GEN-M103B" + ] + } + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + "3GEN-M201A", + "3GEN-M202A", + "3GEN-M203A", + "3GEN-M204A", + "3GEN-M205A" + ] + }, + "3GEN-M206A" + ] + } + ] + }, + "AFG_RAPH B": { + "series": [ + "3AH-AJ501B", + "3AH-M531B", + "3AH-P531B", + "3AH-H531B", + "3AH-M502B", + "3AH-M501B", + "3AH-H501B" + ] + }, + "BOL_DP_MILL C": { + "series": [ + "3DP-M741C", + "3DP-BM741C", + "3DP-CVT701C", + "3DP-CVT711C", + "3DP-M761C", + "3DP-P761C", + "3DP-M781C", + "3DP-P781C", + "3DP-M731C", + "3DP-BM731C" + ] + }, + "TUR_GSS": { + "series": [ + "3SCW-PF001", + { + "parallel": [ + { + "series": [ + "3SCW-H023A", + "3SCW-M001A", + "3SCW-P001A" + ] + }, + { + "series": [ + "3SCW-H023B", + "3SCW-M001B", + "3SCW-P001B" + ] + } + ] + } + ] + }, + "FW_MBFP": { + "series": [ + "3LOM-M330", + "3LOM-P330", + "3LOM-H310", + "3LOM-P310", + "3LOM-H370", + "3LOM-P370", + "3FW-P310", + "3FW-M321", + "3FW-M320", + "3FW-AU330", + "3FW-H301", + "3FW-H302", + "3FW-P300" + ] + }, + "BOL_SB_WD_FRONT": { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501A", + "3AI-Y501A", + "3AI-M502A", + "3AI-Y502A", + "3AI-M503A", + "3AI-Y503A", + "3AI-M504A", + "3AI-Y504A", + "3AI-M505A", + "3AI-Y505A" + ] + }, + { + "series": [ + "3AI-M501B", + "3AI-Y501B", + "3AI-M502B", + "3AI-Y502B", + "3AI-M503B", + "3AI-Y503B", + "3AI-M504B", + "3AI-Y504B" + ] + }, + { + "series": [ + "3AI-M501C", + "3AI-Y501C", + "3AI-M502C", + "3AI-Y502C", + "3AI-M503C", + "3AI-Y503C", + "3AI-M504C", + "3AI-Y504C", + "3AI-M505C", + "3AI-Y505C" + ] + } + ] + }, + "FGD_RP_MILL B": { + "series": [ + "00RP-CY911", + "00RP-DX837", + { + "parallel": [ + "00RP-F995A", + "00RP-F995B" + ] + }, + "00RP-F995A", + "00RP-T925", + "00RP-M925", + "00RP-AG925", + "00RP-P995", + { + "parallel": [ + { + "series": [ + "00RP-P995A", + "00RP-M931A", + "00RP-P931A" + ] + }, + { + "series": [ + "00RP-P995B", + "00RP-M931B", + "00RP-P931B" + ] + } + ] + } + ] + }, + "- CMN_CHS -": { + "series": [ + { + "parallel": [ + { + "series": [ + "00CHA-SU801A", + "00CHA-CV801A", + "00CHA-MS801A", + "00CHA-BW802A", + "00CHA-CV802A", + "00CHA-CV803A", + "00CHA-SWT801" + ] + }, + { + "series": [ + "00CHA-SU801B", + "00CHA-CV801B", + "00CHA-MS801B", + "00CHA-BW802B", + "00CHA-CV802B", + "00CHA-CV803B", + "00CHA-SWT802" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00CHA-CV805A", + "00CHB-SKR805A" + ] + }, + { + "series": [ + "00CHA-CV804", + "00CHA-CV805B", + "00CHB-SKR805B" + ] + } + ] + }, + "COAL YARD" + ] + }, + "- BTG_ASH -": { + "series": [ + "3BAD-PAN501", + "3BAD-M531", + "3BAD-AGS31", + "3BAD-PN501", + { + "parallel": [ + { + "series": [ + "3BAD-H511A", + "3BAD-M511A", + "3BAD-P511A" + ] + }, + { + "series": [ + "3BAD-H511B", + "3BAD-M511B", + "3BAD-P511B" + ] + } + ] + }, + "3BAD-M501", + "3BAD-CV501", + "3BAD-T531", + "3BAD-T532", + { + "parallel": [ + { + "series": [ + "3BAD-M521A", + "3BAD-P521A" + ] + }, + { + "series": [ + "3BAD-M521B", + "3BAD-P521B" + ] + } + ] + } + ] + }, + "BOL_SB_WD_REAR": { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M510A", + "3AI-Y510A", + "3AI-M511A", + "3AI-Y511A", + "3AI-M512A", + "3AI-Y512A", + "3AI-M513A", + "3AI-Y513A", + "3AI-M514A", + "3AI-Y514A" + ] + }, + { + "series": [ + "3AI-M508B", + "3AI-Y508B", + "3AI-M509B", + "3AI-Y509B", + "3AI-M510B", + "3AI-Y510B", + "3AI-M511B", + "3AI-Y511B" + ] + }, + { + "series": [ + "3AI-M510C", + "3AI-Y510C", + "3AI-M511C", + "3AI-Y511C", + "3AI-M512C", + "3AI-Y512C", + "3AI-M513C", + "3AI-Y513C", + "3AI-M514C", + "3AI-Y514C" + ] + } + ] + }, + "- BTG_AFG -": { + "parallel_no_redundancy": [ + { + "series": [ + { + "series": [ + "3AF-FCV501A", + "3AF-M501A", + "3AF-F501A" + ] + }, + { + "series": [ + "3AL-PCV501A", + "3AL-M501A", + "3AL-F501A" + ] + }, + "AFG_RAPH A", + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3ESP-CAB801", + "3ESP-CAB821", + "A1-FIELD 1", + "A1-FIELD 2", + "A1-FIELD 3", + "A1-FIELD 4" + ] + }, + { + "series": [ + "3ESP-CAB802", + "3ESP-CAB822", + "A2-FIELD 1", + "A2-FIELD 2", + "A2-FIELD 3", + "A2-FIELD 4" + ] + } + ] + }, + "3GG-AX801A" + ] + }, + { + "series": [ + "3GG-M810A", + "3GG-F801A", + { + "parallel": [ + "3GG-F802A", + "3GG-F802B" + ] + }, + "3GG-M801A", + { + "parallel": [ + "3GG-F803A", + "3GG-F803B" + ] + }, + { + "parallel": [ + "3GG-P801A", + "3GG-P801B" + ] + } + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + "3GG-F853A", + "3GG-F853B", + "3GG-F853C", + "3GG-F853D" + ] + }, + "3GG-M851", + "3GG-M851A", + "3GG-F851", + "3GG-H877", + "3GG-F865A", + "3GG-M870A", + "3GG-F870A", + { + "parallel": [ + { + "series": [ + "3GG-M875A", + "3GG-F875A" + ] + }, + { + "series": [ + "3GG-M875B", + "3GG-F875B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3GG-M877A", + "3GG-P877A" + ] + }, + { + "series": [ + "3GG-M877B", + "3GG-P877B" + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3AF-FCV501B", + "3AF-M501B", + "3AF-F501B" + ] + }, + { + "series": [ + "3AL-PCV501B", + "3AL-M501B", + "3AL-F501B" + ] + }, + { + "series": [ + "3AH-AJ501B", + "3AH-M531B", + "3AH-P531B", + "3AH-H531B", + "3AH-M502B", + "3AH-M501B", + "3AH-H501B" + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3ESP-CAB803", + "3ESP-CAB823", + "B1-FIELD 1", + "B1-FIELD 2", + "B1-FIELD 3", + "B1-FIELD 4" + ] + }, + { + "series": [ + "3ESP-CAB804", + "3ESP-CAB824", + "B2-FIELD 1", + "B2-FIELD 2", + "B2-FIELD 3", + "B2-FIELD 4" + ] + } + ] + }, + "3GG-AX801B" + ] + }, + { + "series": [ + "3GG-M810B", + "3GG-F801B", + { + "parallel": [ + "3GG-F804A", + "3GG-F804B" + ] + }, + { + "parallel": [ + "3GG-F805A", + "3GG-F805B" + ] + }, + "3GG-M801B", + "3GG-T801B", + { + "parallel": [ + "3GG-P802A", + "3GG-P802B" + ] + } + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + "3GG-F854A", + "3GG-F854B", + "3GG-F854C", + "3GG-F854D" + ] + }, + "3GG-M852", + "3GG-M851B", + "3GG-F852", + "3GG-H878", + "3GG-F865B", + "3GG-M870B", + "3GG-F870B", + { + "parallel": [ + { + "series": [ + "3GG-M880A", + "3GG-F880A" + ] + }, + { + "series": [ + "3GG-M880B", + "3GG-F880B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3GG-M878A", + "3GG-P878A" + ] + }, + { + "series": [ + "3GG-M878B", + "3GG-P878B" + ] + } + ] + } + ] + } + ] + } + ] + }, + "BOL_DP_FDR C": { + "series": [ + "3DP-FDR711C", + "3DP-M712C", + "3DP-M711C" + ] + }, + "BOL_DP_CB E": { + "series": [ + "3DP-B701E", + "3DP-B702E", + "3DP-B703E", + "3DP-B704E" + ] + }, + "FGD_DS": { + "series": [ + { + "series": [ + "00DS-T888", + "00DS-M888", + "00DS-AG888", + { + "parallel": [ + { + "series": [ + "00DS-M883A", + "00DS-P883A" + ] + }, + { + "series": [ + "00DS-M883B", + "00DS-P883B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "parallel": [ + "00DS-CY851A", + "00DS-CY851B" + ] + }, + "00DS-T851", + "00DS-M851", + "00DS-AG851", + { + "parallel": [ + { + "series": [ + "00DS-M860A", + "00DS-P860A" + ] + }, + { + "series": [ + "00DS-M860B", + "00DS-P860B" + ] + } + ] + }, + "00DS-T852", + "00DS-CY865" + ] + }, + { + "parallel": [ + { + "series": [ + "00DS-T901", + "00DS-M900", + "00DS-M901", + "00DS-P901", + "00DS-T900", + { + "parallel": [ + { + "series": [ + "00DS-M902A", + "00DS-P902A" + ] + }, + { + "series": [ + "00DS-M902B", + "00DS-P902B" + ] + } + ] + } + ] + }, + { + "series": [ + "00DS-T936", + "00DS-M935", + "00DS-M936", + "00DS-P936", + "00DS-T935", + { + "parallel": [ + { + "series": [ + "00DS-M937A", + "00DS-P937A" + ] + }, + { + "series": [ + "00DS-M937B", + "00DS-P937B" + ] + } + ] + } + ] + } + ] + } + ] + }, + "FGD_RP_WET MILL": { + "parallel": [ + { + "series": [ + "00RP-BM871", + { + "parallel_no_redundancy": [ + "00RP-M871A", + "00RP-M871B" + ] + } + ] + }, + { + "series": [ + "00RP-BM911", + { + "parallel": [ + "00RP-M911A", + "00RP-M911B" + ] + } + ] + } + ] + }, + "- CMN_SSB -": { + "series": [ + "00SSB-EV001", + "00SSB-EV002", + "00SSB-EV003", + { + "parallel_no_redundancy": [ + "00SSB-EV004", + "00SSB-EV005" + ] + }, + "00SSB-EV006", + "00SSB-EV007", + "00SSB-EV012", + "00SSB-LA008", + "00SSB-LA009", + "00SSB-TF010" + ] + }, + "BOL_DP": { + "series": [ + "3BOL-FD501", + { + "parallel_no_redundancy": [ + { + "series": [ + { + "series": [ + "3DP-FDR711A", + "3DP-M712A", + "3DP-M711A" + ] + }, + { + "series": [ + "3DP-M741A", + "3DP-BM741A", + "3DP-CVT701A", + "3DP-CVT711A", + "3DP-M761A", + "3DP-P761A", + "3DP-M781A", + "3DP-P781A", + "3DP-M731A", + "3DP-BM731A" + ] + }, + { + "series": [ + "3DP-B701A", + "3DP-B702A", + "3DP-B703A", + "3DP-B704A" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711B", + "3DP-M712B", + "3DP-M711B" + ] + }, + { + "series": [ + "3DP-M741B", + "3DP-BM741B", + "3DP-CVT701B", + "3DP-CVT711B", + "3DP-M761B", + "3DP-P761B", + "3DP-M781B", + "3DP-P781B", + "3DP-M731B", + "3DP-BM731B" + ] + }, + { + "series": [ + "3DP-B701B", + "3DP-B702B", + "3DP-B703B", + "3DP-B704B" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711C", + "3DP-M712C", + "3DP-M711C" + ] + }, + { + "series": [ + "3DP-M741C", + "3DP-BM741C", + "3DP-CVT701C", + "3DP-CVT711C", + "3DP-M761C", + "3DP-P761C", + "3DP-M781C", + "3DP-P781C", + "3DP-M731C", + "3DP-BM731C" + ] + }, + { + "series": [ + "3DP-B701C", + "3DP-B702C", + "3DP-B703C", + "3DP-B704C" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711D", + "3DP-M712D", + "3DP-M711D" + ] + }, + { + "series": [ + "3DP-M741D", + "3DP-BM741D", + "3DP-CVT701D", + "3DP-CVT711D", + "3DP-M761D", + "3DP-P761D", + "3DP-M781D", + "3DP-P781D", + "3DP-M731D", + "3DP-BM731D" + ] + }, + { + "series": [ + "3DP-B701D", + "3DP-B702D", + "3DP-B703D", + "3DP-B704D" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711E", + "3DP-M712E", + "3DP-M711E" + ] + }, + { + "series": [ + "3DP-M741E", + "3DP-BM741E", + "3DP-CVT701E", + "3DP-CVT711E", + "3DP-M761E", + "3DP-P761E", + "3DP-M781E", + "3DP-P781E", + "3DP-M731E", + "3DP-BM731E" + ] + }, + { + "series": [ + "3DP-B701E", + "3DP-B702E", + "3DP-B703E", + "3DP-B704E" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711F", + "3DP-M712F", + "3DP-M711F" + ] + }, + { + "series": [ + "3DP-M741F", + "3DP-BM741F", + "3DP-CVT701F", + "3DP-CVT711F", + "3DP-M761F", + "3DP-P761F", + "3DP-M781F", + "3DP-P781F", + "3DP-M731F", + "3DP-BM731F" + ] + }, + { + "series": [ + "3DP-B701F", + "3DP-B702F", + "3DP-B703F", + "3DP-B704F" + ] + } + ] + } + ] + } + ] + }, + "FW_BFT A": { + "series": [ + "3LOT-H010A", + { + "parallel": [ + "3LOT-T090A", + "3LOT-T100A" + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOT-M010A", + "3LOT-P010A" + ] + }, + { + "series": [ + "3LOT-M020A", + "3LOT-P020A" + ] + } + ] + }, + { + "series": [ + "3LOT-M050A", + "3LOT-P050A" + ] + } + ] + }, + "3LOT-M080A", + "3LOT-P080A", + { + "parallel": [ + "3LOT-S010A", + "3LOT-S020A" + ] + }, + "3LOT-PF080A", + "3LOT-M120A", + "3LOT-F120A", + "3FW-P020A", + "3FW-H011A", + "3FW-H012A", + "3FW-AU030A", + "3FW-P010A", + "3BFT-ST010A", + "3BFT-AU040A" + ] + }, + "SPS_APC": { + "series": [ + { + "parallel_no_redundancy": [ + "3APC-CB811", + "3APC-CB812", + "3APC-CB813", + "3APC-CB814" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV001A", + "3APC-LV001B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV501A", + "3APC-LV501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV810A", + "3APC-LV810B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV811P1", + "3APC-LV811P2", + "3APC-LV811P3", + "3APC-LV811P4", + "3APC-LV811P5", + "3APC-LV811P21" + ] + }, + "3APC-LV851", + "3APC-MCC002", + { + "parallel_no_redundancy": [ + "3APC-MCC501A", + "3APC-MCC501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-MCC502A", + "3APC-MCC502B", + "3APC-MCC502C", + "3APC-MCC502D", + "3APC-MCC502E", + "3APC-MCC502F" + ] + }, + "3APC-MCC510", + "3APC-MCC851", + { + "parallel_no_redundancy": [ + "3APC-PD501A", + "3APC-PD501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-PD901", + "3APC-PD902" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-PD921", + "3APC-PD922" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF001A", + "3APC-TF001B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF501A", + "3APC-TF501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF502A", + "3APC-TF502B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF810A", + "3APC-TF810B" + ] + }, + "3APC-TF811", + "3APC-TF851" + ] + }, + "BOL_SB_LONG_RIGHT": { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501R", + "3AI-Y501R", + "3AI-M503R", + "3AI-Y503R", + "3AI-M504R", + "3AI-Y504R", + "3AI-M505R", + "3AI-Y505R" + ] + }, + { + "series": [ + "3AI-M502R", + "3AI-Y502R", + "3AI-M506R", + "3AI-Y506R", + "3AI-M507R", + "3AI-Y507R", + "3AI-M508R", + "3AI-Y508R", + "3AI-M509R", + "3AI-Y509R", + "3AI-M510R", + "3AI-Y510R" + ] + }, + { + "series": [ + "3AI-M511R", + "3AI-Y511R", + "3AI-M512R", + "3AI-Y512R", + "3AI-M513R", + "3AI-Y513R", + "3AI-M514R", + "3AI-Y514R", + "3AI-M515R", + "3AI-Y515R", + "3AI-M516R", + "3AI-Y516R" + ] + } + ] + }, + "ESP_B1": { + "series": [ + "3ESP-CAB803", + "3ESP-CAB823", + "B1-FIELD 1", + "B1-FIELD 2", + "B1-FIELD 3", + "B1-FIELD 4" + ] + }, + "FGD_RP_WET MILL A": { + "series": [ + "00RP-BM871", + { + "parallel_no_redundancy": [ + "00RP-M871A", + "00RP-M871B" + ] + } + ] + }, + "ESP_A1": { + "series": [ + "3ESP-CAB801", + "3ESP-CAB821", + "A1-FIELD 1", + "A1-FIELD 2", + "A1-FIELD 3", + "A1-FIELD 4" + ] + }, + "- CMN -": { + "series": [ + { + "series": [ + { + "parallel": [ + { + "series": [ + "00CHA-SU801A", + "00CHA-CV801A", + "00CHA-MS801A", + "00CHA-BW802A", + "00CHA-CV802A", + "00CHA-CV803A", + "00CHA-SWT801" + ] + }, + { + "series": [ + "00CHA-SU801B", + "00CHA-CV801B", + "00CHA-MS801B", + "00CHA-BW802B", + "00CHA-CV802B", + "00CHA-CV803B", + "00CHA-SWT802" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00CHA-CV805A", + "00CHB-SKR805A" + ] + }, + { + "series": [ + "00CHA-CV804", + "00CHA-CV805B", + "00CHB-SKR805B" + ] + } + ] + }, + "COAL YARD" + ] + }, + { + "series": [ + "BOOSTER", + "FILTER", + "TRAFO", + "CELL", + "SUMP PUMP" + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M110A", + "00RO-P110A" + ] + }, + { + "series": [ + "00RO-M110B", + "00RO-P110B" + ] + }, + { + "series": [ + "00RO-M110C", + "00RO-P110C" + ] + }, + { + "series": [ + "00RO-M110D", + "00RO-P110D" + ] + } + ] + }, + "00RO-T120", + "FeCl3 DOSING", + "ANIONIC POLYMER DOSING", + "CLEAR WATER", + "CLARIFIER", + "00RO-T170", + { + "parallel": [ + { + "series": [ + "00RO-M195A", + "00RO-P195A" + ] + }, + { + "series": [ + "00RO-M195B", + "00RO-P195B" + ] + } + ] + }, + "00RO-T320", + "00RO-T130", + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M126A", + "00RO-P126A" + ] + }, + { + "series": [ + "00RO-M126B", + "00RO-P126B" + ] + }, + { + "series": [ + "00RO-M126C", + "00RO-P126C" + ] + }, + { + "series": [ + "00RO-M126D", + "00RO-P126D" + ] + } + ] + }, + "NaOCL DOSING", + { + "parallel": [ + { + "series": [ + "00RO-F161A", + "00RO-M152A", + "00RO-F152A" + ] + }, + { + "series": [ + "00RO-F161B", + "00RO-M152B", + "00RO-F152B" + ] + } + ] + }, + "00RO-T150", + { + "parallel": [ + { + "series": [ + "00RO-M150A", + "00RO-P150A" + ] + }, + { + "series": [ + "00RO-M150B", + "00RO-P150B" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M160A", + "00RO-P160A" + ] + }, + { + "series": [ + "00RO-M160B", + "00RO-P160B" + ] + }, + { + "series": [ + "00RO-M160C", + "00RO-P160C" + ] + }, + { + "series": [ + "00RO-M160D", + "00RO-P160D" + ] + } + ] + }, + "H2SO4 DOSING", + "SBS DOSING", + "ANTI SCALANT DOSING", + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M170A", + "00RO-P170A", + "00RO-T160A", + "00RO-Z110A" + ] + }, + { + "series": [ + "00RO-M170B", + "00RO-P170B", + "00RO-T160B", + "00RO-Z110B" + ] + }, + { + "series": [ + "00RO-M170C", + "00RO-P170C", + "00RO-T160C", + "00RO-Z110C" + ] + }, + { + "series": [ + "00RO-M170D", + "00RO-P170D", + "00RO-T160D", + "00RO-Z110D" + ] + } + ] + }, + "NaOH DOSING", + "00RO-H181", + "00RO-AG181", + "00RO-M181", + { + "parallel": [ + { + "series": [ + "00RO-M180A", + "00RO-P180A" + ] + }, + { + "series": [ + "00RO-M180B", + "00RO-P180B" + ] + } + ] + }, + "header 3", + { + "parallel": [ + { + "series": [ + "00RO-M340A", + "00RO-P340A" + ] + }, + { + "series": [ + "00RO-M340B", + "00RO-P340B" + ] + } + ] + }, + "00RO-T162", + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M190A", + "00RO-P190A" + ] + }, + { + "series": [ + "00RO-M190B", + "00RO-P190B" + ] + } + ] + } + ] + }, + "WTP", + { + "series": [ + { + "series": [ + { + "series": [ + "00DS-T888", + "00DS-M888", + "00DS-AG888", + { + "parallel": [ + { + "series": [ + "00DS-M883A", + "00DS-P883A" + ] + }, + { + "series": [ + "00DS-M883B", + "00DS-P883B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "parallel": [ + "00DS-CY851A", + "00DS-CY851B" + ] + }, + "00DS-T851", + "00DS-M851", + "00DS-AG851", + { + "parallel": [ + { + "series": [ + "00DS-M860A", + "00DS-P860A" + ] + }, + { + "series": [ + "00DS-M860B", + "00DS-P860B" + ] + } + ] + }, + "00DS-T852", + "00DS-CY865" + ] + }, + { + "parallel": [ + { + "series": [ + "00DS-T901", + "00DS-M900", + "00DS-M901", + "00DS-P901", + "00DS-T900", + { + "parallel": [ + { + "series": [ + "00DS-M902A", + "00DS-P902A" + ] + }, + { + "series": [ + "00DS-M902B", + "00DS-P902B" + ] + } + ] + } + ] + }, + { + "series": [ + "00DS-T936", + "00DS-M935", + "00DS-M936", + "00DS-P936", + "00DS-T935", + { + "parallel": [ + { + "series": [ + "00DS-M937A", + "00DS-P937A" + ] + }, + { + "series": [ + "00DS-M937B", + "00DS-P937B" + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00OA-M851A", + "00OA-F851A" + ] + }, + { + "series": [ + "00OA-M851B", + "00OA-F851B" + ] + }, + { + "series": [ + "00OA-M851C", + "00OA-F851C" + ] + } + ] + }, + { + "series": [ + "00LSH-SU801", + "00LSH-HO801", + "00LSH-BW801", + "00LSH-COG801", + "00LSH-M851", + "00LSH-VFD801", + "00LSH-VI851", + "00LSH-M853A", + "00LSH-CR853", + "00LSH-CV801", + "00LSH-M901", + "00LSH-F901", + "00LSH-DC901", + "00LSH-M5801", + "00LSH-M852", + "00LSH-CV852", + "00LSH-HO851" + ] + }, + { + "series": [ + "00RP-T985", + "00RP-M985", + "00RP-AG985", + { + "parallel": [ + { + "series": [ + "00RP-M986A", + "00RP-P986A" + ] + }, + { + "series": [ + "00RP-M986B", + "00RP-P986B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00RP-BM871", + { + "parallel_no_redundancy": [ + "00RP-M871A", + "00RP-M871B" + ] + } + ] + }, + { + "series": [ + "00RP-BM911", + { + "parallel": [ + "00RP-M911A", + "00RP-M911B" + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00RP-CY871", + "00RP-DX897", + { + "parallel": [ + "00RP-F991A", + "00RP-F991B" + ] + }, + "00RP-T885", + "00RP-M885", + "00RP-AG885", + "00RP-P992", + { + "parallel": [ + { + "series": [ + "00RP-P991A", + "00RP-M891A", + "00RP-P891A" + ] + }, + { + "series": [ + "00RP-P991B", + "00RP-M891B", + "00RP-P891B" + ] + } + ] + } + ] + }, + { + "series": [ + "00RP-CY911", + "00RP-DX837", + { + "parallel": [ + "00RP-F995A", + "00RP-F995B" + ] + }, + "00RP-F995A", + "00RP-T925", + "00RP-M925", + "00RP-AG925", + "00RP-P995", + { + "parallel": [ + { + "series": [ + "00RP-P995A", + "00RP-M931A", + "00RP-P931A" + ] + }, + { + "series": [ + "00RP-P995B", + "00RP-M931B", + "00RP-P931B" + ] + } + ] + } + ] + } + ] + }, + "00RP-T970", + "00RP-M970", + "00RP-AG970", + { + "parallel": [ + { + "series": [ + "00RP-M972A", + "00RP-P972A" + ] + }, + { + "series": [ + "00RP-M972B", + "00RP-P972B" + ] + } + ] + }, + "00RP-T950", + "00RP-M950", + "00RP-AG950", + { + "parallel": [ + { + "series": [ + "00RP-M952A", + "00RP-P952A" + ] + }, + { + "series": [ + "00RP-M952B", + "00RP-P952B" + ] + } + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + "00RP-Z851A", + "00RP-Z851B", + "00RP-Z851C" + ] + }, + "00RP-Z851D" + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "00RP-M856A", + "00RP-Z856A" + ] + }, + { + "series": [ + "00RP-M856B", + "00RP-Z856B" + ] + } + ] + }, + "00RP-DX979" + ] + } + ] + }, + { + "series": [ + "00SSB-EV001", + "00SSB-EV002", + "00SSB-EV003", + { + "parallel_no_redundancy": [ + "00SSB-EV004", + "00SSB-EV005" + ] + }, + "00SSB-EV006", + "00SSB-EV007", + "00SSB-EV012", + "00SSB-LA008", + "00SSB-LA009", + "00SSB-TF010" + ] + } + ] + }, + "BOL_SB_WD_LEFT": { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M515A", + "3AI-Y515A", + "3AI-M516A", + "3AI-Y516A", + "3AI-M517A", + "3AI-Y517A", + "3AI-M518A", + "3AI-Y518A" + ] + }, + { + "series": [ + "3AI-M512B", + "3AI-Y512B", + "3AI-M513B", + "3AI-Y513B", + "3AI-M514B", + "3AI-Y514B" + ] + }, + { + "series": [ + "3AI-M515C", + "3AI-Y515C", + "3AI-M516C", + "3AI-Y516C", + "3AI-M517C", + "3AI-Y517C", + "3AI-M518C", + "3AI-Y518C" + ] + } + ] + }, + "GEN_GEN_GMCB": { + "parallel": [ + { + "parallel_no_redundancy": [ + "3GEN-M201A", + "3GEN-M202A", + "3GEN-M203A", + "3GEN-M204A", + "3GEN-M205A" + ] + }, + "3GEN-M206A" + ] + }, + "BOL_MS": { + "series": [ + "3MS-HV011", + "3MS-HV012", + "3MS-HV013", + "3MS-HV014", + { + "parallel_no_redundancy": [ + "3MS-HV010A", + "3MS-HV010B" + ] + }, + { + "parallel_no_redundancy": [ + "3MS-W001A", + "3MS-W001B" + ] + }, + "3MS-W004" + ] + }, + "FGD_DS_GYPSUM": { + "series": [ + { + "parallel": [ + "00DS-CY851A", + "00DS-CY851B" + ] + }, + "00DS-T851", + "00DS-M851", + "00DS-AG851", + { + "parallel": [ + { + "series": [ + "00DS-M860A", + "00DS-P860A" + ] + }, + { + "series": [ + "00DS-M860B", + "00DS-P860B" + ] + } + ] + }, + "00DS-T852", + "00DS-CY865" + ] + }, + "SPS_APE": { + "series": [ + "3APE-CAB552", + { + "parallel_no_redundancy": [ + "3APE-MV001A", + "3APE-MV001B" + ] + }, + { + "parallel_no_redundancy": [ + "3APE-MV002A", + "3APE-MV002B" + ] + }, + { + "parallel_no_redundancy": [ + "3APE-MV003A", + "3APE-MV003B", + "3APE-MV003C", + "3APE-MV003D" + ] + }, + { + "parallel_no_redundancy": [ + "3APE-MV004A", + "3APE-MV004B" + ] + }, + "3APE-MV851", + "3APE-MV852", + { + "parallel_no_redundancy": [ + "3APE-TF002A", + "3APE-TF002B" + ] + }, + "3APE-TF852", + { + "parallel_no_redundancy": [ + "3APE-Z005A", + "3APE-Z005B" + ] + } + ] + }, + "BOL_DP_CB C": { + "series": [ + "3DP-B701C", + "3DP-B702C", + "3DP-B703C", + "3DP-B704C" + ] + }, + "- BTG_SPS -": { + "series": [ + { + "series": [ + { + "parallel_no_redundancy": [ + "3APC-CB811", + "3APC-CB812", + "3APC-CB813", + "3APC-CB814" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV001A", + "3APC-LV001B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV501A", + "3APC-LV501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV810A", + "3APC-LV810B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV811P1", + "3APC-LV811P2", + "3APC-LV811P3", + "3APC-LV811P4", + "3APC-LV811P5", + "3APC-LV811P21" + ] + }, + "3APC-LV851", + "3APC-MCC002", + { + "parallel_no_redundancy": [ + "3APC-MCC501A", + "3APC-MCC501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-MCC502A", + "3APC-MCC502B", + "3APC-MCC502C", + "3APC-MCC502D", + "3APC-MCC502E", + "3APC-MCC502F" + ] + }, + "3APC-MCC510", + "3APC-MCC851", + { + "parallel_no_redundancy": [ + "3APC-PD501A", + "3APC-PD501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-PD901", + "3APC-PD902" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-PD921", + "3APC-PD922" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF001A", + "3APC-TF001B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF501A", + "3APC-TF501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF502A", + "3APC-TF502B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF810A", + "3APC-TF810B" + ] + }, + "3APC-TF811", + "3APC-TF851" + ] + }, + { + "series": [ + "3APE-CAB552", + { + "parallel_no_redundancy": [ + "3APE-MV001A", + "3APE-MV001B" + ] + }, + { + "parallel_no_redundancy": [ + "3APE-MV002A", + "3APE-MV002B" + ] + }, + { + "parallel_no_redundancy": [ + "3APE-MV003A", + "3APE-MV003B", + "3APE-MV003C", + "3APE-MV003D" + ] + }, + { + "parallel_no_redundancy": [ + "3APE-MV004A", + "3APE-MV004B" + ] + }, + "3APE-MV851", + "3APE-MV852", + { + "parallel_no_redundancy": [ + "3APE-TF002A", + "3APE-TF002B" + ] + }, + "3APE-TF852", + { + "parallel_no_redundancy": [ + "3APE-Z005A", + "3APE-Z005B" + ] + } + ] + }, + { + "series": [ + "3EG-E001", + "3EG-T003" + ] + } + ] + }, + "BOL_SB_LONG": { + "parallel_no_redundancy": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501L", + "3AI-Y501L", + "3AI-M503L", + "3AI-Y503L", + "3AI-M504L", + "3AI-Y504L", + "3AI-M505L", + "3AI-Y505L" + ] + }, + { + "series": [ + "3AI-M502L", + "3AI-Y502L", + "3AI-M506L", + "3AI-Y506L", + "3AI-M507L", + "3AI-Y507L", + "3AI-M508L", + "3AI-Y508L", + "3AI-M509L", + "3AI-Y509L", + "3AI-M510L", + "3AI-Y510L" + ] + }, + { + "series": [ + "3AI-M511L", + "3AI-Y511L", + "3AI-M512L", + "3AI-Y512L", + "3AI-M513L", + "3AI-Y513L", + "3AI-M514L", + "3AI-Y514L", + "3AI-M515L", + "3AI-Y515L", + "3AI-M516L", + "3AI-Y516L" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501R", + "3AI-Y501R", + "3AI-M503R", + "3AI-Y503R", + "3AI-M504R", + "3AI-Y504R", + "3AI-M505R", + "3AI-Y505R" + ] + }, + { + "series": [ + "3AI-M502R", + "3AI-Y502R", + "3AI-M506R", + "3AI-Y506R", + "3AI-M507R", + "3AI-Y507R", + "3AI-M508R", + "3AI-Y508R", + "3AI-M509R", + "3AI-Y509R", + "3AI-M510R", + "3AI-Y510R" + ] + }, + { + "series": [ + "3AI-M511R", + "3AI-Y511R", + "3AI-M512R", + "3AI-Y512R", + "3AI-M513R", + "3AI-Y513R", + "3AI-M514R", + "3AI-Y514R", + "3AI-M515R", + "3AI-Y515R", + "3AI-M516R", + "3AI-Y516R" + ] + } + ] + } + ] + }, + "- BTG_SCR -": { + "series": [ + "00SCR-Z001", + "00SCR-Z015" + ] + }, + "BOL_BRS": { + "series": [ + "3BSS-H611", + { + "parallel_no_redundancy": [ + "3ATT-N501A", + "3ATT-N501B" + ] + }, + "3BSS-H621", + { + "parallel_no_redundancy": [ + "3ATT-N502A", + "3ATT-N502B" + ] + }, + "3BSS-H631" + ] + }, + "GEN_GEN_THRS": { + "parallel_no_redundancy": [ + { + "series": [ + "3GEN-M101A", + "3GEN-M102A", + "3GEN-M103A" + ] + }, + { + "series": [ + "3GEN-M101B", + "3GEN-M102B", + "3GEN-M103B" + ] + } + ] + }, + "GEN_SCW": { + "series": [ + "3SCW-PF001", + { + "parallel": [ + { + "series": [ + "3SCW-H023A", + "3SCW-M001A", + "3SCW-P001A" + ] + }, + { + "series": [ + "3SCW-H023B", + "3SCW-M001B", + "3SCW-P001B" + ] + } + ] + } + ] + }, + "ESP_B2": { + "series": [ + "3ESP-CAB804", + "3ESP-CAB824", + "B2-FIELD 1", + "B2-FIELD 2", + "B2-FIELD 3", + "B2-FIELD 4" + ] + }, + "AFG_FGD A": { + "series": [ + { + "parallel_no_redundancy": [ + "3GG-F853A", + "3GG-F853B", + "3GG-F853C", + "3GG-F853D" + ] + }, + "3GG-M851", + "3GG-M851A", + "3GG-F851", + "3GG-H877", + "3GG-F865A", + "3GG-M870A", + "3GG-F870A", + { + "parallel": [ + { + "series": [ + "3GG-M875A", + "3GG-F875A" + ] + }, + { + "series": [ + "3GG-M875B", + "3GG-F875B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3GG-M877A", + "3GG-P877A" + ] + }, + { + "series": [ + "3GG-M877B", + "3GG-P877B" + ] + } + ] + } + ] + }, + "FGD_RP": { + "series": [ + "00RP-T985", + "00RP-M985", + "00RP-AG985", + { + "parallel": [ + { + "series": [ + "00RP-M986A", + "00RP-P986A" + ] + }, + { + "series": [ + "00RP-M986B", + "00RP-P986B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00RP-BM871", + { + "parallel_no_redundancy": [ + "00RP-M871A", + "00RP-M871B" + ] + } + ] + }, + { + "series": [ + "00RP-BM911", + { + "parallel": [ + "00RP-M911A", + "00RP-M911B" + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00RP-CY871", + "00RP-DX897", + { + "parallel": [ + "00RP-F991A", + "00RP-F991B" + ] + }, + "00RP-T885", + "00RP-M885", + "00RP-AG885", + "00RP-P992", + { + "parallel": [ + { + "series": [ + "00RP-P991A", + "00RP-M891A", + "00RP-P891A" + ] + }, + { + "series": [ + "00RP-P991B", + "00RP-M891B", + "00RP-P891B" + ] + } + ] + } + ] + }, + { + "series": [ + "00RP-CY911", + "00RP-DX837", + { + "parallel": [ + "00RP-F995A", + "00RP-F995B" + ] + }, + "00RP-F995A", + "00RP-T925", + "00RP-M925", + "00RP-AG925", + "00RP-P995", + { + "parallel": [ + { + "series": [ + "00RP-P995A", + "00RP-M931A", + "00RP-P931A" + ] + }, + { + "series": [ + "00RP-P995B", + "00RP-M931B", + "00RP-P931B" + ] + } + ] + } + ] + } + ] + }, + "00RP-T970", + "00RP-M970", + "00RP-AG970", + { + "parallel": [ + { + "series": [ + "00RP-M972A", + "00RP-P972A" + ] + }, + { + "series": [ + "00RP-M972B", + "00RP-P972B" + ] + } + ] + }, + "00RP-T950", + "00RP-M950", + "00RP-AG950", + { + "parallel": [ + { + "series": [ + "00RP-M952A", + "00RP-P952A" + ] + }, + { + "series": [ + "00RP-M952B", + "00RP-P952B" + ] + } + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + "00RP-Z851A", + "00RP-Z851B", + "00RP-Z851C" + ] + }, + "00RP-Z851D" + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "00RP-M856A", + "00RP-Z856A" + ] + }, + { + "series": [ + "00RP-M856B", + "00RP-Z856B" + ] + } + ] + }, + "00RP-DX979" + ] + }, + "BOL_DP_MILL A": { + "series": [ + "3DP-M741A", + "3DP-BM741A", + "3DP-CVT701A", + "3DP-CVT711A", + "3DP-M761A", + "3DP-P761A", + "3DP-M781A", + "3DP-P781A", + "3DP-M731A", + "3DP-BM731A" + ] + }, + "BOL_OB": { + "series": [ + "3FO-FCV501", + { + "parallel_no_redundancy": [ + { + "series": [ + "3DM-B701A", + "3DM-B702A", + "3DM-B703A", + "3DM-B704A" + ] + }, + { + "series": [ + "3DM-B701C", + "3DM-B702C", + "3DM-B703C", + "3DM-B704C" + ] + }, + { + "series": [ + "3DM-B701E", + "3DM-B702E", + "3DM-B703E", + "3DM-B704E" + ] + } + ] + } + ] + }, + "GEN_GMC_RCFM": { + "parallel_no_redundancy": [ + { + "series": [ + "3GEN-M211A", + "3GEN-M211B", + "3GEN-M211C" + ] + }, + { + "series": [ + "3GEN-M212A", + "3GEN-M212B", + "3GEN-M212C" + ] + }, + { + "series": [ + "3GEN-M213A", + "3GEN-M213B", + "3GEN-M213C" + ] + }, + { + "series": [ + "3GEN-M214A", + "3GEN-M214B", + "3GEN-M214C" + ] + } + ] + }, + "BOL_DP_FDR E": { + "series": [ + "3DP-FDR711E", + "3DP-M712E", + "3DP-M711E" + ] + }, + "- BTG_GEN -": { + "series": [ + { + "series": [ + "3SCW-PF001", + { + "parallel": [ + { + "series": [ + "3SCW-H023A", + "3SCW-M001A", + "3SCW-P001A" + ] + }, + { + "series": [ + "3SCW-H023B", + "3SCW-M001B", + "3SCW-P001B" + ] + } + ] + } + ] + }, + "3GEN-GM001", + { + "series": [ + "3SO-T116", + "3SO-T114", + "3SO-T113", + { + "parallel": [ + { + "series": [ + "3SO-M001", + "3SO-P001" + ] + }, + { + "series": [ + "3SO-M002", + "3SO-P002" + ] + } + ] + } + ] + }, + { + "series": [ + "3GEN-EXC008", + "3GEN-EXC009", + "3GEN-EXC004", + "3GEN-EXC005", + "3GEN-GM001", + "3GEN-Z012", + { + "parallel_no_redundancy": [ + { + "series": [ + "3GEN-M101A", + "3GEN-M102A", + "3GEN-M103A" + ] + }, + { + "series": [ + "3GEN-M101B", + "3GEN-M102B", + "3GEN-M103B" + ] + } + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + "3GEN-M201A", + "3GEN-M202A", + "3GEN-M203A", + "3GEN-M204A", + "3GEN-M205A" + ] + }, + "3GEN-M206A" + ] + } + ] + }, + { + "series": [ + "3GMC-Z002", + "3GMC-Z001", + "3GMC-Z003", + { + "parallel_no_redundancy": [ + { + "series": [ + "3GEN-M211A", + "3GEN-M211B", + "3GEN-M211C" + ] + }, + { + "series": [ + "3GEN-M212A", + "3GEN-M212B", + "3GEN-M212C" + ] + }, + { + "series": [ + "3GEN-M213A", + "3GEN-M213B", + "3GEN-M213C" + ] + }, + { + "series": [ + "3GEN-M214A", + "3GEN-M214B", + "3GEN-M214C" + ] + } + ] + } + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3TR-TF002A", + "3TR-Z003A" + ] + }, + { + "series": [ + "3TR-TF002B", + "3TR-Z003B" + ] + } + ] + }, + "3TR-TF001", + "3TR-TF005", + { + "parallel_no_redundancy": [ + "3TR-F301", + "3TR-F302", + "3TR-F303", + "3TR-F304", + "3TR-F305", + "3TR-F306", + "3TR-F307", + "3TR-F308", + "3TR-F309", + "3TR-F310", + "3TR-F311", + "3TR-F312", + "3TR-F313", + "3TR-F314" + ] + } + ] + } + ] + }, + "- BTG_BOL -": { + "series": [ + { + "series": [ + "3BOL-FD501", + { + "parallel_no_redundancy": [ + { + "series": [ + { + "series": [ + "3DP-FDR711A", + "3DP-M712A", + "3DP-M711A" + ] + }, + { + "series": [ + "3DP-M741A", + "3DP-BM741A", + "3DP-CVT701A", + "3DP-CVT711A", + "3DP-M761A", + "3DP-P761A", + "3DP-M781A", + "3DP-P781A", + "3DP-M731A", + "3DP-BM731A" + ] + }, + { + "series": [ + "3DP-B701A", + "3DP-B702A", + "3DP-B703A", + "3DP-B704A" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711B", + "3DP-M712B", + "3DP-M711B" + ] + }, + { + "series": [ + "3DP-M741B", + "3DP-BM741B", + "3DP-CVT701B", + "3DP-CVT711B", + "3DP-M761B", + "3DP-P761B", + "3DP-M781B", + "3DP-P781B", + "3DP-M731B", + "3DP-BM731B" + ] + }, + { + "series": [ + "3DP-B701B", + "3DP-B702B", + "3DP-B703B", + "3DP-B704B" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711C", + "3DP-M712C", + "3DP-M711C" + ] + }, + { + "series": [ + "3DP-M741C", + "3DP-BM741C", + "3DP-CVT701C", + "3DP-CVT711C", + "3DP-M761C", + "3DP-P761C", + "3DP-M781C", + "3DP-P781C", + "3DP-M731C", + "3DP-BM731C" + ] + }, + { + "series": [ + "3DP-B701C", + "3DP-B702C", + "3DP-B703C", + "3DP-B704C" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711D", + "3DP-M712D", + "3DP-M711D" + ] + }, + { + "series": [ + "3DP-M741D", + "3DP-BM741D", + "3DP-CVT701D", + "3DP-CVT711D", + "3DP-M761D", + "3DP-P761D", + "3DP-M781D", + "3DP-P781D", + "3DP-M731D", + "3DP-BM731D" + ] + }, + { + "series": [ + "3DP-B701D", + "3DP-B702D", + "3DP-B703D", + "3DP-B704D" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711E", + "3DP-M712E", + "3DP-M711E" + ] + }, + { + "series": [ + "3DP-M741E", + "3DP-BM741E", + "3DP-CVT701E", + "3DP-CVT711E", + "3DP-M761E", + "3DP-P761E", + "3DP-M781E", + "3DP-P781E", + "3DP-M731E", + "3DP-BM731E" + ] + }, + { + "series": [ + "3DP-B701E", + "3DP-B702E", + "3DP-B703E", + "3DP-B704E" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711F", + "3DP-M712F", + "3DP-M711F" + ] + }, + { + "series": [ + "3DP-M741F", + "3DP-BM741F", + "3DP-CVT701F", + "3DP-CVT711F", + "3DP-M761F", + "3DP-P761F", + "3DP-M781F", + "3DP-P781F", + "3DP-M731F", + "3DP-BM731F" + ] + }, + { + "series": [ + "3DP-B701F", + "3DP-B702F", + "3DP-B703F", + "3DP-B704F" + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + "3FO-FCV501", + { + "parallel_no_redundancy": [ + { + "series": [ + "3DM-B701A", + "3DM-B702A", + "3DM-B703A", + "3DM-B704A" + ] + }, + { + "series": [ + "3DM-B701C", + "3DM-B702C", + "3DM-B703C", + "3DM-B704C" + ] + }, + { + "series": [ + "3DM-B701E", + "3DM-B702E", + "3DM-B703E", + "3DM-B704E" + ] + } + ] + } + ] + }, + { + "series": [ + "3BDW-H601", + "3BDW-T601", + "3BDW-H611", + "3BDW-H621", + "3BDW-H631", + "3BDW-H641", + { + "parallel_no_redundancy": [ + { + "series": [ + "3BDW-M521A", + "3BDW-P521A", + "3BDW-H521A" + ] + }, + { + "series": [ + "3BDW-M521B", + "3BDW-P521B", + "3BDW-H521B" + ] + } + ] + } + ] + }, + "3BOL-H501", + { + "series": [ + "3MS-HV011", + "3MS-HV012", + "3MS-HV013", + "3MS-HV014", + { + "parallel_no_redundancy": [ + "3MS-HV010A", + "3MS-HV010B" + ] + }, + { + "parallel_no_redundancy": [ + "3MS-W001A", + "3MS-W001B" + ] + }, + "3MS-W004" + ] + }, + { + "series": [ + "3BSS-H611", + { + "parallel_no_redundancy": [ + "3ATT-N501A", + "3ATT-N501B" + ] + }, + "3BSS-H621", + { + "parallel_no_redundancy": [ + "3ATT-N502A", + "3ATT-N502B" + ] + }, + "3BSS-H631" + ] + }, + "3CRH-W002", + { + "series": [ + "3BSS-H611", + { + "parallel_no_redundancy": [ + "3ATT-N501A", + "3ATT-N501B" + ] + }, + "3BSS-H621", + { + "parallel_no_redundancy": [ + "3ATT-N502A", + "3ATT-N502B" + ] + }, + "3BSS-H631" + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + "3HRH-HV020A", + "3HRH-HV020B" + ] + }, + "3ATT-N561", + "3ATT-N571", + "3ATT-N581" + ] + }, + { + "series": [ + "3AI-SFV501", + { + "parallel_no_redundancy": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501H", + "3AI-Y501H", + "3AI-M502H", + "3AI-Y502H", + "3AI-M503H", + "3AI-Y503H", + "3AI-M504H", + "3AI-Y504H", + "3AI-M505H", + "3AI-Y505H", + "3AI-M506H", + "3AI-Y506H" + ] + }, + { + "series": [ + "3AI-M501I", + "3AI-Y501I", + "3AI-M502I", + "3AI-Y502I", + "3AI-M503I", + "3AI-Y503I", + "3AI-M504I", + "3AI-Y504I", + "3AI-M505I", + "3AI-Y505I", + "3AI-M506I", + "3AI-Y506I" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501L", + "3AI-Y501L", + "3AI-M503L", + "3AI-Y503L", + "3AI-M504L", + "3AI-Y504L", + "3AI-M505L", + "3AI-Y505L" + ] + }, + { + "series": [ + "3AI-M502L", + "3AI-Y502L", + "3AI-M506L", + "3AI-Y506L", + "3AI-M507L", + "3AI-Y507L", + "3AI-M508L", + "3AI-Y508L", + "3AI-M509L", + "3AI-Y509L", + "3AI-M510L", + "3AI-Y510L" + ] + }, + { + "series": [ + "3AI-M511L", + "3AI-Y511L", + "3AI-M512L", + "3AI-Y512L", + "3AI-M513L", + "3AI-Y513L", + "3AI-M514L", + "3AI-Y514L", + "3AI-M515L", + "3AI-Y515L", + "3AI-M516L", + "3AI-Y516L" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501R", + "3AI-Y501R", + "3AI-M503R", + "3AI-Y503R", + "3AI-M504R", + "3AI-Y504R", + "3AI-M505R", + "3AI-Y505R" + ] + }, + { + "series": [ + "3AI-M502R", + "3AI-Y502R", + "3AI-M506R", + "3AI-Y506R", + "3AI-M507R", + "3AI-Y507R", + "3AI-M508R", + "3AI-Y508R", + "3AI-M509R", + "3AI-Y509R", + "3AI-M510R", + "3AI-Y510R" + ] + }, + { + "series": [ + "3AI-M511R", + "3AI-Y511R", + "3AI-M512R", + "3AI-Y512R", + "3AI-M513R", + "3AI-Y513R", + "3AI-M514R", + "3AI-Y514R", + "3AI-M515R", + "3AI-Y515R", + "3AI-M516R", + "3AI-Y516R" + ] + } + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501A", + "3AI-Y501A", + "3AI-M502A", + "3AI-Y502A", + "3AI-M503A", + "3AI-Y503A", + "3AI-M504A", + "3AI-Y504A", + "3AI-M505A", + "3AI-Y505A" + ] + }, + { + "series": [ + "3AI-M501B", + "3AI-Y501B", + "3AI-M502B", + "3AI-Y502B", + "3AI-M503B", + "3AI-Y503B", + "3AI-M504B", + "3AI-Y504B" + ] + }, + { + "series": [ + "3AI-M501C", + "3AI-Y501C", + "3AI-M502C", + "3AI-Y502C", + "3AI-M503C", + "3AI-Y503C", + "3AI-M504C", + "3AI-Y504C", + "3AI-M505C", + "3AI-Y505C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M506A", + "3AI-Y506A", + "3AI-M507A", + "3AI-Y507A", + "3AI-M508A", + "3AI-Y508A", + "3AI-M509A", + "3AI-Y509A" + ] + }, + { + "series": [ + "3AI-M505B", + "3AI-Y505B", + "3AI-M506B", + "3AI-Y506B", + "3AI-M507B", + "3AI-Y507B" + ] + }, + { + "series": [ + "3AI-M506C", + "3AI-Y506C", + "3AI-M507C", + "3AI-Y507C", + "3AI-M508C", + "3AI-Y508C", + "3AI-M509C", + "3AI-Y509C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M515A", + "3AI-Y515A", + "3AI-M516A", + "3AI-Y516A", + "3AI-M517A", + "3AI-Y517A", + "3AI-M518A", + "3AI-Y518A" + ] + }, + { + "series": [ + "3AI-M512B", + "3AI-Y512B", + "3AI-M513B", + "3AI-Y513B", + "3AI-M514B", + "3AI-Y514B" + ] + }, + { + "series": [ + "3AI-M515C", + "3AI-Y515C", + "3AI-M516C", + "3AI-Y516C", + "3AI-M517C", + "3AI-Y517C", + "3AI-M518C", + "3AI-Y518C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M510A", + "3AI-Y510A", + "3AI-M511A", + "3AI-Y511A", + "3AI-M512A", + "3AI-Y512A", + "3AI-M513A", + "3AI-Y513A", + "3AI-M514A", + "3AI-Y514A" + ] + }, + { + "series": [ + "3AI-M508B", + "3AI-Y508B", + "3AI-M509B", + "3AI-Y509B", + "3AI-M510B", + "3AI-Y510B", + "3AI-M511B", + "3AI-Y511B" + ] + }, + { + "series": [ + "3AI-M510C", + "3AI-Y510C", + "3AI-M511C", + "3AI-Y511C", + "3AI-M512C", + "3AI-Y512C", + "3AI-M513C", + "3AI-Y513C", + "3AI-M514C", + "3AI-Y514C" + ] + } + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M551A", + "3AI-Y551A" + ] + }, + { + "series": [ + "3AI-M551B", + "3AI-Y551B" + ] + } + ] + } + ] + } + ] + } + ] + }, + "AFG_FDF A": { + "series": [ + "3AF-FCV501A", + "3AF-M501A", + "3AF-F501A" + ] + }, + "GEN_SO": { + "series": [ + "3SO-T116", + "3SO-T114", + "3SO-T113", + { + "parallel": [ + { + "series": [ + "3SO-M001", + "3SO-P001" + ] + }, + { + "series": [ + "3SO-M002", + "3SO-P002" + ] + } + ] + } + ] + }, + "AFG_PAF A": { + "series": [ + "3AL-PCV501A", + "3AL-M501A", + "3AL-F501A" + ] + }, + "FGD_OA": { + "parallel": [ + { + "series": [ + "00OA-M851A", + "00OA-F851A" + ] + }, + { + "series": [ + "00OA-M851B", + "00OA-F851B" + ] + }, + { + "series": [ + "00OA-M851C", + "00OA-F851C" + ] + } + ] + }, + "BOL_DP_MILL D": { + "series": [ + "3DP-M741D", + "3DP-BM741D", + "3DP-CVT701D", + "3DP-CVT711D", + "3DP-M761D", + "3DP-P761D", + "3DP-M781D", + "3DP-P781D", + "3DP-M731D", + "3DP-BM731D" + ] + }, + "FGD_RP_MILL": { + "parallel": [ + { + "series": [ + "00RP-CY871", + "00RP-DX897", + { + "parallel": [ + "00RP-F991A", + "00RP-F991B" + ] + }, + "00RP-T885", + "00RP-M885", + "00RP-AG885", + "00RP-P992", + { + "parallel": [ + { + "series": [ + "00RP-P991A", + "00RP-M891A", + "00RP-P891A" + ] + }, + { + "series": [ + "00RP-P991B", + "00RP-M891B", + "00RP-P891B" + ] + } + ] + } + ] + }, + { + "series": [ + "00RP-CY911", + "00RP-DX837", + { + "parallel": [ + "00RP-F995A", + "00RP-F995B" + ] + }, + "00RP-F995A", + "00RP-T925", + "00RP-M925", + "00RP-AG925", + "00RP-P995", + { + "parallel": [ + { + "series": [ + "00RP-P995A", + "00RP-M931A", + "00RP-P931A" + ] + }, + { + "series": [ + "00RP-P995B", + "00RP-M931B", + "00RP-P931B" + ] + } + ] + } + ] + } + ] + }, + "GEN_TR": { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3TR-TF002A", + "3TR-Z003A" + ] + }, + { + "series": [ + "3TR-TF002B", + "3TR-Z003B" + ] + } + ] + }, + "3TR-TF001", + "3TR-TF005", + { + "parallel_no_redundancy": [ + "3TR-F301", + "3TR-F302", + "3TR-F303", + "3TR-F304", + "3TR-F305", + "3TR-F306", + "3TR-F307", + "3TR-F308", + "3TR-F309", + "3TR-F310", + "3TR-F311", + "3TR-F312", + "3TR-F313", + "3TR-F314" + ] + } + ] + }, + "KLH_ABS": { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3ABS-M879A", + "3ABS-AG879A" + ] + }, + { + "series": [ + "3ABS-M879B", + "3ABS-AG879B" + ] + }, + { + "series": [ + "3ABS-M879C", + "3ABS-AG879C" + ] + }, + { + "series": [ + "3ABS-M879D", + "3ABS-AG879D" + ] + }, + { + "series": [ + "3ABS-M879E", + "3ABS-AG879E" + ] + } + ] + }, + "3ABS-T931", + "3ABS-M931", + "3ABS-AG931", + { + "parallel": [ + { + "series": [ + "3ABS-M932A", + "3ABS-P932A" + ] + }, + { + "series": [ + "3ABS-M932B", + "3ABS-P932B" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3ABS-M888A", + "3ABS-P888A" + ] + }, + { + "series": [ + "3ABS-M888B", + "3ABS-P888B" + ] + }, + { + "series": [ + "3ABS-M888C", + "3ABS-P888C" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3ABS-M910A", + "3ABS-P910A" + ] + }, + { + "series": [ + "3ABS-M910B", + "3ABS-P910B" + ] + } + ] + }, + "3ABS-ABT858" + ] + }, + "AFG_FDF B": { + "series": [ + "3AF-FCV501B", + "3AF-M501B", + "3AF-F501B" + ] + }, + "- BTG_CW -": { + "series": [ + "3CCCW-T010", + "3CCCW-M090", + "3CCCW-P090", + { + "parallel": [ + { + "series": [ + "3CCCW-M010A", + "3CCCW-P010A", + "3CCCW-H010A" + ] + }, + { + "series": [ + "3CCCW-M010B", + "3CCCW-P010B", + "3CCCW-H010B" + ] + } + ] + } + ] + }, + "TUR_CW": { + "series": [ + { + "parallel": [ + { + "series": [ + "3CW-M020A", + "3CW-P020A" + ] + }, + { + "series": [ + "3CW-M020B", + "3CW-P020B" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3CW-M010A", + "3CW-P010A" + ] + }, + { + "series": [ + "3CW-M010B", + "3CW-P010B" + ] + } + ] + }, + { + "parallel": [ + "3CW-P011A", + "3CW-P011B" + ] + } + ] + }, + "BOL_ASH_3BAD-CV501": { + "series": [ + "3BAD-CV501", + "203596" + ] + }, + "- CMN_CL -": { + "series": [ + "BOOSTER", + "FILTER", + "TRAFO", + "CELL", + "SUMP PUMP" + ] + }, + "- BTG_TUR -": { + "series": [ + { + "series": [ + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOS-M010A", + "3LOS-P010A" + ] + }, + { + "series": [ + "3LOS-M010B", + "3LOS-P010B" + ] + } + ] + }, + { + "series": [ + "3LOS-M050", + "3LOS-P050" + ] + } + ] + }, + { + "parallel": [ + "3LOS-H010A", + "3LOS-H010B" + ] + }, + "3LOS-M080", + "3LOS-P080", + { + "parallel": [ + "3LOS-S010A", + "3LOS-S010B" + ] + }, + "3LOS-PF080", + { + "parallel": [ + { + "series": [ + "3LOS-M020A", + "3LOS-F020A" + ] + }, + { + "series": [ + "3LOS-M020B", + "3LOS-F020B" + ] + } + ] + }, + "3LOS-ME020", + "3LOS-M060", + "3LOS-P060" + ] + }, + { + "series": [ + "3EHS-Z010", + { + "parallel": [ + { + "series": [ + "3EHS-M010A", + "3EHS-P010A" + ] + }, + { + "series": [ + "3EHS-M010B", + "3EHS-P010B" + ] + } + ] + }, + { + "parallel": [ + "3EHS-T090A", + "3EHS-T090B" + ] + }, + { + "parallel": [ + { + "series": [ + "3EHS-M015A", + "3EHS-F015A", + "3EHS-H010A" + ] + }, + { + "series": [ + "3EHS-M015B", + "3EHS-F015B", + "3EHS-H010B" + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3MT-ST010", + "3MT-ST020" + ] + }, + { + "series": [ + "3HPB-PCV010", + "EHB (BYPASS VALVES)" + ] + } + ] + }, + "3MT-ST030A", + "3MT-ST030B", + "3MT-AU040", + "3AS-T010", + "3AS-BS010", + { + "series": [ + "3SCW-PF001", + { + "parallel": [ + { + "series": [ + "3SCW-H023A", + "3SCW-M001A", + "3SCW-P001A" + ] + }, + { + "series": [ + "3SCW-H023B", + "3SCW-M001B", + "3SCW-P001B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "parallel": [ + { + "series": [ + "3CW-M020A", + "3CW-P020A" + ] + }, + { + "series": [ + "3CW-M020B", + "3CW-P020B" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3CW-M010A", + "3CW-P010A" + ] + }, + { + "series": [ + "3CW-M010B", + "3CW-P010B" + ] + } + ] + }, + { + "parallel": [ + "3CW-P011A", + "3CW-P011B" + ] + } + ] + } + ] + }, + "BOL_SOOTBLOWER_3AI-SFV501": { + "series": [ + "3AI-SFV501", + "221786" + ] + }, + "BOL_DP_FDR D": { + "series": [ + "3DP-FDR711D", + "3DP-M712D", + "3DP-M711D" + ] + }, + "AFG_IDF B": { + "series": [ + "3GG-M810B", + "3GG-F801B", + { + "parallel": [ + "3GG-F804A", + "3GG-F804B" + ] + }, + { + "parallel": [ + "3GG-F805A", + "3GG-F805B" + ] + }, + "3GG-M801B", + "3GG-T801B", + { + "parallel": [ + "3GG-P802A", + "3GG-P802B" + ] + } + ] + }, + "FGD_DS_VACUUM": { + "parallel": [ + { + "series": [ + "00DS-T901", + "00DS-M900", + "00DS-M901", + "00DS-P901", + "00DS-T900", + { + "parallel": [ + { + "series": [ + "00DS-M902A", + "00DS-P902A" + ] + }, + { + "series": [ + "00DS-M902B", + "00DS-P902B" + ] + } + ] + } + ] + }, + { + "series": [ + "00DS-T936", + "00DS-M935", + "00DS-M936", + "00DS-P936", + "00DS-T935", + { + "parallel": [ + { + "series": [ + "00DS-M937A", + "00DS-P937A" + ] + }, + { + "series": [ + "00DS-M937B", + "00DS-P937B" + ] + } + ] + } + ] + } + ] + }, + "SPS_EG": { + "series": [ + "3EG-E001", + "3EG-T003" + ] + }, + "FGD_RP_MILL A": { + "series": [ + "00RP-CY871", + "00RP-DX897", + { + "parallel": [ + "00RP-F991A", + "00RP-F991B" + ] + }, + "00RP-T885", + "00RP-M885", + "00RP-AG885", + "00RP-P992", + { + "parallel": [ + { + "series": [ + "00RP-P991A", + "00RP-M891A", + "00RP-P891A" + ] + }, + { + "series": [ + "00RP-P991B", + "00RP-M891B", + "00RP-P891B" + ] + } + ] + } + ] + }, + "- BTG -": { + "series": [ + { + "series": [ + { + "parallel_no_redundancy": [ + "3DCS-CAB001A", + "3DCS-CAB001B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB002A", + "3DCS-CAB002B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB003A", + "3DCS-CAB003B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB004A", + "3DCS-CAB004B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB005A", + "3DCS-CAB005B", + "3DCS-CAB005C" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB006A", + "3DCS-CAB006B" + ] + }, + "3DCS-CAB007", + "3DCS-CAB008", + { + "parallel_no_redundancy": [ + "3DCS-CAB009A", + "3DCS-CAB009B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB010A", + "3DCS-CAB010B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB011A", + "3DCS-CAB011B" + ] + }, + "3DCS-CAB012", + { + "parallel_no_redundancy": [ + "3DCS-CAB013A", + "3DCS-CAB013B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB014A", + "3DCS-CAB014B" + ] + }, + "3DCS-CAB015", + "3DCS-CO001", + { + "parallel_no_redundancy": [ + "3DCS-CO002A", + "3DCS-CO002B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CO003A", + "3DCS-CO003B", + "3DCS-CO003C", + "3DCS-CO003D" + ] + }, + "3DCS-CO004", + { + "parallel_no_redundancy": [ + "3DCS-CO005A", + "3DCS-CO005B", + "3DCS-CO005C" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CO006A", + "3DCS-CO006B", + "3DCS-CO006C" + ] + }, + "3DCS-CO007", + "3DCS-CO008" + ] + }, + { + "series": [ + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "00ACR-M001A", + "00ACR-C001A" + ] + }, + { + "series": [ + "00ACR-M001B", + "00ACR-C001B" + ] + } + ] + }, + { + "series": [ + "00ACR-M001C", + "00ACR-C001C" + ] + }, + { + "series": [ + "00ACR-M001D", + "00ACR-C001D" + ] + } + ] + }, + { + "parallel": [ + "00IA-A001A", + "00IA-A001B" + ] + }, + "3IA-T005" + ] + }, + { + "series": [ + "00SCR-Z001", + "00SCR-Z015" + ] + }, + { + "series": [ + "3FW-H040", + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOT-T010A", + { + "series": [ + "3LOT-H010A", + { + "parallel": [ + "3LOT-T090A", + "3LOT-T100A" + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOT-M010A", + "3LOT-P010A" + ] + }, + { + "series": [ + "3LOT-M020A", + "3LOT-P020A" + ] + } + ] + }, + { + "series": [ + "3LOT-M050A", + "3LOT-P050A" + ] + } + ] + }, + "3LOT-M080A", + "3LOT-P080A", + { + "parallel": [ + "3LOT-S010A", + "3LOT-S020A" + ] + }, + "3LOT-PF080A", + "3LOT-M120A", + "3LOT-F120A", + "3FW-P020A", + "3FW-H011A", + "3FW-H012A", + "3FW-AU030A", + "3FW-P010A", + "3BFT-ST010A", + "3BFT-AU040A" + ] + } + ] + }, + { + "series": [ + "3LOT-T010B", + { + "series": [ + "3LOT-H010B", + { + "parallel": [ + "3LOT-T090B", + "3LOT-T100B" + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOT-M010B", + "3LOT-P010B" + ] + }, + { + "series": [ + "3LOT-M020B", + "3LOT-P020B" + ] + } + ] + }, + { + "series": [ + "3LOT-M050B", + "3LOT-P050B" + ] + } + ] + }, + "3LOT-M080B", + "3LOT-P080B", + { + "parallel": [ + "3LOT-S010B", + "3LOT-S020B" + ] + }, + "3LOT-PF080B", + "3LOT-M120B", + "3LOT-F120B", + "3FW-P020B", + "3FW-H011B", + "3FW-H012B", + "3FW-AU030B", + "3FW-P010B", + "3BFT-ST010B", + "3BFT-AU040B" + ] + } + ] + } + ] + }, + { + "series": [ + "3LOM-M330", + "3LOM-P330", + "3LOM-H310", + "3LOM-P310", + "3LOM-H370", + "3LOM-P370", + "3FW-P310", + "3FW-M321", + "3FW-M320", + "3FW-AU330", + "3FW-H301", + "3FW-H302", + "3FW-P300" + ] + } + ] + }, + "3FW-H070", + "3FW-H060", + "3FW-H050" + ] + }, + { + "series": [ + { + "series": [ + "3BOL-FD501", + { + "parallel_no_redundancy": [ + { + "series": [ + { + "series": [ + "3DP-FDR711A", + "3DP-M712A", + "3DP-M711A" + ] + }, + { + "series": [ + "3DP-M741A", + "3DP-BM741A", + "3DP-CVT701A", + "3DP-CVT711A", + "3DP-M761A", + "3DP-P761A", + "3DP-M781A", + "3DP-P781A", + "3DP-M731A", + "3DP-BM731A" + ] + }, + { + "series": [ + "3DP-B701A", + "3DP-B702A", + "3DP-B703A", + "3DP-B704A" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711B", + "3DP-M712B", + "3DP-M711B" + ] + }, + { + "series": [ + "3DP-M741B", + "3DP-BM741B", + "3DP-CVT701B", + "3DP-CVT711B", + "3DP-M761B", + "3DP-P761B", + "3DP-M781B", + "3DP-P781B", + "3DP-M731B", + "3DP-BM731B" + ] + }, + { + "series": [ + "3DP-B701B", + "3DP-B702B", + "3DP-B703B", + "3DP-B704B" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711C", + "3DP-M712C", + "3DP-M711C" + ] + }, + { + "series": [ + "3DP-M741C", + "3DP-BM741C", + "3DP-CVT701C", + "3DP-CVT711C", + "3DP-M761C", + "3DP-P761C", + "3DP-M781C", + "3DP-P781C", + "3DP-M731C", + "3DP-BM731C" + ] + }, + { + "series": [ + "3DP-B701C", + "3DP-B702C", + "3DP-B703C", + "3DP-B704C" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711D", + "3DP-M712D", + "3DP-M711D" + ] + }, + { + "series": [ + "3DP-M741D", + "3DP-BM741D", + "3DP-CVT701D", + "3DP-CVT711D", + "3DP-M761D", + "3DP-P761D", + "3DP-M781D", + "3DP-P781D", + "3DP-M731D", + "3DP-BM731D" + ] + }, + { + "series": [ + "3DP-B701D", + "3DP-B702D", + "3DP-B703D", + "3DP-B704D" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711E", + "3DP-M712E", + "3DP-M711E" + ] + }, + { + "series": [ + "3DP-M741E", + "3DP-BM741E", + "3DP-CVT701E", + "3DP-CVT711E", + "3DP-M761E", + "3DP-P761E", + "3DP-M781E", + "3DP-P781E", + "3DP-M731E", + "3DP-BM731E" + ] + }, + { + "series": [ + "3DP-B701E", + "3DP-B702E", + "3DP-B703E", + "3DP-B704E" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711F", + "3DP-M712F", + "3DP-M711F" + ] + }, + { + "series": [ + "3DP-M741F", + "3DP-BM741F", + "3DP-CVT701F", + "3DP-CVT711F", + "3DP-M761F", + "3DP-P761F", + "3DP-M781F", + "3DP-P781F", + "3DP-M731F", + "3DP-BM731F" + ] + }, + { + "series": [ + "3DP-B701F", + "3DP-B702F", + "3DP-B703F", + "3DP-B704F" + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + "3FO-FCV501", + { + "parallel_no_redundancy": [ + { + "series": [ + "3DM-B701A", + "3DM-B702A", + "3DM-B703A", + "3DM-B704A" + ] + }, + { + "series": [ + "3DM-B701C", + "3DM-B702C", + "3DM-B703C", + "3DM-B704C" + ] + }, + { + "series": [ + "3DM-B701E", + "3DM-B702E", + "3DM-B703E", + "3DM-B704E" + ] + } + ] + } + ] + }, + { + "series": [ + "3BDW-H601", + "3BDW-T601", + "3BDW-H611", + "3BDW-H621", + "3BDW-H631", + "3BDW-H641", + { + "parallel_no_redundancy": [ + { + "series": [ + "3BDW-M521A", + "3BDW-P521A", + "3BDW-H521A" + ] + }, + { + "series": [ + "3BDW-M521B", + "3BDW-P521B", + "3BDW-H521B" + ] + } + ] + } + ] + }, + "3BOL-H501", + { + "series": [ + "3MS-HV011", + "3MS-HV012", + "3MS-HV013", + "3MS-HV014", + { + "parallel_no_redundancy": [ + "3MS-HV010A", + "3MS-HV010B" + ] + }, + { + "parallel_no_redundancy": [ + "3MS-W001A", + "3MS-W001B" + ] + }, + "3MS-W004" + ] + }, + { + "series": [ + "3BSS-H611", + { + "parallel_no_redundancy": [ + "3ATT-N501A", + "3ATT-N501B" + ] + }, + "3BSS-H621", + { + "parallel_no_redundancy": [ + "3ATT-N502A", + "3ATT-N502B" + ] + }, + "3BSS-H631" + ] + }, + "3CRH-W002", + { + "series": [ + "3BSS-H611", + { + "parallel_no_redundancy": [ + "3ATT-N501A", + "3ATT-N501B" + ] + }, + "3BSS-H621", + { + "parallel_no_redundancy": [ + "3ATT-N502A", + "3ATT-N502B" + ] + }, + "3BSS-H631" + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + "3HRH-HV020A", + "3HRH-HV020B" + ] + }, + "3ATT-N561", + "3ATT-N571", + "3ATT-N581" + ] + }, + { + "series": [ + "3AI-SFV501", + { + "parallel_no_redundancy": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501H", + "3AI-Y501H", + "3AI-M502H", + "3AI-Y502H", + "3AI-M503H", + "3AI-Y503H", + "3AI-M504H", + "3AI-Y504H", + "3AI-M505H", + "3AI-Y505H", + "3AI-M506H", + "3AI-Y506H" + ] + }, + { + "series": [ + "3AI-M501I", + "3AI-Y501I", + "3AI-M502I", + "3AI-Y502I", + "3AI-M503I", + "3AI-Y503I", + "3AI-M504I", + "3AI-Y504I", + "3AI-M505I", + "3AI-Y505I", + "3AI-M506I", + "3AI-Y506I" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501L", + "3AI-Y501L", + "3AI-M503L", + "3AI-Y503L", + "3AI-M504L", + "3AI-Y504L", + "3AI-M505L", + "3AI-Y505L" + ] + }, + { + "series": [ + "3AI-M502L", + "3AI-Y502L", + "3AI-M506L", + "3AI-Y506L", + "3AI-M507L", + "3AI-Y507L", + "3AI-M508L", + "3AI-Y508L", + "3AI-M509L", + "3AI-Y509L", + "3AI-M510L", + "3AI-Y510L" + ] + }, + { + "series": [ + "3AI-M511L", + "3AI-Y511L", + "3AI-M512L", + "3AI-Y512L", + "3AI-M513L", + "3AI-Y513L", + "3AI-M514L", + "3AI-Y514L", + "3AI-M515L", + "3AI-Y515L", + "3AI-M516L", + "3AI-Y516L" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501R", + "3AI-Y501R", + "3AI-M503R", + "3AI-Y503R", + "3AI-M504R", + "3AI-Y504R", + "3AI-M505R", + "3AI-Y505R" + ] + }, + { + "series": [ + "3AI-M502R", + "3AI-Y502R", + "3AI-M506R", + "3AI-Y506R", + "3AI-M507R", + "3AI-Y507R", + "3AI-M508R", + "3AI-Y508R", + "3AI-M509R", + "3AI-Y509R", + "3AI-M510R", + "3AI-Y510R" + ] + }, + { + "series": [ + "3AI-M511R", + "3AI-Y511R", + "3AI-M512R", + "3AI-Y512R", + "3AI-M513R", + "3AI-Y513R", + "3AI-M514R", + "3AI-Y514R", + "3AI-M515R", + "3AI-Y515R", + "3AI-M516R", + "3AI-Y516R" + ] + } + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501A", + "3AI-Y501A", + "3AI-M502A", + "3AI-Y502A", + "3AI-M503A", + "3AI-Y503A", + "3AI-M504A", + "3AI-Y504A", + "3AI-M505A", + "3AI-Y505A" + ] + }, + { + "series": [ + "3AI-M501B", + "3AI-Y501B", + "3AI-M502B", + "3AI-Y502B", + "3AI-M503B", + "3AI-Y503B", + "3AI-M504B", + "3AI-Y504B" + ] + }, + { + "series": [ + "3AI-M501C", + "3AI-Y501C", + "3AI-M502C", + "3AI-Y502C", + "3AI-M503C", + "3AI-Y503C", + "3AI-M504C", + "3AI-Y504C", + "3AI-M505C", + "3AI-Y505C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M506A", + "3AI-Y506A", + "3AI-M507A", + "3AI-Y507A", + "3AI-M508A", + "3AI-Y508A", + "3AI-M509A", + "3AI-Y509A" + ] + }, + { + "series": [ + "3AI-M505B", + "3AI-Y505B", + "3AI-M506B", + "3AI-Y506B", + "3AI-M507B", + "3AI-Y507B" + ] + }, + { + "series": [ + "3AI-M506C", + "3AI-Y506C", + "3AI-M507C", + "3AI-Y507C", + "3AI-M508C", + "3AI-Y508C", + "3AI-M509C", + "3AI-Y509C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M515A", + "3AI-Y515A", + "3AI-M516A", + "3AI-Y516A", + "3AI-M517A", + "3AI-Y517A", + "3AI-M518A", + "3AI-Y518A" + ] + }, + { + "series": [ + "3AI-M512B", + "3AI-Y512B", + "3AI-M513B", + "3AI-Y513B", + "3AI-M514B", + "3AI-Y514B" + ] + }, + { + "series": [ + "3AI-M515C", + "3AI-Y515C", + "3AI-M516C", + "3AI-Y516C", + "3AI-M517C", + "3AI-Y517C", + "3AI-M518C", + "3AI-Y518C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M510A", + "3AI-Y510A", + "3AI-M511A", + "3AI-Y511A", + "3AI-M512A", + "3AI-Y512A", + "3AI-M513A", + "3AI-Y513A", + "3AI-M514A", + "3AI-Y514A" + ] + }, + { + "series": [ + "3AI-M508B", + "3AI-Y508B", + "3AI-M509B", + "3AI-Y509B", + "3AI-M510B", + "3AI-Y510B", + "3AI-M511B", + "3AI-Y511B" + ] + }, + { + "series": [ + "3AI-M510C", + "3AI-Y510C", + "3AI-M511C", + "3AI-Y511C", + "3AI-M512C", + "3AI-Y512C", + "3AI-M513C", + "3AI-Y513C", + "3AI-M514C", + "3AI-Y514C" + ] + } + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M551A", + "3AI-Y551A" + ] + }, + { + "series": [ + "3AI-M551B", + "3AI-Y551B" + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOS-M010A", + "3LOS-P010A" + ] + }, + { + "series": [ + "3LOS-M010B", + "3LOS-P010B" + ] + } + ] + }, + { + "series": [ + "3LOS-M050", + "3LOS-P050" + ] + } + ] + }, + { + "parallel": [ + "3LOS-H010A", + "3LOS-H010B" + ] + }, + "3LOS-M080", + "3LOS-P080", + { + "parallel": [ + "3LOS-S010A", + "3LOS-S010B" + ] + }, + "3LOS-PF080", + { + "parallel": [ + { + "series": [ + "3LOS-M020A", + "3LOS-F020A" + ] + }, + { + "series": [ + "3LOS-M020B", + "3LOS-F020B" + ] + } + ] + }, + "3LOS-ME020", + "3LOS-M060", + "3LOS-P060" + ] + }, + { + "series": [ + "3EHS-Z010", + { + "parallel": [ + { + "series": [ + "3EHS-M010A", + "3EHS-P010A" + ] + }, + { + "series": [ + "3EHS-M010B", + "3EHS-P010B" + ] + } + ] + }, + { + "parallel": [ + "3EHS-T090A", + "3EHS-T090B" + ] + }, + { + "parallel": [ + { + "series": [ + "3EHS-M015A", + "3EHS-F015A", + "3EHS-H010A" + ] + }, + { + "series": [ + "3EHS-M015B", + "3EHS-F015B", + "3EHS-H010B" + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3MT-ST010", + "3MT-ST020" + ] + }, + { + "series": [ + "3HPB-PCV010", + "EHB (BYPASS VALVES)" + ] + } + ] + }, + "3MT-ST030A", + "3MT-ST030B", + "3MT-AU040", + "3AS-T010", + "3AS-BS010", + { + "series": [ + "3SCW-PF001", + { + "parallel": [ + { + "series": [ + "3SCW-H023A", + "3SCW-M001A", + "3SCW-P001A" + ] + }, + { + "series": [ + "3SCW-H023B", + "3SCW-M001B", + "3SCW-P001B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "parallel": [ + { + "series": [ + "3CW-M020A", + "3CW-P020A" + ] + }, + { + "series": [ + "3CW-M020B", + "3CW-P020B" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3CW-M010A", + "3CW-P010A" + ] + }, + { + "series": [ + "3CW-M010B", + "3CW-P010B" + ] + } + ] + }, + { + "parallel": [ + "3CW-P011A", + "3CW-P011B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3SCW-PF001", + { + "parallel": [ + { + "series": [ + "3SCW-H023A", + "3SCW-M001A", + "3SCW-P001A" + ] + }, + { + "series": [ + "3SCW-H023B", + "3SCW-M001B", + "3SCW-P001B" + ] + } + ] + } + ] + }, + "3GEN-GM001", + { + "series": [ + "3SO-T116", + "3SO-T114", + "3SO-T113", + { + "parallel": [ + { + "series": [ + "3SO-M001", + "3SO-P001" + ] + }, + { + "series": [ + "3SO-M002", + "3SO-P002" + ] + } + ] + } + ] + }, + { + "series": [ + "3GEN-EXC008", + "3GEN-EXC009", + "3GEN-EXC004", + "3GEN-EXC005", + "3GEN-GM001", + "3GEN-Z012", + { + "parallel_no_redundancy": [ + { + "series": [ + "3GEN-M101A", + "3GEN-M102A", + "3GEN-M103A" + ] + }, + { + "series": [ + "3GEN-M101B", + "3GEN-M102B", + "3GEN-M103B" + ] + } + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + "3GEN-M201A", + "3GEN-M202A", + "3GEN-M203A", + "3GEN-M204A", + "3GEN-M205A" + ] + }, + "3GEN-M206A" + ] + } + ] + }, + { + "series": [ + "3GMC-Z002", + "3GMC-Z001", + "3GMC-Z003", + { + "parallel_no_redundancy": [ + { + "series": [ + "3GEN-M211A", + "3GEN-M211B", + "3GEN-M211C" + ] + }, + { + "series": [ + "3GEN-M212A", + "3GEN-M212B", + "3GEN-M212C" + ] + }, + { + "series": [ + "3GEN-M213A", + "3GEN-M213B", + "3GEN-M213C" + ] + }, + { + "series": [ + "3GEN-M214A", + "3GEN-M214B", + "3GEN-M214C" + ] + } + ] + } + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3TR-TF002A", + "3TR-Z003A" + ] + }, + { + "series": [ + "3TR-TF002B", + "3TR-Z003B" + ] + } + ] + }, + "3TR-TF001", + "3TR-TF005", + { + "parallel_no_redundancy": [ + "3TR-F301", + "3TR-F302", + "3TR-F303", + "3TR-F304", + "3TR-F305", + "3TR-F306", + "3TR-F307", + "3TR-F308", + "3TR-F309", + "3TR-F310", + "3TR-F311", + "3TR-F312", + "3TR-F313", + "3TR-F314" + ] + } + ] + } + ] + }, + { + "series": [ + "3CO-M001", + { + "parallel": [ + { + "series": [ + "3CO-M001A", + "3CO-P001A" + ] + }, + { + "series": [ + "3CO-M001B", + "3CO-P001B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3CAE-M010A", + "3CAE-P010A", + "3CAE-H010A" + ] + }, + { + "series": [ + "3CAE-M010B", + "3CAE-P010B", + "3CAE-H010B" + ] + } + ] + }, + "3CO-FCV001", + "3CO-H010", + "3CO-H020", + "3CO-H030" + ] + }, + { + "series": [ + "3CCCW-T010", + "3CCCW-M090", + "3CCCW-P090", + { + "parallel": [ + { + "series": [ + "3CCCW-M010A", + "3CCCW-P010A", + "3CCCW-H010A" + ] + }, + { + "series": [ + "3CCCW-M010B", + "3CCCW-P010B", + "3CCCW-H010B" + ] + } + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + { + "series": [ + "3AF-FCV501A", + "3AF-M501A", + "3AF-F501A" + ] + }, + { + "series": [ + "3AL-PCV501A", + "3AL-M501A", + "3AL-F501A" + ] + }, + "AFG_RAPH A", + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3ESP-CAB801", + "3ESP-CAB821", + "A1-FIELD 1", + "A1-FIELD 2", + "A1-FIELD 3", + "A1-FIELD 4" + ] + }, + { + "series": [ + "3ESP-CAB802", + "3ESP-CAB822", + "A2-FIELD 1", + "A2-FIELD 2", + "A2-FIELD 3", + "A2-FIELD 4" + ] + } + ] + }, + "3GG-AX801A" + ] + }, + { + "series": [ + "3GG-M810A", + "3GG-F801A", + { + "parallel": [ + "3GG-F802A", + "3GG-F802B" + ] + }, + "3GG-M801A", + { + "parallel": [ + "3GG-F803A", + "3GG-F803B" + ] + }, + { + "parallel": [ + "3GG-P801A", + "3GG-P801B" + ] + } + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + "3GG-F853A", + "3GG-F853B", + "3GG-F853C", + "3GG-F853D" + ] + }, + "3GG-M851", + "3GG-M851A", + "3GG-F851", + "3GG-H877", + "3GG-F865A", + "3GG-M870A", + "3GG-F870A", + { + "parallel": [ + { + "series": [ + "3GG-M875A", + "3GG-F875A" + ] + }, + { + "series": [ + "3GG-M875B", + "3GG-F875B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3GG-M877A", + "3GG-P877A" + ] + }, + { + "series": [ + "3GG-M877B", + "3GG-P877B" + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3AF-FCV501B", + "3AF-M501B", + "3AF-F501B" + ] + }, + { + "series": [ + "3AL-PCV501B", + "3AL-M501B", + "3AL-F501B" + ] + }, + { + "series": [ + "3AH-AJ501B", + "3AH-M531B", + "3AH-P531B", + "3AH-H531B", + "3AH-M502B", + "3AH-M501B", + "3AH-H501B" + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3ESP-CAB803", + "3ESP-CAB823", + "B1-FIELD 1", + "B1-FIELD 2", + "B1-FIELD 3", + "B1-FIELD 4" + ] + }, + { + "series": [ + "3ESP-CAB804", + "3ESP-CAB824", + "B2-FIELD 1", + "B2-FIELD 2", + "B2-FIELD 3", + "B2-FIELD 4" + ] + } + ] + }, + "3GG-AX801B" + ] + }, + { + "series": [ + "3GG-M810B", + "3GG-F801B", + { + "parallel": [ + "3GG-F804A", + "3GG-F804B" + ] + }, + { + "parallel": [ + "3GG-F805A", + "3GG-F805B" + ] + }, + "3GG-M801B", + "3GG-T801B", + { + "parallel": [ + "3GG-P802A", + "3GG-P802B" + ] + } + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + "3GG-F854A", + "3GG-F854B", + "3GG-F854C", + "3GG-F854D" + ] + }, + "3GG-M852", + "3GG-M851B", + "3GG-F852", + "3GG-H878", + "3GG-F865B", + "3GG-M870B", + "3GG-F870B", + { + "parallel": [ + { + "series": [ + "3GG-M880A", + "3GG-F880A" + ] + }, + { + "series": [ + "3GG-M880B", + "3GG-F880B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3GG-M878A", + "3GG-P878A" + ] + }, + { + "series": [ + "3GG-M878B", + "3GG-P878B" + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + "3BAD-PAN501", + "3BAD-M531", + "3BAD-AGS31", + "3BAD-PN501", + { + "parallel": [ + { + "series": [ + "3BAD-H511A", + "3BAD-M511A", + "3BAD-P511A" + ] + }, + { + "series": [ + "3BAD-H511B", + "3BAD-M511B", + "3BAD-P511B" + ] + } + ] + }, + "3BAD-M501", + "3BAD-CV501", + "3BAD-T531", + "3BAD-T532", + { + "parallel": [ + { + "series": [ + "3BAD-M521A", + "3BAD-P521A" + ] + }, + { + "series": [ + "3BAD-M521B", + "3BAD-P521B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + { + "parallel_no_redundancy": [ + "3APC-CB811", + "3APC-CB812", + "3APC-CB813", + "3APC-CB814" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV001A", + "3APC-LV001B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV501A", + "3APC-LV501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV810A", + "3APC-LV810B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV811P1", + "3APC-LV811P2", + "3APC-LV811P3", + "3APC-LV811P4", + "3APC-LV811P5", + "3APC-LV811P21" + ] + }, + "3APC-LV851", + "3APC-MCC002", + { + "parallel_no_redundancy": [ + "3APC-MCC501A", + "3APC-MCC501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-MCC502A", + "3APC-MCC502B", + "3APC-MCC502C", + "3APC-MCC502D", + "3APC-MCC502E", + "3APC-MCC502F" + ] + }, + "3APC-MCC510", + "3APC-MCC851", + { + "parallel_no_redundancy": [ + "3APC-PD501A", + "3APC-PD501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-PD901", + "3APC-PD902" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-PD921", + "3APC-PD922" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF001A", + "3APC-TF001B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF501A", + "3APC-TF501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF502A", + "3APC-TF502B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF810A", + "3APC-TF810B" + ] + }, + "3APC-TF811", + "3APC-TF851" + ] + }, + { + "series": [ + "3APE-CAB552", + { + "parallel_no_redundancy": [ + "3APE-MV001A", + "3APE-MV001B" + ] + }, + { + "parallel_no_redundancy": [ + "3APE-MV002A", + "3APE-MV002B" + ] + }, + { + "parallel_no_redundancy": [ + "3APE-MV003A", + "3APE-MV003B", + "3APE-MV003C", + "3APE-MV003D" + ] + }, + { + "parallel_no_redundancy": [ + "3APE-MV004A", + "3APE-MV004B" + ] + }, + "3APE-MV851", + "3APE-MV852", + { + "parallel_no_redundancy": [ + "3APE-TF002A", + "3APE-TF002B" + ] + }, + "3APE-TF852", + { + "parallel_no_redundancy": [ + "3APE-Z005A", + "3APE-Z005B" + ] + } + ] + }, + { + "series": [ + "3EG-E001", + "3EG-T003" + ] + } + ] + }, + { + "series": [ + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3ABS-M879A", + "3ABS-AG879A" + ] + }, + { + "series": [ + "3ABS-M879B", + "3ABS-AG879B" + ] + }, + { + "series": [ + "3ABS-M879C", + "3ABS-AG879C" + ] + }, + { + "series": [ + "3ABS-M879D", + "3ABS-AG879D" + ] + }, + { + "series": [ + "3ABS-M879E", + "3ABS-AG879E" + ] + } + ] + }, + "3ABS-T931", + "3ABS-M931", + "3ABS-AG931", + { + "parallel": [ + { + "series": [ + "3ABS-M932A", + "3ABS-P932A" + ] + }, + { + "series": [ + "3ABS-M932B", + "3ABS-P932B" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3ABS-M888A", + "3ABS-P888A" + ] + }, + { + "series": [ + "3ABS-M888B", + "3ABS-P888B" + ] + }, + { + "series": [ + "3ABS-M888C", + "3ABS-P888C" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3ABS-M910A", + "3ABS-P910A" + ] + }, + { + "series": [ + "3ABS-M910B", + "3ABS-P910B" + ] + } + ] + }, + "3ABS-ABT858" + ] + } + ] + } + ] + }, + "TUR_EHB": { + "series": [ + "3EHB-Z010", + "3EHB-P020", + "3EHB-T110", + { + "parallel": [ + "3EHB-P010A", + "3EHB-P010B" + ] + } + ] + }, + "BOL_DP_CB D": { + "series": [ + "3DP-B701D", + "3DP-B702D", + "3DP-B703D", + "3DP-B704D" + ] + }, + "BOL_DP_MILL E": { + "series": [ + "3DP-M741E", + "3DP-BM741E", + "3DP-CVT701E", + "3DP-CVT711E", + "3DP-M761E", + "3DP-P761E", + "3DP-M781E", + "3DP-P781E", + "3DP-M731E", + "3DP-BM731E" + ] + }, + "FGD_RP_00RP-Z856A": { + "series": [ + "00RP-2856A", + "203554" + ] + }, + "AFG_ESP B": { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3ESP-CAB803", + "3ESP-CAB823", + "B1-FIELD 1", + "B1-FIELD 2", + "B1-FIELD 3", + "B1-FIELD 4" + ] + }, + { + "series": [ + "3ESP-CAB804", + "3ESP-CAB824", + "B2-FIELD 1", + "B2-FIELD 2", + "B2-FIELD 3", + "B2-FIELD 4" + ] + } + ] + }, + "3GG-AX801B" + ] + }, + "FGD_DS_CHLORIDE": { + "series": [ + "00DS-T888", + "00DS-M888", + "00DS-AG888", + { + "parallel": [ + { + "series": [ + "00DS-M883A", + "00DS-P883A" + ] + }, + { + "series": [ + "00DS-M883B", + "00DS-P883B" + ] + } + ] + } + ] + }, + "BOL_SB_RAPH": { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M551A", + "3AI-Y551A" + ] + }, + { + "series": [ + "3AI-M551B", + "3AI-Y551B" + ] + } + ] + }, + "- CMN_FGD -": { + "series": [ + { + "series": [ + { + "series": [ + "00DS-T888", + "00DS-M888", + "00DS-AG888", + { + "parallel": [ + { + "series": [ + "00DS-M883A", + "00DS-P883A" + ] + }, + { + "series": [ + "00DS-M883B", + "00DS-P883B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "parallel": [ + "00DS-CY851A", + "00DS-CY851B" + ] + }, + "00DS-T851", + "00DS-M851", + "00DS-AG851", + { + "parallel": [ + { + "series": [ + "00DS-M860A", + "00DS-P860A" + ] + }, + { + "series": [ + "00DS-M860B", + "00DS-P860B" + ] + } + ] + }, + "00DS-T852", + "00DS-CY865" + ] + }, + { + "parallel": [ + { + "series": [ + "00DS-T901", + "00DS-M900", + "00DS-M901", + "00DS-P901", + "00DS-T900", + { + "parallel": [ + { + "series": [ + "00DS-M902A", + "00DS-P902A" + ] + }, + { + "series": [ + "00DS-M902B", + "00DS-P902B" + ] + } + ] + } + ] + }, + { + "series": [ + "00DS-T936", + "00DS-M935", + "00DS-M936", + "00DS-P936", + "00DS-T935", + { + "parallel": [ + { + "series": [ + "00DS-M937A", + "00DS-P937A" + ] + }, + { + "series": [ + "00DS-M937B", + "00DS-P937B" + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00OA-M851A", + "00OA-F851A" + ] + }, + { + "series": [ + "00OA-M851B", + "00OA-F851B" + ] + }, + { + "series": [ + "00OA-M851C", + "00OA-F851C" + ] + } + ] + }, + { + "series": [ + "00LSH-SU801", + "00LSH-HO801", + "00LSH-BW801", + "00LSH-COG801", + "00LSH-M851", + "00LSH-VFD801", + "00LSH-VI851", + "00LSH-M853A", + "00LSH-CR853", + "00LSH-CV801", + "00LSH-M901", + "00LSH-F901", + "00LSH-DC901", + "00LSH-M5801", + "00LSH-M852", + "00LSH-CV852", + "00LSH-HO851" + ] + }, + { + "series": [ + "00RP-T985", + "00RP-M985", + "00RP-AG985", + { + "parallel": [ + { + "series": [ + "00RP-M986A", + "00RP-P986A" + ] + }, + { + "series": [ + "00RP-M986B", + "00RP-P986B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00RP-BM871", + { + "parallel_no_redundancy": [ + "00RP-M871A", + "00RP-M871B" + ] + } + ] + }, + { + "series": [ + "00RP-BM911", + { + "parallel": [ + "00RP-M911A", + "00RP-M911B" + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00RP-CY871", + "00RP-DX897", + { + "parallel": [ + "00RP-F991A", + "00RP-F991B" + ] + }, + "00RP-T885", + "00RP-M885", + "00RP-AG885", + "00RP-P992", + { + "parallel": [ + { + "series": [ + "00RP-P991A", + "00RP-M891A", + "00RP-P891A" + ] + }, + { + "series": [ + "00RP-P991B", + "00RP-M891B", + "00RP-P891B" + ] + } + ] + } + ] + }, + { + "series": [ + "00RP-CY911", + "00RP-DX837", + { + "parallel": [ + "00RP-F995A", + "00RP-F995B" + ] + }, + "00RP-F995A", + "00RP-T925", + "00RP-M925", + "00RP-AG925", + "00RP-P995", + { + "parallel": [ + { + "series": [ + "00RP-P995A", + "00RP-M931A", + "00RP-P931A" + ] + }, + { + "series": [ + "00RP-P995B", + "00RP-M931B", + "00RP-P931B" + ] + } + ] + } + ] + } + ] + }, + "00RP-T970", + "00RP-M970", + "00RP-AG970", + { + "parallel": [ + { + "series": [ + "00RP-M972A", + "00RP-P972A" + ] + }, + { + "series": [ + "00RP-M972B", + "00RP-P972B" + ] + } + ] + }, + "00RP-T950", + "00RP-M950", + "00RP-AG950", + { + "parallel": [ + { + "series": [ + "00RP-M952A", + "00RP-P952A" + ] + }, + { + "series": [ + "00RP-M952B", + "00RP-P952B" + ] + } + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + "00RP-Z851A", + "00RP-Z851B", + "00RP-Z851C" + ] + }, + "00RP-Z851D" + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "00RP-M856A", + "00RP-Z856A" + ] + }, + { + "series": [ + "00RP-M856B", + "00RP-Z856B" + ] + } + ] + }, + "00RP-DX979" + ] + } + ] + }, + "BOL_BDW": { + "series": [ + "3BDW-H601", + "3BDW-T601", + "3BDW-H611", + "3BDW-H621", + "3BDW-H631", + "3BDW-H641", + { + "parallel_no_redundancy": [ + { + "series": [ + "3BDW-M521A", + "3BDW-P521A", + "3BDW-H521A" + ] + }, + { + "series": [ + "3BDW-M521B", + "3BDW-P521B", + "3BDW-H521B" + ] + } + ] + } + ] + }, + "TUR_LOS": { + "series": [ + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOS-M010A", + "3LOS-P010A" + ] + }, + { + "series": [ + "3LOS-M010B", + "3LOS-P010B" + ] + } + ] + }, + { + "series": [ + "3LOS-M050", + "3LOS-P050" + ] + } + ] + }, + { + "parallel": [ + "3LOS-H010A", + "3LOS-H010B" + ] + }, + "3LOS-M080", + "3LOS-P080", + { + "parallel": [ + "3LOS-S010A", + "3LOS-S010B" + ] + }, + "3LOS-PF080", + { + "parallel": [ + { + "series": [ + "3LOS-M020A", + "3LOS-F020A" + ] + }, + { + "series": [ + "3LOS-M020B", + "3LOS-F020B" + ] + } + ] + }, + "3LOS-ME020", + "3LOS-M060", + "3LOS-P060" + ] + }, + "FGD_LSH": { + "series": [ + "00LSH-SU801", + "00LSH-HO801", + "00LSH-BW801", + "00LSH-COG801", + "00LSH-M851", + "00LSH-VFD801", + "00LSH-VI851", + "00LSH-M853A", + "00LSH-CR853", + "00LSH-CV801", + "00LSH-M901", + "00LSH-F901", + "00LSH-DC901", + "00LSH-M5801", + "00LSH-M852", + "00LSH-CV852", + "00LSH-HO851" + ] + }, + "- CMN_CP -": { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M110A", + "00RO-P110A" + ] + }, + { + "series": [ + "00RO-M110B", + "00RO-P110B" + ] + }, + { + "series": [ + "00RO-M110C", + "00RO-P110C" + ] + }, + { + "series": [ + "00RO-M110D", + "00RO-P110D" + ] + } + ] + }, + "00RO-T120", + "FeCl3 DOSING", + "ANIONIC POLYMER DOSING", + "CLEAR WATER", + "CLARIFIER", + "00RO-T170", + { + "parallel": [ + { + "series": [ + "00RO-M195A", + "00RO-P195A" + ] + }, + { + "series": [ + "00RO-M195B", + "00RO-P195B" + ] + } + ] + }, + "00RO-T320", + "00RO-T130", + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M126A", + "00RO-P126A" + ] + }, + { + "series": [ + "00RO-M126B", + "00RO-P126B" + ] + }, + { + "series": [ + "00RO-M126C", + "00RO-P126C" + ] + }, + { + "series": [ + "00RO-M126D", + "00RO-P126D" + ] + } + ] + }, + "NaOCL DOSING", + { + "parallel": [ + { + "series": [ + "00RO-F161A", + "00RO-M152A", + "00RO-F152A" + ] + }, + { + "series": [ + "00RO-F161B", + "00RO-M152B", + "00RO-F152B" + ] + } + ] + }, + "00RO-T150", + { + "parallel": [ + { + "series": [ + "00RO-M150A", + "00RO-P150A" + ] + }, + { + "series": [ + "00RO-M150B", + "00RO-P150B" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M160A", + "00RO-P160A" + ] + }, + { + "series": [ + "00RO-M160B", + "00RO-P160B" + ] + }, + { + "series": [ + "00RO-M160C", + "00RO-P160C" + ] + }, + { + "series": [ + "00RO-M160D", + "00RO-P160D" + ] + } + ] + }, + "H2SO4 DOSING", + "SBS DOSING", + "ANTI SCALANT DOSING", + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M170A", + "00RO-P170A", + "00RO-T160A", + "00RO-Z110A" + ] + }, + { + "series": [ + "00RO-M170B", + "00RO-P170B", + "00RO-T160B", + "00RO-Z110B" + ] + }, + { + "series": [ + "00RO-M170C", + "00RO-P170C", + "00RO-T160C", + "00RO-Z110C" + ] + }, + { + "series": [ + "00RO-M170D", + "00RO-P170D", + "00RO-T160D", + "00RO-Z110D" + ] + } + ] + }, + "NaOH DOSING", + "00RO-H181", + "00RO-AG181", + "00RO-M181", + { + "parallel": [ + { + "series": [ + "00RO-M180A", + "00RO-P180A" + ] + }, + { + "series": [ + "00RO-M180B", + "00RO-P180B" + ] + } + ] + }, + "header 3", + { + "parallel": [ + { + "series": [ + "00RO-M340A", + "00RO-P340A" + ] + }, + { + "series": [ + "00RO-M340B", + "00RO-P340B" + ] + } + ] + }, + "00RO-T162", + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M190A", + "00RO-P190A" + ] + }, + { + "series": [ + "00RO-M190B", + "00RO-P190B" + ] + } + ] + } + ] + }, + "BOL_DP_CB F": { + "series": [ + "3DP-B701F", + "3DP-B702F", + "3DP-B703F", + "3DP-B704F" + ] + }, + "TUR_EHS": { + "series": [ + "3EHS-Z010", + { + "parallel": [ + { + "series": [ + "3EHS-M010A", + "3EHS-P010A" + ] + }, + { + "series": [ + "3EHS-M010B", + "3EHS-P010B" + ] + } + ] + }, + { + "parallel": [ + "3EHS-T090A", + "3EHS-T090B" + ] + }, + { + "parallel": [ + { + "series": [ + "3EHS-M015A", + "3EHS-F015A", + "3EHS-H010A" + ] + }, + { + "series": [ + "3EHS-M015B", + "3EHS-F015B", + "3EHS-H010B" + ] + } + ] + } + ] + }, + "GEN_GMC": { + "series": [ + "3GMC-Z002", + "3GMC-Z001", + "3GMC-Z003", + { + "parallel_no_redundancy": [ + { + "series": [ + "3GEN-M211A", + "3GEN-M211B", + "3GEN-M211C" + ] + }, + { + "series": [ + "3GEN-M212A", + "3GEN-M212B", + "3GEN-M212C" + ] + }, + { + "series": [ + "3GEN-M213A", + "3GEN-M213B", + "3GEN-M213C" + ] + }, + { + "series": [ + "3GEN-M214A", + "3GEN-M214B", + "3GEN-M214C" + ] + } + ] + } + ] + }, + "AFG_ESP A": { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3ESP-CAB801", + "3ESP-CAB821", + "A1-FIELD 1", + "A1-FIELD 2", + "A1-FIELD 3", + "A1-FIELD 4" + ] + }, + { + "series": [ + "3ESP-CAB802", + "3ESP-CAB822", + "A2-FIELD 1", + "A2-FIELD 2", + "A2-FIELD 3", + "A2-FIELD 4" + ] + } + ] + }, + "3GG-AX801A" + ] + }, + "BOL_HRH": { + "series": [ + { + "parallel_no_redundancy": [ + "3HRH-HV020A", + "3HRH-HV020B" + ] + }, + "3ATT-N561", + "3ATT-N571", + "3ATT-N581" + ] + }, + "- BTG_SAC -": { + "series": [ + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "00ACR-M001A", + "00ACR-C001A" + ] + }, + { + "series": [ + "00ACR-M001B", + "00ACR-C001B" + ] + } + ] + }, + { + "series": [ + "00ACR-M001C", + "00ACR-C001C" + ] + }, + { + "series": [ + "00ACR-M001D", + "00ACR-C001D" + ] + } + ] + }, + { + "parallel": [ + "00IA-A001A", + "00IA-A001B" + ] + }, + "3IA-T005" + ] + }, + "AFG_RAPH A ": { + "series": [ + "3AH-AU501A", + "3AH-M531A", + "3AH-P531A", + "3AH-H531A", + "3AH-M502A", + "3AH-M501A", + "3AH-H501A" + ] + }, + "FW_BFT B": { + "series": [ + "3LOT-H010B", + { + "parallel": [ + "3LOT-T090B", + "3LOT-T100B" + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOT-M010B", + "3LOT-P010B" + ] + }, + { + "series": [ + "3LOT-M020B", + "3LOT-P020B" + ] + } + ] + }, + { + "series": [ + "3LOT-M050B", + "3LOT-P050B" + ] + } + ] + }, + "3LOT-M080B", + "3LOT-P080B", + { + "parallel": [ + "3LOT-S010B", + "3LOT-S020B" + ] + }, + "3LOT-PF080B", + "3LOT-M120B", + "3LOT-F120B", + "3FW-P020B", + "3FW-H011B", + "3FW-H012B", + "3FW-AU030B", + "3FW-P010B", + "3BFT-ST010B", + "3BFT-AU040B" + ] + }, + "- BTG_PC -": { + "series": [ + { + "parallel_no_redundancy": [ + "3DCS-CAB001A", + "3DCS-CAB001B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB002A", + "3DCS-CAB002B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB003A", + "3DCS-CAB003B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB004A", + "3DCS-CAB004B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB005A", + "3DCS-CAB005B", + "3DCS-CAB005C" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB006A", + "3DCS-CAB006B" + ] + }, + "3DCS-CAB007", + "3DCS-CAB008", + { + "parallel_no_redundancy": [ + "3DCS-CAB009A", + "3DCS-CAB009B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB010A", + "3DCS-CAB010B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB011A", + "3DCS-CAB011B" + ] + }, + "3DCS-CAB012", + { + "parallel_no_redundancy": [ + "3DCS-CAB013A", + "3DCS-CAB013B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB014A", + "3DCS-CAB014B" + ] + }, + "3DCS-CAB015", + "3DCS-CO001", + { + "parallel_no_redundancy": [ + "3DCS-CO002A", + "3DCS-CO002B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CO003A", + "3DCS-CO003B", + "3DCS-CO003C", + "3DCS-CO003D" + ] + }, + "3DCS-CO004", + { + "parallel_no_redundancy": [ + "3DCS-CO005A", + "3DCS-CO005B", + "3DCS-CO005C" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CO006A", + "3DCS-CO006B", + "3DCS-CO006C" + ] + }, + "3DCS-CO007", + "3DCS-CO008" + ] + }, + "BOL_DP_FDR B": { + "series": [ + "3DP-FDR711B", + "3DP-M712B", + "3DP-M711B" + ] + }, + "- BTG_KLH -": { + "series": [ + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3ABS-M879A", + "3ABS-AG879A" + ] + }, + { + "series": [ + "3ABS-M879B", + "3ABS-AG879B" + ] + }, + { + "series": [ + "3ABS-M879C", + "3ABS-AG879C" + ] + }, + { + "series": [ + "3ABS-M879D", + "3ABS-AG879D" + ] + }, + { + "series": [ + "3ABS-M879E", + "3ABS-AG879E" + ] + } + ] + }, + "3ABS-T931", + "3ABS-M931", + "3ABS-AG931", + { + "parallel": [ + { + "series": [ + "3ABS-M932A", + "3ABS-P932A" + ] + }, + { + "series": [ + "3ABS-M932B", + "3ABS-P932B" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3ABS-M888A", + "3ABS-P888A" + ] + }, + { + "series": [ + "3ABS-M888B", + "3ABS-P888B" + ] + }, + { + "series": [ + "3ABS-M888C", + "3ABS-P888C" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3ABS-M910A", + "3ABS-P910A" + ] + }, + { + "series": [ + "3ABS-M910B", + "3ABS-P910B" + ] + } + ] + }, + "3ABS-ABT858" + ] + } + ] + } +} \ No newline at end of file diff --git a/model/converter.py b/model/converter.py new file mode 100644 index 0000000..98d3b92 --- /dev/null +++ b/model/converter.py @@ -0,0 +1,163 @@ +import json +from collections import defaultdict +from sqlalchemy import create_engine, text + +# 🔧 Adjust this to your environment +DB_URL = "postgresql+psycopg2://postgres:postgres@192.168.1.86:5432/digital_aeros_fixed" + +def export_rbd_json(project_id, output_file="rbd.json"): + engine = create_engine(DB_URL) + + with engine.connect() as conn: + # --- Project info --- + project = conn.execute( + text('SELECT "ProjectId","ProjectName" FROM public."Projects" WHERE "ProjectId" = :pid'), + {"pid": project_id} + ).mappings().first() + if not project: + raise ValueError(f"❌ Project {project_id} not found") + + print(f"🔍 Loaded project: {project['ProjectName']} (ID={project_id})") + + # --- Schematics --- + schematics = conn.execute( + text('SELECT "SchematicId","SchematicName" FROM public."Schematics" WHERE "ProjectId" = :pid'), + {"pid": project_id} + ).mappings().all() + + all_schematics_json = {} + + for s in schematics: + sid = s["SchematicId"] + sname = s["SchematicName"] + print(f"\n=== Processing schematic {sid} ({sname}) ===") + + # --- Nodes --- + nodes_data = conn.execute( + text('SELECT "NodeId","NodeUIId","NodeName","NodeTypeCode" ' + 'FROM public."RegularNodes" WHERE "SchematicId" = :sid'), + {"sid": sid} + ).mappings().all() + + # dict keyed by NodeId + nodes = {str(n["NodeId"]): dict(n) for n in nodes_data} + # map UIId -> NodeId + uiid_to_id = {str(n["NodeUIId"]): str(n["NodeId"]) for n in nodes_data} + + print(f"🟦 Nodes: {len(nodes)}") + + # --- Connectors (edges) --- + edges = conn.execute( + text('SELECT "SourceUIId","SinkUIId" FROM public."Connectors" WHERE "SchematicId" = :sid'), + {"sid": sid} + ).mappings().all() + + children_map = defaultdict(list) + for e in edges: + src_ui = str(e["SourceUIId"]) + sink_ui = str(e["SinkUIId"]) + if src_ui in uiid_to_id and sink_ui in uiid_to_id: + src_id = uiid_to_id[src_ui] + sink_id = uiid_to_id[sink_ui] + children_map[src_id].append(sink_id) + + print(f"🔗 Connectors: {len(edges)}") + + # --- Redundancies --- + redundancies = conn.execute( + text('SELECT * FROM public."Redundancies" WHERE "SchematicId" = :sid'), + {"sid": sid} + ).mappings().all() + + states = conn.execute( + text('SELECT * FROM public."RedundancyStates" WHERE "RedundancyId" IN ' + '(SELECT "RedundancyId" FROM public."Redundancies" WHERE "SchematicId" = :sid)'), + {"sid": sid} + ).mappings().all() + + state_cells = conn.execute( + text('SELECT * FROM public."RedundancyStateCells" WHERE "RedundancyStateId" IN ' + '(SELECT "StateId" FROM public."RedundancyStates" WHERE "RedundancyId" IN ' + '(SELECT "RedundancyId" FROM public."Redundancies" WHERE "SchematicId" = :sid))'), + {"sid": sid} + ).mappings().all() + + # Build redundancy structure + redundancy_map = {} + for r in redundancies: + rid = str(r["RedundancyId"]) + redundancy_map[rid] = { + "name": r["RedundancyName"], + "type": "standby" if r["IsKNStandby"] else "kofn", + "min_required": r["MinRequiredNodes"], + "switch_delay": r["SwitchDelay"], + "states": {} + } + + for st in states: + sid2 = str(st["StateId"]) + rid = str(st["RedundancyId"]) + redundancy_map[rid]["states"][sid2] = { + "priority": st["StatePriority"], + "duration": st["StateDuration"], + "cells": [] + } + + for c in state_cells: + sid2 = str(c["RedundancyStateId"]) + for r_id, r in redundancy_map.items(): + if sid2 in r["states"]: + node_id = str(c["InvolvedNodeId"]) + if node_id in nodes: # only link if valid + r["states"][sid2]["cells"].append({ + "node_id": node_id, + "status": c["NodeStatusCode"] + }) + break + + # --- Build JSON nodes --- + json_nodes = {} + for node_id, n in nodes.items(): + node_type = str(n["NodeTypeCode"]).lower() + node_json = { + "type": node_type, + "name": n["NodeName"], + "children": children_map.get(node_id, []), # now NodeId-based + "availability": 1.0 # ✅ default availability + } + json_nodes[node_id] = node_json + + # --- Root detection --- + all_children = {c for lst in children_map.values() for c in lst} + root_candidates = [nid for nid in nodes.keys() if nid not in all_children] + root = root_candidates[0] if root_candidates else None + print(f"🌳 Root node detected: {root}") + + # --- Assemble schematic JSON --- + schematic_json = { + "schematic_id": sid, + "schematic_name": sname, + "root": str(root) if root else None, + "nodes": json_nodes, + "redundancies": redundancy_map + } + all_schematics_json[str(sid)] = schematic_json + + print(f"✅ Finished schematic {sid}") + + # --- Final JSON --- + final_json = { + "project_id": project["ProjectId"], + "project_name": project["ProjectName"], + "schematics": all_schematics_json + } + + with open(output_file, "w") as f: + json.dump(final_json, f, indent=2) + + print(f"\n🎉 Exported simplified RBD JSON (NodeId-based, availability=1.0) " + f"for Project {project_id} → {output_file}") + + +if __name__ == "__main__": + export_rbd_json(project_id=70, output_file="project_70_rbd.json") diff --git a/model/main.py b/model/main.py new file mode 100644 index 0000000..c43c8af --- /dev/null +++ b/model/main.py @@ -0,0 +1,298 @@ + + + +mainStructure = { + "series": [ + # "BTG" + { + "series": [ + # "BTG_PC", + { + "series": [ + { + "parallel_no_redundancy": [ + "3DCS-CAB001A", + "3DCS-CAB001B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB002A", + "3DCS-CAB002B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB003A", + "3DCS-CAB003B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB004A", + "3DCS-CAB004B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB005A", + "3DCS-CAB005B", + "3DCS-CAB005C" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB006A", + "3DCS-CAB006B" + ] + }, + "3DCS-CAB007", + "3DCS-CAB008", + { + "parallel_no_redundancy": [ + "3DCS-CAB009A", + "3DCS-CAB009B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB010A", + "3DCS-CAB010B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB011A", + "3DCS-CAB011B" + ] + }, + "3DCS-CAB012", + { + "parallel_no_redundancy": [ + "3DCS-CAB013A", + "3DCS-CAB013B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB014A", + "3DCS-CAB014B" + ] + }, + "3DCS-CAB015", + "3DCS-CO001", + { + "parallel_no_redundancy": [ + "3DCS-CO002A", + "3DCS-CO002B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CO003A", + "3DCS-CO003B", + "3DCS-CO003C", + "3DCS-CO003D" + ] + }, + "3DCS-CO004", + { + "parallel_no_redundancy": [ + "3DCS-CO005A", + "3DCS-CO005B", + "3DCS-CO005C" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CO006A", + "3DCS-CO006B", + "3DCS-CO006C" + ] + }, + "3DCS-CO007", + "3DCS-CO008" + ] + }, + #"BTG_SAC", + { + "series": [ + { + "parallel": [ + { + "parallel_no_redundancy": [ + {"series": ["00ACR-M001A", "00ACR-C001A"]}, + {"series": ["00ACR-M001B", "00ACR-C001B"]} + ] + }, + {"series": ["00ACR-M001C", "00ACR-C001C"]}, + {"series": ["00ACR-M001D", "00ACR-C001D"]} + ] + }, + { + "parallel": ["00IA-A001A", "00IA-A001B"] + }, + "3IA-T005" + ] + }, + #"BTG_SCR", + { + "series": ["00SCR-Z001", "00SCR-Z015"] + }, + #"BTG_FW", + { + "series": [ + "3FW-H040", + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOT-T010A", + #"FW_BFT A" + { + "series": [ + "3LOT-H010A", + { + "parallel": ["3LOT-T090A", "3LOT-T100A"] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + {"series": ["3LOT-M010A", "3LOT-P010A"]}, + {"series": ["3LOT-M020A", "3LOT-P020A"]} + ] + }, + {"series": ["3LOT-M050A", "3LOT-P050A"]} + ] + }, + "3LOT-M080A", + "3LOT-P080A", + { + "parallel": ["3LOT-S010A", "3LOT-S020A"] + }, + "3LOT-PF080A", + "3LOT-M120A", + "3LOT-F120A", + "3FW-P020A", + "3FW-H011A", + "3FW-H012A", + "3FW-AU030A", + "3FW-P010A", + "3BFT-ST010A", + "3BFT-AU040A" + ] + }, + ] + }, + { + "series": [ + "3LOT-T010B", + #"FW_BFT B" + { + "series": [ + "3LOT-H010B", + { + "parallel": ["3LOT-T090B", "3LOT-T100B"] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + {"series": ["3LOT-M010B", "3LOT-P010B"]}, + {"series": ["3LOT-M020B", "3LOT-P020B"]} + ] + }, + {"series": ["3LOT-M050B", "3LOT-P050B"]} + ] + }, + "3LOT-M080B", + "3LOT-P080B", + { + "parallel": ["3LOT-S010B", "3LOT-S020B"] + }, + "3LOT-PF080B", + "3LOT-M120B", + "3LOT-F120B", + "3FW-P020B", + "3FW-H011B", + "3FW-H012B", + "3FW-AU030B", + "3FW-P010B", + "3BFT-ST010B", + "3BFT-AU040B" + ] +} + ] + } + ] + }, + #"FW_MBFP" + { + "series": ["3LOM-M330", "3LOM-P330", "3LOM-H310", "3LOM-P310", "3LOM-H370", "3LOM-P370", "3FW-P310", "3FW-M321", "3FW-M320", "3FW-AU330", "3FW-H301", "3FW-H302", "3FW-P300"] + } + ] + }, + "3FW-H070", + "3FW-H060", + "3FW-H050" + ] + }, + #"BTG_BOL", + { + "series": [ + #"BOL_DP", + { + "series": [ + "3BOL-FD501", + { + "parallel_no_redundancy": [ + {"series": [{ + "series": ["3DP-FDR711A", "3DP-M712A", "3DP-M711A"] +}, { + "series": ["3DP-M741A", "3DP-BM741A", "3DP-CVT701A", "3DP-CVT711A", "3DP-M761A", "3DP-P761A", "3DP-M781A", "3DP-P781A", "3DP-M731A", "3DP-BM731A"] +}, { + "series": ["3DP-B701A", "3DP-B702A", "3DP-B703A", "3DP-B704A"] +}]}, + {"series": [{ + "series": ["3DP-FDR711B", "3DP-M712B", "3DP-M711B"] +}, { + "series": ["3DP-M741B", "3DP-BM741B", "3DP-CVT701B", "3DP-CVT711B", "3DP-M761B", "3DP-P761B", "3DP-M781B", "3DP-P781B", "3DP-M731B", "3DP-BM731B"] +}, { + "series": ["3DP-B701B", "3DP-B702B", "3DP-B703B", "3DP-B704B"] +}]}, + {"series": ["BOL_DP_FDR C", "BOL_DP_MILL C", "BOL_DP_CB 3"]}, + {"series": ["BOL_DP_FDR D", "BOL_DP_MILL D", "BOL_DP_CB 4"]}, + {"series": ["BOL_DP_FDR E", "BOL_DP_MILL E", "BOL_DP_CB 5"]}, + {"series": ["BOL_DP_FDR F", "BOL_DP_MILL F", "BOL_DP_CB 6"]} + ] + } + ] + }, + "BOL_OB", + "BOL_BDW", + "3BOL-H501", + "BOL_MS", + "BOL_BSS", + "3CRH-W002", + "BOL_BRS", + "BOL_HRH", + "BOL_SB" + ] + }, + "BTG_TUR", + "BTG_GEN", + "BTG_COND", + "BTG_CW", + "BTG_AFG", + "BTG_ASH", + "BTG_SPS", + "BTG_KLH" + ] + }, + + "CMN" + ] +} \ No newline at end of file diff --git a/model/project_70_rbd.json b/model/project_70_rbd.json new file mode 100644 index 0000000..d28d93d --- /dev/null +++ b/model/project_70_rbd.json @@ -0,0 +1,11987 @@ +{ + "project_id": 70, + "project_name": "- TJB Unit 3 - OH Mar2023-Oct2025_1759292271", + "schematics": { + "9974": { + "schematic_id": 9974, + "schematic_name": "- BTG -", + "root": null, + "nodes": {}, + "redundancies": {} + }, + "9975": { + "schematic_id": 9975, + "schematic_name": "- CMN -", + "root": "111738", + "nodes": { + "111738": { + "type": "regularnode", + "name": "WTP", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "9976": { + "schematic_id": 9976, + "schematic_name": "- BTG_PC -", + "root": "111739", + "nodes": { + "111739": { + "type": "regularnode", + "name": "3DCS-CAB001A", + "children": [], + "availability": 1.0 + }, + "111740": { + "type": "regularnode", + "name": "3DCS-CAB001B", + "children": [], + "availability": 1.0 + }, + "111741": { + "type": "regularnode", + "name": "3DCS-CAB002A", + "children": [], + "availability": 1.0 + }, + "111742": { + "type": "regularnode", + "name": "3DCS-CAB002B", + "children": [], + "availability": 1.0 + }, + "111743": { + "type": "regularnode", + "name": "3DCS-CAB003A", + "children": [], + "availability": 1.0 + }, + "111744": { + "type": "regularnode", + "name": "3DCS-CAB003B", + "children": [], + "availability": 1.0 + }, + "111745": { + "type": "regularnode", + "name": "3DCS-CAB004A", + "children": [], + "availability": 1.0 + }, + "111746": { + "type": "regularnode", + "name": "3DCS-CAB004B", + "children": [], + "availability": 1.0 + }, + "111747": { + "type": "regularnode", + "name": "3DCS-CAB005A", + "children": [], + "availability": 1.0 + }, + "111748": { + "type": "regularnode", + "name": "3DCS-CAB005B", + "children": [], + "availability": 1.0 + }, + "111749": { + "type": "regularnode", + "name": "3DCS-CAB005C", + "children": [], + "availability": 1.0 + }, + "111750": { + "type": "regularnode", + "name": "3DCS-CAB006A", + "children": [], + "availability": 1.0 + }, + "111751": { + "type": "regularnode", + "name": "3DCS-CAB006B", + "children": [], + "availability": 1.0 + }, + "111752": { + "type": "regularnode", + "name": "3DCS-CAB007", + "children": [ + "111753" + ], + "availability": 1.0 + }, + "111753": { + "type": "regularnode", + "name": "3DCS-CAB008", + "children": [], + "availability": 1.0 + }, + "111754": { + "type": "regularnode", + "name": "3DCS-CAB009A", + "children": [], + "availability": 1.0 + }, + "111755": { + "type": "regularnode", + "name": "3DCS-CAB009B", + "children": [], + "availability": 1.0 + }, + "111756": { + "type": "regularnode", + "name": "3DCS-CAB010A", + "children": [], + "availability": 1.0 + }, + "111757": { + "type": "regularnode", + "name": "3DCS-CAB010B", + "children": [], + "availability": 1.0 + }, + "111758": { + "type": "regularnode", + "name": "3DCS-CAB011A", + "children": [], + "availability": 1.0 + }, + "111759": { + "type": "regularnode", + "name": "3DCS-CAB011B", + "children": [], + "availability": 1.0 + }, + "111760": { + "type": "regularnode", + "name": "3DCS-CAB012", + "children": [], + "availability": 1.0 + }, + "111761": { + "type": "regularnode", + "name": "3DCS-CAB013A", + "children": [], + "availability": 1.0 + }, + "111762": { + "type": "regularnode", + "name": "3DCS-CAB013B", + "children": [], + "availability": 1.0 + }, + "111763": { + "type": "regularnode", + "name": "3DCS-CAB014A", + "children": [], + "availability": 1.0 + }, + "111764": { + "type": "regularnode", + "name": "3DCS-CAB014B", + "children": [], + "availability": 1.0 + }, + "111765": { + "type": "regularnode", + "name": "3DCS-CAB015", + "children": [ + "111766" + ], + "availability": 1.0 + }, + "111766": { + "type": "regularnode", + "name": "3DCS-CO001", + "children": [], + "availability": 1.0 + }, + "111767": { + "type": "regularnode", + "name": "3DCS-CO002A", + "children": [], + "availability": 1.0 + }, + "111768": { + "type": "regularnode", + "name": "3DCS-CO002B", + "children": [], + "availability": 1.0 + }, + "111769": { + "type": "regularnode", + "name": "3DCS-CO003A", + "children": [], + "availability": 1.0 + }, + "111770": { + "type": "regularnode", + "name": "3DCS-CO003B", + "children": [], + "availability": 1.0 + }, + "111771": { + "type": "regularnode", + "name": "3DCS-CO003C", + "children": [], + "availability": 1.0 + }, + "111772": { + "type": "regularnode", + "name": "3DCS-CO003D", + "children": [], + "availability": 1.0 + }, + "111773": { + "type": "regularnode", + "name": "3DCS-CO004", + "children": [], + "availability": 1.0 + }, + "111774": { + "type": "regularnode", + "name": "3DCS-CO005A", + "children": [], + "availability": 1.0 + }, + "111775": { + "type": "regularnode", + "name": "3DCS-CO005B", + "children": [], + "availability": 1.0 + }, + "111776": { + "type": "regularnode", + "name": "3DCS-CO005C", + "children": [], + "availability": 1.0 + }, + "111777": { + "type": "regularnode", + "name": "3DCS-CO006A", + "children": [], + "availability": 1.0 + }, + "111778": { + "type": "regularnode", + "name": "3DCS-CO006B", + "children": [], + "availability": 1.0 + }, + "111779": { + "type": "regularnode", + "name": "3DCS-CO006C", + "children": [], + "availability": 1.0 + }, + "111780": { + "type": "regularnode", + "name": "3DCS-CO007", + "children": [ + "111781" + ], + "availability": 1.0 + }, + "111781": { + "type": "regularnode", + "name": "3DCS-CO008", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "9977": { + "schematic_id": 9977, + "schematic_name": "- BTG_CW -", + "root": "111786", + "nodes": { + "111782": { + "type": "regularnode", + "name": "3CCCW-H010A", + "children": [ + "111791" + ], + "availability": 1.0 + }, + "111783": { + "type": "regularnode", + "name": "3CCCW-H010B", + "children": [ + "111791" + ], + "availability": 1.0 + }, + "111784": { + "type": "regularnode", + "name": "3CCCW-P090", + "children": [], + "availability": 1.0 + }, + "111785": { + "type": "regularnode", + "name": "3CCCW-M090", + "children": [ + "111784" + ], + "availability": 1.0 + }, + "111786": { + "type": "regularnode", + "name": "3CCCW-M010A", + "children": [], + "availability": 1.0 + }, + "111787": { + "type": "regularnode", + "name": "3CCCW-P010B", + "children": [ + "111783" + ], + "availability": 1.0 + }, + "111788": { + "type": "regularnode", + "name": "3CCCW-M010B", + "children": [], + "availability": 1.0 + }, + "111789": { + "type": "regularnode", + "name": "3CCCW-T010", + "children": [ + "111785" + ], + "availability": 1.0 + }, + "111790": { + "type": "regularnode", + "name": "3CCCW-P010A", + "children": [ + "111782" + ], + "availability": 1.0 + }, + "111791": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1165": { + "name": "3CCCW-M010", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1165": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111786", + "status": "InService" + }, + { + "node_id": "111788", + "status": "InService" + } + ] + } + } + } + } + }, + "9978": { + "schematic_id": 9978, + "schematic_name": "- BTG_COND -", + "root": "111792", + "nodes": { + "111792": { + "type": "regularnode", + "name": "3CO-H001", + "children": [ + "111798", + "111800" + ], + "availability": 1.0 + }, + "111793": { + "type": "regularnode", + "name": "3CO-H010", + "children": [ + "111794" + ], + "availability": 1.0 + }, + "111794": { + "type": "regularnode", + "name": "3CO-H020", + "children": [ + "111795" + ], + "availability": 1.0 + }, + "111795": { + "type": "regularnode", + "name": "3CO-H030", + "children": [], + "availability": 1.0 + }, + "111796": { + "type": "regularnode", + "name": "3CO-FCV001", + "children": [ + "111793" + ], + "availability": 1.0 + }, + "111797": { + "type": "regularnode", + "name": "3CO-P001A", + "children": [ + "111807" + ], + "availability": 1.0 + }, + "111798": { + "type": "regularnode", + "name": "3CO-M001A", + "children": [ + "111797" + ], + "availability": 1.0 + }, + "111799": { + "type": "regularnode", + "name": "3CO-P001B", + "children": [ + "111807" + ], + "availability": 1.0 + }, + "111800": { + "type": "regularnode", + "name": "3CO-M001B", + "children": [ + "111799" + ], + "availability": 1.0 + }, + "111801": { + "type": "regularnode", + "name": "3CAE-P010A", + "children": [ + "111808" + ], + "availability": 1.0 + }, + "111802": { + "type": "regularnode", + "name": "3CAE-M010A", + "children": [ + "111801" + ], + "availability": 1.0 + }, + "111803": { + "type": "regularnode", + "name": "3CAE-H010A", + "children": [ + "111796" + ], + "availability": 1.0 + }, + "111804": { + "type": "regularnode", + "name": "3CAE-P010B", + "children": [ + "111808" + ], + "availability": 1.0 + }, + "111805": { + "type": "regularnode", + "name": "3CAE-M010B", + "children": [ + "111804" + ], + "availability": 1.0 + }, + "111806": { + "type": "regularnode", + "name": "3CAE-H010B", + "children": [ + "111796" + ], + "availability": 1.0 + }, + "111807": { + "type": "regularnode", + "name": "header 1", + "children": [ + "111802", + "111805" + ], + "availability": 1.0 + }, + "111808": { + "type": "regularnode", + "name": "header 2", + "children": [ + "111803", + "111806" + ], + "availability": 1.0 + } + }, + "redundancies": { + "1166": { + "name": "3CAE-H010", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1166": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111803", + "status": "InService" + }, + { + "node_id": "111806", + "status": "Standby" + } + ] + } + } + }, + "1167": { + "name": "3CAE-M001", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1167": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111802", + "status": "InService" + }, + { + "node_id": "111805", + "status": "Standby" + } + ] + } + } + }, + "1168": { + "name": "3CO-M001", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1168": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111798", + "status": "InService" + }, + { + "node_id": "111800", + "status": "Standby" + } + ] + } + } + } + } + }, + "9979": { + "schematic_id": 9979, + "schematic_name": "- BTG_FW-", + "root": "111809", + "nodes": { + "111809": { + "type": "regularnode", + "name": "3FW-H040", + "children": [], + "availability": 1.0 + }, + "111810": { + "type": "regularnode", + "name": "3FW-H070", + "children": [ + "111811" + ], + "availability": 1.0 + }, + "111811": { + "type": "regularnode", + "name": "3FW-H060", + "children": [ + "111812" + ], + "availability": 1.0 + }, + "111812": { + "type": "regularnode", + "name": "3FW-H050", + "children": [], + "availability": 1.0 + }, + "111813": { + "type": "regularnode", + "name": "3LOT-T010B", + "children": [], + "availability": 1.0 + }, + "111814": { + "type": "regularnode", + "name": "3LOT-T010A", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1169": { + "name": "MBFP", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1169": { + "priority": 0, + "duration": 100.0, + "cells": [] + } + } + } + } + }, + "9980": { + "schematic_id": 9980, + "schematic_name": "- BTG_TUR -", + "root": "111815", + "nodes": { + "111815": { + "type": "regularnode", + "name": "3MT-ST010", + "children": [ + "111816" + ], + "availability": 1.0 + }, + "111816": { + "type": "regularnode", + "name": "3MT-ST020", + "children": [ + "111817" + ], + "availability": 1.0 + }, + "111817": { + "type": "regularnode", + "name": "3MT-ST030A", + "children": [ + "111818" + ], + "availability": 1.0 + }, + "111818": { + "type": "regularnode", + "name": "3MT-ST030B", + "children": [ + "111819" + ], + "availability": 1.0 + }, + "111819": { + "type": "regularnode", + "name": "3MT-AU040", + "children": [ + "111821" + ], + "availability": 1.0 + }, + "111820": { + "type": "regularnode", + "name": "3AS-BS010", + "children": [], + "availability": 1.0 + }, + "111821": { + "type": "regularnode", + "name": "3AS-T010", + "children": [ + "111820" + ], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "9981": { + "schematic_id": 9981, + "schematic_name": "- BTG_AFG -", + "root": "111822", + "nodes": { + "111822": { + "type": "regularnode", + "name": "3AH-AU501A", + "children": [], + "availability": 1.0 + }, + "111823": { + "type": "regularnode", + "name": "3AH-AU501B", + "children": [], + "availability": 1.0 + }, + "111824": { + "type": "regularnode", + "name": "header 1", + "children": [], + "availability": 1.0 + }, + "111825": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1170": { + "name": "3AH-AU501", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1170": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111822", + "status": "InService" + }, + { + "node_id": "111823", + "status": "InService" + } + ] + } + } + }, + "1171": { + "name": "FDF", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1171": { + "priority": 0, + "duration": 100.0, + "cells": [] + } + } + } + } + }, + "9982": { + "schematic_id": 9982, + "schematic_name": "- BTG_BOL -", + "root": "111826", + "nodes": { + "111826": { + "type": "regularnode", + "name": "3CRH-W002", + "children": [], + "availability": 1.0 + }, + "111827": { + "type": "regularnode", + "name": "3BOL-H501", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "9983": { + "schematic_id": 9983, + "schematic_name": "- BTG_ASH-", + "root": "111842", + "nodes": { + "111828": { + "type": "regularnode", + "name": "3BAD-M501", + "children": [], + "availability": 1.0 + }, + "111829": { + "type": "regularnode", + "name": "3BAD-P511A", + "children": [ + "111828" + ], + "availability": 1.0 + }, + "111830": { + "type": "regularnode", + "name": "3BAD-P511B", + "children": [ + "111828" + ], + "availability": 1.0 + }, + "111831": { + "type": "regularnode", + "name": "3BAD-M511A", + "children": [ + "111829" + ], + "availability": 1.0 + }, + "111832": { + "type": "regularnode", + "name": "3BAD-M511B", + "children": [ + "111830" + ], + "availability": 1.0 + }, + "111833": { + "type": "regularnode", + "name": "3BAD-P521A", + "children": [ + "111845" + ], + "availability": 1.0 + }, + "111834": { + "type": "regularnode", + "name": "3BAD-P521B", + "children": [ + "111845" + ], + "availability": 1.0 + }, + "111835": { + "type": "regularnode", + "name": "3BAD-M521A", + "children": [ + "111833" + ], + "availability": 1.0 + }, + "111836": { + "type": "regularnode", + "name": "3BAD-M521B", + "children": [ + "111834" + ], + "availability": 1.0 + }, + "111837": { + "type": "regularnode", + "name": "3BAD-H511A", + "children": [ + "111831" + ], + "availability": 1.0 + }, + "111838": { + "type": "regularnode", + "name": "3BAD-H511B", + "children": [ + "111832" + ], + "availability": 1.0 + }, + "111839": { + "type": "regularnode", + "name": "3BAD-PN501", + "children": [ + "111837", + "111838" + ], + "availability": 1.0 + }, + "111840": { + "type": "regularnode", + "name": "3BAD-AG531", + "children": [ + "111839" + ], + "availability": 1.0 + }, + "111841": { + "type": "regularnode", + "name": "3BAD-M531", + "children": [ + "111840" + ], + "availability": 1.0 + }, + "111842": { + "type": "regularnode", + "name": "3BAD-T531", + "children": [ + "111843" + ], + "availability": 1.0 + }, + "111843": { + "type": "regularnode", + "name": "3BAD-T532", + "children": [ + "111835", + "111836" + ], + "availability": 1.0 + }, + "111844": { + "type": "regularnode", + "name": "3BAD-PAN501", + "children": [ + "111841" + ], + "availability": 1.0 + }, + "111845": { + "type": "regularnode", + "name": "header", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1172": { + "name": "3BAD-H511", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1172": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111837", + "status": "InService" + }, + { + "node_id": "111838", + "status": "Standby" + } + ] + } + } + }, + "1173": { + "name": "3BAD-M521", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1173": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111835", + "status": "InService" + }, + { + "node_id": "111836", + "status": "Standby" + } + ] + } + } + } + } + }, + "9984": { + "schematic_id": 9984, + "schematic_name": "- BTG_GEN -", + "root": "111846", + "nodes": { + "111846": { + "type": "regularnode", + "name": "3GEN-GM001", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "9985": { + "schematic_id": 9985, + "schematic_name": "- BTG_SPS -", + "root": null, + "nodes": {}, + "redundancies": {} + }, + "9986": { + "schematic_id": 9986, + "schematic_name": "AFG_PAF A", + "root": "111847", + "nodes": { + "111847": { + "type": "regularnode", + "name": "3AL-PCV501A", + "children": [ + "111849" + ], + "availability": 1.0 + }, + "111848": { + "type": "regularnode", + "name": "3AL-F501A", + "children": [], + "availability": 1.0 + }, + "111849": { + "type": "regularnode", + "name": "3AL-M501A", + "children": [ + "111848" + ], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "9987": { + "schematic_id": 9987, + "schematic_name": "AFG_FDF A", + "root": "111852", + "nodes": { + "111850": { + "type": "regularnode", + "name": "3AF-F501A", + "children": [], + "availability": 1.0 + }, + "111851": { + "type": "regularnode", + "name": "3AF-M501A", + "children": [ + "111850" + ], + "availability": 1.0 + }, + "111852": { + "type": "regularnode", + "name": "3AF-FCV501A", + "children": [ + "111851" + ], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "9988": { + "schematic_id": 9988, + "schematic_name": "AFG_RAPH A ", + "root": "111855", + "nodes": { + "111853": { + "type": "regularnode", + "name": "3AH-H531A", + "children": [ + "111857" + ], + "availability": 1.0 + }, + "111854": { + "type": "regularnode", + "name": "3AH-P531A", + "children": [ + "111853" + ], + "availability": 1.0 + }, + "111855": { + "type": "regularnode", + "name": "3AH-M531A", + "children": [ + "111854" + ], + "availability": 1.0 + }, + "111856": { + "type": "regularnode", + "name": "3AH-H501A", + "children": [], + "availability": 1.0 + }, + "111857": { + "type": "regularnode", + "name": "3AH-M502A", + "children": [ + "111858" + ], + "availability": 1.0 + }, + "111858": { + "type": "regularnode", + "name": "3AH-M501A", + "children": [ + "111856" + ], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "9989": { + "schematic_id": 9989, + "schematic_name": "AFG_ESP A", + "root": "111859", + "nodes": { + "111859": { + "type": "regularnode", + "name": "3GG-AX801A", + "children": [], + "availability": 1.0 + }, + "111860": { + "type": "regularnode", + "name": "header ", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1174": { + "name": "ESP CHAMBER A", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1174": { + "priority": 0, + "duration": 100.0, + "cells": [] + } + } + } + } + }, + "9990": { + "schematic_id": 9990, + "schematic_name": "AFG_IDF A", + "root": "111867", + "nodes": { + "111861": { + "type": "regularnode", + "name": "3GG-F801A", + "children": [ + "111862", + "111864" + ], + "availability": 1.0 + }, + "111862": { + "type": "regularnode", + "name": "3GG-F802A", + "children": [ + "111866" + ], + "availability": 1.0 + }, + "111863": { + "type": "regularnode", + "name": "3GG-F803A", + "children": [ + "111870" + ], + "availability": 1.0 + }, + "111864": { + "type": "regularnode", + "name": "3GG-F802B", + "children": [ + "111866" + ], + "availability": 1.0 + }, + "111865": { + "type": "regularnode", + "name": "3GG-F803B", + "children": [ + "111870" + ], + "availability": 1.0 + }, + "111866": { + "type": "regularnode", + "name": "3GG-M801A", + "children": [ + "111863", + "111865" + ], + "availability": 1.0 + }, + "111867": { + "type": "regularnode", + "name": "3GG-M810A", + "children": [ + "111861" + ], + "availability": 1.0 + }, + "111868": { + "type": "regularnode", + "name": "3GG-P801A", + "children": [ + "111871" + ], + "availability": 1.0 + }, + "111869": { + "type": "regularnode", + "name": "3GG-P801B", + "children": [ + "111871" + ], + "availability": 1.0 + }, + "111870": { + "type": "regularnode", + "name": "header 1", + "children": [ + "111868", + "111869" + ], + "availability": 1.0 + }, + "111871": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1175": { + "name": "3GG-F802", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1175": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111862", + "status": "InService" + }, + { + "node_id": "111864", + "status": "Standby" + } + ] + } + } + }, + "1176": { + "name": "3GG-F803", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1176": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111863", + "status": "InService" + }, + { + "node_id": "111865", + "status": "Standby" + } + ] + } + } + }, + "1177": { + "name": "3GG-P801", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1177": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111868", + "status": "InService" + }, + { + "node_id": "111869", + "status": "Standby" + } + ] + } + } + } + } + }, + "9991": { + "schematic_id": 9991, + "schematic_name": "AFG_PAF B", + "root": "111872", + "nodes": { + "111872": { + "type": "regularnode", + "name": "3AL-PCV501B", + "children": [ + "111874" + ], + "availability": 1.0 + }, + "111873": { + "type": "regularnode", + "name": "3AL-F501B", + "children": [], + "availability": 1.0 + }, + "111874": { + "type": "regularnode", + "name": "3AL-M501B", + "children": [ + "111873" + ], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "9992": { + "schematic_id": 9992, + "schematic_name": "AFG_FDF B", + "root": "111877", + "nodes": { + "111875": { + "type": "regularnode", + "name": "3AF-F501B", + "children": [], + "availability": 1.0 + }, + "111876": { + "type": "regularnode", + "name": "3AF-M501B", + "children": [ + "111875" + ], + "availability": 1.0 + }, + "111877": { + "type": "regularnode", + "name": "3AF-FCV501B", + "children": [ + "111876" + ], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "9993": { + "schematic_id": 9993, + "schematic_name": "AFG_RAPH B", + "root": "111880", + "nodes": { + "111878": { + "type": "regularnode", + "name": "3AH-H531B", + "children": [ + "111882" + ], + "availability": 1.0 + }, + "111879": { + "type": "regularnode", + "name": "3AH-P531B", + "children": [ + "111878" + ], + "availability": 1.0 + }, + "111880": { + "type": "regularnode", + "name": "3AH-M531B", + "children": [ + "111879" + ], + "availability": 1.0 + }, + "111881": { + "type": "regularnode", + "name": "3AH-H501B", + "children": [], + "availability": 1.0 + }, + "111882": { + "type": "regularnode", + "name": "3AH-M502B", + "children": [ + "111883" + ], + "availability": 1.0 + }, + "111883": { + "type": "regularnode", + "name": "3AH-M501B", + "children": [ + "111881" + ], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "9994": { + "schematic_id": 9994, + "schematic_name": "AFG_ESP B", + "root": "111884", + "nodes": { + "111884": { + "type": "regularnode", + "name": "3GG-AX801B", + "children": [], + "availability": 1.0 + }, + "111885": { + "type": "regularnode", + "name": "header", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1178": { + "name": "ESP CHAMBER B", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1178": { + "priority": 0, + "duration": 100.0, + "cells": [] + } + } + } + } + }, + "9995": { + "schematic_id": 9995, + "schematic_name": "AFG_IDF B", + "root": "111892", + "nodes": { + "111886": { + "type": "regularnode", + "name": "3GG-F801B", + "children": [ + "111887", + "111889" + ], + "availability": 1.0 + }, + "111887": { + "type": "regularnode", + "name": "3GG-F804A", + "children": [ + "111891" + ], + "availability": 1.0 + }, + "111888": { + "type": "regularnode", + "name": "3GG-F805A", + "children": [ + "111895" + ], + "availability": 1.0 + }, + "111889": { + "type": "regularnode", + "name": "3GG-F804B", + "children": [ + "111891" + ], + "availability": 1.0 + }, + "111890": { + "type": "regularnode", + "name": "3GG-F805B", + "children": [ + "111895" + ], + "availability": 1.0 + }, + "111891": { + "type": "regularnode", + "name": "3GG-M801B", + "children": [ + "111888", + "111890" + ], + "availability": 1.0 + }, + "111892": { + "type": "regularnode", + "name": "3GG-M810B", + "children": [ + "111886" + ], + "availability": 1.0 + }, + "111893": { + "type": "regularnode", + "name": "3GG-P802A", + "children": [ + "111896" + ], + "availability": 1.0 + }, + "111894": { + "type": "regularnode", + "name": "3GG-P802B", + "children": [ + "111896" + ], + "availability": 1.0 + }, + "111895": { + "type": "regularnode", + "name": "header 1", + "children": [ + "111893", + "111894" + ], + "availability": 1.0 + }, + "111896": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1179": { + "name": "3GG-F804", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1179": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111887", + "status": "InService" + }, + { + "node_id": "111889", + "status": "Standby" + } + ] + } + } + }, + "1180": { + "name": "3GG-F805", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1180": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111888", + "status": "InService" + }, + { + "node_id": "111890", + "status": "Standby" + } + ] + } + } + }, + "1181": { + "name": "3GG-P802", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1181": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111893", + "status": "InService" + }, + { + "node_id": "111894", + "status": "Standby" + } + ] + } + } + } + } + }, + "9996": { + "schematic_id": 9996, + "schematic_name": "TUR_EHS", + "root": "111909", + "nodes": { + "111897": { + "type": "regularnode", + "name": "3EHS-T090A", + "children": [ + "111911" + ], + "availability": 1.0 + }, + "111898": { + "type": "regularnode", + "name": "3EHS-T090B", + "children": [ + "111911" + ], + "availability": 1.0 + }, + "111899": { + "type": "regularnode", + "name": "3EHS-H010A", + "children": [ + "111913" + ], + "availability": 1.0 + }, + "111900": { + "type": "regularnode", + "name": "3EHS-H010B", + "children": [ + "111913" + ], + "availability": 1.0 + }, + "111901": { + "type": "regularnode", + "name": "3EHS-F015A", + "children": [ + "111912" + ], + "availability": 1.0 + }, + "111902": { + "type": "regularnode", + "name": "3EHS-M015A", + "children": [ + "111901" + ], + "availability": 1.0 + }, + "111903": { + "type": "regularnode", + "name": "3EHS-F015B", + "children": [ + "111912" + ], + "availability": 1.0 + }, + "111904": { + "type": "regularnode", + "name": "3EHS-M015B", + "children": [ + "111903" + ], + "availability": 1.0 + }, + "111905": { + "type": "regularnode", + "name": "3EHS-P010A", + "children": [ + "111910" + ], + "availability": 1.0 + }, + "111906": { + "type": "regularnode", + "name": "3EHS-M010A", + "children": [ + "111905" + ], + "availability": 1.0 + }, + "111907": { + "type": "regularnode", + "name": "3EHS-P010B", + "children": [ + "111910" + ], + "availability": 1.0 + }, + "111908": { + "type": "regularnode", + "name": "3EHS-M010B", + "children": [ + "111907" + ], + "availability": 1.0 + }, + "111909": { + "type": "regularnode", + "name": "3EHS-Z010", + "children": [ + "111906", + "111908" + ], + "availability": 1.0 + }, + "111910": { + "type": "regularnode", + "name": "header 1", + "children": [ + "111897", + "111898" + ], + "availability": 1.0 + }, + "111911": { + "type": "regularnode", + "name": "header 2", + "children": [ + "111902", + "111904" + ], + "availability": 1.0 + }, + "111912": { + "type": "regularnode", + "name": "header 3", + "children": [ + "111899", + "111900" + ], + "availability": 1.0 + }, + "111913": { + "type": "regularnode", + "name": "header 4", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1182": { + "name": "3EHS-M010", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1182": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111906", + "status": "InService" + }, + { + "node_id": "111908", + "status": "Standby" + } + ] + } + } + }, + "1183": { + "name": "3EHS-M015", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1183": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111902", + "status": "InService" + }, + { + "node_id": "111904", + "status": "Standby" + } + ] + } + } + }, + "1184": { + "name": "3EHS-T090", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1184": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111897", + "status": "InService" + }, + { + "node_id": "111898", + "status": "Standby" + } + ] + } + } + }, + "1185": { + "name": "3EHS-H010", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1185": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111899", + "status": "InService" + }, + { + "node_id": "111900", + "status": "Standby" + } + ] + } + } + } + } + }, + "9997": { + "schematic_id": 9997, + "schematic_name": "TUR_LOS", + "root": "111915", + "nodes": { + "111914": { + "type": "regularnode", + "name": "3LOS-P050", + "children": [], + "availability": 1.0 + }, + "111915": { + "type": "regularnode", + "name": "3LOS-M050", + "children": [ + "111914" + ], + "availability": 1.0 + }, + "111916": { + "type": "regularnode", + "name": "3LOS-P010B", + "children": [], + "availability": 1.0 + }, + "111917": { + "type": "regularnode", + "name": "3LOS-M010A", + "children": [ + "111918" + ], + "availability": 1.0 + }, + "111918": { + "type": "regularnode", + "name": "3LOS-P010A", + "children": [], + "availability": 1.0 + }, + "111919": { + "type": "regularnode", + "name": "3LOS-M010B", + "children": [ + "111916" + ], + "availability": 1.0 + }, + "111920": { + "type": "regularnode", + "name": "3LOS-F020A", + "children": [ + "111931" + ], + "availability": 1.0 + }, + "111921": { + "type": "regularnode", + "name": "3LOS-PF080", + "children": [ + "111932", + "111933" + ], + "availability": 1.0 + }, + "111922": { + "type": "regularnode", + "name": "3LOS-S010A", + "children": [ + "111921" + ], + "availability": 1.0 + }, + "111923": { + "type": "regularnode", + "name": "3LOS-S010B", + "children": [ + "111921" + ], + "availability": 1.0 + }, + "111924": { + "type": "regularnode", + "name": "3LOS-M080", + "children": [ + "111930" + ], + "availability": 1.0 + }, + "111925": { + "type": "regularnode", + "name": "3LOS-F020B", + "children": [ + "111931" + ], + "availability": 1.0 + }, + "111926": { + "type": "regularnode", + "name": "3LOS-P060", + "children": [], + "availability": 1.0 + }, + "111927": { + "type": "regularnode", + "name": "3LOS-M060", + "children": [ + "111926" + ], + "availability": 1.0 + }, + "111928": { + "type": "regularnode", + "name": "3LOS-H010A", + "children": [ + "111924" + ], + "availability": 1.0 + }, + "111929": { + "type": "regularnode", + "name": "3LOS-H010B", + "children": [ + "111924" + ], + "availability": 1.0 + }, + "111930": { + "type": "regularnode", + "name": "3LOS-P080", + "children": [ + "111922", + "111923" + ], + "availability": 1.0 + }, + "111931": { + "type": "regularnode", + "name": "3LOS-ME020", + "children": [ + "111927" + ], + "availability": 1.0 + }, + "111932": { + "type": "regularnode", + "name": "3LOS-M020A", + "children": [ + "111920" + ], + "availability": 1.0 + }, + "111933": { + "type": "regularnode", + "name": "3LOS-M020B", + "children": [ + "111925" + ], + "availability": 1.0 + } + }, + "redundancies": { + "1186": { + "name": "3LOS-H010A", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1186": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111928", + "status": "InService" + }, + { + "node_id": "111929", + "status": "Standby" + } + ] + } + } + }, + "1187": { + "name": "3LOS-M020", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1187": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111932", + "status": "InService" + }, + { + "node_id": "111933", + "status": "Standby" + } + ] + } + } + }, + "1188": { + "name": "3LOS-M050", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1188": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111917", + "status": "InService" + }, + { + "node_id": "111919", + "status": "InService" + }, + { + "node_id": "111915", + "status": "Standby" + } + ] + } + } + }, + "1189": { + "name": "3LOS-S010", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1189": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111922", + "status": "InService" + }, + { + "node_id": "111923", + "status": "Standby" + } + ] + } + } + } + } + }, + "9998": { + "schematic_id": 9998, + "schematic_name": "TUR_EHB", + "root": "111938", + "nodes": { + "111934": { + "type": "regularnode", + "name": "3EHB-P020", + "children": [ + "111937" + ], + "availability": 1.0 + }, + "111935": { + "type": "regularnode", + "name": "3EHB-P010A", + "children": [ + "111939" + ], + "availability": 1.0 + }, + "111936": { + "type": "regularnode", + "name": "3EHB-P010B", + "children": [ + "111939" + ], + "availability": 1.0 + }, + "111937": { + "type": "regularnode", + "name": "3EHB-T110", + "children": [ + "111935", + "111936" + ], + "availability": 1.0 + }, + "111938": { + "type": "regularnode", + "name": "3EHB-Z010", + "children": [ + "111934" + ], + "availability": 1.0 + }, + "111939": { + "type": "regularnode", + "name": "header", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1190": { + "name": "3EHB-P010", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1190": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111935", + "status": "InService" + }, + { + "node_id": "111936", + "status": "Standby" + } + ] + } + } + } + } + }, + "9999": { + "schematic_id": 9999, + "schematic_name": "TUR_GSS", + "root": "111940", + "nodes": { + "111940": { + "type": "regularnode", + "name": "3GSS-H010", + "children": [ + "111942", + "111944" + ], + "availability": 1.0 + }, + "111941": { + "type": "regularnode", + "name": "3GSS-F011A", + "children": [ + "111945" + ], + "availability": 1.0 + }, + "111942": { + "type": "regularnode", + "name": "3GSS-M011A", + "children": [ + "111941" + ], + "availability": 1.0 + }, + "111943": { + "type": "regularnode", + "name": "3GSS-F011B", + "children": [ + "111945" + ], + "availability": 1.0 + }, + "111944": { + "type": "regularnode", + "name": "3GSS-M011B", + "children": [ + "111943" + ], + "availability": 1.0 + }, + "111945": { + "type": "regularnode", + "name": "header", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1191": { + "name": "3GSS-M001", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1191": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111942", + "status": "InService" + }, + { + "node_id": "111944", + "status": "Standby" + } + ] + } + } + } + } + }, + "10000": { + "schematic_id": 10000, + "schematic_name": "GEN_SCW", + "root": "111946", + "nodes": { + "111946": { + "type": "regularnode", + "name": "3SCW-PF001", + "children": [ + "111947", + "111948" + ], + "availability": 1.0 + }, + "111947": { + "type": "regularnode", + "name": "3SCW-H023A", + "children": [ + "111952" + ], + "availability": 1.0 + }, + "111948": { + "type": "regularnode", + "name": "3SCW-H023B", + "children": [ + "111951" + ], + "availability": 1.0 + }, + "111949": { + "type": "regularnode", + "name": "3SCW-P001A", + "children": [ + "111953" + ], + "availability": 1.0 + }, + "111950": { + "type": "regularnode", + "name": "3SCW-P001B", + "children": [ + "111953" + ], + "availability": 1.0 + }, + "111951": { + "type": "regularnode", + "name": "3SCW-M001B", + "children": [ + "111950" + ], + "availability": 1.0 + }, + "111952": { + "type": "regularnode", + "name": "3SCW-M001A", + "children": [ + "111949" + ], + "availability": 1.0 + }, + "111953": { + "type": "regularnode", + "name": "Node1", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1192": { + "name": "3SCW-H023", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1192": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111947", + "status": "InService" + }, + { + "node_id": "111948", + "status": "Standby" + } + ] + } + } + } + } + }, + "10001": { + "schematic_id": 10001, + "schematic_name": "GEN_SO", + "root": "111954", + "nodes": { + "111954": { + "type": "regularnode", + "name": "3SO-T116", + "children": [ + "111957" + ], + "availability": 1.0 + }, + "111955": { + "type": "regularnode", + "name": "3SO-M002", + "children": [ + "111956" + ], + "availability": 1.0 + }, + "111956": { + "type": "regularnode", + "name": "3SO-P002", + "children": [ + "111961" + ], + "availability": 1.0 + }, + "111957": { + "type": "regularnode", + "name": "3SO-T114", + "children": [ + "111958" + ], + "availability": 1.0 + }, + "111958": { + "type": "regularnode", + "name": "3SO-T113", + "children": [ + "111959", + "111955" + ], + "availability": 1.0 + }, + "111959": { + "type": "regularnode", + "name": "3SO-M001", + "children": [ + "111960" + ], + "availability": 1.0 + }, + "111960": { + "type": "regularnode", + "name": "3SO-P001", + "children": [ + "111961" + ], + "availability": 1.0 + }, + "111961": { + "type": "regularnode", + "name": "header 1", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1193": { + "name": "3SO-M001", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1193": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111959", + "status": "InService" + }, + { + "node_id": "111955", + "status": "Standby" + } + ] + } + } + } + } + }, + "10002": { + "schematic_id": 10002, + "schematic_name": "GEN_GEN", + "root": "111962", + "nodes": { + "111962": { + "type": "regularnode", + "name": "3GEN-EXC008", + "children": [ + "111963" + ], + "availability": 1.0 + }, + "111963": { + "type": "regularnode", + "name": "3GEN-EXC009", + "children": [ + "111964" + ], + "availability": 1.0 + }, + "111964": { + "type": "regularnode", + "name": "3GEN-EXC004", + "children": [ + "111965" + ], + "availability": 1.0 + }, + "111965": { + "type": "regularnode", + "name": "3GEN-EXC005", + "children": [ + "111966" + ], + "availability": 1.0 + }, + "111966": { + "type": "regularnode", + "name": "3GEN-GM001", + "children": [ + "111967" + ], + "availability": 1.0 + }, + "111967": { + "type": "regularnode", + "name": "3GEN-Z012", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10003": { + "schematic_id": 10003, + "schematic_name": "GEN_GMC", + "root": "111968", + "nodes": { + "111968": { + "type": "regularnode", + "name": "3GMC-Z002", + "children": [ + "111969" + ], + "availability": 1.0 + }, + "111969": { + "type": "regularnode", + "name": "3GMC-Z001", + "children": [ + "111970" + ], + "availability": 1.0 + }, + "111970": { + "type": "regularnode", + "name": "3GMC-Z003", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10004": { + "schematic_id": 10004, + "schematic_name": "- CMN_SSB -", + "root": "111979", + "nodes": { + "111971": { + "type": "regularnode", + "name": "00SSB-LA008", + "children": [ + "111972" + ], + "availability": 1.0 + }, + "111972": { + "type": "regularnode", + "name": "00SSB-LA009", + "children": [ + "111973" + ], + "availability": 1.0 + }, + "111973": { + "type": "regularnode", + "name": "00SSB-TF010", + "children": [], + "availability": 1.0 + }, + "111974": { + "type": "regularnode", + "name": "00SSB-EV006", + "children": [ + "111981" + ], + "availability": 1.0 + }, + "111975": { + "type": "regularnode", + "name": "00SSB-EV003", + "children": [ + "111976", + "111977" + ], + "availability": 1.0 + }, + "111976": { + "type": "regularnode", + "name": "00SSB-EV004", + "children": [ + "111974" + ], + "availability": 1.0 + }, + "111977": { + "type": "regularnode", + "name": "00SSB-EV005", + "children": [ + "111974" + ], + "availability": 1.0 + }, + "111978": { + "type": "regularnode", + "name": "00SSB-EV002", + "children": [ + "111975" + ], + "availability": 1.0 + }, + "111979": { + "type": "regularnode", + "name": "00SSB-EV001", + "children": [ + "111978" + ], + "availability": 1.0 + }, + "111980": { + "type": "regularnode", + "name": "00SSB-EV012", + "children": [ + "111971" + ], + "availability": 1.0 + }, + "111981": { + "type": "regularnode", + "name": "00SSB-EV007", + "children": [ + "111980" + ], + "availability": 1.0 + } + }, + "redundancies": { + "1194": { + "name": "00SSB-EV004", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1194": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111976", + "status": "InService" + }, + { + "node_id": "111977", + "status": "InService" + } + ] + } + } + } + } + }, + "10005": { + "schematic_id": 10005, + "schematic_name": "GEN_TR", + "root": "111984", + "nodes": { + "111982": { + "type": "regularnode", + "name": "3TR-TF005", + "children": [ + "111985", + "111986", + "111987", + "111988", + "111989", + "111990", + "111992", + "111993", + "111994", + "111996", + "111995", + "111983", + "112001", + "112000" + ], + "availability": 1.0 + }, + "111983": { + "type": "regularnode", + "name": "3TR-F312", + "children": [ + "112002" + ], + "availability": 1.0 + }, + "111984": { + "type": "regularnode", + "name": "3TR-TF001", + "children": [ + "111982" + ], + "availability": 1.0 + }, + "111985": { + "type": "regularnode", + "name": "3TR-F301", + "children": [ + "112002" + ], + "availability": 1.0 + }, + "111986": { + "type": "regularnode", + "name": "3TR-F302", + "children": [ + "112002" + ], + "availability": 1.0 + }, + "111987": { + "type": "regularnode", + "name": "3TR-F303", + "children": [ + "112002" + ], + "availability": 1.0 + }, + "111988": { + "type": "regularnode", + "name": "3TR-F304", + "children": [ + "112002" + ], + "availability": 1.0 + }, + "111989": { + "type": "regularnode", + "name": "3TR-F305", + "children": [ + "112002" + ], + "availability": 1.0 + }, + "111990": { + "type": "regularnode", + "name": "3TR-F306", + "children": [ + "112002" + ], + "availability": 1.0 + }, + "111991": { + "type": "regularnode", + "name": "3TR-TF002A", + "children": [], + "availability": 1.0 + }, + "111992": { + "type": "regularnode", + "name": "3TR-F307", + "children": [ + "112002" + ], + "availability": 1.0 + }, + "111993": { + "type": "regularnode", + "name": "3TR-F308", + "children": [ + "112002" + ], + "availability": 1.0 + }, + "111994": { + "type": "regularnode", + "name": "3TR-F309", + "children": [ + "112002" + ], + "availability": 1.0 + }, + "111995": { + "type": "regularnode", + "name": "3TR-F311", + "children": [ + "112002" + ], + "availability": 1.0 + }, + "111996": { + "type": "regularnode", + "name": "3TR-F310", + "children": [ + "112002" + ], + "availability": 1.0 + }, + "111997": { + "type": "regularnode", + "name": "3TR-TF002B", + "children": [], + "availability": 1.0 + }, + "111998": { + "type": "regularnode", + "name": "3TR-Z003B", + "children": [], + "availability": 1.0 + }, + "111999": { + "type": "regularnode", + "name": "3TR-Z003A", + "children": [], + "availability": 1.0 + }, + "112000": { + "type": "regularnode", + "name": "3TR-F314", + "children": [ + "112002" + ], + "availability": 1.0 + }, + "112001": { + "type": "regularnode", + "name": "3TR-F313", + "children": [ + "112002" + ], + "availability": 1.0 + }, + "112002": { + "type": "regularnode", + "name": "header 3", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1195": { + "name": "3TR-F301", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1195": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "111985", + "status": "InService" + }, + { + "node_id": "111986", + "status": "InService" + }, + { + "node_id": "111987", + "status": "InService" + }, + { + "node_id": "111988", + "status": "InService" + }, + { + "node_id": "111989", + "status": "InService" + }, + { + "node_id": "111990", + "status": "InService" + }, + { + "node_id": "111992", + "status": "InService" + }, + { + "node_id": "111993", + "status": "InService" + }, + { + "node_id": "111994", + "status": "InService" + }, + { + "node_id": "111996", + "status": "InService" + }, + { + "node_id": "111995", + "status": "InService" + }, + { + "node_id": "111983", + "status": "InService" + }, + { + "node_id": "112001", + "status": "InService" + }, + { + "node_id": "112000", + "status": "InService" + } + ] + } + } + } + } + }, + "10006": { + "schematic_id": 10006, + "schematic_name": "- CMN_CHS -", + "root": "112023", + "nodes": { + "112003": { + "type": "regularnode", + "name": "00CHA-CV801A", + "children": [ + "112009" + ], + "availability": 1.0 + }, + "112004": { + "type": "regularnode", + "name": "00CHA-CV801B", + "children": [ + "112010" + ], + "availability": 1.0 + }, + "112005": { + "type": "regularnode", + "name": "00CHA-CV802A", + "children": [ + "112011" + ], + "availability": 1.0 + }, + "112006": { + "type": "regularnode", + "name": "00CHA-CV802B", + "children": [ + "112012" + ], + "availability": 1.0 + }, + "112007": { + "type": "regularnode", + "name": "00CHA-SU801A", + "children": [ + "112003" + ], + "availability": 1.0 + }, + "112008": { + "type": "regularnode", + "name": "00CHA-SU801B", + "children": [ + "112004" + ], + "availability": 1.0 + }, + "112009": { + "type": "regularnode", + "name": "00CHA-MS801A", + "children": [ + "112018" + ], + "availability": 1.0 + }, + "112010": { + "type": "regularnode", + "name": "00CHA-MS801B", + "children": [ + "112019" + ], + "availability": 1.0 + }, + "112011": { + "type": "regularnode", + "name": "00CHA-CV803A", + "children": [ + "112013" + ], + "availability": 1.0 + }, + "112012": { + "type": "regularnode", + "name": "00CHA-CV803B", + "children": [ + "112014" + ], + "availability": 1.0 + }, + "112013": { + "type": "regularnode", + "name": "00CHA-SWT801", + "children": [ + "112022" + ], + "availability": 1.0 + }, + "112014": { + "type": "regularnode", + "name": "00CHA-SWT802", + "children": [ + "112022" + ], + "availability": 1.0 + }, + "112015": { + "type": "regularnode", + "name": "00CHA-CV805A", + "children": [ + "112020" + ], + "availability": 1.0 + }, + "112016": { + "type": "regularnode", + "name": "00CHA-CV804", + "children": [ + "112017" + ], + "availability": 1.0 + }, + "112017": { + "type": "regularnode", + "name": "00CHA-CV805B", + "children": [ + "112021" + ], + "availability": 1.0 + }, + "112018": { + "type": "regularnode", + "name": "00CHA-BW802A", + "children": [ + "112005" + ], + "availability": 1.0 + }, + "112019": { + "type": "regularnode", + "name": "00CHA-BW802B", + "children": [ + "112006" + ], + "availability": 1.0 + }, + "112020": { + "type": "regularnode", + "name": "00CHB-SKR805A", + "children": [], + "availability": 1.0 + }, + "112021": { + "type": "regularnode", + "name": "00CHB-SKR805B", + "children": [], + "availability": 1.0 + }, + "112022": { + "type": "regularnode", + "name": "header2", + "children": [ + "112016", + "112015" + ], + "availability": 1.0 + }, + "112023": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112007", + "112008" + ], + "availability": 1.0 + } + }, + "redundancies": { + "1196": { + "name": "00CHA-CV805", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1196": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112015", + "status": "InService" + }, + { + "node_id": "112017", + "status": "Standby" + } + ] + } + } + }, + "1197": { + "name": "00CHA-SU801", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1197": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112007", + "status": "InService" + }, + { + "node_id": "112008", + "status": "Standby" + } + ] + } + } + } + } + }, + "10007": { + "schematic_id": 10007, + "schematic_name": "- CMN_CP -", + "root": "112109", + "nodes": { + "112024": { + "type": "regularnode", + "name": "00RO-P110A", + "children": [ + "112096" + ], + "availability": 1.0 + }, + "112025": { + "type": "regularnode", + "name": "00RO-P110B", + "children": [ + "112096" + ], + "availability": 1.0 + }, + "112026": { + "type": "regularnode", + "name": "00RO-P110C", + "children": [ + "112096" + ], + "availability": 1.0 + }, + "112027": { + "type": "regularnode", + "name": "00RO-P110D", + "children": [ + "112096" + ], + "availability": 1.0 + }, + "112028": { + "type": "regularnode", + "name": "00RO-M110A", + "children": [ + "112024" + ], + "availability": 1.0 + }, + "112029": { + "type": "regularnode", + "name": "00RO-M110B", + "children": [ + "112025" + ], + "availability": 1.0 + }, + "112030": { + "type": "regularnode", + "name": "00RO-M110C", + "children": [ + "112026" + ], + "availability": 1.0 + }, + "112031": { + "type": "regularnode", + "name": "00RO-M110D", + "children": [ + "112027" + ], + "availability": 1.0 + }, + "112032": { + "type": "regularnode", + "name": "00RO-M126A", + "children": [ + "112036" + ], + "availability": 1.0 + }, + "112033": { + "type": "regularnode", + "name": "00RO-M126B", + "children": [ + "112037" + ], + "availability": 1.0 + }, + "112034": { + "type": "regularnode", + "name": "00RO-M126C", + "children": [ + "112038" + ], + "availability": 1.0 + }, + "112035": { + "type": "regularnode", + "name": "00RO-M126D", + "children": [ + "112039" + ], + "availability": 1.0 + }, + "112036": { + "type": "regularnode", + "name": "00RO-P126A", + "children": [ + "112085" + ], + "availability": 1.0 + }, + "112037": { + "type": "regularnode", + "name": "00RO-P126B", + "children": [ + "112085" + ], + "availability": 1.0 + }, + "112038": { + "type": "regularnode", + "name": "00RO-P126C", + "children": [ + "112085" + ], + "availability": 1.0 + }, + "112039": { + "type": "regularnode", + "name": "00RO-P126D", + "children": [ + "112085" + ], + "availability": 1.0 + }, + "112040": { + "type": "regularnode", + "name": "00RO-M160A", + "children": [ + "112044" + ], + "availability": 1.0 + }, + "112041": { + "type": "regularnode", + "name": "00RO-M160B", + "children": [ + "112045" + ], + "availability": 1.0 + }, + "112042": { + "type": "regularnode", + "name": "00RO-M160C", + "children": [ + "112046" + ], + "availability": 1.0 + }, + "112043": { + "type": "regularnode", + "name": "00RO-M160D", + "children": [ + "112047" + ], + "availability": 1.0 + }, + "112044": { + "type": "regularnode", + "name": "00RO-P160A", + "children": [ + "112086" + ], + "availability": 1.0 + }, + "112045": { + "type": "regularnode", + "name": "00RO-P160B", + "children": [ + "112086" + ], + "availability": 1.0 + }, + "112046": { + "type": "regularnode", + "name": "00RO-P160C", + "children": [ + "112086" + ], + "availability": 1.0 + }, + "112047": { + "type": "regularnode", + "name": "00RO-P160D", + "children": [ + "112086" + ], + "availability": 1.0 + }, + "112048": { + "type": "regularnode", + "name": "00RO-M170A", + "children": [ + "112052" + ], + "availability": 1.0 + }, + "112049": { + "type": "regularnode", + "name": "00RO-M170B", + "children": [ + "112053" + ], + "availability": 1.0 + }, + "112050": { + "type": "regularnode", + "name": "00RO-M170C", + "children": [ + "112054" + ], + "availability": 1.0 + }, + "112051": { + "type": "regularnode", + "name": "00RO-M170D", + "children": [ + "112055" + ], + "availability": 1.0 + }, + "112052": { + "type": "regularnode", + "name": "00RO-P170A", + "children": [ + "112101" + ], + "availability": 1.0 + }, + "112053": { + "type": "regularnode", + "name": "00RO-P170B", + "children": [ + "112102" + ], + "availability": 1.0 + }, + "112054": { + "type": "regularnode", + "name": "00RO-P170C", + "children": [ + "112103" + ], + "availability": 1.0 + }, + "112055": { + "type": "regularnode", + "name": "00RO-P170D", + "children": [ + "112104" + ], + "availability": 1.0 + }, + "112056": { + "type": "regularnode", + "name": "00RO-Z110A", + "children": [ + "112089" + ], + "availability": 1.0 + }, + "112057": { + "type": "regularnode", + "name": "00RO-Z110B", + "children": [ + "112089" + ], + "availability": 1.0 + }, + "112058": { + "type": "regularnode", + "name": "00RO-Z110C", + "children": [ + "112089" + ], + "availability": 1.0 + }, + "112059": { + "type": "regularnode", + "name": "00RO-Z110D", + "children": [ + "112089" + ], + "availability": 1.0 + }, + "112060": { + "type": "regularnode", + "name": "00RO-F161A", + "children": [ + "112064" + ], + "availability": 1.0 + }, + "112061": { + "type": "regularnode", + "name": "00RO-F161B", + "children": [ + "112065" + ], + "availability": 1.0 + }, + "112062": { + "type": "regularnode", + "name": "00RO-F152A", + "children": [ + "112100" + ], + "availability": 1.0 + }, + "112063": { + "type": "regularnode", + "name": "00RO-F152B", + "children": [ + "112100" + ], + "availability": 1.0 + }, + "112064": { + "type": "regularnode", + "name": "00RO-M152A", + "children": [ + "112062" + ], + "availability": 1.0 + }, + "112065": { + "type": "regularnode", + "name": "00RO-M152B", + "children": [ + "112063" + ], + "availability": 1.0 + }, + "112066": { + "type": "regularnode", + "name": "00RO-AG181", + "children": [ + "112067" + ], + "availability": 1.0 + }, + "112067": { + "type": "regularnode", + "name": "00RO-M181", + "children": [ + "112070", + "112071" + ], + "availability": 1.0 + }, + "112068": { + "type": "regularnode", + "name": "00RO-P180A", + "children": [ + "112076" + ], + "availability": 1.0 + }, + "112069": { + "type": "regularnode", + "name": "00RO-P180B", + "children": [ + "112076" + ], + "availability": 1.0 + }, + "112070": { + "type": "regularnode", + "name": "00RO-M180A", + "children": [ + "112068" + ], + "availability": 1.0 + }, + "112071": { + "type": "regularnode", + "name": "00RO-M180B", + "children": [ + "112069" + ], + "availability": 1.0 + }, + "112072": { + "type": "regularnode", + "name": "00RO-P340A", + "children": [ + "112091" + ], + "availability": 1.0 + }, + "112073": { + "type": "regularnode", + "name": "00RO-P340B", + "children": [ + "112091" + ], + "availability": 1.0 + }, + "112074": { + "type": "regularnode", + "name": "00RO-M340A", + "children": [ + "112072" + ], + "availability": 1.0 + }, + "112075": { + "type": "regularnode", + "name": "00RO-M340B", + "children": [ + "112073" + ], + "availability": 1.0 + }, + "112076": { + "type": "regularnode", + "name": "header 3", + "children": [ + "112074", + "112075" + ], + "availability": 1.0 + }, + "112077": { + "type": "regularnode", + "name": "00RO-P195A", + "children": [ + "112098" + ], + "availability": 1.0 + }, + "112078": { + "type": "regularnode", + "name": "00RO-P195B", + "children": [ + "112098" + ], + "availability": 1.0 + }, + "112079": { + "type": "regularnode", + "name": "00RO-M195A", + "children": [ + "112077" + ], + "availability": 1.0 + }, + "112080": { + "type": "regularnode", + "name": "00RO-M195B", + "children": [ + "112078" + ], + "availability": 1.0 + }, + "112081": { + "type": "regularnode", + "name": "00RO-H181", + "children": [ + "112066" + ], + "availability": 1.0 + }, + "112082": { + "type": "regularnode", + "name": "FeCl3 DOSING", + "children": [ + "112083" + ], + "availability": 1.0 + }, + "112083": { + "type": "regularnode", + "name": "ANIONIC POLYMER DOSING", + "children": [ + "112084" + ], + "availability": 1.0 + }, + "112084": { + "type": "regularnode", + "name": "CLEAR WATER", + "children": [ + "112090" + ], + "availability": 1.0 + }, + "112085": { + "type": "regularnode", + "name": "NaOCL DOSING", + "children": [ + "112060", + "112061" + ], + "availability": 1.0 + }, + "112086": { + "type": "regularnode", + "name": "H2SO4 DOSING", + "children": [ + "112087" + ], + "availability": 1.0 + }, + "112087": { + "type": "regularnode", + "name": "SBS DOSING", + "children": [ + "112088" + ], + "availability": 1.0 + }, + "112088": { + "type": "regularnode", + "name": "ANTI SCALANT DOSING", + "children": [ + "112048", + "112049", + "112050", + "112051" + ], + "availability": 1.0 + }, + "112089": { + "type": "regularnode", + "name": "NaOH DOSING", + "children": [ + "112081" + ], + "availability": 1.0 + }, + "112090": { + "type": "regularnode", + "name": "CLARIFIER", + "children": [ + "112097" + ], + "availability": 1.0 + }, + "112091": { + "type": "regularnode", + "name": "00RO-T162", + "children": [ + "112105", + "112107" + ], + "availability": 1.0 + }, + "112092": { + "type": "regularnode", + "name": "00RO-P150A", + "children": [ + "112110" + ], + "availability": 1.0 + }, + "112093": { + "type": "regularnode", + "name": "00RO-P150B", + "children": [ + "112110" + ], + "availability": 1.0 + }, + "112094": { + "type": "regularnode", + "name": "00RO-M150A", + "children": [ + "112092" + ], + "availability": 1.0 + }, + "112095": { + "type": "regularnode", + "name": "00RO-M150B", + "children": [ + "112093" + ], + "availability": 1.0 + }, + "112096": { + "type": "regularnode", + "name": "00RO-T120", + "children": [ + "112082" + ], + "availability": 1.0 + }, + "112097": { + "type": "regularnode", + "name": "00RO-T170", + "children": [ + "112079", + "112080" + ], + "availability": 1.0 + }, + "112098": { + "type": "regularnode", + "name": "00RO-T320", + "children": [ + "112099" + ], + "availability": 1.0 + }, + "112099": { + "type": "regularnode", + "name": "00RO-T130", + "children": [ + "112032", + "112033", + "112034", + "112035" + ], + "availability": 1.0 + }, + "112100": { + "type": "regularnode", + "name": "00RO-T150", + "children": [ + "112094", + "112095" + ], + "availability": 1.0 + }, + "112101": { + "type": "regularnode", + "name": "00RO-T160A", + "children": [ + "112056" + ], + "availability": 1.0 + }, + "112102": { + "type": "regularnode", + "name": "00RO-T160B", + "children": [ + "112057" + ], + "availability": 1.0 + }, + "112103": { + "type": "regularnode", + "name": "00RO-T160C", + "children": [ + "112058" + ], + "availability": 1.0 + }, + "112104": { + "type": "regularnode", + "name": "00RO-T160D", + "children": [ + "112059" + ], + "availability": 1.0 + }, + "112105": { + "type": "regularnode", + "name": "00RO-M190A", + "children": [ + "112106" + ], + "availability": 1.0 + }, + "112106": { + "type": "regularnode", + "name": "00RO-P190A", + "children": [ + "112111" + ], + "availability": 1.0 + }, + "112107": { + "type": "regularnode", + "name": "00RO-M190B", + "children": [ + "112108" + ], + "availability": 1.0 + }, + "112108": { + "type": "regularnode", + "name": "00RO-P190B", + "children": [ + "112111" + ], + "availability": 1.0 + }, + "112109": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112028", + "112029", + "112030", + "112031" + ], + "availability": 1.0 + }, + "112110": { + "type": "regularnode", + "name": "header 2", + "children": [ + "112040", + "112041", + "112042", + "112043" + ], + "availability": 1.0 + }, + "112111": { + "type": "regularnode", + "name": "header 4", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1198": { + "name": "00RO-F161", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1198": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112060", + "status": "InService" + }, + { + "node_id": "112061", + "status": "Standby" + } + ] + } + } + }, + "1199": { + "name": "00RO-M110", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1199": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112028", + "status": "InService" + }, + { + "node_id": "112029", + "status": "InService" + }, + { + "node_id": "112030", + "status": "InService" + }, + { + "node_id": "112031", + "status": "InService" + } + ] + } + } + }, + "1200": { + "name": "00RO-M126", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1200": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112032", + "status": "InService" + }, + { + "node_id": "112033", + "status": "InService" + }, + { + "node_id": "112034", + "status": "InService" + }, + { + "node_id": "112035", + "status": "InService" + } + ] + } + } + }, + "1201": { + "name": "00RO-M150", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1201": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112094", + "status": "InService" + }, + { + "node_id": "112095", + "status": "Standby" + } + ] + } + } + }, + "1202": { + "name": "00RO-M160", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1202": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112040", + "status": "InService" + }, + { + "node_id": "112041", + "status": "InService" + }, + { + "node_id": "112042", + "status": "InService" + }, + { + "node_id": "112043", + "status": "InService" + } + ] + } + } + }, + "1203": { + "name": "00RO-M170", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1203": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112048", + "status": "InService" + }, + { + "node_id": "112049", + "status": "InService" + }, + { + "node_id": "112050", + "status": "InService" + }, + { + "node_id": "112051", + "status": "InService" + } + ] + } + } + }, + "1204": { + "name": "00RO-M180", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1204": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112070", + "status": "InService" + }, + { + "node_id": "112071", + "status": "InService" + } + ] + } + } + }, + "1205": { + "name": "00RO-M190", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1205": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112105", + "status": "InService" + }, + { + "node_id": "112107", + "status": "InService" + } + ] + } + } + }, + "1206": { + "name": "00RO-M195", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1206": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112079", + "status": "InService" + }, + { + "node_id": "112080", + "status": "InService" + } + ] + } + } + }, + "1207": { + "name": "00RO-M340", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1207": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112074", + "status": "InService" + }, + { + "node_id": "112075", + "status": "InService" + } + ] + } + } + } + } + }, + "10008": { + "schematic_id": 10008, + "schematic_name": "- CMN_FGD-", + "root": null, + "nodes": {}, + "redundancies": {} + }, + "10009": { + "schematic_id": 10009, + "schematic_name": "- BTG_KLH -", + "root": null, + "nodes": {}, + "redundancies": {} + }, + "10010": { + "schematic_id": 10010, + "schematic_name": "- BTG_SAC -", + "root": "112123", + "nodes": { + "112112": { + "type": "regularnode", + "name": "00IA-A001A", + "children": [ + "112122" + ], + "availability": 1.0 + }, + "112113": { + "type": "regularnode", + "name": "00IA-A001B", + "children": [ + "112122" + ], + "availability": 1.0 + }, + "112114": { + "type": "regularnode", + "name": "00ACR-M001A", + "children": [ + "112115" + ], + "availability": 1.0 + }, + "112115": { + "type": "regularnode", + "name": "00ACR-C001A", + "children": [ + "112124" + ], + "availability": 1.0 + }, + "112116": { + "type": "regularnode", + "name": "00ACR-M001B", + "children": [ + "112117" + ], + "availability": 1.0 + }, + "112117": { + "type": "regularnode", + "name": "00ACR-C001B", + "children": [ + "112124" + ], + "availability": 1.0 + }, + "112118": { + "type": "regularnode", + "name": "00ACR-M001C", + "children": [ + "112119" + ], + "availability": 1.0 + }, + "112119": { + "type": "regularnode", + "name": "00ACR-C001C", + "children": [ + "112124" + ], + "availability": 1.0 + }, + "112120": { + "type": "regularnode", + "name": "00ACR-M001D", + "children": [ + "112121" + ], + "availability": 1.0 + }, + "112121": { + "type": "regularnode", + "name": "00ACR-C001D", + "children": [ + "112124" + ], + "availability": 1.0 + }, + "112122": { + "type": "regularnode", + "name": "3IA-T005", + "children": [], + "availability": 1.0 + }, + "112123": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112114", + "112116", + "112118", + "112120" + ], + "availability": 1.0 + }, + "112124": { + "type": "regularnode", + "name": "header 2", + "children": [ + "112112", + "112113" + ], + "availability": 1.0 + } + }, + "redundancies": { + "1208": { + "name": "00ACR-M001", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1208": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112114", + "status": "InService" + }, + { + "node_id": "112116", + "status": "InService" + }, + { + "node_id": "112118", + "status": "Standby" + }, + { + "node_id": "112120", + "status": "Standby" + } + ] + } + } + }, + "1209": { + "name": "00IA-A001", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1209": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112112", + "status": "InService" + }, + { + "node_id": "112113", + "status": "Standby" + } + ] + } + } + } + } + }, + "10011": { + "schematic_id": 10011, + "schematic_name": "BOL_SB", + "root": null, + "nodes": {}, + "redundancies": {} + }, + "10012": { + "schematic_id": 10012, + "schematic_name": "BOL_BRS", + "root": "112130", + "nodes": { + "112125": { + "type": "regularnode", + "name": "3BRS-H611", + "children": [ + "112126" + ], + "availability": 1.0 + }, + "112126": { + "type": "regularnode", + "name": "3BRS-H621", + "children": [ + "112127" + ], + "availability": 1.0 + }, + "112127": { + "type": "regularnode", + "name": "3BRS-H631", + "children": [], + "availability": 1.0 + }, + "112128": { + "type": "regularnode", + "name": "3ATT-N503A", + "children": [ + "112131" + ], + "availability": 1.0 + }, + "112129": { + "type": "regularnode", + "name": "3ATT-N503B", + "children": [ + "112131" + ], + "availability": 1.0 + }, + "112130": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112128", + "112129" + ], + "availability": 1.0 + }, + "112131": { + "type": "regularnode", + "name": "header 2", + "children": [ + "112125" + ], + "availability": 1.0 + } + }, + "redundancies": { + "1210": { + "name": "3ATT-N503", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1210": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112128", + "status": "InService" + }, + { + "node_id": "112129", + "status": "InService" + } + ] + } + } + } + } + }, + "10013": { + "schematic_id": 10013, + "schematic_name": "BOL_BSS", + "root": "112132", + "nodes": { + "112132": { + "type": "regularnode", + "name": "3BSS-H611", + "children": [ + "112135", + "112136" + ], + "availability": 1.0 + }, + "112133": { + "type": "regularnode", + "name": "3BSS-H621", + "children": [ + "112137", + "112138" + ], + "availability": 1.0 + }, + "112134": { + "type": "regularnode", + "name": "3BSS-H631", + "children": [], + "availability": 1.0 + }, + "112135": { + "type": "regularnode", + "name": "3ATT-N501A", + "children": [ + "112133" + ], + "availability": 1.0 + }, + "112136": { + "type": "regularnode", + "name": "3ATT-N501B", + "children": [ + "112133" + ], + "availability": 1.0 + }, + "112137": { + "type": "regularnode", + "name": "3ATT-N502A", + "children": [ + "112134" + ], + "availability": 1.0 + }, + "112138": { + "type": "regularnode", + "name": "3ATT-N502B", + "children": [ + "112134" + ], + "availability": 1.0 + } + }, + "redundancies": { + "1211": { + "name": "3ATT-N501", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1211": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112135", + "status": "InService" + }, + { + "node_id": "112136", + "status": "InService" + } + ] + } + } + }, + "1212": { + "name": "3ATT-N502", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1212": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112137", + "status": "InService" + }, + { + "node_id": "112138", + "status": "InService" + } + ] + } + } + } + } + }, + "10014": { + "schematic_id": 10014, + "schematic_name": "BOL_OB", + "root": "112151", + "nodes": { + "112139": { + "type": "regularnode", + "name": "3DM-B701A", + "children": [ + "112140" + ], + "availability": 1.0 + }, + "112140": { + "type": "regularnode", + "name": "3DM-B702A", + "children": [ + "112141" + ], + "availability": 1.0 + }, + "112141": { + "type": "regularnode", + "name": "3DM-B703A", + "children": [ + "112142" + ], + "availability": 1.0 + }, + "112142": { + "type": "regularnode", + "name": "3DM-B704A", + "children": [ + "112152" + ], + "availability": 1.0 + }, + "112143": { + "type": "regularnode", + "name": "3DM-B701C", + "children": [ + "112144" + ], + "availability": 1.0 + }, + "112144": { + "type": "regularnode", + "name": "3DM-B702C", + "children": [ + "112145" + ], + "availability": 1.0 + }, + "112145": { + "type": "regularnode", + "name": "3DM-B703C", + "children": [ + "112146" + ], + "availability": 1.0 + }, + "112146": { + "type": "regularnode", + "name": "3DM-B704C", + "children": [ + "112152" + ], + "availability": 1.0 + }, + "112147": { + "type": "regularnode", + "name": "3DM-B701E", + "children": [ + "112148" + ], + "availability": 1.0 + }, + "112148": { + "type": "regularnode", + "name": "3DM-B702E", + "children": [ + "112149" + ], + "availability": 1.0 + }, + "112149": { + "type": "regularnode", + "name": "3DM-B703E", + "children": [ + "112150" + ], + "availability": 1.0 + }, + "112150": { + "type": "regularnode", + "name": "3DM-B704E", + "children": [ + "112152" + ], + "availability": 1.0 + }, + "112151": { + "type": "regularnode", + "name": "3FO-FCV501", + "children": [ + "112139", + "112143", + "112147" + ], + "availability": 1.0 + }, + "112152": { + "type": "regularnode", + "name": "header 1", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1213": { + "name": "3DM-B701A", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1213": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112139", + "status": "InService" + }, + { + "node_id": "112143", + "status": "InService" + }, + { + "node_id": "112147", + "status": "InService" + } + ] + } + } + } + } + }, + "10015": { + "schematic_id": 10015, + "schematic_name": "BOL_HRH", + "root": "112153", + "nodes": { + "112153": { + "type": "regularnode", + "name": "3HRH-HV020A", + "children": [], + "availability": 1.0 + }, + "112154": { + "type": "regularnode", + "name": "3HRH-HV020B", + "children": [], + "availability": 1.0 + }, + "112155": { + "type": "regularnode", + "name": "3ATT-N561", + "children": [ + "112156" + ], + "availability": 1.0 + }, + "112156": { + "type": "regularnode", + "name": "3ATT-N571", + "children": [ + "112157" + ], + "availability": 1.0 + }, + "112157": { + "type": "regularnode", + "name": "3ATT-N581", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10016": { + "schematic_id": 10016, + "schematic_name": "BOL_MS", + "root": "112158", + "nodes": { + "112158": { + "type": "regularnode", + "name": "3MS-HV011", + "children": [ + "112159" + ], + "availability": 1.0 + }, + "112159": { + "type": "regularnode", + "name": "3MS-HV012", + "children": [ + "112160" + ], + "availability": 1.0 + }, + "112160": { + "type": "regularnode", + "name": "3MS-HV013", + "children": [ + "112161" + ], + "availability": 1.0 + }, + "112161": { + "type": "regularnode", + "name": "3MS-HV014", + "children": [], + "availability": 1.0 + }, + "112162": { + "type": "regularnode", + "name": "3MS-W001A", + "children": [], + "availability": 1.0 + }, + "112163": { + "type": "regularnode", + "name": "3MS-W001B", + "children": [], + "availability": 1.0 + }, + "112164": { + "type": "regularnode", + "name": "3MS-W004", + "children": [], + "availability": 1.0 + }, + "112165": { + "type": "regularnode", + "name": "3MS-HV010A", + "children": [], + "availability": 1.0 + }, + "112166": { + "type": "regularnode", + "name": "3MS-HV010B", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10017": { + "schematic_id": 10017, + "schematic_name": "BOL_DP", + "root": "112167", + "nodes": { + "112167": { + "type": "regularnode", + "name": "3BOL-FD501", + "children": [ + "112168" + ], + "availability": 1.0 + }, + "112168": { + "type": "regularnode", + "name": "header 1", + "children": [], + "availability": 1.0 + }, + "112169": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1214": { + "name": "FEEDER", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1214": { + "priority": 0, + "duration": 100.0, + "cells": [] + } + } + } + } + }, + "10018": { + "schematic_id": 10018, + "schematic_name": "- BTG_SCR -", + "root": "112171", + "nodes": { + "112170": { + "type": "regularnode", + "name": "00SCR-Z015", + "children": [], + "availability": 1.0 + }, + "112171": { + "type": "regularnode", + "name": "00SCR-Z001", + "children": [ + "112170" + ], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10019": { + "schematic_id": 10019, + "schematic_name": "GEN_GMC_RCFM", + "root": "112184", + "nodes": { + "112172": { + "type": "regularnode", + "name": "3GEN-M211A", + "children": [ + "112173" + ], + "availability": 1.0 + }, + "112173": { + "type": "regularnode", + "name": "3GEN-M211B", + "children": [ + "112174" + ], + "availability": 1.0 + }, + "112174": { + "type": "regularnode", + "name": "3GEN-M211C", + "children": [ + "112185" + ], + "availability": 1.0 + }, + "112175": { + "type": "regularnode", + "name": "3GEN-M212A", + "children": [ + "112176" + ], + "availability": 1.0 + }, + "112176": { + "type": "regularnode", + "name": "3GEN-M212B", + "children": [ + "112177" + ], + "availability": 1.0 + }, + "112177": { + "type": "regularnode", + "name": "3GEN-M212C", + "children": [ + "112185" + ], + "availability": 1.0 + }, + "112178": { + "type": "regularnode", + "name": "3GEN-M213A", + "children": [ + "112179" + ], + "availability": 1.0 + }, + "112179": { + "type": "regularnode", + "name": "3GEN-M213B", + "children": [ + "112180" + ], + "availability": 1.0 + }, + "112180": { + "type": "regularnode", + "name": "3GEN-M213C", + "children": [ + "112185" + ], + "availability": 1.0 + }, + "112181": { + "type": "regularnode", + "name": "3GEN-M214A", + "children": [ + "112182" + ], + "availability": 1.0 + }, + "112182": { + "type": "regularnode", + "name": "3GEN-M214B", + "children": [ + "112183" + ], + "availability": 1.0 + }, + "112183": { + "type": "regularnode", + "name": "3GEN-M214C", + "children": [ + "112185" + ], + "availability": 1.0 + }, + "112184": { + "type": "regularnode", + "name": "Node1", + "children": [ + "112172", + "112175", + "112178", + "112181" + ], + "availability": 1.0 + }, + "112185": { + "type": "regularnode", + "name": "Node2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1215": { + "name": "3GEN-M211", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1215": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112172", + "status": "InService" + }, + { + "node_id": "112175", + "status": "InService" + }, + { + "node_id": "112178", + "status": "InService" + }, + { + "node_id": "112181", + "status": "InService" + } + ] + } + } + } + } + }, + "10020": { + "schematic_id": 10020, + "schematic_name": "GEN_GEN_THRS", + "root": "112192", + "nodes": { + "112186": { + "type": "regularnode", + "name": "3GEN-M101A", + "children": [ + "112187" + ], + "availability": 1.0 + }, + "112187": { + "type": "regularnode", + "name": "3GEN-M102A", + "children": [ + "112188" + ], + "availability": 1.0 + }, + "112188": { + "type": "regularnode", + "name": "3GEN-M103A", + "children": [ + "112193" + ], + "availability": 1.0 + }, + "112189": { + "type": "regularnode", + "name": "3GEN-M101B", + "children": [ + "112190" + ], + "availability": 1.0 + }, + "112190": { + "type": "regularnode", + "name": "3GEN-M102B", + "children": [ + "112191" + ], + "availability": 1.0 + }, + "112191": { + "type": "regularnode", + "name": "3GEN-M103B", + "children": [ + "112193" + ], + "availability": 1.0 + }, + "112192": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112186", + "112189" + ], + "availability": 1.0 + }, + "112193": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1216": { + "name": "3GEN-M101", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1216": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112186", + "status": "InService" + }, + { + "node_id": "112189", + "status": "Standby" + } + ] + } + } + } + } + }, + "10021": { + "schematic_id": 10021, + "schematic_name": "FW_BFT A", + "root": "112197", + "nodes": { + "112194": { + "type": "regularnode", + "name": "3LOT-T090A", + "children": [], + "availability": 1.0 + }, + "112195": { + "type": "regularnode", + "name": "3LOT-T100A", + "children": [], + "availability": 1.0 + }, + "112196": { + "type": "regularnode", + "name": "3LOT-P050A", + "children": [], + "availability": 1.0 + }, + "112197": { + "type": "regularnode", + "name": "3LOT-M050A", + "children": [ + "112196" + ], + "availability": 1.0 + }, + "112198": { + "type": "regularnode", + "name": "3LOT-P020A", + "children": [], + "availability": 1.0 + }, + "112199": { + "type": "regularnode", + "name": "3LOT-M010A", + "children": [ + "112200" + ], + "availability": 1.0 + }, + "112200": { + "type": "regularnode", + "name": "3LOT-P010A", + "children": [], + "availability": 1.0 + }, + "112201": { + "type": "regularnode", + "name": "3LOT-H010A", + "children": [ + "112194", + "112195" + ], + "availability": 1.0 + }, + "112202": { + "type": "regularnode", + "name": "3LOT-M020A", + "children": [ + "112198" + ], + "availability": 1.0 + }, + "112203": { + "type": "regularnode", + "name": "3LOT-PF080A", + "children": [ + "112215" + ], + "availability": 1.0 + }, + "112204": { + "type": "regularnode", + "name": "3LOT-S010A", + "children": [ + "112203" + ], + "availability": 1.0 + }, + "112205": { + "type": "regularnode", + "name": "3LOT-S020A", + "children": [ + "112203" + ], + "availability": 1.0 + }, + "112206": { + "type": "regularnode", + "name": "3LOT-P080A", + "children": [ + "112204", + "112205" + ], + "availability": 1.0 + }, + "112207": { + "type": "regularnode", + "name": "3LOT-M080A", + "children": [ + "112206" + ], + "availability": 1.0 + }, + "112208": { + "type": "regularnode", + "name": "3FW-P020A", + "children": [ + "112209" + ], + "availability": 1.0 + }, + "112209": { + "type": "regularnode", + "name": "3FW-H011A", + "children": [ + "112210" + ], + "availability": 1.0 + }, + "112210": { + "type": "regularnode", + "name": "3FW-H012A", + "children": [ + "112211" + ], + "availability": 1.0 + }, + "112211": { + "type": "regularnode", + "name": "3FW-AU030A", + "children": [ + "112212" + ], + "availability": 1.0 + }, + "112212": { + "type": "regularnode", + "name": "3FW-P010A", + "children": [ + "112213" + ], + "availability": 1.0 + }, + "112213": { + "type": "regularnode", + "name": "3BFT-ST010A", + "children": [ + "112214" + ], + "availability": 1.0 + }, + "112214": { + "type": "regularnode", + "name": "3BFT-AU040A", + "children": [], + "availability": 1.0 + }, + "112215": { + "type": "regularnode", + "name": "3LOT-M120A", + "children": [ + "112216" + ], + "availability": 1.0 + }, + "112216": { + "type": "regularnode", + "name": "3LOT-F120A", + "children": [ + "112208" + ], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10022": { + "schematic_id": 10022, + "schematic_name": "FW_BFT B", + "root": "112220", + "nodes": { + "112217": { + "type": "regularnode", + "name": "3LOT-T090B", + "children": [], + "availability": 1.0 + }, + "112218": { + "type": "regularnode", + "name": "3LOT-T100B", + "children": [], + "availability": 1.0 + }, + "112219": { + "type": "regularnode", + "name": "3LOT-P050B", + "children": [], + "availability": 1.0 + }, + "112220": { + "type": "regularnode", + "name": "3LOT-M050B", + "children": [ + "112219" + ], + "availability": 1.0 + }, + "112221": { + "type": "regularnode", + "name": "3LOT-P020B", + "children": [], + "availability": 1.0 + }, + "112222": { + "type": "regularnode", + "name": "3LOT-M010B", + "children": [ + "112223" + ], + "availability": 1.0 + }, + "112223": { + "type": "regularnode", + "name": "3LOT-P010B", + "children": [], + "availability": 1.0 + }, + "112224": { + "type": "regularnode", + "name": "3LOT-H010B", + "children": [ + "112217", + "112218" + ], + "availability": 1.0 + }, + "112225": { + "type": "regularnode", + "name": "3LOT-M020B", + "children": [ + "112221" + ], + "availability": 1.0 + }, + "112226": { + "type": "regularnode", + "name": "3LOT-PF080B", + "children": [ + "112238" + ], + "availability": 1.0 + }, + "112227": { + "type": "regularnode", + "name": "3LOT-S010B", + "children": [ + "112226" + ], + "availability": 1.0 + }, + "112228": { + "type": "regularnode", + "name": "3LOT-S020B", + "children": [ + "112226" + ], + "availability": 1.0 + }, + "112229": { + "type": "regularnode", + "name": "3LOT-P080B", + "children": [ + "112227", + "112228" + ], + "availability": 1.0 + }, + "112230": { + "type": "regularnode", + "name": "3LOT-M080B", + "children": [ + "112229" + ], + "availability": 1.0 + }, + "112231": { + "type": "regularnode", + "name": "3BFT-ST010B", + "children": [ + "112232" + ], + "availability": 1.0 + }, + "112232": { + "type": "regularnode", + "name": "3BFT-AU040B", + "children": [], + "availability": 1.0 + }, + "112233": { + "type": "regularnode", + "name": "3FW-P020B", + "children": [ + "112234" + ], + "availability": 1.0 + }, + "112234": { + "type": "regularnode", + "name": "3FW-H011B", + "children": [ + "112235" + ], + "availability": 1.0 + }, + "112235": { + "type": "regularnode", + "name": "3FW-H012B", + "children": [ + "112236" + ], + "availability": 1.0 + }, + "112236": { + "type": "regularnode", + "name": "3FW-AU030B", + "children": [ + "112237" + ], + "availability": 1.0 + }, + "112237": { + "type": "regularnode", + "name": "3FW-P010B", + "children": [ + "112231" + ], + "availability": 1.0 + }, + "112238": { + "type": "regularnode", + "name": "3LOT-M120B", + "children": [ + "112239" + ], + "availability": 1.0 + }, + "112239": { + "type": "regularnode", + "name": "3LOT-F120B", + "children": [ + "112233" + ], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10023": { + "schematic_id": 10023, + "schematic_name": "BOL_DP_FDR A", + "root": "112240", + "nodes": { + "112240": { + "type": "regularnode", + "name": "3DP-FDR711A", + "children": [ + "112241" + ], + "availability": 1.0 + }, + "112241": { + "type": "regularnode", + "name": "3DP-M712A", + "children": [ + "112242" + ], + "availability": 1.0 + }, + "112242": { + "type": "regularnode", + "name": "3DP-M711A", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10024": { + "schematic_id": 10024, + "schematic_name": "BOL_DP_FDR B", + "root": "112243", + "nodes": { + "112243": { + "type": "regularnode", + "name": "3DP-FDR711B", + "children": [ + "112244" + ], + "availability": 1.0 + }, + "112244": { + "type": "regularnode", + "name": "3DP-M712B", + "children": [ + "112245" + ], + "availability": 1.0 + }, + "112245": { + "type": "regularnode", + "name": "3DP-M711B", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10025": { + "schematic_id": 10025, + "schematic_name": "BOL_DP_FDR C", + "root": "112246", + "nodes": { + "112246": { + "type": "regularnode", + "name": "3DP-FDR711C", + "children": [ + "112247" + ], + "availability": 1.0 + }, + "112247": { + "type": "regularnode", + "name": "3DP-M712C", + "children": [ + "112248" + ], + "availability": 1.0 + }, + "112248": { + "type": "regularnode", + "name": "3DP-M711C", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10026": { + "schematic_id": 10026, + "schematic_name": "BOL_DP_FDR D", + "root": "112249", + "nodes": { + "112249": { + "type": "regularnode", + "name": "3DP-FDR711D", + "children": [ + "112250" + ], + "availability": 1.0 + }, + "112250": { + "type": "regularnode", + "name": "3DP-M712D", + "children": [ + "112251" + ], + "availability": 1.0 + }, + "112251": { + "type": "regularnode", + "name": "3DP-M711D", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10027": { + "schematic_id": 10027, + "schematic_name": "BOL_DP_FDR E", + "root": "112252", + "nodes": { + "112252": { + "type": "regularnode", + "name": "3DP-FDR711E", + "children": [ + "112253" + ], + "availability": 1.0 + }, + "112253": { + "type": "regularnode", + "name": "3DP-M712E", + "children": [ + "112254" + ], + "availability": 1.0 + }, + "112254": { + "type": "regularnode", + "name": "3DP-M711E", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10028": { + "schematic_id": 10028, + "schematic_name": "BOL_DP_FDR F", + "root": "112255", + "nodes": { + "112255": { + "type": "regularnode", + "name": "3DP-FDR711F", + "children": [ + "112256" + ], + "availability": 1.0 + }, + "112256": { + "type": "regularnode", + "name": "3DP-M712F", + "children": [ + "112257" + ], + "availability": 1.0 + }, + "112257": { + "type": "regularnode", + "name": "3DP-M711F", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10029": { + "schematic_id": 10029, + "schematic_name": "BOL_DP_MILL A", + "root": "112262", + "nodes": { + "112258": { + "type": "regularnode", + "name": "3DP-P781A", + "children": [ + "112266" + ], + "availability": 1.0 + }, + "112259": { + "type": "regularnode", + "name": "3DP-M781A", + "children": [ + "112258" + ], + "availability": 1.0 + }, + "112260": { + "type": "regularnode", + "name": "3DP-P761A", + "children": [ + "112259" + ], + "availability": 1.0 + }, + "112261": { + "type": "regularnode", + "name": "3DP-M761A", + "children": [ + "112260" + ], + "availability": 1.0 + }, + "112262": { + "type": "regularnode", + "name": "3DP-M741A", + "children": [ + "112263" + ], + "availability": 1.0 + }, + "112263": { + "type": "regularnode", + "name": "3DP-BM741A", + "children": [ + "112264" + ], + "availability": 1.0 + }, + "112264": { + "type": "regularnode", + "name": "3DP-CVT701A", + "children": [ + "112265" + ], + "availability": 1.0 + }, + "112265": { + "type": "regularnode", + "name": "3DP-CVT711A", + "children": [ + "112261" + ], + "availability": 1.0 + }, + "112266": { + "type": "regularnode", + "name": "3DP-M731A", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10030": { + "schematic_id": 10030, + "schematic_name": "BOL_DP_MILL B", + "root": "112272", + "nodes": { + "112267": { + "type": "regularnode", + "name": "3DP-P781B", + "children": [ + "112271" + ], + "availability": 1.0 + }, + "112268": { + "type": "regularnode", + "name": "3DP-M781B", + "children": [ + "112267" + ], + "availability": 1.0 + }, + "112269": { + "type": "regularnode", + "name": "3DP-P761B", + "children": [ + "112268" + ], + "availability": 1.0 + }, + "112270": { + "type": "regularnode", + "name": "3DP-M761B", + "children": [ + "112269" + ], + "availability": 1.0 + }, + "112271": { + "type": "regularnode", + "name": "3DP-M731B", + "children": [ + "112276" + ], + "availability": 1.0 + }, + "112272": { + "type": "regularnode", + "name": "3DP-M741B", + "children": [ + "112273" + ], + "availability": 1.0 + }, + "112273": { + "type": "regularnode", + "name": "3DP-BM741B", + "children": [ + "112274" + ], + "availability": 1.0 + }, + "112274": { + "type": "regularnode", + "name": "3DP-CVT701B", + "children": [ + "112275" + ], + "availability": 1.0 + }, + "112275": { + "type": "regularnode", + "name": "3DP-CVT711B", + "children": [ + "112270" + ], + "availability": 1.0 + }, + "112276": { + "type": "regularnode", + "name": "3DP-BM731B", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10031": { + "schematic_id": 10031, + "schematic_name": "BOL_DP_MILL C", + "root": "112281", + "nodes": { + "112277": { + "type": "regularnode", + "name": "3DP-P781C", + "children": [ + "112285" + ], + "availability": 1.0 + }, + "112278": { + "type": "regularnode", + "name": "3DP-M781C", + "children": [ + "112277" + ], + "availability": 1.0 + }, + "112279": { + "type": "regularnode", + "name": "3DP-P761C", + "children": [ + "112278" + ], + "availability": 1.0 + }, + "112280": { + "type": "regularnode", + "name": "3DP-M761C", + "children": [ + "112279" + ], + "availability": 1.0 + }, + "112281": { + "type": "regularnode", + "name": "3DP-M741C", + "children": [ + "112282" + ], + "availability": 1.0 + }, + "112282": { + "type": "regularnode", + "name": "3DP-BM741C", + "children": [ + "112283" + ], + "availability": 1.0 + }, + "112283": { + "type": "regularnode", + "name": "3DP-CVT701C", + "children": [ + "112284" + ], + "availability": 1.0 + }, + "112284": { + "type": "regularnode", + "name": "3DP-CVT711C", + "children": [ + "112280" + ], + "availability": 1.0 + }, + "112285": { + "type": "regularnode", + "name": "3DP-M731C", + "children": [ + "112286" + ], + "availability": 1.0 + }, + "112286": { + "type": "regularnode", + "name": "3DP-BM731C", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10032": { + "schematic_id": 10032, + "schematic_name": "BOL_DP_MILL D", + "root": "112292", + "nodes": { + "112287": { + "type": "regularnode", + "name": "3DP-P781D", + "children": [ + "112291" + ], + "availability": 1.0 + }, + "112288": { + "type": "regularnode", + "name": "3DP-M781D", + "children": [ + "112287" + ], + "availability": 1.0 + }, + "112289": { + "type": "regularnode", + "name": "3DP-P761D", + "children": [ + "112288" + ], + "availability": 1.0 + }, + "112290": { + "type": "regularnode", + "name": "3DP-M761D", + "children": [ + "112289" + ], + "availability": 1.0 + }, + "112291": { + "type": "regularnode", + "name": "3DP-M731D", + "children": [ + "112296" + ], + "availability": 1.0 + }, + "112292": { + "type": "regularnode", + "name": "3DP-M741D", + "children": [ + "112293" + ], + "availability": 1.0 + }, + "112293": { + "type": "regularnode", + "name": "3DP-BM741D", + "children": [ + "112294" + ], + "availability": 1.0 + }, + "112294": { + "type": "regularnode", + "name": "3DP-CVT701D", + "children": [ + "112295" + ], + "availability": 1.0 + }, + "112295": { + "type": "regularnode", + "name": "3DP-CVT711D", + "children": [ + "112290" + ], + "availability": 1.0 + }, + "112296": { + "type": "regularnode", + "name": "3DP-BM731D", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10033": { + "schematic_id": 10033, + "schematic_name": "BOL_DP_MILL E", + "root": "112302", + "nodes": { + "112297": { + "type": "regularnode", + "name": "3DP-P781E", + "children": [ + "112301" + ], + "availability": 1.0 + }, + "112298": { + "type": "regularnode", + "name": "3DP-M781E", + "children": [ + "112297" + ], + "availability": 1.0 + }, + "112299": { + "type": "regularnode", + "name": "3DP-P761E", + "children": [ + "112298" + ], + "availability": 1.0 + }, + "112300": { + "type": "regularnode", + "name": "3DP-M761E", + "children": [ + "112299" + ], + "availability": 1.0 + }, + "112301": { + "type": "regularnode", + "name": "3DP-M731E", + "children": [ + "112306" + ], + "availability": 1.0 + }, + "112302": { + "type": "regularnode", + "name": "3DP-M741E", + "children": [ + "112303" + ], + "availability": 1.0 + }, + "112303": { + "type": "regularnode", + "name": "3DP-BM741E", + "children": [ + "112304" + ], + "availability": 1.0 + }, + "112304": { + "type": "regularnode", + "name": "3DP-CVT701E", + "children": [ + "112305" + ], + "availability": 1.0 + }, + "112305": { + "type": "regularnode", + "name": "3DP-CVT711E", + "children": [ + "112300" + ], + "availability": 1.0 + }, + "112306": { + "type": "regularnode", + "name": "3DP-BM731E", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10034": { + "schematic_id": 10034, + "schematic_name": "BOL_DP_MILL F", + "root": "112312", + "nodes": { + "112307": { + "type": "regularnode", + "name": "3DP-P781F", + "children": [ + "112311" + ], + "availability": 1.0 + }, + "112308": { + "type": "regularnode", + "name": "3DP-M781F", + "children": [ + "112307" + ], + "availability": 1.0 + }, + "112309": { + "type": "regularnode", + "name": "3DP-P761F", + "children": [ + "112308" + ], + "availability": 1.0 + }, + "112310": { + "type": "regularnode", + "name": "3DP-M761F", + "children": [ + "112309" + ], + "availability": 1.0 + }, + "112311": { + "type": "regularnode", + "name": "3DP-M731F", + "children": [ + "112316" + ], + "availability": 1.0 + }, + "112312": { + "type": "regularnode", + "name": "3DP-M741F", + "children": [ + "112313" + ], + "availability": 1.0 + }, + "112313": { + "type": "regularnode", + "name": "3DP-BM741F", + "children": [ + "112314" + ], + "availability": 1.0 + }, + "112314": { + "type": "regularnode", + "name": "3DP-CVT701F", + "children": [ + "112315" + ], + "availability": 1.0 + }, + "112315": { + "type": "regularnode", + "name": "3DP-CVT711F", + "children": [ + "112310" + ], + "availability": 1.0 + }, + "112316": { + "type": "regularnode", + "name": "3DP-BM731F", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10035": { + "schematic_id": 10035, + "schematic_name": "BOL_DP_CB A", + "root": "112317", + "nodes": { + "112317": { + "type": "regularnode", + "name": "3DP-B701A", + "children": [ + "112318" + ], + "availability": 1.0 + }, + "112318": { + "type": "regularnode", + "name": "3DP-B702A", + "children": [ + "112319" + ], + "availability": 1.0 + }, + "112319": { + "type": "regularnode", + "name": "3DP-B703A", + "children": [ + "112320" + ], + "availability": 1.0 + }, + "112320": { + "type": "regularnode", + "name": "3DP-B704A", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10036": { + "schematic_id": 10036, + "schematic_name": "BOL_DP_CB B", + "root": "112321", + "nodes": { + "112321": { + "type": "regularnode", + "name": "3DP-B701B", + "children": [ + "112322" + ], + "availability": 1.0 + }, + "112322": { + "type": "regularnode", + "name": "3DP-B702B", + "children": [ + "112323" + ], + "availability": 1.0 + }, + "112323": { + "type": "regularnode", + "name": "3DP-B703B", + "children": [ + "112324" + ], + "availability": 1.0 + }, + "112324": { + "type": "regularnode", + "name": "3DP-B704B", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10037": { + "schematic_id": 10037, + "schematic_name": "BOL_DP_CB C", + "root": "112325", + "nodes": { + "112325": { + "type": "regularnode", + "name": "3DP-B701C", + "children": [ + "112326" + ], + "availability": 1.0 + }, + "112326": { + "type": "regularnode", + "name": "3DP-B702C", + "children": [ + "112327" + ], + "availability": 1.0 + }, + "112327": { + "type": "regularnode", + "name": "3DP-B703C", + "children": [ + "112328" + ], + "availability": 1.0 + }, + "112328": { + "type": "regularnode", + "name": "3DP-B704C", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10038": { + "schematic_id": 10038, + "schematic_name": "BOL_DP_CB D", + "root": "112329", + "nodes": { + "112329": { + "type": "regularnode", + "name": "3DP-B701D", + "children": [ + "112330" + ], + "availability": 1.0 + }, + "112330": { + "type": "regularnode", + "name": "3DP-B702D", + "children": [ + "112331" + ], + "availability": 1.0 + }, + "112331": { + "type": "regularnode", + "name": "3DP-B703D", + "children": [ + "112332" + ], + "availability": 1.0 + }, + "112332": { + "type": "regularnode", + "name": "3DP-B704D", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10039": { + "schematic_id": 10039, + "schematic_name": "BOL_DP_CB E", + "root": "112333", + "nodes": { + "112333": { + "type": "regularnode", + "name": "3DP-B701E", + "children": [ + "112334" + ], + "availability": 1.0 + }, + "112334": { + "type": "regularnode", + "name": "3DP-B702E", + "children": [ + "112335" + ], + "availability": 1.0 + }, + "112335": { + "type": "regularnode", + "name": "3DP-B703E", + "children": [ + "112336" + ], + "availability": 1.0 + }, + "112336": { + "type": "regularnode", + "name": "3DP-B704E", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10040": { + "schematic_id": 10040, + "schematic_name": "BOL_DP_CB F", + "root": "112337", + "nodes": { + "112337": { + "type": "regularnode", + "name": "3DP-B701F", + "children": [ + "112338" + ], + "availability": 1.0 + }, + "112338": { + "type": "regularnode", + "name": "3DP-B702F", + "children": [ + "112339" + ], + "availability": 1.0 + }, + "112339": { + "type": "regularnode", + "name": "3DP-B703F", + "children": [ + "112340" + ], + "availability": 1.0 + }, + "112340": { + "type": "regularnode", + "name": "3DP-B704F", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10041": { + "schematic_id": 10041, + "schematic_name": "BOL_BDW", + "root": "112341", + "nodes": { + "112341": { + "type": "regularnode", + "name": "3BDW-H601", + "children": [ + "112352" + ], + "availability": 1.0 + }, + "112342": { + "type": "regularnode", + "name": "3BDW-P521A", + "children": [ + "112348" + ], + "availability": 1.0 + }, + "112343": { + "type": "regularnode", + "name": "3BDW-M521A", + "children": [ + "112342" + ], + "availability": 1.0 + }, + "112344": { + "type": "regularnode", + "name": "3BDW-H611", + "children": [ + "112345" + ], + "availability": 1.0 + }, + "112345": { + "type": "regularnode", + "name": "3BDW-H621", + "children": [ + "112346" + ], + "availability": 1.0 + }, + "112346": { + "type": "regularnode", + "name": "3BDW-H631", + "children": [ + "112347" + ], + "availability": 1.0 + }, + "112347": { + "type": "regularnode", + "name": "3BDW-H641", + "children": [ + "112343", + "112350" + ], + "availability": 1.0 + }, + "112348": { + "type": "regularnode", + "name": "3BDW-H521A", + "children": [ + "112353" + ], + "availability": 1.0 + }, + "112349": { + "type": "regularnode", + "name": "3BDW-P521B", + "children": [ + "112351" + ], + "availability": 1.0 + }, + "112350": { + "type": "regularnode", + "name": "3BDW-M521B", + "children": [ + "112349" + ], + "availability": 1.0 + }, + "112351": { + "type": "regularnode", + "name": "3BDW-H521B", + "children": [ + "112353" + ], + "availability": 1.0 + }, + "112352": { + "type": "regularnode", + "name": "3BDW-T601", + "children": [ + "112344" + ], + "availability": 1.0 + }, + "112353": { + "type": "regularnode", + "name": "Node1", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1217": { + "name": "3BDW-M512", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1217": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112343", + "status": "InService" + }, + { + "node_id": "112350", + "status": "InService" + } + ] + } + } + } + } + }, + "10042": { + "schematic_id": 10042, + "schematic_name": "SPS_EG", + "root": "112354", + "nodes": { + "112354": { + "type": "regularnode", + "name": "3EG-E001", + "children": [ + "112355" + ], + "availability": 1.0 + }, + "112355": { + "type": "regularnode", + "name": "3EG-T003", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10043": { + "schematic_id": 10043, + "schematic_name": "ESP_A1", + "root": "112356", + "nodes": { + "112356": { + "type": "regularnode", + "name": "3ESP-CAB801", + "children": [ + "112357" + ], + "availability": 1.0 + }, + "112357": { + "type": "regularnode", + "name": "3ESP-CAB821", + "children": [ + "112358" + ], + "availability": 1.0 + }, + "112358": { + "type": "regularnode", + "name": "A1-FIELD 1", + "children": [ + "112359" + ], + "availability": 1.0 + }, + "112359": { + "type": "regularnode", + "name": "A1-FIELD 2", + "children": [ + "112360" + ], + "availability": 1.0 + }, + "112360": { + "type": "regularnode", + "name": "A1-FIELD 3", + "children": [ + "112361" + ], + "availability": 1.0 + }, + "112361": { + "type": "regularnode", + "name": "A1-FIELD 4", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10044": { + "schematic_id": 10044, + "schematic_name": "ESP_A2", + "root": "112362", + "nodes": { + "112362": { + "type": "regularnode", + "name": "3ESP-CAB802", + "children": [ + "112363" + ], + "availability": 1.0 + }, + "112363": { + "type": "regularnode", + "name": "3ESP-CAB822", + "children": [ + "112364" + ], + "availability": 1.0 + }, + "112364": { + "type": "regularnode", + "name": "A2-FIELD 1", + "children": [ + "112365" + ], + "availability": 1.0 + }, + "112365": { + "type": "regularnode", + "name": "A2-FIELD 2", + "children": [ + "112366" + ], + "availability": 1.0 + }, + "112366": { + "type": "regularnode", + "name": "A2-FIELD 3", + "children": [ + "112367" + ], + "availability": 1.0 + }, + "112367": { + "type": "regularnode", + "name": "A2-FIELD 4", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10045": { + "schematic_id": 10045, + "schematic_name": "ESP_B1", + "root": "112368", + "nodes": { + "112368": { + "type": "regularnode", + "name": "3ESP-CAB803", + "children": [ + "112369" + ], + "availability": 1.0 + }, + "112369": { + "type": "regularnode", + "name": "3ESP-CAB823", + "children": [ + "112370" + ], + "availability": 1.0 + }, + "112370": { + "type": "regularnode", + "name": "B1-FIELD 1", + "children": [ + "112371" + ], + "availability": 1.0 + }, + "112371": { + "type": "regularnode", + "name": "B1-FIELD 2", + "children": [ + "112372" + ], + "availability": 1.0 + }, + "112372": { + "type": "regularnode", + "name": "B1-FIELD 3", + "children": [ + "112373" + ], + "availability": 1.0 + }, + "112373": { + "type": "regularnode", + "name": "B1-FIELD 4", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10046": { + "schematic_id": 10046, + "schematic_name": "ESP_B2", + "root": "112374", + "nodes": { + "112374": { + "type": "regularnode", + "name": "3ESP-CAB804", + "children": [ + "112375" + ], + "availability": 1.0 + }, + "112375": { + "type": "regularnode", + "name": "3ESP-CAB824", + "children": [ + "112376" + ], + "availability": 1.0 + }, + "112376": { + "type": "regularnode", + "name": "B2-FIELD 1", + "children": [ + "112377" + ], + "availability": 1.0 + }, + "112377": { + "type": "regularnode", + "name": "B2-FIELD 2", + "children": [ + "112378" + ], + "availability": 1.0 + }, + "112378": { + "type": "regularnode", + "name": "B2-FIELD 3", + "children": [ + "112379" + ], + "availability": 1.0 + }, + "112379": { + "type": "regularnode", + "name": "B2-FIELD 4", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10047": { + "schematic_id": 10047, + "schematic_name": "BOL_SB_HALF", + "root": "112404", + "nodes": { + "112380": { + "type": "regularnode", + "name": "3AI-Y501I", + "children": [ + "112385" + ], + "availability": 1.0 + }, + "112381": { + "type": "regularnode", + "name": "3AI-M501I", + "children": [ + "112380" + ], + "availability": 1.0 + }, + "112382": { + "type": "regularnode", + "name": "3AI-Y501H", + "children": [ + "112387" + ], + "availability": 1.0 + }, + "112383": { + "type": "regularnode", + "name": "3AI-M501H", + "children": [ + "112382" + ], + "availability": 1.0 + }, + "112384": { + "type": "regularnode", + "name": "3AI-Y502I", + "children": [ + "112389" + ], + "availability": 1.0 + }, + "112385": { + "type": "regularnode", + "name": "3AI-M502I", + "children": [ + "112384" + ], + "availability": 1.0 + }, + "112386": { + "type": "regularnode", + "name": "3AI-Y502H", + "children": [ + "112391" + ], + "availability": 1.0 + }, + "112387": { + "type": "regularnode", + "name": "3AI-M502H", + "children": [ + "112386" + ], + "availability": 1.0 + }, + "112388": { + "type": "regularnode", + "name": "3AI-Y503I", + "children": [ + "112393" + ], + "availability": 1.0 + }, + "112389": { + "type": "regularnode", + "name": "3AI-M503I", + "children": [ + "112388" + ], + "availability": 1.0 + }, + "112390": { + "type": "regularnode", + "name": "3AI-Y503H", + "children": [ + "112395" + ], + "availability": 1.0 + }, + "112391": { + "type": "regularnode", + "name": "3AI-M503H", + "children": [ + "112390" + ], + "availability": 1.0 + }, + "112392": { + "type": "regularnode", + "name": "3AI-Y504I", + "children": [ + "112397" + ], + "availability": 1.0 + }, + "112393": { + "type": "regularnode", + "name": "3AI-M504I", + "children": [ + "112392" + ], + "availability": 1.0 + }, + "112394": { + "type": "regularnode", + "name": "3AI-Y504H", + "children": [ + "112399" + ], + "availability": 1.0 + }, + "112395": { + "type": "regularnode", + "name": "3AI-M504H", + "children": [ + "112394" + ], + "availability": 1.0 + }, + "112396": { + "type": "regularnode", + "name": "3AI-Y505I", + "children": [ + "112401" + ], + "availability": 1.0 + }, + "112397": { + "type": "regularnode", + "name": "3AI-M505I", + "children": [ + "112396" + ], + "availability": 1.0 + }, + "112398": { + "type": "regularnode", + "name": "3AI-Y505H", + "children": [ + "112403" + ], + "availability": 1.0 + }, + "112399": { + "type": "regularnode", + "name": "3AI-M505H", + "children": [ + "112398" + ], + "availability": 1.0 + }, + "112400": { + "type": "regularnode", + "name": "3AI-Y506I", + "children": [ + "112405" + ], + "availability": 1.0 + }, + "112401": { + "type": "regularnode", + "name": "3AI-M506I", + "children": [ + "112400" + ], + "availability": 1.0 + }, + "112402": { + "type": "regularnode", + "name": "3AI-Y506H", + "children": [ + "112405" + ], + "availability": 1.0 + }, + "112403": { + "type": "regularnode", + "name": "3AI-M506H", + "children": [ + "112402" + ], + "availability": 1.0 + }, + "112404": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112383", + "112381" + ], + "availability": 1.0 + }, + "112405": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1218": { + "name": "3AI-M501", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1218": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112383", + "status": "InService" + }, + { + "node_id": "112381", + "status": "InService" + } + ] + } + } + } + } + }, + "10048": { + "schematic_id": 10048, + "schematic_name": "BOL_SB_LONG", + "root": null, + "nodes": {}, + "redundancies": {} + }, + "10049": { + "schematic_id": 10049, + "schematic_name": "BOL_SB_WD", + "root": null, + "nodes": {}, + "redundancies": {} + }, + "10050": { + "schematic_id": 10050, + "schematic_name": "BOL_SB_WD_FRONT", + "root": "112434", + "nodes": { + "112406": { + "type": "regularnode", + "name": "3AI-Y501A", + "children": [ + "112409" + ], + "availability": 1.0 + }, + "112407": { + "type": "regularnode", + "name": "3AI-M501A", + "children": [ + "112406" + ], + "availability": 1.0 + }, + "112408": { + "type": "regularnode", + "name": "3AI-Y502A", + "children": [ + "112411" + ], + "availability": 1.0 + }, + "112409": { + "type": "regularnode", + "name": "3AI-M502A", + "children": [ + "112408" + ], + "availability": 1.0 + }, + "112410": { + "type": "regularnode", + "name": "3AI-Y503A", + "children": [ + "112413" + ], + "availability": 1.0 + }, + "112411": { + "type": "regularnode", + "name": "3AI-M503A", + "children": [ + "112410" + ], + "availability": 1.0 + }, + "112412": { + "type": "regularnode", + "name": "3AI-Y504A", + "children": [ + "112415" + ], + "availability": 1.0 + }, + "112413": { + "type": "regularnode", + "name": "3AI-M504A", + "children": [ + "112412" + ], + "availability": 1.0 + }, + "112414": { + "type": "regularnode", + "name": "3AI-Y505A", + "children": [ + "112435" + ], + "availability": 1.0 + }, + "112415": { + "type": "regularnode", + "name": "3AI-M505A", + "children": [ + "112414" + ], + "availability": 1.0 + }, + "112416": { + "type": "regularnode", + "name": "3AI-Y501C", + "children": [ + "112419" + ], + "availability": 1.0 + }, + "112417": { + "type": "regularnode", + "name": "3AI-M501C", + "children": [ + "112416" + ], + "availability": 1.0 + }, + "112418": { + "type": "regularnode", + "name": "3AI-Y502C", + "children": [ + "112421" + ], + "availability": 1.0 + }, + "112419": { + "type": "regularnode", + "name": "3AI-M502C", + "children": [ + "112418" + ], + "availability": 1.0 + }, + "112420": { + "type": "regularnode", + "name": "3AI-Y503C", + "children": [ + "112423" + ], + "availability": 1.0 + }, + "112421": { + "type": "regularnode", + "name": "3AI-M503C", + "children": [ + "112420" + ], + "availability": 1.0 + }, + "112422": { + "type": "regularnode", + "name": "3AI-Y504C", + "children": [ + "112425" + ], + "availability": 1.0 + }, + "112423": { + "type": "regularnode", + "name": "3AI-M504C", + "children": [ + "112422" + ], + "availability": 1.0 + }, + "112424": { + "type": "regularnode", + "name": "3AI-Y505C", + "children": [ + "112435" + ], + "availability": 1.0 + }, + "112425": { + "type": "regularnode", + "name": "3AI-M505C", + "children": [ + "112424" + ], + "availability": 1.0 + }, + "112426": { + "type": "regularnode", + "name": "3AI-Y501B", + "children": [ + "112429" + ], + "availability": 1.0 + }, + "112427": { + "type": "regularnode", + "name": "3AI-M501B", + "children": [ + "112426" + ], + "availability": 1.0 + }, + "112428": { + "type": "regularnode", + "name": "3AI-Y502B", + "children": [ + "112431" + ], + "availability": 1.0 + }, + "112429": { + "type": "regularnode", + "name": "3AI-M502B", + "children": [ + "112428" + ], + "availability": 1.0 + }, + "112430": { + "type": "regularnode", + "name": "3AI-Y503B", + "children": [ + "112433" + ], + "availability": 1.0 + }, + "112431": { + "type": "regularnode", + "name": "3AI-M503B", + "children": [ + "112430" + ], + "availability": 1.0 + }, + "112432": { + "type": "regularnode", + "name": "3AI-Y504B", + "children": [ + "112435" + ], + "availability": 1.0 + }, + "112433": { + "type": "regularnode", + "name": "3AI-M504B", + "children": [ + "112432" + ], + "availability": 1.0 + }, + "112434": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112407", + "112427", + "112417" + ], + "availability": 1.0 + }, + "112435": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1219": { + "name": "3AI-M501", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1219": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112407", + "status": "InService" + }, + { + "node_id": "112427", + "status": "InService" + }, + { + "node_id": "112417", + "status": "InService" + } + ] + } + } + } + } + }, + "10051": { + "schematic_id": 10051, + "schematic_name": "BOL_SB_WD_RIGHT", + "root": "112458", + "nodes": { + "112436": { + "type": "regularnode", + "name": "3AI-Y506B", + "children": [ + "112439" + ], + "availability": 1.0 + }, + "112437": { + "type": "regularnode", + "name": "3AI-M506B", + "children": [ + "112436" + ], + "availability": 1.0 + }, + "112438": { + "type": "regularnode", + "name": "3AI-Y507B", + "children": [ + "112459" + ], + "availability": 1.0 + }, + "112439": { + "type": "regularnode", + "name": "3AI-M507B", + "children": [ + "112438" + ], + "availability": 1.0 + }, + "112440": { + "type": "regularnode", + "name": "3AI-Y505B", + "children": [ + "112437" + ], + "availability": 1.0 + }, + "112441": { + "type": "regularnode", + "name": "3AI-M505B", + "children": [ + "112440" + ], + "availability": 1.0 + }, + "112442": { + "type": "regularnode", + "name": "3AI-Y506A", + "children": [ + "112445" + ], + "availability": 1.0 + }, + "112443": { + "type": "regularnode", + "name": "3AI-M506A", + "children": [ + "112442" + ], + "availability": 1.0 + }, + "112444": { + "type": "regularnode", + "name": "3AI-Y507A", + "children": [ + "112447" + ], + "availability": 1.0 + }, + "112445": { + "type": "regularnode", + "name": "3AI-M507A", + "children": [ + "112444" + ], + "availability": 1.0 + }, + "112446": { + "type": "regularnode", + "name": "3AI-Y508A", + "children": [ + "112449" + ], + "availability": 1.0 + }, + "112447": { + "type": "regularnode", + "name": "3AI-M508A", + "children": [ + "112446" + ], + "availability": 1.0 + }, + "112448": { + "type": "regularnode", + "name": "3AI-Y509A", + "children": [ + "112459" + ], + "availability": 1.0 + }, + "112449": { + "type": "regularnode", + "name": "3AI-M509A", + "children": [ + "112448" + ], + "availability": 1.0 + }, + "112450": { + "type": "regularnode", + "name": "3AI-Y506C", + "children": [ + "112453" + ], + "availability": 1.0 + }, + "112451": { + "type": "regularnode", + "name": "3AI-M506C", + "children": [ + "112450" + ], + "availability": 1.0 + }, + "112452": { + "type": "regularnode", + "name": "3AI-Y507C", + "children": [ + "112455" + ], + "availability": 1.0 + }, + "112453": { + "type": "regularnode", + "name": "3AI-M507C", + "children": [ + "112452" + ], + "availability": 1.0 + }, + "112454": { + "type": "regularnode", + "name": "3AI-Y508C", + "children": [ + "112457" + ], + "availability": 1.0 + }, + "112455": { + "type": "regularnode", + "name": "3AI-M508C", + "children": [ + "112454" + ], + "availability": 1.0 + }, + "112456": { + "type": "regularnode", + "name": "3AI-Y509C", + "children": [ + "112459" + ], + "availability": 1.0 + }, + "112457": { + "type": "regularnode", + "name": "3AI-M509C", + "children": [ + "112456" + ], + "availability": 1.0 + }, + "112458": { + "type": "regularnode", + "name": "Node1", + "children": [ + "112441", + "112443", + "112451" + ], + "availability": 1.0 + }, + "112459": { + "type": "regularnode", + "name": "Node2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1220": { + "name": "3AI-M506", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1220": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112443", + "status": "InService" + }, + { + "node_id": "112437", + "status": "InService" + }, + { + "node_id": "112451", + "status": "InService" + } + ] + } + } + } + } + }, + "10052": { + "schematic_id": 10052, + "schematic_name": "BOL_SB_WD_LEFT", + "root": "112482", + "nodes": { + "112460": { + "type": "regularnode", + "name": "3AI-Y515A", + "children": [ + "112463" + ], + "availability": 1.0 + }, + "112461": { + "type": "regularnode", + "name": "3AI-M515A", + "children": [ + "112460" + ], + "availability": 1.0 + }, + "112462": { + "type": "regularnode", + "name": "3AI-Y516A", + "children": [ + "112465" + ], + "availability": 1.0 + }, + "112463": { + "type": "regularnode", + "name": "3AI-M516A", + "children": [ + "112462" + ], + "availability": 1.0 + }, + "112464": { + "type": "regularnode", + "name": "3AI-Y517A", + "children": [ + "112467" + ], + "availability": 1.0 + }, + "112465": { + "type": "regularnode", + "name": "3AI-M517A", + "children": [ + "112464" + ], + "availability": 1.0 + }, + "112466": { + "type": "regularnode", + "name": "3AI-Y518A", + "children": [ + "112483" + ], + "availability": 1.0 + }, + "112467": { + "type": "regularnode", + "name": "3AI-M518A", + "children": [ + "112466" + ], + "availability": 1.0 + }, + "112468": { + "type": "regularnode", + "name": "3AI-Y512B", + "children": [ + "112471" + ], + "availability": 1.0 + }, + "112469": { + "type": "regularnode", + "name": "3AI-M512B", + "children": [ + "112468" + ], + "availability": 1.0 + }, + "112470": { + "type": "regularnode", + "name": "3AI-Y513B", + "children": [ + "112473" + ], + "availability": 1.0 + }, + "112471": { + "type": "regularnode", + "name": "3AI-M513B", + "children": [ + "112470" + ], + "availability": 1.0 + }, + "112472": { + "type": "regularnode", + "name": "3AI-Y514B", + "children": [ + "112483" + ], + "availability": 1.0 + }, + "112473": { + "type": "regularnode", + "name": "3AI-M514B", + "children": [ + "112472" + ], + "availability": 1.0 + }, + "112474": { + "type": "regularnode", + "name": "3AI-Y515C", + "children": [ + "112477" + ], + "availability": 1.0 + }, + "112475": { + "type": "regularnode", + "name": "3AI-M515C", + "children": [ + "112474" + ], + "availability": 1.0 + }, + "112476": { + "type": "regularnode", + "name": "3AI-Y516C", + "children": [ + "112479" + ], + "availability": 1.0 + }, + "112477": { + "type": "regularnode", + "name": "3AI-M516C", + "children": [ + "112476" + ], + "availability": 1.0 + }, + "112478": { + "type": "regularnode", + "name": "3AI-Y517C", + "children": [ + "112481" + ], + "availability": 1.0 + }, + "112479": { + "type": "regularnode", + "name": "3AI-M517C", + "children": [ + "112478" + ], + "availability": 1.0 + }, + "112480": { + "type": "regularnode", + "name": "3AI-Y518C", + "children": [ + "112483" + ], + "availability": 1.0 + }, + "112481": { + "type": "regularnode", + "name": "3AI-M518C", + "children": [ + "112480" + ], + "availability": 1.0 + }, + "112482": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112469", + "112461", + "112475" + ], + "availability": 1.0 + }, + "112483": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1221": { + "name": "3AI-M515", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1221": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112469", + "status": "InService" + }, + { + "node_id": "112461", + "status": "InService" + }, + { + "node_id": "112475", + "status": "InService" + } + ] + } + } + } + } + }, + "10053": { + "schematic_id": 10053, + "schematic_name": "KLH_ABS", + "root": "112514", + "nodes": { + "112484": { + "type": "regularnode", + "name": "3ABS-ABT851", + "children": [], + "availability": 1.0 + }, + "112485": { + "type": "regularnode", + "name": "3ABS-M879A", + "children": [ + "112486" + ], + "availability": 1.0 + }, + "112486": { + "type": "regularnode", + "name": "3ABS-AG879A", + "children": [ + "112495" + ], + "availability": 1.0 + }, + "112487": { + "type": "regularnode", + "name": "3ABS-M879B", + "children": [ + "112488" + ], + "availability": 1.0 + }, + "112488": { + "type": "regularnode", + "name": "3ABS-AG879B", + "children": [ + "112495" + ], + "availability": 1.0 + }, + "112489": { + "type": "regularnode", + "name": "3ABS-M879C", + "children": [ + "112490" + ], + "availability": 1.0 + }, + "112490": { + "type": "regularnode", + "name": "3ABS-AG879C", + "children": [ + "112495" + ], + "availability": 1.0 + }, + "112491": { + "type": "regularnode", + "name": "3ABS-M879D", + "children": [ + "112492" + ], + "availability": 1.0 + }, + "112492": { + "type": "regularnode", + "name": "3ABS-AG879D", + "children": [ + "112495" + ], + "availability": 1.0 + }, + "112493": { + "type": "regularnode", + "name": "3ABS-M879E", + "children": [ + "112494" + ], + "availability": 1.0 + }, + "112494": { + "type": "regularnode", + "name": "3ABS-AG879E", + "children": [ + "112495" + ], + "availability": 1.0 + }, + "112495": { + "type": "regularnode", + "name": "3ABS-T931", + "children": [ + "112511" + ], + "availability": 1.0 + }, + "112496": { + "type": "regularnode", + "name": "3ABS-P932A", + "children": [ + "112512" + ], + "availability": 1.0 + }, + "112497": { + "type": "regularnode", + "name": "3ABS-M932A", + "children": [ + "112496" + ], + "availability": 1.0 + }, + "112498": { + "type": "regularnode", + "name": "3ABS-P932B", + "children": [ + "112512" + ], + "availability": 1.0 + }, + "112499": { + "type": "regularnode", + "name": "3ABS-M932B", + "children": [ + "112498" + ], + "availability": 1.0 + }, + "112500": { + "type": "regularnode", + "name": "3ABS-M888A", + "children": [ + "112501" + ], + "availability": 1.0 + }, + "112501": { + "type": "regularnode", + "name": "3ABS-P888A", + "children": [ + "112513" + ], + "availability": 1.0 + }, + "112502": { + "type": "regularnode", + "name": "3ABS-M888B", + "children": [ + "112503" + ], + "availability": 1.0 + }, + "112503": { + "type": "regularnode", + "name": "3ABS-P888B", + "children": [ + "112513" + ], + "availability": 1.0 + }, + "112504": { + "type": "regularnode", + "name": "3ABS-M888C", + "children": [ + "112505" + ], + "availability": 1.0 + }, + "112505": { + "type": "regularnode", + "name": "3ABS-P888C", + "children": [ + "112513" + ], + "availability": 1.0 + }, + "112506": { + "type": "regularnode", + "name": "3ABS-M910A", + "children": [ + "112507" + ], + "availability": 1.0 + }, + "112507": { + "type": "regularnode", + "name": "3ABS-P910A", + "children": [ + "112484" + ], + "availability": 1.0 + }, + "112508": { + "type": "regularnode", + "name": "3ABS-M910B", + "children": [ + "112509" + ], + "availability": 1.0 + }, + "112509": { + "type": "regularnode", + "name": "3ABS-P910B", + "children": [ + "112484" + ], + "availability": 1.0 + }, + "112510": { + "type": "regularnode", + "name": "3ABS-AG931", + "children": [ + "112497", + "112499" + ], + "availability": 1.0 + }, + "112511": { + "type": "regularnode", + "name": "3ABS-M931", + "children": [ + "112510" + ], + "availability": 1.0 + }, + "112512": { + "type": "regularnode", + "name": "header 2", + "children": [ + "112500", + "112502", + "112504" + ], + "availability": 1.0 + }, + "112513": { + "type": "regularnode", + "name": "header 3", + "children": [ + "112506", + "112508" + ], + "availability": 1.0 + }, + "112514": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112485", + "112487", + "112489", + "112491", + "112493" + ], + "availability": 1.0 + } + }, + "redundancies": { + "1222": { + "name": "3ABS-M879", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1222": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112485", + "status": "InService" + }, + { + "node_id": "112487", + "status": "InService" + }, + { + "node_id": "112489", + "status": "InService" + }, + { + "node_id": "112491", + "status": "InService" + }, + { + "node_id": "112493", + "status": "InService" + } + ] + } + } + }, + "1223": { + "name": "3ABS-M888", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1223": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112500", + "status": "InService" + }, + { + "node_id": "112502", + "status": "InService" + }, + { + "node_id": "112504", + "status": "InService" + } + ] + } + } + }, + "1224": { + "name": "3ABS-M910", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1224": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112506", + "status": "InService" + }, + { + "node_id": "112508", + "status": "Standby" + } + ] + } + } + }, + "1225": { + "name": "3ABS-M932", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1225": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112497", + "status": "InService" + }, + { + "node_id": "112499", + "status": "InService" + } + ] + } + } + } + } + }, + "10054": { + "schematic_id": 10054, + "schematic_name": "FGD_DS", + "root": null, + "nodes": {}, + "redundancies": {} + }, + "10055": { + "schematic_id": 10055, + "schematic_name": "FGD_LSH", + "root": "112529", + "nodes": { + "112515": { + "type": "regularnode", + "name": "00LSH-BW801", + "children": [ + "112516" + ], + "availability": 1.0 + }, + "112516": { + "type": "regularnode", + "name": "00LSH-COG801", + "children": [ + "112527" + ], + "availability": 1.0 + }, + "112517": { + "type": "regularnode", + "name": "00LSH-CR853", + "children": [ + "112518" + ], + "availability": 1.0 + }, + "112518": { + "type": "regularnode", + "name": "00LSH-CV801", + "children": [ + "112525" + ], + "availability": 1.0 + }, + "112519": { + "type": "regularnode", + "name": "00LSH-CV852", + "children": [ + "112523" + ], + "availability": 1.0 + }, + "112520": { + "type": "regularnode", + "name": "00LSH-DC901", + "children": [ + "112528" + ], + "availability": 1.0 + }, + "112521": { + "type": "regularnode", + "name": "00LSH-F901", + "children": [ + "112520" + ], + "availability": 1.0 + }, + "112522": { + "type": "regularnode", + "name": "00LSH-HO801", + "children": [ + "112515" + ], + "availability": 1.0 + }, + "112523": { + "type": "regularnode", + "name": "00LSH-HO851", + "children": [], + "availability": 1.0 + }, + "112524": { + "type": "regularnode", + "name": "00LSH-M853A", + "children": [ + "112517" + ], + "availability": 1.0 + }, + "112525": { + "type": "regularnode", + "name": "00LSH-M901", + "children": [ + "112521" + ], + "availability": 1.0 + }, + "112526": { + "type": "regularnode", + "name": "00LSH-M852", + "children": [ + "112519" + ], + "availability": 1.0 + }, + "112527": { + "type": "regularnode", + "name": "00LSH-M851", + "children": [ + "112530" + ], + "availability": 1.0 + }, + "112528": { + "type": "regularnode", + "name": "00LSH-MS801", + "children": [ + "112526" + ], + "availability": 1.0 + }, + "112529": { + "type": "regularnode", + "name": "00LSH-SU801", + "children": [ + "112522" + ], + "availability": 1.0 + }, + "112530": { + "type": "regularnode", + "name": "00LSH-VFD801", + "children": [ + "112531" + ], + "availability": 1.0 + }, + "112531": { + "type": "regularnode", + "name": "00LSH-VI851", + "children": [ + "112524" + ], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10056": { + "schematic_id": 10056, + "schematic_name": "FGD_OA", + "root": "112538", + "nodes": { + "112532": { + "type": "regularnode", + "name": "00OA-M851A", + "children": [ + "112533" + ], + "availability": 1.0 + }, + "112533": { + "type": "regularnode", + "name": "00OA-F851A", + "children": [ + "112539" + ], + "availability": 1.0 + }, + "112534": { + "type": "regularnode", + "name": "00OA-M851B", + "children": [ + "112535" + ], + "availability": 1.0 + }, + "112535": { + "type": "regularnode", + "name": "00OA-F851B", + "children": [ + "112539" + ], + "availability": 1.0 + }, + "112536": { + "type": "regularnode", + "name": "00OA-M851C", + "children": [ + "112537" + ], + "availability": 1.0 + }, + "112537": { + "type": "regularnode", + "name": "00OA-F851C", + "children": [ + "112539" + ], + "availability": 1.0 + }, + "112538": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112532", + "112534", + "112536" + ], + "availability": 1.0 + }, + "112539": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1226": { + "name": "00OA-M851", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1226": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112532", + "status": "InService" + }, + { + "node_id": "112534", + "status": "Standby" + }, + { + "node_id": "112536", + "status": "Standby" + } + ] + } + } + } + } + }, + "10057": { + "schematic_id": 10057, + "schematic_name": "FGD_RP", + "root": "112566", + "nodes": { + "112540": { + "type": "regularnode", + "name": "00RP-Z851A", + "children": [ + "112570" + ], + "availability": 1.0 + }, + "112541": { + "type": "regularnode", + "name": "00RP-Z851B", + "children": [ + "112570" + ], + "availability": 1.0 + }, + "112542": { + "type": "regularnode", + "name": "00RP-Z851C", + "children": [ + "112570" + ], + "availability": 1.0 + }, + "112543": { + "type": "regularnode", + "name": "00RP-Z851D", + "children": [ + "112570" + ], + "availability": 1.0 + }, + "112544": { + "type": "regularnode", + "name": "00RP-M985", + "children": [ + "112545" + ], + "availability": 1.0 + }, + "112545": { + "type": "regularnode", + "name": "00RP-AG985", + "children": [ + "112547", + "112549" + ], + "availability": 1.0 + }, + "112546": { + "type": "regularnode", + "name": "00RP-P986A", + "children": [], + "availability": 1.0 + }, + "112547": { + "type": "regularnode", + "name": "00RP-M986A", + "children": [ + "112546" + ], + "availability": 1.0 + }, + "112548": { + "type": "regularnode", + "name": "00RP-P986B", + "children": [], + "availability": 1.0 + }, + "112549": { + "type": "regularnode", + "name": "00RP-M986B", + "children": [ + "112548" + ], + "availability": 1.0 + }, + "112550": { + "type": "regularnode", + "name": "00RP-AG970", + "children": [ + "112553", + "112555" + ], + "availability": 1.0 + }, + "112551": { + "type": "regularnode", + "name": "00RP-M970", + "children": [ + "112550" + ], + "availability": 1.0 + }, + "112552": { + "type": "regularnode", + "name": "00RP-P972A", + "children": [ + "112568" + ], + "availability": 1.0 + }, + "112553": { + "type": "regularnode", + "name": "00RP-M972A", + "children": [ + "112552" + ], + "availability": 1.0 + }, + "112554": { + "type": "regularnode", + "name": "00RP-P972B", + "children": [ + "112568" + ], + "availability": 1.0 + }, + "112555": { + "type": "regularnode", + "name": "00RP-M972B", + "children": [ + "112554" + ], + "availability": 1.0 + }, + "112556": { + "type": "regularnode", + "name": "00RP-M950", + "children": [ + "112557" + ], + "availability": 1.0 + }, + "112557": { + "type": "regularnode", + "name": "00RP-AG950", + "children": [ + "112558", + "112560" + ], + "availability": 1.0 + }, + "112558": { + "type": "regularnode", + "name": "00RP-M952A", + "children": [ + "112559" + ], + "availability": 1.0 + }, + "112559": { + "type": "regularnode", + "name": "00RP-P952A", + "children": [ + "112569" + ], + "availability": 1.0 + }, + "112560": { + "type": "regularnode", + "name": "00RP-M952B", + "children": [ + "112561" + ], + "availability": 1.0 + }, + "112561": { + "type": "regularnode", + "name": "00RP-P952B", + "children": [ + "112569" + ], + "availability": 1.0 + }, + "112562": { + "type": "regularnode", + "name": "00RP-M856A", + "children": [], + "availability": 1.0 + }, + "112563": { + "type": "regularnode", + "name": "00RP-Z856B", + "children": [ + "112565" + ], + "availability": 1.0 + }, + "112564": { + "type": "regularnode", + "name": "00RP-M856B", + "children": [ + "112563" + ], + "availability": 1.0 + }, + "112565": { + "type": "regularnode", + "name": "00RP-DX979", + "children": [], + "availability": 1.0 + }, + "112566": { + "type": "regularnode", + "name": "00RP-T985", + "children": [ + "112544" + ], + "availability": 1.0 + }, + "112567": { + "type": "regularnode", + "name": "00RP-T970", + "children": [ + "112551" + ], + "availability": 1.0 + }, + "112568": { + "type": "regularnode", + "name": "00RP-T950", + "children": [ + "112556" + ], + "availability": 1.0 + }, + "112569": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112540", + "112541", + "112542", + "112543" + ], + "availability": 1.0 + }, + "112570": { + "type": "regularnode", + "name": "header 2", + "children": [ + "112562", + "112564" + ], + "availability": 1.0 + } + }, + "redundancies": { + "1227": { + "name": "00RP-M856", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1227": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112562", + "status": "InService" + }, + { + "node_id": "112564", + "status": "InService" + } + ] + } + } + }, + "1228": { + "name": "00RP-M952", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1228": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112558", + "status": "InService" + }, + { + "node_id": "112560", + "status": "Standby" + } + ] + } + } + }, + "1229": { + "name": "00RP-M972", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1229": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112553", + "status": "InService" + }, + { + "node_id": "112555", + "status": "Standby" + } + ] + } + } + }, + "1230": { + "name": "00RP-Z851", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1230": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112540", + "status": "InService" + }, + { + "node_id": "112541", + "status": "InService" + }, + { + "node_id": "112542", + "status": "InService" + }, + { + "node_id": "112543", + "status": "Standby" + } + ] + } + } + }, + "1231": { + "name": "00RP-M986", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1231": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112547", + "status": "InService" + }, + { + "node_id": "112549", + "status": "Standby" + } + ] + } + } + } + } + }, + "10058": { + "schematic_id": 10058, + "schematic_name": "FGD_DS_GYPSUM", + "root": "112582", + "nodes": { + "112571": { + "type": "regularnode", + "name": "00DS-M851", + "children": [ + "112572" + ], + "availability": 1.0 + }, + "112572": { + "type": "regularnode", + "name": "00DS-AG851", + "children": [ + "112573", + "112575" + ], + "availability": 1.0 + }, + "112573": { + "type": "regularnode", + "name": "00DS-M860A", + "children": [ + "112574" + ], + "availability": 1.0 + }, + "112574": { + "type": "regularnode", + "name": "00DS-P860A", + "children": [ + "112581" + ], + "availability": 1.0 + }, + "112575": { + "type": "regularnode", + "name": "00DS-M860B", + "children": [ + "112576" + ], + "availability": 1.0 + }, + "112576": { + "type": "regularnode", + "name": "00DS-P860B", + "children": [ + "112581" + ], + "availability": 1.0 + }, + "112577": { + "type": "regularnode", + "name": "00DS-CY851A", + "children": [ + "112580" + ], + "availability": 1.0 + }, + "112578": { + "type": "regularnode", + "name": "00DS-CY851B", + "children": [ + "112580" + ], + "availability": 1.0 + }, + "112579": { + "type": "regularnode", + "name": "00DS-CY865", + "children": [], + "availability": 1.0 + }, + "112580": { + "type": "regularnode", + "name": "00DS-T851", + "children": [ + "112571" + ], + "availability": 1.0 + }, + "112581": { + "type": "regularnode", + "name": "00DS-T852", + "children": [ + "112579" + ], + "availability": 1.0 + }, + "112582": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112577", + "112578" + ], + "availability": 1.0 + } + }, + "redundancies": { + "1232": { + "name": "00DS-CY851", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1232": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112577", + "status": "InService" + }, + { + "node_id": "112578", + "status": "InService" + } + ] + } + } + }, + "1233": { + "name": "00DS-M860", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1233": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112573", + "status": "InService" + }, + { + "node_id": "112575", + "status": "InService" + } + ] + } + } + } + } + }, + "10059": { + "schematic_id": 10059, + "schematic_name": "FGD_DS_CHLORIDE", + "root": "112589", + "nodes": { + "112583": { + "type": "regularnode", + "name": "00DS-M888", + "children": [ + "112584" + ], + "availability": 1.0 + }, + "112584": { + "type": "regularnode", + "name": "00DS-AG888", + "children": [ + "112585", + "112587" + ], + "availability": 1.0 + }, + "112585": { + "type": "regularnode", + "name": "00DS-M883A", + "children": [ + "112586" + ], + "availability": 1.0 + }, + "112586": { + "type": "regularnode", + "name": "00DS-P883A", + "children": [ + "112590" + ], + "availability": 1.0 + }, + "112587": { + "type": "regularnode", + "name": "00DS-M883B", + "children": [ + "112588" + ], + "availability": 1.0 + }, + "112588": { + "type": "regularnode", + "name": "00DS-P883B", + "children": [ + "112590" + ], + "availability": 1.0 + }, + "112589": { + "type": "regularnode", + "name": "00DS-T888", + "children": [ + "112583" + ], + "availability": 1.0 + }, + "112590": { + "type": "regularnode", + "name": "header 1", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1234": { + "name": "00DS-M883", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1234": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112585", + "status": "InService" + }, + { + "node_id": "112587", + "status": "InService" + } + ] + } + } + } + } + }, + "10060": { + "schematic_id": 10060, + "schematic_name": "FGD_DS_VACUUM", + "root": "112605", + "nodes": { + "112591": { + "type": "regularnode", + "name": "00DS-M900", + "children": [ + "112611" + ], + "availability": 1.0 + }, + "112592": { + "type": "regularnode", + "name": "00DS-M901", + "children": [ + "112593" + ], + "availability": 1.0 + }, + "112593": { + "type": "regularnode", + "name": "00DS-P901", + "children": [ + "112612" + ], + "availability": 1.0 + }, + "112594": { + "type": "regularnode", + "name": "00DS-P902A", + "children": [ + "112606" + ], + "availability": 1.0 + }, + "112595": { + "type": "regularnode", + "name": "00DS-M902B", + "children": [ + "112596" + ], + "availability": 1.0 + }, + "112596": { + "type": "regularnode", + "name": "00DS-P902B", + "children": [ + "112606" + ], + "availability": 1.0 + }, + "112597": { + "type": "regularnode", + "name": "00DS-M935", + "children": [ + "112611" + ], + "availability": 1.0 + }, + "112598": { + "type": "regularnode", + "name": "00DS-M936", + "children": [ + "112599" + ], + "availability": 1.0 + }, + "112599": { + "type": "regularnode", + "name": "00DS-P936", + "children": [ + "112612" + ], + "availability": 1.0 + }, + "112600": { + "type": "regularnode", + "name": "00DS-M937A", + "children": [ + "112601" + ], + "availability": 1.0 + }, + "112601": { + "type": "regularnode", + "name": "00DS-P937A", + "children": [ + "112606" + ], + "availability": 1.0 + }, + "112602": { + "type": "regularnode", + "name": "00DS-M937B", + "children": [ + "112603" + ], + "availability": 1.0 + }, + "112603": { + "type": "regularnode", + "name": "00DS-P937B", + "children": [ + "112606" + ], + "availability": 1.0 + }, + "112604": { + "type": "regularnode", + "name": "00DS-M902A", + "children": [ + "112594" + ], + "availability": 1.0 + }, + "112605": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112607", + "112609" + ], + "availability": 1.0 + }, + "112606": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + }, + "112607": { + "type": "regularnode", + "name": "00DS-T901", + "children": [ + "112591" + ], + "availability": 1.0 + }, + "112608": { + "type": "regularnode", + "name": "00DS-T900", + "children": [ + "112604", + "112595" + ], + "availability": 1.0 + }, + "112609": { + "type": "regularnode", + "name": "00DS-T936", + "children": [ + "112597" + ], + "availability": 1.0 + }, + "112610": { + "type": "regularnode", + "name": "00DS-T935", + "children": [ + "112600", + "112602" + ], + "availability": 1.0 + }, + "112611": { + "type": "regularnode", + "name": "header 4", + "children": [ + "112592", + "112598" + ], + "availability": 1.0 + }, + "112612": { + "type": "regularnode", + "name": "header 6", + "children": [ + "112608", + "112610" + ], + "availability": 1.0 + } + }, + "redundancies": { + "1235": { + "name": "00DS-M901", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1235": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112592", + "status": "InService" + }, + { + "node_id": "112598", + "status": "Standby" + } + ] + } + } + }, + "1236": { + "name": "00DS-T900", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1236": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112608", + "status": "InService" + }, + { + "node_id": "112610", + "status": "InService" + } + ] + } + } + }, + "1237": { + "name": "00DS-T901", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1237": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112607", + "status": "InService" + }, + { + "node_id": "112609", + "status": "Standby" + } + ] + } + } + } + } + }, + "10061": { + "schematic_id": 10061, + "schematic_name": "FW_MBFP", + "root": "112614", + "nodes": { + "112613": { + "type": "regularnode", + "name": "3LOM-P330", + "children": [ + "112615" + ], + "availability": 1.0 + }, + "112614": { + "type": "regularnode", + "name": "3LOM-M330", + "children": [ + "112613" + ], + "availability": 1.0 + }, + "112615": { + "type": "regularnode", + "name": "3LOM-H310", + "children": [ + "112618" + ], + "availability": 1.0 + }, + "112616": { + "type": "regularnode", + "name": "3LOM-P370", + "children": [ + "112619" + ], + "availability": 1.0 + }, + "112617": { + "type": "regularnode", + "name": "3LOM-H370", + "children": [ + "112616" + ], + "availability": 1.0 + }, + "112618": { + "type": "regularnode", + "name": "3LOM-P310", + "children": [ + "112617" + ], + "availability": 1.0 + }, + "112619": { + "type": "regularnode", + "name": "3FW-P310", + "children": [ + "112620" + ], + "availability": 1.0 + }, + "112620": { + "type": "regularnode", + "name": "3FW-M321", + "children": [ + "112621" + ], + "availability": 1.0 + }, + "112621": { + "type": "regularnode", + "name": "3FW-M320", + "children": [ + "112622" + ], + "availability": 1.0 + }, + "112622": { + "type": "regularnode", + "name": "3FW-AU330", + "children": [ + "112623" + ], + "availability": 1.0 + }, + "112623": { + "type": "regularnode", + "name": "3FW-H301", + "children": [ + "112624" + ], + "availability": 1.0 + }, + "112624": { + "type": "regularnode", + "name": "3FW-H302", + "children": [ + "112625" + ], + "availability": 1.0 + }, + "112625": { + "type": "regularnode", + "name": "3FW-P300", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10062": { + "schematic_id": 10062, + "schematic_name": "AFG_FGD A", + "root": "112633", + "nodes": { + "112626": { + "type": "regularnode", + "name": "3GG-F851", + "children": [ + "112637" + ], + "availability": 1.0 + }, + "112627": { + "type": "regularnode", + "name": "3GG-F875A", + "children": [ + "112645" + ], + "availability": 1.0 + }, + "112628": { + "type": "regularnode", + "name": "3GG-F853A", + "children": [ + "112626" + ], + "availability": 1.0 + }, + "112629": { + "type": "regularnode", + "name": "3GG-F853B", + "children": [ + "112626" + ], + "availability": 1.0 + }, + "112630": { + "type": "regularnode", + "name": "3GG-F853C", + "children": [ + "112626" + ], + "availability": 1.0 + }, + "112631": { + "type": "regularnode", + "name": "3GG-F853D", + "children": [ + "112626" + ], + "availability": 1.0 + }, + "112632": { + "type": "regularnode", + "name": "3GG-F875B", + "children": [ + "112645" + ], + "availability": 1.0 + }, + "112633": { + "type": "regularnode", + "name": "3GG-M851", + "children": [ + "112636" + ], + "availability": 1.0 + }, + "112634": { + "type": "regularnode", + "name": "3GG-M875A", + "children": [ + "112627" + ], + "availability": 1.0 + }, + "112635": { + "type": "regularnode", + "name": "3GG-M875B", + "children": [ + "112632" + ], + "availability": 1.0 + }, + "112636": { + "type": "regularnode", + "name": "3GG-M851A", + "children": [ + "112628", + "112629", + "112630", + "112631" + ], + "availability": 1.0 + }, + "112637": { + "type": "regularnode", + "name": "3GG-H877", + "children": [ + "112642" + ], + "availability": 1.0 + }, + "112638": { + "type": "regularnode", + "name": "3GG-M877A", + "children": [ + "112640" + ], + "availability": 1.0 + }, + "112639": { + "type": "regularnode", + "name": "3GG-M877B", + "children": [ + "112641" + ], + "availability": 1.0 + }, + "112640": { + "type": "regularnode", + "name": "3GG-P877A", + "children": [ + "112646" + ], + "availability": 1.0 + }, + "112641": { + "type": "regularnode", + "name": "3GG-P877B", + "children": [ + "112646" + ], + "availability": 1.0 + }, + "112642": { + "type": "regularnode", + "name": "3GG-F865A", + "children": [ + "112644" + ], + "availability": 1.0 + }, + "112643": { + "type": "regularnode", + "name": "3GG-F870A", + "children": [ + "112634", + "112635" + ], + "availability": 1.0 + }, + "112644": { + "type": "regularnode", + "name": "3GG-M870A", + "children": [ + "112643" + ], + "availability": 1.0 + }, + "112645": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112638", + "112639" + ], + "availability": 1.0 + }, + "112646": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1238": { + "name": "3GG-F853", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1238": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112628", + "status": "InService" + }, + { + "node_id": "112629", + "status": "InService" + }, + { + "node_id": "112630", + "status": "InService" + }, + { + "node_id": "112631", + "status": "InService" + } + ] + } + } + }, + "1239": { + "name": "3GG-M875", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1239": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112634", + "status": "InService" + }, + { + "node_id": "112635", + "status": "Standby" + } + ] + } + } + }, + "1240": { + "name": "3GG-M877", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1240": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112638", + "status": "InService" + }, + { + "node_id": "112639", + "status": "Standby" + } + ] + } + } + } + } + }, + "10063": { + "schematic_id": 10063, + "schematic_name": "AFG_FGD B", + "root": "112654", + "nodes": { + "112647": { + "type": "regularnode", + "name": "3GG-F852", + "children": [ + "112658" + ], + "availability": 1.0 + }, + "112648": { + "type": "regularnode", + "name": "3GG-F880A", + "children": [ + "112666" + ], + "availability": 1.0 + }, + "112649": { + "type": "regularnode", + "name": "3GG-F854A", + "children": [ + "112647" + ], + "availability": 1.0 + }, + "112650": { + "type": "regularnode", + "name": "3GG-F854B", + "children": [ + "112647" + ], + "availability": 1.0 + }, + "112651": { + "type": "regularnode", + "name": "3GG-F854C", + "children": [ + "112647" + ], + "availability": 1.0 + }, + "112652": { + "type": "regularnode", + "name": "3GG-F854D", + "children": [ + "112647" + ], + "availability": 1.0 + }, + "112653": { + "type": "regularnode", + "name": "3GG-F880B", + "children": [ + "112666" + ], + "availability": 1.0 + }, + "112654": { + "type": "regularnode", + "name": "3GG-M852", + "children": [ + "112657" + ], + "availability": 1.0 + }, + "112655": { + "type": "regularnode", + "name": "3GG-M880A", + "children": [ + "112648" + ], + "availability": 1.0 + }, + "112656": { + "type": "regularnode", + "name": "3GG-M880B", + "children": [ + "112653" + ], + "availability": 1.0 + }, + "112657": { + "type": "regularnode", + "name": "3GG-M851B", + "children": [ + "112649", + "112650", + "112651", + "112652" + ], + "availability": 1.0 + }, + "112658": { + "type": "regularnode", + "name": "3GG-H878", + "children": [ + "112663" + ], + "availability": 1.0 + }, + "112659": { + "type": "regularnode", + "name": "3GG-M878A", + "children": [ + "112661" + ], + "availability": 1.0 + }, + "112660": { + "type": "regularnode", + "name": "3GG-M878B", + "children": [ + "112662" + ], + "availability": 1.0 + }, + "112661": { + "type": "regularnode", + "name": "3GG-P878A", + "children": [ + "112667" + ], + "availability": 1.0 + }, + "112662": { + "type": "regularnode", + "name": "3GG-P878B", + "children": [ + "112667" + ], + "availability": 1.0 + }, + "112663": { + "type": "regularnode", + "name": "3GG-F865B", + "children": [ + "112665" + ], + "availability": 1.0 + }, + "112664": { + "type": "regularnode", + "name": "3GG-F870B", + "children": [ + "112655", + "112656" + ], + "availability": 1.0 + }, + "112665": { + "type": "regularnode", + "name": "3GG-M870B", + "children": [ + "112664" + ], + "availability": 1.0 + }, + "112666": { + "type": "regularnode", + "name": "Node1", + "children": [ + "112659", + "112660" + ], + "availability": 1.0 + }, + "112667": { + "type": "regularnode", + "name": "Node2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1241": { + "name": "3GG-F854", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1241": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112649", + "status": "InService" + }, + { + "node_id": "112650", + "status": "InService" + }, + { + "node_id": "112651", + "status": "InService" + }, + { + "node_id": "112652", + "status": "InService" + } + ] + } + } + }, + "1242": { + "name": "3GG-M880", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1242": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112655", + "status": "InService" + }, + { + "node_id": "112656", + "status": "Standby" + } + ] + } + } + }, + "1243": { + "name": "3GG-M878", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1243": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112659", + "status": "InService" + }, + { + "node_id": "112660", + "status": "Standby" + } + ] + } + } + } + } + }, + "10064": { + "schematic_id": 10064, + "schematic_name": "TUR_CW", + "root": "112678", + "nodes": { + "112668": { + "type": "regularnode", + "name": "3CW-M010A", + "children": [ + "112672" + ], + "availability": 1.0 + }, + "112669": { + "type": "regularnode", + "name": "3CW-M010B", + "children": [ + "112673" + ], + "availability": 1.0 + }, + "112670": { + "type": "regularnode", + "name": "3CW-M020A", + "children": [ + "112674" + ], + "availability": 1.0 + }, + "112671": { + "type": "regularnode", + "name": "3CW-M020B", + "children": [ + "112675" + ], + "availability": 1.0 + }, + "112672": { + "type": "regularnode", + "name": "3CW-P010A", + "children": [ + "112680" + ], + "availability": 1.0 + }, + "112673": { + "type": "regularnode", + "name": "3CW-P010B", + "children": [ + "112680" + ], + "availability": 1.0 + }, + "112674": { + "type": "regularnode", + "name": "3CW-P020A", + "children": [ + "112679" + ], + "availability": 1.0 + }, + "112675": { + "type": "regularnode", + "name": "3CW-P020B", + "children": [ + "112679" + ], + "availability": 1.0 + }, + "112676": { + "type": "regularnode", + "name": "3CW-P011A", + "children": [ + "112681" + ], + "availability": 1.0 + }, + "112677": { + "type": "regularnode", + "name": "3CW-P011B", + "children": [ + "112681" + ], + "availability": 1.0 + }, + "112678": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112670", + "112671" + ], + "availability": 1.0 + }, + "112679": { + "type": "regularnode", + "name": "header 2", + "children": [ + "112668", + "112669" + ], + "availability": 1.0 + }, + "112680": { + "type": "regularnode", + "name": "header 3", + "children": [ + "112676", + "112677" + ], + "availability": 1.0 + }, + "112681": { + "type": "regularnode", + "name": "header 4", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1244": { + "name": "3CW-M010", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1244": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112668", + "status": "InService" + }, + { + "node_id": "112669", + "status": "InService" + } + ] + } + } + }, + "1245": { + "name": "3CW-M020", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1245": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112670", + "status": "InService" + }, + { + "node_id": "112671", + "status": "Standby" + } + ] + } + } + }, + "1246": { + "name": "3CW-P011", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1246": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112676", + "status": "InService" + }, + { + "node_id": "112677", + "status": "Standby" + } + ] + } + } + } + } + }, + "10065": { + "schematic_id": 10065, + "schematic_name": "BOL_SB_WD_REAR", + "root": "112710", + "nodes": { + "112682": { + "type": "regularnode", + "name": "3AI-Y510A", + "children": [ + "112685" + ], + "availability": 1.0 + }, + "112683": { + "type": "regularnode", + "name": "3AI-M510A", + "children": [ + "112682" + ], + "availability": 1.0 + }, + "112684": { + "type": "regularnode", + "name": "3AI-Y511A", + "children": [ + "112687" + ], + "availability": 1.0 + }, + "112685": { + "type": "regularnode", + "name": "3AI-M511A", + "children": [ + "112684" + ], + "availability": 1.0 + }, + "112686": { + "type": "regularnode", + "name": "3AI-Y512A", + "children": [ + "112689" + ], + "availability": 1.0 + }, + "112687": { + "type": "regularnode", + "name": "3AI-M512A", + "children": [ + "112686" + ], + "availability": 1.0 + }, + "112688": { + "type": "regularnode", + "name": "3AI-Y513A", + "children": [ + "112691" + ], + "availability": 1.0 + }, + "112689": { + "type": "regularnode", + "name": "3AI-M513A", + "children": [ + "112688" + ], + "availability": 1.0 + }, + "112690": { + "type": "regularnode", + "name": "3AI-Y514A", + "children": [ + "112711" + ], + "availability": 1.0 + }, + "112691": { + "type": "regularnode", + "name": "3AI-M514A", + "children": [ + "112690" + ], + "availability": 1.0 + }, + "112692": { + "type": "regularnode", + "name": "3AI-Y508B", + "children": [ + "112695" + ], + "availability": 1.0 + }, + "112693": { + "type": "regularnode", + "name": "3AI-M508B", + "children": [ + "112692" + ], + "availability": 1.0 + }, + "112694": { + "type": "regularnode", + "name": "3AI-Y509B", + "children": [ + "112697" + ], + "availability": 1.0 + }, + "112695": { + "type": "regularnode", + "name": "3AI-M509B", + "children": [ + "112694" + ], + "availability": 1.0 + }, + "112696": { + "type": "regularnode", + "name": "3AI-Y510B", + "children": [ + "112699" + ], + "availability": 1.0 + }, + "112697": { + "type": "regularnode", + "name": "3AI-M510B", + "children": [ + "112696" + ], + "availability": 1.0 + }, + "112698": { + "type": "regularnode", + "name": "3AI-Y511B", + "children": [ + "112711" + ], + "availability": 1.0 + }, + "112699": { + "type": "regularnode", + "name": "3AI-M511B", + "children": [ + "112698" + ], + "availability": 1.0 + }, + "112700": { + "type": "regularnode", + "name": "3AI-Y510C", + "children": [ + "112703" + ], + "availability": 1.0 + }, + "112701": { + "type": "regularnode", + "name": "3AI-M510C", + "children": [ + "112700" + ], + "availability": 1.0 + }, + "112702": { + "type": "regularnode", + "name": "3AI-Y511C", + "children": [ + "112705" + ], + "availability": 1.0 + }, + "112703": { + "type": "regularnode", + "name": "3AI-M511C", + "children": [ + "112702" + ], + "availability": 1.0 + }, + "112704": { + "type": "regularnode", + "name": "3AI-Y512C", + "children": [ + "112707" + ], + "availability": 1.0 + }, + "112705": { + "type": "regularnode", + "name": "3AI-M512C", + "children": [ + "112704" + ], + "availability": 1.0 + }, + "112706": { + "type": "regularnode", + "name": "3AI-Y513C", + "children": [ + "112709" + ], + "availability": 1.0 + }, + "112707": { + "type": "regularnode", + "name": "3AI-M513C", + "children": [ + "112706" + ], + "availability": 1.0 + }, + "112708": { + "type": "regularnode", + "name": "3AI-Y514C", + "children": [ + "112711" + ], + "availability": 1.0 + }, + "112709": { + "type": "regularnode", + "name": "3AI-M514C", + "children": [ + "112708" + ], + "availability": 1.0 + }, + "112710": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112693", + "112683", + "112701" + ], + "availability": 1.0 + }, + "112711": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1247": { + "name": "3AI-510", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1247": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112683", + "status": "InService" + }, + { + "node_id": "112697", + "status": "InService" + }, + { + "node_id": "112701", + "status": "InService" + } + ] + } + } + } + } + }, + "10066": { + "schematic_id": 10066, + "schematic_name": "SPS_APC", + "root": "112712", + "nodes": { + "112712": { + "type": "regularnode", + "name": "3APC-CB811", + "children": [], + "availability": 1.0 + }, + "112713": { + "type": "regularnode", + "name": "3APC-CB812", + "children": [], + "availability": 1.0 + }, + "112714": { + "type": "regularnode", + "name": "3APC-CB813", + "children": [], + "availability": 1.0 + }, + "112715": { + "type": "regularnode", + "name": "3APC-CB814", + "children": [], + "availability": 1.0 + }, + "112716": { + "type": "regularnode", + "name": "3APC-LV001A", + "children": [], + "availability": 1.0 + }, + "112717": { + "type": "regularnode", + "name": "3APC-LV001B", + "children": [], + "availability": 1.0 + }, + "112718": { + "type": "regularnode", + "name": "3APC-LV501A", + "children": [], + "availability": 1.0 + }, + "112719": { + "type": "regularnode", + "name": "3APC-LV501B", + "children": [], + "availability": 1.0 + }, + "112720": { + "type": "regularnode", + "name": "3APC-LV810A", + "children": [], + "availability": 1.0 + }, + "112721": { + "type": "regularnode", + "name": "3APC-LV810B", + "children": [], + "availability": 1.0 + }, + "112722": { + "type": "regularnode", + "name": "3APC-LV811P1", + "children": [], + "availability": 1.0 + }, + "112723": { + "type": "regularnode", + "name": "3APC-LV811P2", + "children": [], + "availability": 1.0 + }, + "112724": { + "type": "regularnode", + "name": "3APC-LV811P21", + "children": [], + "availability": 1.0 + }, + "112725": { + "type": "regularnode", + "name": "3APC-LV811P3", + "children": [], + "availability": 1.0 + }, + "112726": { + "type": "regularnode", + "name": "3APC-LV811P4", + "children": [], + "availability": 1.0 + }, + "112727": { + "type": "regularnode", + "name": "3APC-LV811P5", + "children": [], + "availability": 1.0 + }, + "112728": { + "type": "regularnode", + "name": "3APC-LV851", + "children": [ + "112729" + ], + "availability": 1.0 + }, + "112729": { + "type": "regularnode", + "name": "3APC-MCC002", + "children": [], + "availability": 1.0 + }, + "112730": { + "type": "regularnode", + "name": "3APC-MCC501A", + "children": [], + "availability": 1.0 + }, + "112731": { + "type": "regularnode", + "name": "3APC-MCC501B", + "children": [], + "availability": 1.0 + }, + "112732": { + "type": "regularnode", + "name": "3APC-MCC502A", + "children": [], + "availability": 1.0 + }, + "112733": { + "type": "regularnode", + "name": "3APC-MCC502B", + "children": [], + "availability": 1.0 + }, + "112734": { + "type": "regularnode", + "name": "3APC-MCC502C", + "children": [], + "availability": 1.0 + }, + "112735": { + "type": "regularnode", + "name": "3APC-MCC502D", + "children": [], + "availability": 1.0 + }, + "112736": { + "type": "regularnode", + "name": "3APC-MCC502E", + "children": [], + "availability": 1.0 + }, + "112737": { + "type": "regularnode", + "name": "3APC-MCC502F", + "children": [], + "availability": 1.0 + }, + "112738": { + "type": "regularnode", + "name": "3APC-MCC510", + "children": [ + "112739" + ], + "availability": 1.0 + }, + "112739": { + "type": "regularnode", + "name": "3APC-MCC851", + "children": [], + "availability": 1.0 + }, + "112740": { + "type": "regularnode", + "name": "3APC-PD501A", + "children": [], + "availability": 1.0 + }, + "112741": { + "type": "regularnode", + "name": "3APC-PD501B", + "children": [], + "availability": 1.0 + }, + "112742": { + "type": "regularnode", + "name": "3APC-PD901", + "children": [], + "availability": 1.0 + }, + "112743": { + "type": "regularnode", + "name": "3APC-PD902", + "children": [], + "availability": 1.0 + }, + "112744": { + "type": "regularnode", + "name": "3APC-PD921", + "children": [], + "availability": 1.0 + }, + "112745": { + "type": "regularnode", + "name": "3APC-PD922", + "children": [], + "availability": 1.0 + }, + "112746": { + "type": "regularnode", + "name": "3APC-TF001A", + "children": [], + "availability": 1.0 + }, + "112747": { + "type": "regularnode", + "name": "3APC-TF001B", + "children": [], + "availability": 1.0 + }, + "112748": { + "type": "regularnode", + "name": "3APC-TF810A", + "children": [], + "availability": 1.0 + }, + "112749": { + "type": "regularnode", + "name": "3APC-TF810B", + "children": [], + "availability": 1.0 + }, + "112750": { + "type": "regularnode", + "name": "3APC-TF811", + "children": [ + "112751" + ], + "availability": 1.0 + }, + "112751": { + "type": "regularnode", + "name": "3APC-TF851", + "children": [], + "availability": 1.0 + }, + "112752": { + "type": "regularnode", + "name": "3APC-TF501A", + "children": [], + "availability": 1.0 + }, + "112753": { + "type": "regularnode", + "name": "3APC-TF501B", + "children": [], + "availability": 1.0 + }, + "112754": { + "type": "regularnode", + "name": "3APC-TF502A", + "children": [], + "availability": 1.0 + }, + "112755": { + "type": "regularnode", + "name": "3APC-TF502B", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10067": { + "schematic_id": 10067, + "schematic_name": "SPS_APE", + "root": "112756", + "nodes": { + "112756": { + "type": "regularnode", + "name": "3APE-MV001A", + "children": [], + "availability": 1.0 + }, + "112757": { + "type": "regularnode", + "name": "3APE-MV001B", + "children": [], + "availability": 1.0 + }, + "112758": { + "type": "regularnode", + "name": "3APE-MV002A", + "children": [], + "availability": 1.0 + }, + "112759": { + "type": "regularnode", + "name": "3APE-MV002B", + "children": [], + "availability": 1.0 + }, + "112760": { + "type": "regularnode", + "name": "3APE-MV003A", + "children": [], + "availability": 1.0 + }, + "112761": { + "type": "regularnode", + "name": "3APE-MV003B", + "children": [], + "availability": 1.0 + }, + "112762": { + "type": "regularnode", + "name": "3APE-MV003C", + "children": [], + "availability": 1.0 + }, + "112763": { + "type": "regularnode", + "name": "3APE-MV003D", + "children": [], + "availability": 1.0 + }, + "112764": { + "type": "regularnode", + "name": "3APE-MV004A", + "children": [], + "availability": 1.0 + }, + "112765": { + "type": "regularnode", + "name": "3APE-MV004B", + "children": [], + "availability": 1.0 + }, + "112766": { + "type": "regularnode", + "name": "3APE-MV851", + "children": [ + "112767" + ], + "availability": 1.0 + }, + "112767": { + "type": "regularnode", + "name": "3APE-MV852", + "children": [], + "availability": 1.0 + }, + "112768": { + "type": "regularnode", + "name": "3APE-TF002A", + "children": [], + "availability": 1.0 + }, + "112769": { + "type": "regularnode", + "name": "3APE-TF002B", + "children": [], + "availability": 1.0 + }, + "112770": { + "type": "regularnode", + "name": "3APE-Z005A", + "children": [], + "availability": 1.0 + }, + "112771": { + "type": "regularnode", + "name": "3APE-Z005B", + "children": [], + "availability": 1.0 + }, + "112772": { + "type": "regularnode", + "name": "3APE-TF852", + "children": [], + "availability": 1.0 + }, + "112773": { + "type": "regularnode", + "name": "3APE-CAB852", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10068": { + "schematic_id": 10068, + "schematic_name": "FGD_RP_MILL", + "root": "112774", + "nodes": { + "112774": { + "type": "regularnode", + "name": "header 1", + "children": [], + "availability": 1.0 + }, + "112775": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1248": { + "name": "MILL", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1248": { + "priority": 0, + "duration": 100.0, + "cells": [] + } + } + } + } + }, + "10069": { + "schematic_id": 10069, + "schematic_name": "FGD_RP_WET MILL", + "root": "112776", + "nodes": { + "112776": { + "type": "regularnode", + "name": "header 1", + "children": [], + "availability": 1.0 + }, + "112777": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1249": { + "name": "WET MILL", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1249": { + "priority": 0, + "duration": 100.0, + "cells": [] + } + } + } + } + }, + "10070": { + "schematic_id": 10070, + "schematic_name": "BOL_SB_RAPH", + "root": "112782", + "nodes": { + "112778": { + "type": "regularnode", + "name": "3AI-M551A", + "children": [ + "112779" + ], + "availability": 1.0 + }, + "112779": { + "type": "regularnode", + "name": "3AI-Y551A", + "children": [ + "112783" + ], + "availability": 1.0 + }, + "112780": { + "type": "regularnode", + "name": "3AI-M551B", + "children": [ + "112781" + ], + "availability": 1.0 + }, + "112781": { + "type": "regularnode", + "name": "3AI-Y551B", + "children": [ + "112783" + ], + "availability": 1.0 + }, + "112782": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112778", + "112780" + ], + "availability": 1.0 + }, + "112783": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1250": { + "name": "3AI-M551", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1250": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112778", + "status": "InService" + }, + { + "node_id": "112780", + "status": "InService" + } + ] + } + } + } + } + }, + "10071": { + "schematic_id": 10071, + "schematic_name": "FGD_RP_MILL A", + "root": "112785", + "nodes": { + "112784": { + "type": "regularnode", + "name": "00RP-AG885", + "children": [ + "112794" + ], + "availability": 1.0 + }, + "112785": { + "type": "regularnode", + "name": "00RP-CY871", + "children": [ + "112786" + ], + "availability": 1.0 + }, + "112786": { + "type": "regularnode", + "name": "00RP-DX897", + "children": [ + "112787", + "112788" + ], + "availability": 1.0 + }, + "112787": { + "type": "regularnode", + "name": "00RP-F991A", + "children": [ + "112795" + ], + "availability": 1.0 + }, + "112788": { + "type": "regularnode", + "name": "00RP-F991B", + "children": [ + "112795" + ], + "availability": 1.0 + }, + "112789": { + "type": "regularnode", + "name": "00RP-M885", + "children": [ + "112784" + ], + "availability": 1.0 + }, + "112790": { + "type": "regularnode", + "name": "00RP-M891A", + "children": [ + "112796" + ], + "availability": 1.0 + }, + "112791": { + "type": "regularnode", + "name": "00RP-M891B", + "children": [ + "112797" + ], + "availability": 1.0 + }, + "112792": { + "type": "regularnode", + "name": "00RP-P991A", + "children": [ + "112790" + ], + "availability": 1.0 + }, + "112793": { + "type": "regularnode", + "name": "00RP-P991B", + "children": [ + "112791" + ], + "availability": 1.0 + }, + "112794": { + "type": "regularnode", + "name": "00RP-P992", + "children": [ + "112792", + "112793" + ], + "availability": 1.0 + }, + "112795": { + "type": "regularnode", + "name": "00RP-T885", + "children": [ + "112789" + ], + "availability": 1.0 + }, + "112796": { + "type": "regularnode", + "name": "00RP-P891A", + "children": [ + "112798" + ], + "availability": 1.0 + }, + "112797": { + "type": "regularnode", + "name": "00RP-P891B", + "children": [ + "112798" + ], + "availability": 1.0 + }, + "112798": { + "type": "regularnode", + "name": "header", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10072": { + "schematic_id": 10072, + "schematic_name": "FGD_RP_MILL B", + "root": "112800", + "nodes": { + "112799": { + "type": "regularnode", + "name": "00RP-AG925", + "children": [ + "112805" + ], + "availability": 1.0 + }, + "112800": { + "type": "regularnode", + "name": "00RP-CY911", + "children": [ + "112801" + ], + "availability": 1.0 + }, + "112801": { + "type": "regularnode", + "name": "00RP-DX837", + "children": [ + "112802", + "112803" + ], + "availability": 1.0 + }, + "112802": { + "type": "regularnode", + "name": "00RP-F995A", + "children": [ + "112810" + ], + "availability": 1.0 + }, + "112803": { + "type": "regularnode", + "name": "00RP-F995B", + "children": [ + "112810" + ], + "availability": 1.0 + }, + "112804": { + "type": "regularnode", + "name": "00RP-M925", + "children": [ + "112799" + ], + "availability": 1.0 + }, + "112805": { + "type": "regularnode", + "name": "00RP-P995", + "children": [ + "112808", + "112809" + ], + "availability": 1.0 + }, + "112806": { + "type": "regularnode", + "name": "00RP-M931A", + "children": [ + "112811" + ], + "availability": 1.0 + }, + "112807": { + "type": "regularnode", + "name": "00RP-M931B", + "children": [ + "112812" + ], + "availability": 1.0 + }, + "112808": { + "type": "regularnode", + "name": "00RP-P995A", + "children": [ + "112806" + ], + "availability": 1.0 + }, + "112809": { + "type": "regularnode", + "name": "00RP-P995B", + "children": [ + "112807" + ], + "availability": 1.0 + }, + "112810": { + "type": "regularnode", + "name": "00RP-T925", + "children": [ + "112804" + ], + "availability": 1.0 + }, + "112811": { + "type": "regularnode", + "name": "00RP-P931A", + "children": [ + "112813" + ], + "availability": 1.0 + }, + "112812": { + "type": "regularnode", + "name": "00RP-P931B", + "children": [ + "112813" + ], + "availability": 1.0 + }, + "112813": { + "type": "regularnode", + "name": "header", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10073": { + "schematic_id": 10073, + "schematic_name": "FGD_RP_WET MILL A", + "root": "112814", + "nodes": { + "112814": { + "type": "regularnode", + "name": "00RP-BM871", + "children": [], + "availability": 1.0 + }, + "112815": { + "type": "regularnode", + "name": "00RP-M871A", + "children": [], + "availability": 1.0 + }, + "112816": { + "type": "regularnode", + "name": "00RP-M871B", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10074": { + "schematic_id": 10074, + "schematic_name": "FGD_RP_WET MILL B", + "root": "112817", + "nodes": { + "112817": { + "type": "regularnode", + "name": "00RP-BM911", + "children": [], + "availability": 1.0 + }, + "112818": { + "type": "regularnode", + "name": "00RP-M911A", + "children": [], + "availability": 1.0 + }, + "112819": { + "type": "regularnode", + "name": "00RP-M911B", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10075": { + "schematic_id": 10075, + "schematic_name": "- CMN_CL -", + "root": "112820", + "nodes": { + "112820": { + "type": "regularnode", + "name": "BOOSTER", + "children": [ + "112821" + ], + "availability": 1.0 + }, + "112821": { + "type": "regularnode", + "name": "FILTER", + "children": [ + "112822" + ], + "availability": 1.0 + }, + "112822": { + "type": "regularnode", + "name": "TRAFO", + "children": [ + "112823" + ], + "availability": 1.0 + }, + "112823": { + "type": "regularnode", + "name": "CELL", + "children": [ + "112824" + ], + "availability": 1.0 + }, + "112824": { + "type": "regularnode", + "name": "SUMP PUMP", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10076": { + "schematic_id": 10076, + "schematic_name": "BOL_SB_LONG_LEFT", + "root": "112857", + "nodes": { + "112825": { + "type": "regularnode", + "name": "3AI-Y501L", + "children": [ + "112830" + ], + "availability": 1.0 + }, + "112826": { + "type": "regularnode", + "name": "3AI-M501L", + "children": [ + "112825" + ], + "availability": 1.0 + }, + "112827": { + "type": "regularnode", + "name": "3AI-Y502L", + "children": [ + "112836" + ], + "availability": 1.0 + }, + "112828": { + "type": "regularnode", + "name": "3AI-M502L", + "children": [ + "112827" + ], + "availability": 1.0 + }, + "112829": { + "type": "regularnode", + "name": "3AI-Y503L", + "children": [ + "112832" + ], + "availability": 1.0 + }, + "112830": { + "type": "regularnode", + "name": "3AI-M503L", + "children": [ + "112829" + ], + "availability": 1.0 + }, + "112831": { + "type": "regularnode", + "name": "3AI-Y504L", + "children": [ + "112834" + ], + "availability": 1.0 + }, + "112832": { + "type": "regularnode", + "name": "3AI-M504L", + "children": [ + "112831" + ], + "availability": 1.0 + }, + "112833": { + "type": "regularnode", + "name": "3AI-Y505L", + "children": [ + "112858" + ], + "availability": 1.0 + }, + "112834": { + "type": "regularnode", + "name": "3AI-M505L", + "children": [ + "112833" + ], + "availability": 1.0 + }, + "112835": { + "type": "regularnode", + "name": "3AI-Y506L", + "children": [ + "112838" + ], + "availability": 1.0 + }, + "112836": { + "type": "regularnode", + "name": "3AI-M506L", + "children": [ + "112835" + ], + "availability": 1.0 + }, + "112837": { + "type": "regularnode", + "name": "3AI-Y507L", + "children": [ + "112840" + ], + "availability": 1.0 + }, + "112838": { + "type": "regularnode", + "name": "3AI-M507L", + "children": [ + "112837" + ], + "availability": 1.0 + }, + "112839": { + "type": "regularnode", + "name": "3AI-Y508L", + "children": [ + "112842" + ], + "availability": 1.0 + }, + "112840": { + "type": "regularnode", + "name": "3AI-M508L", + "children": [ + "112839" + ], + "availability": 1.0 + }, + "112841": { + "type": "regularnode", + "name": "3AI-Y509L", + "children": [ + "112844" + ], + "availability": 1.0 + }, + "112842": { + "type": "regularnode", + "name": "3AI-M509L", + "children": [ + "112841" + ], + "availability": 1.0 + }, + "112843": { + "type": "regularnode", + "name": "3AI-Y510L", + "children": [ + "112858" + ], + "availability": 1.0 + }, + "112844": { + "type": "regularnode", + "name": "3AI-M510L", + "children": [ + "112843" + ], + "availability": 1.0 + }, + "112845": { + "type": "regularnode", + "name": "3AI-Y511L", + "children": [ + "112848" + ], + "availability": 1.0 + }, + "112846": { + "type": "regularnode", + "name": "3AI-M511L", + "children": [ + "112845" + ], + "availability": 1.0 + }, + "112847": { + "type": "regularnode", + "name": "3AI-Y512L", + "children": [ + "112850" + ], + "availability": 1.0 + }, + "112848": { + "type": "regularnode", + "name": "3AI-M512L", + "children": [ + "112847" + ], + "availability": 1.0 + }, + "112849": { + "type": "regularnode", + "name": "3AI-Y513L", + "children": [ + "112852" + ], + "availability": 1.0 + }, + "112850": { + "type": "regularnode", + "name": "3AI-M513L", + "children": [ + "112849" + ], + "availability": 1.0 + }, + "112851": { + "type": "regularnode", + "name": "3AI-Y514L", + "children": [ + "112854" + ], + "availability": 1.0 + }, + "112852": { + "type": "regularnode", + "name": "3AI-M514L", + "children": [ + "112851" + ], + "availability": 1.0 + }, + "112853": { + "type": "regularnode", + "name": "3AI-Y515L", + "children": [ + "112856" + ], + "availability": 1.0 + }, + "112854": { + "type": "regularnode", + "name": "3AI-M515L", + "children": [ + "112853" + ], + "availability": 1.0 + }, + "112855": { + "type": "regularnode", + "name": "3AI-Y516L", + "children": [ + "112858" + ], + "availability": 1.0 + }, + "112856": { + "type": "regularnode", + "name": "3AI-M516L", + "children": [ + "112855" + ], + "availability": 1.0 + }, + "112857": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112826", + "112828", + "112846" + ], + "availability": 1.0 + }, + "112858": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1251": { + "name": "3AI-M501", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1251": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112826", + "status": "InService" + }, + { + "node_id": "112828", + "status": "InService" + }, + { + "node_id": "112846", + "status": "InService" + } + ] + } + } + } + } + }, + "10077": { + "schematic_id": 10077, + "schematic_name": "BOL_SB_LONG_RIGHT", + "root": "112891", + "nodes": { + "112859": { + "type": "regularnode", + "name": "3AI-Y501R", + "children": [ + "112864" + ], + "availability": 1.0 + }, + "112860": { + "type": "regularnode", + "name": "3AI-M501R", + "children": [ + "112859" + ], + "availability": 1.0 + }, + "112861": { + "type": "regularnode", + "name": "3AI-Y502R", + "children": [ + "112870" + ], + "availability": 1.0 + }, + "112862": { + "type": "regularnode", + "name": "3AI-M502R", + "children": [ + "112861" + ], + "availability": 1.0 + }, + "112863": { + "type": "regularnode", + "name": "3AI-Y503R", + "children": [ + "112866" + ], + "availability": 1.0 + }, + "112864": { + "type": "regularnode", + "name": "3AI-M503R", + "children": [ + "112863" + ], + "availability": 1.0 + }, + "112865": { + "type": "regularnode", + "name": "3AI-Y504R", + "children": [ + "112868" + ], + "availability": 1.0 + }, + "112866": { + "type": "regularnode", + "name": "3AI-M504R", + "children": [ + "112865" + ], + "availability": 1.0 + }, + "112867": { + "type": "regularnode", + "name": "3AI-Y505R", + "children": [ + "112892" + ], + "availability": 1.0 + }, + "112868": { + "type": "regularnode", + "name": "3AI-M505R", + "children": [ + "112867" + ], + "availability": 1.0 + }, + "112869": { + "type": "regularnode", + "name": "3AI-Y506R", + "children": [ + "112872" + ], + "availability": 1.0 + }, + "112870": { + "type": "regularnode", + "name": "3AI-M506R", + "children": [ + "112869" + ], + "availability": 1.0 + }, + "112871": { + "type": "regularnode", + "name": "3AI-Y507R", + "children": [ + "112874" + ], + "availability": 1.0 + }, + "112872": { + "type": "regularnode", + "name": "3AI-M507R", + "children": [ + "112871" + ], + "availability": 1.0 + }, + "112873": { + "type": "regularnode", + "name": "3AI-Y508R", + "children": [ + "112876" + ], + "availability": 1.0 + }, + "112874": { + "type": "regularnode", + "name": "3AI-M508R", + "children": [ + "112873" + ], + "availability": 1.0 + }, + "112875": { + "type": "regularnode", + "name": "3AI-Y509R", + "children": [ + "112878" + ], + "availability": 1.0 + }, + "112876": { + "type": "regularnode", + "name": "3AI-M509R", + "children": [ + "112875" + ], + "availability": 1.0 + }, + "112877": { + "type": "regularnode", + "name": "3AI-Y510R", + "children": [ + "112892" + ], + "availability": 1.0 + }, + "112878": { + "type": "regularnode", + "name": "3AI-M510R", + "children": [ + "112877" + ], + "availability": 1.0 + }, + "112879": { + "type": "regularnode", + "name": "3AI-Y511R", + "children": [ + "112882" + ], + "availability": 1.0 + }, + "112880": { + "type": "regularnode", + "name": "3AI-M511R", + "children": [ + "112879" + ], + "availability": 1.0 + }, + "112881": { + "type": "regularnode", + "name": "3AI-Y512R", + "children": [ + "112884" + ], + "availability": 1.0 + }, + "112882": { + "type": "regularnode", + "name": "3AI-M512R", + "children": [ + "112881" + ], + "availability": 1.0 + }, + "112883": { + "type": "regularnode", + "name": "3AI-Y513R", + "children": [ + "112886" + ], + "availability": 1.0 + }, + "112884": { + "type": "regularnode", + "name": "3AI-M513R", + "children": [ + "112883" + ], + "availability": 1.0 + }, + "112885": { + "type": "regularnode", + "name": "3AI-Y514R", + "children": [ + "112888" + ], + "availability": 1.0 + }, + "112886": { + "type": "regularnode", + "name": "3AI-M514R", + "children": [ + "112885" + ], + "availability": 1.0 + }, + "112887": { + "type": "regularnode", + "name": "3AI-Y515R", + "children": [ + "112890" + ], + "availability": 1.0 + }, + "112888": { + "type": "regularnode", + "name": "3AI-M515R", + "children": [ + "112887" + ], + "availability": 1.0 + }, + "112889": { + "type": "regularnode", + "name": "3AI-Y516R", + "children": [ + "112892" + ], + "availability": 1.0 + }, + "112890": { + "type": "regularnode", + "name": "3AI-M516R", + "children": [ + "112889" + ], + "availability": 1.0 + }, + "112891": { + "type": "regularnode", + "name": "Node1", + "children": [ + "112860", + "112862", + "112880" + ], + "availability": 1.0 + }, + "112892": { + "type": "regularnode", + "name": "Node2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10078": { + "schematic_id": 10078, + "schematic_name": "GEN_GEN_GMCB", + "root": "112899", + "nodes": { + "112893": { + "type": "regularnode", + "name": "3GEN-M201A", + "children": [ + "112900" + ], + "availability": 1.0 + }, + "112894": { + "type": "regularnode", + "name": "3GEN-M202A", + "children": [ + "112900" + ], + "availability": 1.0 + }, + "112895": { + "type": "regularnode", + "name": "3GEN-M203A", + "children": [ + "112900" + ], + "availability": 1.0 + }, + "112896": { + "type": "regularnode", + "name": "3GEN-M204A", + "children": [ + "112900" + ], + "availability": 1.0 + }, + "112897": { + "type": "regularnode", + "name": "3GEN-M205A", + "children": [ + "112900" + ], + "availability": 1.0 + }, + "112898": { + "type": "regularnode", + "name": "3GEN-M206A", + "children": [ + "112900" + ], + "availability": 1.0 + }, + "112899": { + "type": "regularnode", + "name": "header 1", + "children": [ + "112893", + "112894", + "112895", + "112896", + "112897", + "112898" + ], + "availability": 1.0 + }, + "112900": { + "type": "regularnode", + "name": "header 2", + "children": [], + "availability": 1.0 + } + }, + "redundancies": { + "1252": { + "name": "3GEN-M201", + "type": "standby", + "min_required": 1, + "switch_delay": 0.0, + "states": { + "1252": { + "priority": 0, + "duration": 100.0, + "cells": [ + { + "node_id": "112893", + "status": "InService" + }, + { + "node_id": "112894", + "status": "InService" + }, + { + "node_id": "112895", + "status": "InService" + }, + { + "node_id": "112896", + "status": "InService" + }, + { + "node_id": "112897", + "status": "InService" + }, + { + "node_id": "112898", + "status": "Standby" + } + ] + } + } + } + } + }, + "10079": { + "schematic_id": 10079, + "schematic_name": "BOL_MILL A_3DP-BM731A", + "root": "112901", + "nodes": { + "112901": { + "type": "regularnode", + "name": "3DP-BM731A", + "children": [ + "112902" + ], + "availability": 1.0 + }, + "112902": { + "type": "regularnode", + "name": "208532", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10080": { + "schematic_id": 10080, + "schematic_name": "FGD_RP_00RP-Z856A", + "root": "112903", + "nodes": { + "112903": { + "type": "regularnode", + "name": "00RP-Z856A", + "children": [ + "112904" + ], + "availability": 1.0 + }, + "112904": { + "type": "regularnode", + "name": "203554", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10081": { + "schematic_id": 10081, + "schematic_name": "BOL_SOOTBLOWER_3AI-SFV501", + "root": "112905", + "nodes": { + "112905": { + "type": "regularnode", + "name": "3AI-SFV501", + "children": [ + "112906" + ], + "availability": 1.0 + }, + "112906": { + "type": "regularnode", + "name": "221786", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + }, + "10082": { + "schematic_id": 10082, + "schematic_name": "ASH_3BAD-CV501", + "root": "112907", + "nodes": { + "112907": { + "type": "regularnode", + "name": "3BAD-CV501", + "children": [ + "112908" + ], + "availability": 1.0 + }, + "112908": { + "type": "regularnode", + "name": "203596", + "children": [], + "availability": 1.0 + } + }, + "redundancies": {} + } + } +} \ No newline at end of file diff --git a/model/result.json b/model/result.json new file mode 100644 index 0000000..b948b74 --- /dev/null +++ b/model/result.json @@ -0,0 +1,2680 @@ +{ + "series": [ + { + "series": [ + { + "series": [ + { + "parallel_no_redundancy": [ + "3DCS-CAB001A", + "3DCS-CAB001B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB002A", + "3DCS-CAB002B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB003A", + "3DCS-CAB003B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB004A", + "3DCS-CAB004B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB005A", + "3DCS-CAB005B", + "3DCS-CAB005C" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB006A", + "3DCS-CAB006B" + ] + }, + "3DCS-CAB007", + "3DCS-CAB008", + { + "parallel_no_redundancy": [ + "3DCS-CAB009A", + "3DCS-CAB009B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB010A", + "3DCS-CAB010B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB011A", + "3DCS-CAB011B" + ] + }, + "3DCS-CAB012", + { + "parallel_no_redundancy": [ + "3DCS-CAB013A", + "3DCS-CAB013B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CAB014A", + "3DCS-CAB014B" + ] + }, + "3DCS-CAB015", + "3DCS-CO001", + { + "parallel_no_redundancy": [ + "3DCS-CO002A", + "3DCS-CO002B" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CO003A", + "3DCS-CO003B", + "3DCS-CO003C", + "3DCS-CO003D" + ] + }, + "3DCS-CO004", + { + "parallel_no_redundancy": [ + "3DCS-CO005A", + "3DCS-CO005B", + "3DCS-CO005C" + ] + }, + { + "parallel_no_redundancy": [ + "3DCS-CO006A", + "3DCS-CO006B", + "3DCS-CO006C" + ] + }, + "3DCS-CO007", + "3DCS-CO008" + ] + }, + { + "series": [ + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "00ACR-M001A", + "00ACR-C001A" + ] + }, + { + "series": [ + "00ACR-M001B", + "00ACR-C001B" + ] + } + ] + }, + { + "series": [ + "00ACR-M001C", + "00ACR-C001C" + ] + }, + { + "series": [ + "00ACR-M001D", + "00ACR-C001D" + ] + } + ] + }, + { + "parallel": [ + "00IA-A001A", + "00IA-A001B" + ] + }, + "3IA-T005" + ] + }, + { + "series": [ + "00SCR-Z001", + "00SCR-Z015" + ] + }, + { + "series": [ + "3FW-H040", + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOT-T010A", + { + "series": [ + "3LOT-H010A", + { + "parallel": [ + "3LOT-T090A", + "3LOT-T100A" + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOT-M010A", + "3LOT-P010A" + ] + }, + { + "series": [ + "3LOT-M020A", + "3LOT-P020A" + ] + } + ] + }, + { + "series": [ + "3LOT-M050A", + "3LOT-P050A" + ] + } + ] + }, + "3LOT-M080A", + "3LOT-P080A", + { + "parallel": [ + "3LOT-S010A", + "3LOT-S020A" + ] + }, + "3LOT-PF080A", + "3LOT-M120A", + "3LOT-F120A", + "3FW-P020A", + "3FW-H011A", + "3FW-H012A", + "3FW-AU030A", + "3FW-P010A", + "3BFT-ST010A", + "3BFT-AU040A" + ] + } + ] + }, + { + "series": [ + "3LOT-T010B", + { + "series": [ + "3LOT-H010B", + { + "parallel": [ + "3LOT-T090B", + "3LOT-T100B" + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOT-M010B", + "3LOT-P010B" + ] + }, + { + "series": [ + "3LOT-M020B", + "3LOT-P020B" + ] + } + ] + }, + { + "series": [ + "3LOT-M050B", + "3LOT-P050B" + ] + } + ] + }, + "3LOT-M080B", + "3LOT-P080B", + { + "parallel": [ + "3LOT-S010B", + "3LOT-S020B" + ] + }, + "3LOT-PF080B", + "3LOT-M120B", + "3LOT-F120B", + "3FW-P020B", + "3FW-H011B", + "3FW-H012B", + "3FW-AU030B", + "3FW-P010B", + "3BFT-ST010B", + "3BFT-AU040B" + ] + } + ] + } + ] + }, + { + "series": [ + "3LOM-M330", + "3LOM-P330", + "3LOM-H310", + "3LOM-P310", + "3LOM-H370", + "3LOM-P370", + "3FW-P310", + "3FW-M321", + "3FW-M320", + "3FW-AU330", + "3FW-H301", + "3FW-H302", + "3FW-P300" + ] + } + ] + }, + "3FW-H070", + "3FW-H060", + "3FW-H050" + ] + }, + { + "series": [ + { + "series": [ + "3BOL-FD501", + { + "parallel_no_redundancy": [ + { + "series": [ + { + "series": [ + "3DP-FDR711A", + "3DP-M712A", + "3DP-M711A" + ] + }, + { + "series": [ + "3DP-M741A", + "3DP-BM741A", + "3DP-CVT701A", + "3DP-CVT711A", + "3DP-M761A", + "3DP-P761A", + "3DP-M781A", + "3DP-P781A", + "3DP-M731A", + "3DP-BM731A" + ] + }, + { + "series": [ + "3DP-B701A", + "3DP-B702A", + "3DP-B703A", + "3DP-B704A" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711B", + "3DP-M712B", + "3DP-M711B" + ] + }, + { + "series": [ + "3DP-M741B", + "3DP-BM741B", + "3DP-CVT701B", + "3DP-CVT711B", + "3DP-M761B", + "3DP-P761B", + "3DP-M781B", + "3DP-P781B", + "3DP-M731B", + "3DP-BM731B" + ] + }, + { + "series": [ + "3DP-B701B", + "3DP-B702B", + "3DP-B703B", + "3DP-B704B" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711C", + "3DP-M712C", + "3DP-M711C" + ] + }, + { + "series": [ + "3DP-M741C", + "3DP-BM741C", + "3DP-CVT701C", + "3DP-CVT711C", + "3DP-M761C", + "3DP-P761C", + "3DP-M781C", + "3DP-P781C", + "3DP-M731C", + "3DP-BM731C" + ] + }, + { + "series": [ + "3DP-B701C", + "3DP-B702C", + "3DP-B703C", + "3DP-B704C" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711D", + "3DP-M712D", + "3DP-M711D" + ] + }, + { + "series": [ + "3DP-M741D", + "3DP-BM741D", + "3DP-CVT701D", + "3DP-CVT711D", + "3DP-M761D", + "3DP-P761D", + "3DP-M781D", + "3DP-P781D", + "3DP-M731D", + "3DP-BM731D" + ] + }, + { + "series": [ + "3DP-B701D", + "3DP-B702D", + "3DP-B703D", + "3DP-B704D" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711E", + "3DP-M712E", + "3DP-M711E" + ] + }, + { + "series": [ + "3DP-M741E", + "3DP-BM741E", + "3DP-CVT701E", + "3DP-CVT711E", + "3DP-M761E", + "3DP-P761E", + "3DP-M781E", + "3DP-P781E", + "3DP-M731E", + "3DP-BM731E" + ] + }, + { + "series": [ + "3DP-B701E", + "3DP-B702E", + "3DP-B703E", + "3DP-B704E" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711F", + "3DP-M712F", + "3DP-M711F" + ] + }, + { + "series": [ + "3DP-M741F", + "3DP-BM741F", + "3DP-CVT701F", + "3DP-CVT711F", + "3DP-M761F", + "3DP-P761F", + "3DP-M781F", + "3DP-P781F", + "3DP-M731F", + "3DP-BM731F" + ] + }, + { + "series": [ + "3DP-B701F", + "3DP-B702F", + "3DP-B703F", + "3DP-B704F" + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + "3FO-FCV501", + { + "parallel_no_redundancy": [ + { + "series": [ + "3DM-B701A", + "3DM-B702A", + "3DM-B703A", + "3DM-B704A" + ] + }, + { + "series": [ + "3DM-B701C", + "3DM-B702C", + "3DM-B703C", + "3DM-B704C" + ] + }, + { + "series": [ + "3DM-B701E", + "3DM-B702E", + "3DM-B703E", + "3DM-B704E" + ] + } + ] + } + ] + }, + { + "series": [ + "3BDW-H601", + "3BDW-T601", + "3BDW-H611", + "3BDW-H621", + "3BDW-H631", + "3BDW-H641", + { + "parallel_no_redundancy": [ + { + "series": [ + "3BDW-M521A", + "3BDW-P521A", + "3BDW-H521A" + ] + }, + { + "series": [ + "3BDW-M521B", + "3BDW-P521B", + "3BDW-H521B" + ] + } + ] + } + ] + }, + "3BOL-H501", + { + "series": [ + "3MS-HV011", + "3MS-HV012", + "3MS-HV013", + "3MS-HV014", + { + "parallel_no_redundancy": [ + "3MS-HV010A", + "3MS-HV010B" + ] + }, + { + "parallel_no_redundancy": [ + "3MS-W001A", + "3MS-W001B" + ] + }, + "3MS-W004" + ] + }, + { + "series": [ + "3BSS-H611", + { + "parallel_no_redundancy": [ + "3ATT-N501A", + "3ATT-N501B" + ] + }, + "3BSS-H621", + { + "parallel_no_redundancy": [ + "3ATT-N502A", + "3ATT-N502B" + ] + }, + "3BSS-H631" + ] + }, + "3CRH-W002", + { + "series": [ + "3BSS-H611", + { + "parallel_no_redundancy": [ + "3ATT-N501A", + "3ATT-N501B" + ] + }, + "3BSS-H621", + { + "parallel_no_redundancy": [ + "3ATT-N502A", + "3ATT-N502B" + ] + }, + "3BSS-H631" + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + "3HRH-HV020A", + "3HRH-HV020B" + ] + }, + "3ATT-N561", + "3ATT-N571", + "3ATT-N581" + ] + }, + { + "series": [ + "3AI-SFV501", + { + "parallel_no_redundancy": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501H", + "3AI-Y501H", + "3AI-M502H", + "3AI-Y502H", + "3AI-M503H", + "3AI-Y503H", + "3AI-M504H", + "3AI-Y504H", + "3AI-M505H", + "3AI-Y505H", + "3AI-M506H", + "3AI-Y506H" + ] + }, + { + "series": [ + "3AI-M501I", + "3AI-Y501I", + "3AI-M502I", + "3AI-Y502I", + "3AI-M503I", + "3AI-Y503I", + "3AI-M504I", + "3AI-Y504I", + "3AI-M505I", + "3AI-Y505I", + "3AI-M506I", + "3AI-Y506I" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501L", + "3AI-Y501L", + "3AI-M503L", + "3AI-Y503L", + "3AI-M504L", + "3AI-Y504L", + "3AI-M505L", + "3AI-Y505L" + ] + }, + { + "series": [ + "3AI-M502L", + "3AI-Y502L", + "3AI-M506L", + "3AI-Y506L", + "3AI-M507L", + "3AI-Y507L", + "3AI-M508L", + "3AI-Y508L", + "3AI-M509L", + "3AI-Y509L", + "3AI-M510L", + "3AI-Y510L" + ] + }, + { + "series": [ + "3AI-M511L", + "3AI-Y511L", + "3AI-M512L", + "3AI-Y512L", + "3AI-M513L", + "3AI-Y513L", + "3AI-M514L", + "3AI-Y514L", + "3AI-M515L", + "3AI-Y515L", + "3AI-M516L", + "3AI-Y516L" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501R", + "3AI-Y501R", + "3AI-M503R", + "3AI-Y503R", + "3AI-M504R", + "3AI-Y504R", + "3AI-M505R", + "3AI-Y505R" + ] + }, + { + "series": [ + "3AI-M502R", + "3AI-Y502R", + "3AI-M506R", + "3AI-Y506R", + "3AI-M507R", + "3AI-Y507R", + "3AI-M508R", + "3AI-Y508R", + "3AI-M509R", + "3AI-Y509R", + "3AI-M510R", + "3AI-Y510R" + ] + }, + { + "series": [ + "3AI-M511R", + "3AI-Y511R", + "3AI-M512R", + "3AI-Y512R", + "3AI-M513R", + "3AI-Y513R", + "3AI-M514R", + "3AI-Y514R", + "3AI-M515R", + "3AI-Y515R", + "3AI-M516R", + "3AI-Y516R" + ] + } + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M501A", + "3AI-Y501A", + "3AI-M502A", + "3AI-Y502A", + "3AI-M503A", + "3AI-Y503A", + "3AI-M504A", + "3AI-Y504A", + "3AI-M505A", + "3AI-Y505A" + ] + }, + { + "series": [ + "3AI-M501B", + "3AI-Y501B", + "3AI-M502B", + "3AI-Y502B", + "3AI-M503B", + "3AI-Y503B", + "3AI-M504B", + "3AI-Y504B" + ] + }, + { + "series": [ + "3AI-M501C", + "3AI-Y501C", + "3AI-M502C", + "3AI-Y502C", + "3AI-M503C", + "3AI-Y503C", + "3AI-M504C", + "3AI-Y504C", + "3AI-M505C", + "3AI-Y505C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M506A", + "3AI-Y506A", + "3AI-M507A", + "3AI-Y507A", + "3AI-M508A", + "3AI-Y508A", + "3AI-M509A", + "3AI-Y509A" + ] + }, + { + "series": [ + "3AI-M505B", + "3AI-Y505B", + "3AI-M506B", + "3AI-Y506B", + "3AI-M507B", + "3AI-Y507B" + ] + }, + { + "series": [ + "3AI-M506C", + "3AI-Y506C", + "3AI-M507C", + "3AI-Y507C", + "3AI-M508C", + "3AI-Y508C", + "3AI-M509C", + "3AI-Y509C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M515A", + "3AI-Y515A", + "3AI-M516A", + "3AI-Y516A", + "3AI-M517A", + "3AI-Y517A", + "3AI-M518A", + "3AI-Y518A" + ] + }, + { + "series": [ + "3AI-M512B", + "3AI-Y512B", + "3AI-M513B", + "3AI-Y513B", + "3AI-M514B", + "3AI-Y514B" + ] + }, + { + "series": [ + "3AI-M515C", + "3AI-Y515C", + "3AI-M516C", + "3AI-Y516C", + "3AI-M517C", + "3AI-Y517C", + "3AI-M518C", + "3AI-Y518C" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M510A", + "3AI-Y510A", + "3AI-M511A", + "3AI-Y511A", + "3AI-M512A", + "3AI-Y512A", + "3AI-M513A", + "3AI-Y513A", + "3AI-M514A", + "3AI-Y514A" + ] + }, + { + "series": [ + "3AI-M508B", + "3AI-Y508B", + "3AI-M509B", + "3AI-Y509B", + "3AI-M510B", + "3AI-Y510B", + "3AI-M511B", + "3AI-Y511B" + ] + }, + { + "series": [ + "3AI-M510C", + "3AI-Y510C", + "3AI-M511C", + "3AI-Y511C", + "3AI-M512C", + "3AI-Y512C", + "3AI-M513C", + "3AI-Y513C", + "3AI-M514C", + "3AI-Y514C" + ] + } + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3AI-M551A", + "3AI-Y551A" + ] + }, + { + "series": [ + "3AI-M551B", + "3AI-Y551B" + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + { + "parallel": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3LOS-M010A", + "3LOS-P010A" + ] + }, + { + "series": [ + "3LOS-M010B", + "3LOS-P010B" + ] + } + ] + }, + { + "series": [ + "3LOS-M050", + "3LOS-P050" + ] + } + ] + }, + { + "parallel": [ + "3LOS-H010A", + "3LOS-H010B" + ] + }, + "3LOS-M080", + "3LOS-P080", + { + "parallel": [ + "3LOS-S010A", + "3LOS-S010B" + ] + }, + "3LOS-PF080", + { + "parallel": [ + { + "series": [ + "3LOS-M020A", + "3LOS-F020A" + ] + }, + { + "series": [ + "3LOS-M020B", + "3LOS-F020B" + ] + } + ] + }, + "3LOS-ME020", + "3LOS-M060", + "3LOS-P060" + ] + }, + { + "series": [ + "3EHS-Z010", + { + "parallel": [ + { + "series": [ + "3EHS-M010A", + "3EHS-P010A" + ] + }, + { + "series": [ + "3EHS-M010B", + "3EHS-P010B" + ] + } + ] + }, + { + "parallel": [ + "3EHS-T090A", + "3EHS-T090B" + ] + }, + { + "parallel": [ + { + "series": [ + "3EHS-M015A", + "3EHS-F015A", + "3EHS-H010A" + ] + }, + { + "series": [ + "3EHS-M015B", + "3EHS-F015B", + "3EHS-H010B" + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3MT-ST010", + "3MT-ST020" + ] + }, + { + "series": [ + "3HPB-PCV010", + "EHB (BYPASS VALVES)" + ] + } + ] + }, + "3MT-ST030A", + "3MT-ST030B", + "3MT-AU040", + "3AS-T010", + "3AS-BS010", + { + "series": [ + "3SCW-PF001", + { + "parallel": [ + { + "series": [ + "3SCW-H023A", + "3SCW-M001A", + "3SCW-P001A" + ] + }, + { + "series": [ + "3SCW-H023B", + "3SCW-M001B", + "3SCW-P001B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "parallel": [ + { + "series": [ + "3CW-M020A", + "3CW-P020A" + ] + }, + { + "series": [ + "3CW-M020B", + "3CW-P020B" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3CW-M010A", + "3CW-P010A" + ] + }, + { + "series": [ + "3CW-M010B", + "3CW-P010B" + ] + } + ] + }, + { + "parallel": [ + "3CW-P011A", + "3CW-P011B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3SCW-PF001", + { + "parallel": [ + { + "series": [ + "3SCW-H023A", + "3SCW-M001A", + "3SCW-P001A" + ] + }, + { + "series": [ + "3SCW-H023B", + "3SCW-M001B", + "3SCW-P001B" + ] + } + ] + } + ] + }, + "3GEN-GM001", + { + "series": [ + "3SO-T116", + "3SO-T114", + "3SO-T113", + { + "parallel": [ + { + "series": [ + "3SO-M001", + "3SO-P001" + ] + }, + { + "series": [ + "3SO-M002", + "3SO-P002" + ] + } + ] + } + ] + }, + { + "series": [ + "3GEN-EXC008", + "3GEN-EXC009", + "3GEN-EXC004", + "3GEN-EXC005", + "3GEN-GM001", + "3GEN-Z012", + { + "parallel_no_redundancy": [ + { + "series": [ + "3GEN-M101A", + "3GEN-M102A", + "3GEN-M103A" + ] + }, + { + "series": [ + "3GEN-M101B", + "3GEN-M102B", + "3GEN-M103B" + ] + } + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + "3GEN-M201A", + "3GEN-M202A", + "3GEN-M203A", + "3GEN-M204A", + "3GEN-M205A" + ] + }, + "3GEN-M206A" + ] + } + ] + }, + { + "series": [ + "3GMC-Z002", + "3GMC-Z001", + "3GMC-Z003", + { + "parallel_no_redundancy": [ + { + "series": [ + "3GEN-M211A", + "3GEN-M211B", + "3GEN-M211C" + ] + }, + { + "series": [ + "3GEN-M212A", + "3GEN-M212B", + "3GEN-M212C" + ] + }, + { + "series": [ + "3GEN-M213A", + "3GEN-M213B", + "3GEN-M213C" + ] + }, + { + "series": [ + "3GEN-M214A", + "3GEN-M214B", + "3GEN-M214C" + ] + } + ] + } + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3TR-TF002A", + "3TR-Z003A" + ] + }, + { + "series": [ + "3TR-TF002B", + "3TR-Z003B" + ] + } + ] + }, + "3TR-TF001", + "3TR-TF005", + { + "parallel_no_redundancy": [ + "3TR-F301", + "3TR-F302", + "3TR-F303", + "3TR-F304", + "3TR-F305", + "3TR-F306", + "3TR-F307", + "3TR-F308", + "3TR-F309", + "3TR-F310", + "3TR-F311", + "3TR-F312", + "3TR-F313", + "3TR-F314" + ] + } + ] + } + ] + }, + { + "series": [ + "3CO-M001", + { + "parallel": [ + { + "series": [ + "3CO-M001A", + "3CO-P001A" + ] + }, + { + "series": [ + "3CO-M001B", + "3CO-P001B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3CAE-M010A", + "3CAE-P010A", + "3CAE-H010A" + ] + }, + { + "series": [ + "3CAE-M010B", + "3CAE-P010B", + "3CAE-H010B" + ] + } + ] + }, + "3CO-FCV001", + "3CO-H010", + "3CO-H020", + "3CO-H030" + ] + }, + { + "series": [ + "3CCCW-T010", + "3CCCW-M090", + "3CCCW-P090", + { + "parallel": [ + { + "series": [ + "3CCCW-M010A", + "3CCCW-P010A", + "3CCCW-H010A" + ] + }, + { + "series": [ + "3CCCW-M010B", + "3CCCW-P010B", + "3CCCW-H010B" + ] + } + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + { + "series": [ + "3AF-FCV501A", + "3AF-M501A", + "3AF-F501A" + ] + }, + { + "series": [ + "3AL-PCV501A", + "3AL-M501A", + "3AL-F501A" + ] + }, + { + "series": [ + "3AH-AU501A", + "3AH-M531A", + "3AH-P531A", + "3AH-H531A", + "3AH-M502A", + "3AH-M501A", + "3AH-H501A" + ] +}, + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3ESP-CAB801", + "3ESP-CAB821", + "A1-FIELD 1", + "A1-FIELD 2", + "A1-FIELD 3", + "A1-FIELD 4" + ] + }, + { + "series": [ + "3ESP-CAB802", + "3ESP-CAB822", + "A2-FIELD 1", + "A2-FIELD 2", + "A2-FIELD 3", + "A2-FIELD 4" + ] + } + ] + }, + "3GG-AX801A" + ] + }, + { + "series": [ + "3GG-M810A", + "3GG-F801A", + { + "parallel": [ + "3GG-F802A", + "3GG-F802B" + ] + }, + "3GG-M801A", + { + "parallel": [ + "3GG-F803A", + "3GG-F803B" + ] + }, + { + "parallel": [ + "3GG-P801A", + "3GG-P801B" + ] + } + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + "3GG-F853A", + "3GG-F853B", + "3GG-F853C", + "3GG-F853D" + ] + }, + "3GG-M851", + "3GG-M851A", + "3GG-F851", + "3GG-H877", + "3GG-F865A", + "3GG-M870A", + "3GG-F870A", + { + "parallel": [ + { + "series": [ + "3GG-M875A", + "3GG-F875A" + ] + }, + { + "series": [ + "3GG-M875B", + "3GG-F875B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3GG-M877A", + "3GG-P877A" + ] + }, + { + "series": [ + "3GG-M877B", + "3GG-P877B" + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3AF-FCV501B", + "3AF-M501B", + "3AF-F501B" + ] + }, + { + "series": [ + "3AL-PCV501B", + "3AL-M501B", + "3AL-F501B" + ] + }, + { + "series": [ + "3AH-AU501B", + "3AH-M531B", + "3AH-P531B", + "3AH-H531B", + "3AH-M502B", + "3AH-M501B", + "3AH-H501B" + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3ESP-CAB803", + "3ESP-CAB823", + "B1-FIELD 1", + "B1-FIELD 2", + "B1-FIELD 3", + "B1-FIELD 4" + ] + }, + { + "series": [ + "3ESP-CAB804", + "3ESP-CAB824", + "B2-FIELD 1", + "B2-FIELD 2", + "B2-FIELD 3", + "B2-FIELD 4" + ] + } + ] + }, + "3GG-AX801B" + ] + }, + { + "series": [ + "3GG-M810B", + "3GG-F801B", + { + "parallel": [ + "3GG-F804A", + "3GG-F804B" + ] + }, + { + "parallel": [ + "3GG-F805A", + "3GG-F805B" + ] + }, + "3GG-M801B", + "3GG-T801B", + { + "parallel": [ + "3GG-P802A", + "3GG-P802B" + ] + } + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + "3GG-F854A", + "3GG-F854B", + "3GG-F854C", + "3GG-F854D" + ] + }, + "3GG-M852", + "3GG-M851B", + "3GG-F852", + "3GG-H878", + "3GG-F865B", + "3GG-M870B", + "3GG-F870B", + { + "parallel": [ + { + "series": [ + "3GG-M880A", + "3GG-F880A" + ] + }, + { + "series": [ + "3GG-M880B", + "3GG-F880B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3GG-M878A", + "3GG-P878A" + ] + }, + { + "series": [ + "3GG-M878B", + "3GG-P878B" + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + "3BAD-PAN501", + "3BAD-M531", + "3BAD-AG531", + "3BAD-PN501", + { + "parallel": [ + { + "series": [ + "3BAD-H511A", + "3BAD-M511A", + "3BAD-P511A" + ] + }, + { + "series": [ + "3BAD-H511B", + "3BAD-M511B", + "3BAD-P511B" + ] + } + ] + }, + "3BAD-M501", + "3BAD-CV501", + "3BAD-T531", + "3BAD-T532", + { + "parallel": [ + { + "series": [ + "3BAD-M521A", + "3BAD-P521A" + ] + }, + { + "series": [ + "3BAD-M521B", + "3BAD-P521B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + { + "parallel_no_redundancy": [ + "3APC-CB811", + "3APC-CB812", + "3APC-CB813", + "3APC-CB814" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV001A", + "3APC-LV001B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV501A", + "3APC-LV501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV810A", + "3APC-LV810B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-LV811P1", + "3APC-LV811P2", + "3APC-LV811P3", + "3APC-LV811P4", + "3APC-LV811P5", + "3APC-LV811P21" + ] + }, + "3APC-LV851", + "3APC-MCC002", + { + "parallel_no_redundancy": [ + "3APC-MCC501A", + "3APC-MCC501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-MCC502A", + "3APC-MCC502B", + "3APC-MCC502C", + "3APC-MCC502D", + "3APC-MCC502E", + "3APC-MCC502F" + ] + }, + "3APC-MCC510", + "3APC-MCC851", + { + "parallel_no_redundancy": [ + "3APC-PD501A", + "3APC-PD501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-PD901", + "3APC-PD902" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-PD921", + "3APC-PD922" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF001A", + "3APC-TF001B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF501A", + "3APC-TF501B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF502A", + "3APC-TF502B" + ] + }, + { + "parallel_no_redundancy": [ + "3APC-TF810A", + "3APC-TF810B" + ] + }, + "3APC-TF811", + "3APC-TF851" + ] + }, + { + "series": [ + "3APE-CAB852", + { + "parallel_no_redundancy": [ + "3APE-MV001A", + "3APE-MV001B" + ] + }, + { + "parallel_no_redundancy": [ + "3APE-MV002A", + "3APE-MV002B" + ] + }, + { + "parallel_no_redundancy": [ + "3APE-MV003A", + "3APE-MV003B", + "3APE-MV003C", + "3APE-MV003D" + ] + }, + { + "parallel_no_redundancy": [ + "3APE-MV004A", + "3APE-MV004B" + ] + }, + "3APE-MV851", + "3APE-MV852", + { + "parallel_no_redundancy": [ + "3APE-TF002A", + "3APE-TF002B" + ] + }, + "3APE-TF852", + { + "parallel_no_redundancy": [ + "3APE-Z005A", + "3APE-Z005B" + ] + } + ] + }, + { + "series": [ + "3EG-E001", + "3EG-T003" + ] + } + ] + }, + { + "series": [ + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "3ABS-M879A", + "3ABS-AG879A" + ] + }, + { + "series": [ + "3ABS-M879B", + "3ABS-AG879B" + ] + }, + { + "series": [ + "3ABS-M879C", + "3ABS-AG879C" + ] + }, + { + "series": [ + "3ABS-M879D", + "3ABS-AG879D" + ] + }, + { + "series": [ + "3ABS-M879E", + "3ABS-AG879E" + ] + } + ] + }, + "3ABS-T931", + "3ABS-M931", + "3ABS-AG931", + { + "parallel": [ + { + "series": [ + "3ABS-M932A", + "3ABS-P932A" + ] + }, + { + "series": [ + "3ABS-M932B", + "3ABS-P932B" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "3ABS-M888A", + "3ABS-P888A" + ] + }, + { + "series": [ + "3ABS-M888B", + "3ABS-P888B" + ] + }, + { + "series": [ + "3ABS-M888C", + "3ABS-P888C" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3ABS-M910A", + "3ABS-P910A" + ] + }, + { + "series": [ + "3ABS-M910B", + "3ABS-P910B" + ] + } + ] + }, + "3ABS-ABT858" + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + { + "parallel": [ + { + "series": [ + "00CHA-SU801A", + "00CHA-CV801A", + "00CHA-MS801A", + "00CHA-BW802A", + "00CHA-CV802A", + "00CHA-CV803A", + "00CHA-SWT801" + ] + }, + { + "series": [ + "00CHA-SU801B", + "00CHA-CV801B", + "00CHA-MS801B", + "00CHA-BW802B", + "00CHA-CV802B", + "00CHA-CV803B", + "00CHA-SWT802" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00CHA-CV805A", + "00CHB-SKR805A" + ] + }, + { + "series": [ + "00CHA-CV804", + "00CHA-CV805B", + "00CHB-SKR805B" + ] + } + ] + }, + "COAL YARD" + ] + }, + { + "series": [ + "BOOSTER", + "FILTER", + "TRAFO", + "CELL", + "SUMP PUMP" + ] + }, + { + "series": [ + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M110A", + "00RO-P110A" + ] + }, + { + "series": [ + "00RO-M110B", + "00RO-P110B" + ] + }, + { + "series": [ + "00RO-M110C", + "00RO-P110C" + ] + }, + { + "series": [ + "00RO-M110D", + "00RO-P110D" + ] + } + ] + }, + "00RO-T120", + "FeCl3 DOSING", + "ANIONIC POLYMER DOSING", + "CLEAR WATER", + "CLARIFIER", + "00RO-T170", + { + "parallel": [ + { + "series": [ + "00RO-M195A", + "00RO-P195A" + ] + }, + { + "series": [ + "00RO-M195B", + "00RO-P195B" + ] + } + ] + }, + "00RO-T320", + "00RO-T130", + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M126A", + "00RO-P126A" + ] + }, + { + "series": [ + "00RO-M126B", + "00RO-P126B" + ] + }, + { + "series": [ + "00RO-M126C", + "00RO-P126C" + ] + }, + { + "series": [ + "00RO-M126D", + "00RO-P126D" + ] + } + ] + }, + "NaOCL DOSING", + { + "parallel": [ + { + "series": [ + "00RO-F161A", + "00RO-M152A", + "00RO-F152A" + ] + }, + { + "series": [ + "00RO-F161B", + "00RO-M152B", + "00RO-F152B" + ] + } + ] + }, + "00RO-T150", + { + "parallel": [ + { + "series": [ + "00RO-M150A", + "00RO-P150A" + ] + }, + { + "series": [ + "00RO-M150B", + "00RO-P150B" + ] + } + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M160A", + "00RO-P160A" + ] + }, + { + "series": [ + "00RO-M160B", + "00RO-P160B" + ] + }, + { + "series": [ + "00RO-M160C", + "00RO-P160C" + ] + }, + { + "series": [ + "00RO-M160D", + "00RO-P160D" + ] + } + ] + }, + "H2SO4 DOSING", + "SBS DOSING", + "ANTI SCALANT DOSING", + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M170A", + "00RO-P170A", + "00RO-T160A", + "00RO-Z110A" + ] + }, + { + "series": [ + "00RO-M170B", + "00RO-P170B", + "00RO-T160B", + "00RO-Z110B" + ] + }, + { + "series": [ + "00RO-M170C", + "00RO-P170C", + "00RO-T160C", + "00RO-Z110C" + ] + }, + { + "series": [ + "00RO-M170D", + "00RO-P170D", + "00RO-T160D", + "00RO-Z110D" + ] + } + ] + }, + "NaOH DOSING", + "00RO-H181", + "00RO-AG181", + "00RO-M181", + { + "parallel": [ + { + "series": [ + "00RO-M180A", + "00RO-P180A" + ] + }, + { + "series": [ + "00RO-M180B", + "00RO-P180B" + ] + } + ] + }, + "header 3", + { + "parallel": [ + { + "series": [ + "00RO-M340A", + "00RO-P340A" + ] + }, + { + "series": [ + "00RO-M340B", + "00RO-P340B" + ] + } + ] + }, + "00RO-T162", + { + "parallel_no_redundancy": [ + { + "series": [ + "00RO-M190A", + "00RO-P190A" + ] + }, + { + "series": [ + "00RO-M190B", + "00RO-P190B" + ] + } + ] + } + ] + }, + "WTP", + { + "series": [ + { + "series": [ + { + "series": [ + "00DS-T888", + "00DS-M888", + "00DS-AG888", + { + "parallel": [ + { + "series": [ + "00DS-M883A", + "00DS-P883A" + ] + }, + { + "series": [ + "00DS-M883B", + "00DS-P883B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "parallel": [ + "00DS-CY851A", + "00DS-CY851B" + ] + }, + "00DS-T851", + "00DS-M851", + "00DS-AG851", + { + "parallel": [ + { + "series": [ + "00DS-M860A", + "00DS-P860A" + ] + }, + { + "series": [ + "00DS-M860B", + "00DS-P860B" + ] + } + ] + }, + "00DS-T852", + "00DS-CY865" + ] + }, + { + "parallel": [ + { + "series": [ + "00DS-T901", + "00DS-M900", + "00DS-M901", + "00DS-P901", + "00DS-T900", + { + "parallel": [ + { + "series": [ + "00DS-M902A", + "00DS-P902A" + ] + }, + { + "series": [ + "00DS-M902B", + "00DS-P902B" + ] + } + ] + } + ] + }, + { + "series": [ + "00DS-T936", + "00DS-M935", + "00DS-M936", + "00DS-P936", + "00DS-T935", + { + "parallel": [ + { + "series": [ + "00DS-M937A", + "00DS-P937A" + ] + }, + { + "series": [ + "00DS-M937B", + "00DS-P937B" + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00OA-M851A", + "00OA-F851A" + ] + }, + { + "series": [ + "00OA-M851B", + "00OA-F851B" + ] + }, + { + "series": [ + "00OA-M851C", + "00OA-F851C" + ] + } + ] + }, + { + "series": [ + "00LSH-SU801", + "00LSH-HO801", + "00LSH-BW801", + "00LSH-COG801", + "00LSH-M851", + "00LSH-VFD801", + "00LSH-VI851", + "00LSH-M853A", + "00LSH-CR853", + "00LSH-CV801", + "00LSH-M901", + "00LSH-F901", + "00LSH-DC901", + "00LSH-MS801", + "00LSH-M852", + "00LSH-CV852", + "00LSH-HO851" + ] + }, + { + "series": [ + "00RP-T985", + "00RP-M985", + "00RP-AG985", + { + "parallel": [ + { + "series": [ + "00RP-M986A", + "00RP-P986A" + ] + }, + { + "series": [ + "00RP-M986B", + "00RP-P986B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00RP-BM871", + { + "parallel_no_redundancy": [ + "00RP-M871A", + "00RP-M871B" + ] + } + ] + }, + { + "series": [ + "00RP-BM911", + { + "parallel": [ + "00RP-M911A", + "00RP-M911B" + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00RP-CY871", + "00RP-DX897", + { + "parallel": [ + "00RP-F991A", + "00RP-F991B" + ] + }, + "00RP-T885", + "00RP-M885", + "00RP-AG885", + "00RP-P992", + { + "parallel": [ + { + "series": [ + "00RP-P991A", + "00RP-M891A", + "00RP-P891A" + ] + }, + { + "series": [ + "00RP-P991B", + "00RP-M891B", + "00RP-P891B" + ] + } + ] + } + ] + }, + { + "series": [ + "00RP-CY911", + "00RP-DX837", + { + "parallel": [ + "00RP-F995A", + "00RP-F995B" + ] + }, + "00RP-F995A", + "00RP-T925", + "00RP-M925", + "00RP-AG925", + "00RP-P995", + { + "parallel": [ + { + "series": [ + "00RP-P995A", + "00RP-M931A", + "00RP-P931A" + ] + }, + { + "series": [ + "00RP-P995B", + "00RP-M931B", + "00RP-P931B" + ] + } + ] + } + ] + } + ] + }, + "00RP-T970", + "00RP-M970", + "00RP-AG970", + { + "parallel": [ + { + "series": [ + "00RP-M972A", + "00RP-P972A" + ] + }, + { + "series": [ + "00RP-M972B", + "00RP-P972B" + ] + } + ] + }, + "00RP-T950", + "00RP-M950", + "00RP-AG950", + { + "parallel": [ + { + "series": [ + "00RP-M952A", + "00RP-P952A" + ] + }, + { + "series": [ + "00RP-M952B", + "00RP-P952B" + ] + } + ] + }, + { + "parallel": [ + { + "parallel_no_redundancy": [ + "00RP-Z851A", + "00RP-Z851B", + "00RP-Z851C" + ] + }, + "00RP-Z851D" + ] + }, + { + "parallel_no_redundancy": [ + { + "series": [ + "00RP-M856A", + "00RP-Z856A" + ] + }, + { + "series": [ + "00RP-M856B", + "00RP-Z856B" + ] + } + ] + }, + "00RP-DX979" + ] + } + ] + }, + { + "series": [ + "00SSB-EV001", + "00SSB-EV002", + "00SSB-EV003", + { + "parallel_no_redundancy": [ + "00SSB-EV004", + "00SSB-EV005" + ] + }, + "00SSB-EV006", + "00SSB-EV007", + "00SSB-EV012", + "00SSB-LA008", + "00SSB-LA009", + "00SSB-TF010" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/model/structure_name.json b/model/structure_name.json new file mode 100644 index 0000000..a35cc26 --- /dev/null +++ b/model/structure_name.json @@ -0,0 +1,7325 @@ +[ + { + "id" : "9413197a-b186-4043-8bd3-0480b14b2aa2", + "node_name" : null, + "node_type" : "RegularNode", + "structure_name" : null + }, + { + "id" : "66315760-afbd-420d-95a2-0c9cae359816", + "node_name" : "BTG", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG", + "model_image": ["model/RBD Model/Image/- BTG -.jpg"] + }, + { + "id" : "8c5db6e5-2553-4cb0-8a0f-cea2580e49fa", + "node_name" : "Air Flue Gas", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas", + "model_image": ["model/RBD Model/Image/- BTG_AFG -.jpg"] + }, + { + "id" : "c58a3896-ea36-4f65-8594-d87e034824e2", + "node_name" : "ESP A", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP A", + "model_image": ["model/RBD Model/Image/AFG_ESP A.jpg"] + }, + { + "id" : "fa2c404f-0d5e-448e-9ee9-e8eafe479e34", + "node_name" : "3GG-AX801A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP A" + }, + { + "id" : "fd748468-0e10-455b-9b28-bc87adc356a8", + "node_name" : "CHMBR 1", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP A\/CHMBR 1", + "model_image": ["model/RBD Model/Image/ESP_A1.jpg"] + }, + { + "id" : "d79347b4-968f-4e7f-aab5-96a4f48d5844", + "node_name" : "3ESP-CAB801", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP A\/CHMBR 1" + }, + { + "id" : "2f866627-0652-49b6-856c-e68970f7abe7", + "node_name" : "3ESP-CAB821", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP A\/CHMBR 1" + }, + { + "id" : "b6e9a6a5-6879-4906-a5b3-796badcc8a45", + "node_name" : "A1-FIELD 1", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP A\/CHMBR 1" + }, + { + "id" : "6d6b339e-dc97-4f69-8cb1-f42462862414", + "node_name" : "A1-FIELD 2", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP A\/CHMBR 1" + }, + { + "id" : "bc4bf194-2766-4583-994a-b4a216dd9350", + "node_name" : "A1-FIELD 3", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP A\/CHMBR 1" + }, + { + "id" : "30f6061f-48de-4c49-9471-212dd49c0f5a", + "node_name" : "A1-FIELD 4", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP A\/CHMBR 1" + }, + { + "id" : "8cd33fbe-9c03-4517-a5b5-08fbda9efc1b", + "node_name" : "CHMBR 2", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP A\/CHMBR 2", + "model_image": ["model/RBD Model/Image/ESP_A2.jpg"] + }, + { + "id" : "0b9def52-a7c5-405d-9f01-5a668969e0de", + "node_name" : "3ESP-CAB802", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP A\/CHMBR 2" + }, + { + "id" : "46e8ebb8-6f37-44dd-acc2-5ade9aa98d5e", + "node_name" : "3ESP-CAB822", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP A\/CHMBR 2" + }, + { + "id" : "3bba62be-3cf1-4f51-8708-fb53fbd28499", + "node_name" : "A2-FIELD 1", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP A\/CHMBR 2" + }, + { + "id" : "a6c7dc9a-bf1f-4f28-94eb-e454549b72e0", + "node_name" : "A2-FIELD 2", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP A\/CHMBR 2" + }, + { + "id" : "050c7d77-ea46-4891-b100-10e59a864829", + "node_name" : "A2-FIELD 3", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP A\/CHMBR 2" + }, + { + "id" : "1aa40cb3-ad6b-417a-9255-b8d156fb4ed1", + "node_name" : "A2-FIELD 4", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP A\/CHMBR 2" + }, + { + "id" : "72d5120d-e775-40c2-ac76-a45ceb9c636a", + "node_name" : "ESP B", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP B", + "model_image": ["model/RBD Model/Image/AFG_ESP B.jpg"] + }, + { + "id" : "7fb6b6c3-6b56-46b2-9e0d-24a52425a5a9", + "node_name" : "3GG-AX801B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP B" + }, + { + "id" : "65619f5c-67a3-493e-b6ae-097c8f1d6b63", + "node_name" : "B1 CHAMBER", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP B\/B1 CHAMBER", + "model_image": ["model/RBD Model/Image/ESP_B1.jpg"] + }, + { + "id" : "bf959ee7-4a75-48bb-b1f9-403c781194e8", + "node_name" : "3ESP-CAB803", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP B\/B1 CHAMBER" + }, + { + "id" : "99585fee-6aad-4d01-9b90-cc1d11665360", + "node_name" : "3ESP-CAB823", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP B\/B1 CHAMBER" + }, + { + "id" : "21cc64fd-da09-4bea-a385-7b4a2f3498b4", + "node_name" : "B1-FIELD 1", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP B\/B1 CHAMBER" + }, + { + "id" : "03269fff-4935-4bd3-8d7c-1aaa54fe3faa", + "node_name" : "B1-FIELD 2", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP B\/B1 CHAMBER" + }, + { + "id" : "f2803893-7a84-439a-8cb1-b3415dde5f38", + "node_name" : "B1-FIELD 3", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP B\/B1 CHAMBER" + }, + { + "id" : "62f26dcb-7756-45c3-aa03-0af9261b02b9", + "node_name" : "B1-FIELD 4", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP B\/B1 CHAMBER" + }, + { + "id" : "716d9709-f9a2-4c30-b3c4-2db50b1d0e7f", + "node_name" : "B2 CHAMBER", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP B\/B2 CHAMBER", + "model_image": ["model/RBD Model/Image/ESP_B2.jpg"] + }, + { + "id" : "92388af6-2e76-4046-aed4-c3ad217ce7d2", + "node_name" : "3ESP-CAB804", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP B\/B2 CHAMBER" + }, + { + "id" : "560aebb7-9b9e-4164-bbf6-a0f600338def", + "node_name" : "3ESP-CAB824", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP B\/B2 CHAMBER" + }, + { + "id" : "abd14c0e-28a1-41b0-a102-8f46b8b77077", + "node_name" : "B2-FIELD 1", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP B\/B2 CHAMBER" + }, + { + "id" : "1f90bdce-716b-4688-9be0-429fda15c425", + "node_name" : "B2-FIELD 2", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP B\/B2 CHAMBER" + }, + { + "id" : "94f0ea89-ecd0-4c35-90e0-d9f8f89e9923", + "node_name" : "B2-FIELD 3", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP B\/B2 CHAMBER" + }, + { + "id" : "c3e313ae-1f06-480c-96fa-7b0d6b483ce3", + "node_name" : "B2-FIELD 4", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/ESP B\/B2 CHAMBER" + }, + { + "id" : "09f690a6-7a60-41e5-89dc-3a47bb4e571b", + "node_name" : "FDF A", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FDF A", + "model_image" :[ "model/RBD Model/Image/AFG_FDF A.jpg"] + }, + { + "id" : "7f32ab53-142d-4829-b14d-ffa9f625c4ba", + "node_name" : "3AF-F501A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FDF A" + }, + { + "id" : "b8872e89-c35e-46df-903e-cc37c3699f81", + "node_name" : "3AF-FCV501A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FDF A" + }, + { + "id" : "8ec6808f-f915-4a7f-8f08-c87edb2cae66", + "node_name" : "3AF-M501A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FDF A" + }, + { + "id" : "48ab6aa4-4e25-4982-b2ea-e3dbc05fe5f7", + "node_name" : "FDF B", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FDF B", + "model_image": ["model/RBD Model/Image/AFG_ESP B.jpg"] + }, + { + "id" : "3d388512-3dd1-4a42-81e4-da2bf23ffbd4", + "node_name" : "3AF-F501B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FDF B" + }, + { + "id" : "86f77aeb-d6b7-4908-adb8-933a40bef727", + "node_name" : "3AF-FCV501B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FDF B" + }, + { + "id" : "b5d5aa25-7e50-4a94-a9db-87526c0d60e4", + "node_name" : "3AF-M501B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FDF B" + }, + { + "id" : "cab101fd-7a03-4481-862b-d33630288add", + "node_name" : "FGD A", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A", + "model_image": ["model/RBD Model/Image/AFG_FGD A-1.jpg", "model/RBD Model/Image/AFG_FGD A-2.jpg"] + }, + { + "id" : "04f2eb17-692a-46a3-85c9-107ed2d0fef1", + "node_name" : "3GG-F851", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "82c0b3e7-faa3-4841-ac9f-3808ff3508b8", + "node_name" : "3GG-F853A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "f434c333-25d1-4fd7-bca9-46f431428431", + "node_name" : "3GG-F853B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "ffbcd06e-c2a6-4800-8015-5bb2ab458dcb", + "node_name" : "3GG-F853C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "725c0667-0525-4f2a-af86-589ba08e5458", + "node_name" : "3GG-F853D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "2e3c8728-c5af-47e8-ae2d-3a7ef091b3ae", + "node_name" : "3GG-F865A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "dcb11bcb-55d6-48cf-88af-5880d15958cb", + "node_name" : "3GG-F870A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "7a9f5c04-640f-47fa-bcce-5f1e5c579b28", + "node_name" : "3GG-F875A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "0407ec67-3bb2-45ba-9206-9776795473d9", + "node_name" : "3GG-F875B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "e06902ae-b63d-400a-b2ee-e2dab280b753", + "node_name" : "3GG-H877", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "be2d73f3-74f1-4e48-9562-2822db2e67a6", + "node_name" : "3GG-M851", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "e86843f0-6aa1-4f84-b84e-91a79f2d46ef", + "node_name" : "3GG-M851A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "e68b992d-36c6-4501-a4f2-aa98ba264bb1", + "node_name" : "3GG-M870A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "c017122b-e342-4cf0-9074-3daa0d13ee4f", + "node_name" : "3GG-M875A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "40e4f16c-f63f-4fef-a693-adfab6ad48f1", + "node_name" : "3GG-M875B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "c8608554-ee5a-4246-b31a-c26211449097", + "node_name" : "3GG-M877A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "f5dabbbe-8132-4055-8843-c75a05a00c9b", + "node_name" : "3GG-M877B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "14bacc72-5b81-4641-a978-4bcd8b1408d6", + "node_name" : "3GG-P877A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "7a60e86a-a095-4320-9a30-f5b92328e374", + "node_name" : "3GG-P877B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD A" + }, + { + "id" : "dec39136-9e12-4a45-9255-87589f413c6f", + "node_name" : "FGD B", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B", + "model_image": ["model/RBD Model/Image/AFG_FGD B-1.jpg", "model/RBD Model/Image/AFG_FGD B-2.jpg"] + }, + { + "id" : "0afb9d58-ad3e-459a-a416-8122a8aeeaf7", + "node_name" : "3GG-F852", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "53082b72-72fb-407a-a5bb-f3bb687cf072", + "node_name" : "3GG-F854A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "dc9dfa43-c0d7-4f23-a8c4-a8316c0e9b40", + "node_name" : "3GG-F854B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "63e5a107-49ba-4461-a84b-1537017287f5", + "node_name" : "3GG-F854C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "6c2bfdad-ce9e-49a1-b731-0a3843171400", + "node_name" : "3GG-F854D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "971dc838-bb29-4a28-aeca-7a3d458edf99", + "node_name" : "3GG-F865B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "33eaf3bd-82f5-48d7-b586-22e13a83167c", + "node_name" : "3GG-F870B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "6bfc600e-d63d-4563-9e2b-96eb524175ff", + "node_name" : "3GG-F880A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "a4083ec1-5c3d-44cb-95c3-48edd239e6ce", + "node_name" : "3GG-F880B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "5133476a-2bd1-4050-80bd-4b669041c1a6", + "node_name" : "3GG-H878", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "8a1a6859-2a4c-43a9-93fc-1108bc59633e", + "node_name" : "3GG-M851B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "201184c7-04b3-4c20-b224-3993ead6c9ee", + "node_name" : "3GG-M852", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "85eadd33-0a1b-4130-bc05-f9af2a6dbb9b", + "node_name" : "3GG-M870B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "12a78ec3-872c-49e5-8d2d-ba518726179a", + "node_name" : "3GG-M878A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "f6f1188f-7a2e-45e7-bcf2-310333dbf6b8", + "node_name" : "3GG-M878B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "449aae96-5e6e-401c-9150-d41bd982d473", + "node_name" : "3GG-M880A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "35249fc7-b154-4ed6-bc6c-e1c2f8f4798a", + "node_name" : "3GG-M880B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "242b8353-10cc-4c60-9c8e-3395bdb957ca", + "node_name" : "3GG-P878A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "6ea2d4f9-abd9-4cbd-9d92-49afc06c7741", + "node_name" : "3GG-P878B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/FGD B" + }, + { + "id" : "f53c0fc5-e7f6-4271-97ca-cfb45ba7fa06", + "node_name" : "IDF A", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF A", + "model_image": ["model/RBD Model/Image/AFG_IDF A.jpg"] + }, + { + "id" : "fbc6e70b-2ba9-480b-ad15-59e3e4f76f7e", + "node_name" : "3GG-F801A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF A" + }, + { + "id" : "bcc4ae6e-66e7-4e80-be9b-98cf2c4b5fda", + "node_name" : "3GG-F802A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF A" + }, + { + "id" : "d2196ae3-7a3d-44e4-a360-4874f191b4f8", + "node_name" : "3GG-F802B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF A" + }, + { + "id" : "38e23a1d-8951-46b8-9a6b-d904688b4b7f", + "node_name" : "3GG-F803A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF A" + }, + { + "id" : "d6b91350-3fd6-470a-b62c-4a6dd64085d0", + "node_name" : "3GG-F803B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF A" + }, + { + "id" : "8fa11b04-df0e-4815-aa97-b8d28516634a", + "node_name" : "3GG-M801A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF A" + }, + { + "id" : "f3aebee9-e250-41b5-9362-c56ed65bb924", + "node_name" : "3GG-M810A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF A" + }, + { + "id" : "0d753dec-5cc2-440d-9632-8498366c9e4b", + "node_name" : "3GG-P801A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF A" + }, + { + "id" : "d8174afb-bf6f-4c4e-9b5d-c2dbea1fd110", + "node_name" : "3GG-P801B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF A" + }, + { + "id" : "03d31ca2-7b4a-4db8-a1b7-2176962d91e5", + "node_name" : "IDF B", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF B", + "model_image": ["model/RBD Model/Image/AFG_IDF B.jpg"] + }, + { + "id" : "5ed8f5f2-97d3-41a9-9cc1-c8d5f8b21c82", + "node_name" : "3GG-F801B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF B" + }, + { + "id" : "b0521a17-b1fd-411a-8b59-8b34ca9b6edc", + "node_name" : "3GG-F804A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF B" + }, + { + "id" : "c4d4941a-1706-42c1-933c-07323489a853", + "node_name" : "3GG-F804B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF B" + }, + { + "id" : "0be079bb-e304-485f-9b7f-5b98448da982", + "node_name" : "3GG-F805A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF B" + }, + { + "id" : "60947a56-d0fa-497e-b965-e96d99429127", + "node_name" : "3GG-F805B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF B" + }, + { + "id" : "0e7ac7fa-737b-477f-8c5e-7885ee7b3b43", + "node_name" : "3GG-M801B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF B" + }, + { + "id" : "d29819c8-f5e0-45c0-b64e-ee09d08bd556", + "node_name" : "3GG-M810B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF B" + }, + { + "id" : "9e09feea-e2d9-4b44-a9da-a0e60fb99c0b", + "node_name" : "3GG-P802A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF B" + }, + { + "id" : "2a7bf383-5ba9-43d9-af0e-253069d0e111", + "node_name" : "3GG-P802B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF B" + }, + { + "id" : "a3bc8ed2-2f42-49da-bcc2-a653dc357526", + "node_name" : "3GG-T801B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/IDF B" + }, + { + "id" : "8f44c829-51e0-4de6-83b3-bea58cf2d9f9", + "node_name" : "PAF A", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/PAF A", + "model_image": ["model/RBD Model/Image/AFG_PAF A.jpg"] + }, + { + "id" : "49bf7bdb-0624-4803-8d71-e7ce617edf60", + "node_name" : "3AL-F501A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/PAF A" + }, + { + "id" : "df45d1d8-c6b7-4b00-9423-ca6027cc0c03", + "node_name" : "3AL-M501A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/PAF A" + }, + { + "id" : "af423cf2-8b22-4202-b067-22847e679767", + "node_name" : "3AL-PCV501A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/PAF A" + }, + { + "id" : "81236893-4a69-460d-a999-2bbf0d15e2c7", + "node_name" : "PAF B", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/PAF B", + "model_image": ["model/RBD Model/Image/AFG_PAF B.jpg"] + }, + { + "id" : "58afbd66-bc6b-4a5c-97ab-7fd5c4450bf1", + "node_name" : "3AL-F501B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/PAF B" + }, + { + "id" : "03cc6136-13c7-45c5-a5fe-df66b66c77ec", + "node_name" : "3AL-M501B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/PAF B" + }, + { + "id" : "be3139f8-8ce1-4218-b629-aa299cf7ec85", + "node_name" : "3AL-PCV501B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/PAF B" + }, + { + "id" : "2185a339-d63b-4db5-9e04-d98bf4c9487f", + "node_name" : "RAPH A", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/RAPH A", + "model_image": ["model/RBD Model/Image/AFG_RAPH A .jpg"] + }, + { + "id" : "a6e06b20-3568-4fec-b5b4-ac749e297e34", + "node_name" : "3AH-AU501A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/RAPH A" + }, + { + "id" : "acbe5151-2161-416a-9f0c-8637fc6f7cf0", + "node_name" : "3AH-H501A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/RAPH A" + }, + { + "id" : "bfa073c4-f284-421e-ab05-fffc362e4569", + "node_name" : "3AH-H531A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/RAPH A" + }, + { + "id" : "91a1dce1-213c-45dd-a3a9-bdd25883a48a", + "node_name" : "3AH-M501A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/RAPH A" + }, + { + "id" : "8fbf1257-4d18-4824-864b-ce303acef33f", + "node_name" : "3AH-M502A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/RAPH A" + }, + { + "id" : "8a5a0a96-f7a2-4749-8a7a-22c6a5cb178a", + "node_name" : "3AH-M531A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/RAPH A" + }, + { + "id" : "ed429bc1-6391-454b-8dbf-1b8899ebb94c", + "node_name" : "3AH-P531A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/RAPH A" + }, + { + "id" : "22534bc6-fb5e-4c9a-8875-37b5a791ced9", + "node_name" : "RAPH B", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/RAPH B", + "model_image": ["model/RBD Model/Image/AFG_RAPH B.jpg"] + }, + { + "id" : "c857f924-8b85-40eb-b72b-7bf16a6b2ffb", + "node_name" : "3AH-AU501B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/RAPH B" + }, + { + "id" : "240ff178-0db4-4348-aa85-eb5a31ca1f6f", + "node_name" : "3AH-H501B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/RAPH B" + }, + { + "id" : "c013bbe5-9a85-4e43-ac79-ee134e96c24a", + "node_name" : "3AH-H531B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/RAPH B" + }, + { + "id" : "e867bb37-4f7b-4efe-b3a7-c968bed1abf6", + "node_name" : "3AH-M501B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/RAPH B" + }, + { + "id" : "9c6cad5c-312e-44b0-a42a-c8f88fc5e2db", + "node_name" : "3AH-M502B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/RAPH B" + }, + { + "id" : "1f495e9c-bb41-4dbf-8dac-bb7ca1fb24b3", + "node_name" : "3AH-M531B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/RAPH B" + }, + { + "id" : "5883468a-beaf-452d-8449-d032a6b57cb7", + "node_name" : "3AH-P531B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Air Flue Gas\/RAPH B" + }, + { + "id" : "2c179a79-7a93-45f4-8cb8-f75e51f5512c", + "node_name" : "Ash Handling", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling", + "model_image": ["model/RBD Model/Image/- BTG_ASH-(1).jpg", "model/RBD Model/Image/- BTG_ASH-(2).jpg"] + }, + { + "id" : "14ed3735-74aa-42c9-b72a-618a9a3984c6", + "node_name" : "3BAD-AG531", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling" + }, + { + "id" : "9997abdc-96ae-4064-a098-7ec4eec17a6d", + "node_name" : "3BAD-CV501", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling\/3BAD-CV501" + }, + { + "id" : "1eeeee75-decd-405b-ad42-b75983c927da", + "node_name" : "203596", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling\/3BAD-CV501" + }, + { + "id" : "426d340b-7cf7-458a-9968-86ee10156417", + "node_name" : "3BAD-CV501", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling\/3BAD-CV501" + }, + { + "id" : "c215d9a9-f782-4c03-b90d-71538ddfa8a8", + "node_name" : "3BAD-H511A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling" + }, + { + "id" : "d7242ae5-642f-41ca-9825-a69630f5aa36", + "node_name" : "3BAD-H511B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling" + }, + { + "id" : "6b83c2cb-1280-4100-9a07-56d6572cae21", + "node_name" : "3BAD-M501", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling" + }, + { + "id" : "6d323544-3c21-45ba-8fca-b34e1bd29be6", + "node_name" : "3BAD-M511A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling" + }, + { + "id" : "9835b057-b25a-428f-bcec-f076bc9ca3c6", + "node_name" : "3BAD-M511B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling" + }, + { + "id" : "43c4508f-d509-443c-af86-466eb3be919a", + "node_name" : "3BAD-M521A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling" + }, + { + "id" : "c2b6f275-956c-4271-a623-22b2a2233044", + "node_name" : "3BAD-M521B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling" + }, + { + "id" : "888d18a4-c2e0-416f-b439-3164388b70cf", + "node_name" : "3BAD-M531", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling" + }, + { + "id" : "fced74ed-b451-4bdb-bfb6-42bb0967bbc9", + "node_name" : "3BAD-P511A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling" + }, + { + "id" : "e9194300-3427-4e83-ab76-9bc98bf8feca", + "node_name" : "3BAD-P511B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling" + }, + { + "id" : "e88fafda-a9fa-4ef6-a766-cfda386e35bb", + "node_name" : "3BAD-P521A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling" + }, + { + "id" : "b11e7c9c-a855-499d-b7d2-7c191f48df6c", + "node_name" : "3BAD-P521B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling" + }, + { + "id" : "2fa5d882-f259-4c0f-9f44-172729872843", + "node_name" : "3BAD-PAN501", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling" + }, + { + "id" : "7d20ce32-f90e-4682-9071-70960a46db92", + "node_name" : "3BAD-PN501", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling" + }, + { + "id" : "6e5c2442-1df4-4668-8388-570adf045e38", + "node_name" : "3BAD-T531", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling" + }, + { + "id" : "96d5fa90-d394-43f1-b721-7a9dc989273f", + "node_name" : "3BAD-T532", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Ash Handling" + }, + { + "id" : "16c7449f-6190-403d-ae95-fc49481eaad4", + "node_name" : "Boiler", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler", + "model_image": ["model/RBD Model/Image/- BTG_BOL -.jpg"] + }, + { + "id" : "be7e88ee-d5ab-4435-ac64-ef6b35d6e251", + "node_name" : "3BOL-H501", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler" + }, + { + "id" : "f5f50dae-c33a-4530-a1e4-e5c5cdcd967f", + "node_name" : "3CRH-W002", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler" + }, + { + "id" : "20cdc6cf-5c38-454f-a534-54fec3157759", + "node_name" : "BDW", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/BDW", + "model_image": ["model/RBD Model/Image/BOL_BDW.jpg"] + }, + { + "id" : "15f89512-bbab-49df-bd74-1a87fb397ce1", + "node_name" : "3BDW-H521A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/BDW" + }, + { + "id" : "a8cfa580-89d3-435f-8acd-2126c9c6c346", + "node_name" : "3BDW-H521B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/BDW" + }, + { + "id" : "0ea417ef-0d95-4b83-9670-3d7b3ca1caed", + "node_name" : "3BDW-H601", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/BDW" + }, + { + "id" : "62ed01ca-2c98-4c0a-979a-e988ac693979", + "node_name" : "3BDW-H611", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/BDW" + }, + { + "id" : "47f97935-4b66-41d0-b52d-aee34fa45d67", + "node_name" : "3BDW-H621", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/BDW" + }, + { + "id" : "9fc700ed-37f3-40e5-8349-15e5babdfcd5", + "node_name" : "3BDW-H631", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/BDW" + }, + { + "id" : "11145b8f-eed5-4f7f-be29-5a82dd90b75b", + "node_name" : "3BDW-H641", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/BDW" + }, + { + "id" : "621c5b70-b2a7-43e1-a297-7860c59046f2", + "node_name" : "3BDW-M521A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/BDW" + }, + { + "id" : "86a8d6bf-cffb-4152-b6de-fa2f587ac3ff", + "node_name" : "3BDW-M521B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/BDW" + }, + { + "id" : "03517759-9e47-4039-8b03-b5b6ba26de64", + "node_name" : "3BDW-P521A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/BDW" + }, + { + "id" : "1d6f41ee-3711-4c63-964c-bf245117a7f6", + "node_name" : "3BDW-P521B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/BDW" + }, + { + "id" : "df8ed864-a92a-4387-b556-90f8a5b5d623", + "node_name" : "3BDW-T601", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/BDW" + }, + { + "id" : "3d2efe56-5e17-4e52-a705-b8532a26b49d", + "node_name" : "DP", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP", + "model_image": ["model/RBD Model/Image/BOL_DP.jpg"] + }, + { + "id" : "8be20d01-2d5a-4537-abfa-702a995b5e8a", + "node_name" : "3BOL-FD501", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP" + }, + { + "id" : "249f3655-c19a-4fdf-96f8-972343697b9d", + "node_name" : "COAL BURNER 1", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 1", + "model_image": ["model/RBD Model/Image/BOL_DP_CB A.jpg"] + }, + { + "id" : "fbd1ff9a-1386-415d-a0af-4c881e5eebd9", + "node_name" : "3DP-B701A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 1" + }, + { + "id" : "61d33ff5-fb77-4911-9542-07c60fb93ec7", + "node_name" : "3DP-B702A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 1" + }, + { + "id" : "425968f6-ba95-4c9d-abd1-88b62dce58e7", + "node_name" : "3DP-B703A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 1" + }, + { + "id" : "e0309095-fc99-4e26-95f1-7af5e80f72c7", + "node_name" : "3DP-B704A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 1" + }, + { + "id" : "52603b62-1f4c-4b1c-a98e-17c9191766e1", + "node_name" : "COAL BURNER 2", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 2", + "model_image": ["model/RBD Model/Image/BOL_DP_CB B.jpg"] + }, + { + "id" : "dabd6848-8932-4ed8-be0a-7e5dee40a23d", + "node_name" : "3DP-B701B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 2" + }, + { + "id" : "60daf734-edc7-48f3-af40-f1604dd6be02", + "node_name" : "3DP-B702B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 2" + }, + { + "id" : "13f3c472-eb86-4687-a6b8-b967c7ab6a25", + "node_name" : "3DP-B703B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 2" + }, + { + "id" : "4e3e4fa3-a7bd-4b77-bfff-23b6513f2077", + "node_name" : "3DP-B704B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 2" + }, + { + "id" : "2334a337-f05c-40cc-ba5c-04fdadfa76b4", + "node_name" : "COAL BURNER 3", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 3", + "model_image": ["model/RBD Model/Image/BOL_DP_CB C.jpg"] + }, + { + "id" : "0cf812c8-2826-4b6e-a705-92353baf91ca", + "node_name" : "3DP-B701C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 3" + }, + { + "id" : "3cd16501-1a7e-4756-960b-d7c47548e776", + "node_name" : "3DP-B702C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 3" + }, + { + "id" : "ad044cb8-8f58-411f-82eb-11ce833af88d", + "node_name" : "3DP-B703C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 3" + }, + { + "id" : "ba0465ed-3b73-4537-8ce6-a4141ae0f906", + "node_name" : "3DP-B704C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 3" + }, + { + "id" : "784caf4b-8beb-49e9-8607-9200ea0f71cb", + "node_name" : "COAL BURNER 4", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 4", + "model_image": ["model/RBD Model/Image/BOL_DP_CB D.jpg"] + }, + { + "id" : "4a8ce661-1172-4b84-9240-44ba1dd0c278", + "node_name" : "3DP-B701D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 4" + }, + { + "id" : "24c232a4-708a-447b-b8f8-9ae3a9ea9fc6", + "node_name" : "3DP-B702D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 4" + }, + { + "id" : "3e28b791-59ea-4086-82b2-0e7eb642fb09", + "node_name" : "3DP-B703D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 4" + }, + { + "id" : "5472ba0f-45e5-4e64-8be2-a8d2502267a3", + "node_name" : "3DP-B704D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 4" + }, + { + "id" : "8c0118c3-ff21-4394-bb26-0f3df785460f", + "node_name" : "COAL BURNER 5", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 5", + "model_image": ["model/RBD Model/Image/BOL_DP_CB E.jpg"] + }, + { + "id" : "7b3658bf-3b96-4d47-9c08-06712d70f240", + "node_name" : "3DP-B701E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 5" + }, + { + "id" : "3d279003-9522-4e0e-b54f-55c09de1cc10", + "node_name" : "3DP-B702E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 5" + }, + { + "id" : "95498a2c-f97d-4568-b551-794c750e1263", + "node_name" : "3DP-B703E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 5" + }, + { + "id" : "9d9ed65f-1084-45f3-abbe-6c7416b523b8", + "node_name" : "3DP-B704E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 5" + }, + { + "id" : "42864ba9-dcfb-48bb-9539-8fec7dd263ca", + "node_name" : "COAL BURNER 6", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 6", + "model_image": ["model/RBD Model/Image/BOL_DP_CB F.jpg"] + }, + { + "id" : "d396e61b-6017-4719-b69a-1d47f7188ac7", + "node_name" : "3DP-B701F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 6" + }, + { + "id" : "6b72aea2-30e0-4800-9e62-e1c13cd98b02", + "node_name" : "3DP-B702F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 6" + }, + { + "id" : "64c8111f-edd8-4326-ba23-86618372682e", + "node_name" : "3DP-B703F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 6" + }, + { + "id" : "5b3d3b71-cad7-45cc-807a-9749b4e19f64", + "node_name" : "3DP-B704F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/COAL BURNER 6" + }, + { + "id" : "d7f4d9fb-8e8c-43e9-8b47-41b52f51c26d", + "node_name" : "FEEDER A", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER A", + "model_image": ["model/RBD Model/Image/BOL_DP_FDR A.jpg"] + }, + { + "id" : "7bacd258-6808-4c88-a648-212ff8ec2882", + "node_name" : "3DP-FDR711A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER A" + }, + { + "id" : "6fa6ff7d-f4c8-4ed8-b9d6-0463566a6d39", + "node_name" : "3DP-M711A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER A" + }, + { + "id" : "3a5a6b8c-66fe-46f3-890b-6028a5f0bab0", + "node_name" : "3DP-M712A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER A" + }, + { + "id" : "43abb769-471e-41c5-9a3d-388ad7d80458", + "node_name" : "FEEDER B", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER B", + "model_image": ["model/RBD Model/Image/BOL_DP_FDR B.jpg"] + }, + { + "id" : "afeeb67f-a897-4d30-9dde-1cacaa86d1c4", + "node_name" : "3DP-FDR711B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER B" + }, + { + "id" : "1435a808-a45b-45b5-844d-0cfb5623b8bb", + "node_name" : "3DP-M711B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER B" + }, + { + "id" : "db49d2ee-75f6-4e30-9978-fc0a981732cc", + "node_name" : "3DP-M712B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER B" + }, + { + "id" : "4c80d7b1-e467-45ee-be5b-70bbc1cc70ee", + "node_name" : "FEEDER C", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER C", + "model_image": ["model/RBD Model/Image/BOL_DP_FDR C.jpg"] + }, + { + "id" : "ad6134ae-b896-42ac-b00b-64263b59af5e", + "node_name" : "3DP-FDR711C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER C" + }, + { + "id" : "eda63c97-a714-400b-b2e1-03b94ad70c08", + "node_name" : "3DP-M711C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER C" + }, + { + "id" : "193f3c83-b791-45d1-b779-de05c8b199e8", + "node_name" : "3DP-M712C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER C" + }, + { + "id" : "46030c8f-c96e-4791-849a-f4260c63ce00", + "node_name" : "FEEDER D", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER D", + "model_image": ["model/RBD Model/Image/BOL_DP_FDR D.jpg"] + }, + { + "id" : "26b7b799-3f97-40e7-afa4-7291cde16d14", + "node_name" : "3DP-FDR711D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER D" + }, + { + "id" : "7ef084cf-c1ec-4f7c-9cb9-980c1fce26f6", + "node_name" : "3DP-M711D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER D" + }, + { + "id" : "6dcf7f7c-f54e-4db4-8710-6b3ff4df59f4", + "node_name" : "3DP-M712D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER D" + }, + { + "id" : "e07d2fd5-6af9-41de-af31-b10b7630a09b", + "node_name" : "FEEDER E", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER E", + "model_image": ["model/RBD Model/Image/BOL_DP_FDR E.jpg"] + }, + { + "id" : "278f214e-ee60-459c-95cd-23bdfa9126e5", + "node_name" : "3DP-FDR711E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER E" + }, + { + "id" : "725835f8-b9bb-4b2c-844b-c9c34dffd234", + "node_name" : "3DP-M711E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER E" + }, + { + "id" : "794402ab-e9d0-4e56-ae48-916ea816be94", + "node_name" : "3DP-M712E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER E" + }, + { + "id" : "8e3db31a-0bb1-4183-a71a-a3fb0042af1c", + "node_name" : "FEEDER F", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER F", + "model_image": ["model/RBD Model/Image/BOL_DP_FDR F.jpg"] + }, + { + "id" : "b80e1b03-edc8-462c-b6ea-d067f1084f67", + "node_name" : "3DP-FDR711F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER F" + }, + { + "id" : "fe96b25e-0be2-4f50-83d0-1518cc783145", + "node_name" : "3DP-M711F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER F" + }, + { + "id" : "b025abc1-0a01-4f87-a709-52468e74f760", + "node_name" : "3DP-M712F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/FEEDER F" + }, + { + "id" : "72e02bec-d860-4e7b-82a5-8f07ffde7850", + "node_name" : "PULVERIZER A", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER A", + "model_image": ["model/RBD Model/Image/BOL_DP_MILL A.jpg"] + }, + { + "id" : "a1a0ee73-d491-4e60-a0cf-13ed97abf57c", + "node_name" : "3DP-BM731A", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER A\/3DP-BM731A" + }, + { + "id" : "6676f0fe-3829-4078-b1ba-04fcdd784c87", + "node_name" : "208532", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER A\/3DP-BM731A" + }, + { + "id" : "cc3eafbf-8a23-4dba-9765-088a51b2956e", + "node_name" : "3DP-BM731A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER A\/3DP-BM731A" + }, + { + "id" : "df274533-2c28-49b6-9e4d-bb13189ddea9", + "node_name" : "3DP-BM741A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER A" + }, + { + "id" : "63989446-40ce-42d4-8c9c-3bfbdf946aaa", + "node_name" : "3DP-CVT701A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER A" + }, + { + "id" : "b5cd3cd8-9707-4cfe-b99c-16729f04b590", + "node_name" : "3DP-CVT711A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER A" + }, + { + "id" : "5ed85145-32b3-4ef5-ae73-9c363484e4a3", + "node_name" : "3DP-M731A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER A" + }, + { + "id" : "728cdeb0-3c3b-4592-be63-148f624844f7", + "node_name" : "3DP-M741A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER A" + }, + { + "id" : "960a833f-6808-4e43-acb6-7ed9e8e5b3a9", + "node_name" : "3DP-M761A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER A" + }, + { + "id" : "28fbdead-c12b-4e51-973d-59475ae64f8a", + "node_name" : "3DP-M781A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER A" + }, + { + "id" : "4b344b73-d3b4-4223-a0bc-b1438df8fb0f", + "node_name" : "3DP-P761A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER A" + }, + { + "id" : "1de30fc0-2276-4a53-883f-3fdcc019818f", + "node_name" : "3DP-P781A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER A" + }, + { + "id" : "c7e2569b-4312-411d-a35f-d564a590d9c1", + "node_name" : "PULVERIZER B", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER B", + "model_image": ["model/RBD Model/Image/BOL_DP_MILL B.jpg"] + }, + { + "id" : "cff58eff-411f-41fa-800f-c9ca892c382e", + "node_name" : "3DP-BM731B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER B" + }, + { + "id" : "06cbaf73-aea5-440e-9248-0a1872664231", + "node_name" : "3DP-BM741B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER B" + }, + { + "id" : "4e74d5d9-a91d-4e0a-a781-25500a59c1a5", + "node_name" : "3DP-CVT701B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER B" + }, + { + "id" : "b0082549-fed7-40ad-87ad-387d0b579403", + "node_name" : "3DP-CVT711B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER B" + }, + { + "id" : "d6e96ead-59b9-49f2-949e-a7cad1478228", + "node_name" : "3DP-M731B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER B" + }, + { + "id" : "7562b4a1-9ba5-4fad-9b38-bca7017b76f0", + "node_name" : "3DP-M741B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER B" + }, + { + "id" : "e175eda0-0638-48a1-a3c1-afa483bad12a", + "node_name" : "3DP-M761B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER B" + }, + { + "id" : "4fccbd7f-1e2b-40f7-9122-9128dcb66ae3", + "node_name" : "3DP-M781B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER B" + }, + { + "id" : "899ecaa4-59ae-4113-8e57-9b3d52b7746c", + "node_name" : "3DP-P761B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER B" + }, + { + "id" : "f693c2ce-b671-47bd-9d30-d9a832a942a2", + "node_name" : "3DP-P781B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER B" + }, + { + "id" : "80692bc1-f63b-4426-a041-1478e896d032", + "node_name" : "PULVERIZER C", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER C", + "model_image": ["model/RBD Model/Image/BOL_DP_MILL C.jpg"] + }, + { + "id" : "3c636e1b-d6cf-4396-aa73-1320b5e12d9b", + "node_name" : "3DP-BM731C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER C" + }, + { + "id" : "5a00fca9-7009-491c-8ce7-c6adca1a99cd", + "node_name" : "3DP-BM741C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER C" + }, + { + "id" : "5baf028d-1d5e-4473-8576-dbc62ee524e4", + "node_name" : "3DP-CVT701C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER C" + }, + { + "id" : "2763a180-3d3e-4605-b12e-7d55179173cb", + "node_name" : "3DP-CVT711C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER C" + }, + { + "id" : "48170b7c-0cad-43c7-9dc8-1eed70b30ef5", + "node_name" : "3DP-M731C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER C" + }, + { + "id" : "443fd286-00b5-44f1-9c70-08d229b35e67", + "node_name" : "3DP-M741C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER C" + }, + { + "id" : "5acbf4c0-ee02-4908-8137-27747e7d758f", + "node_name" : "3DP-M761C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER C" + }, + { + "id" : "879780d2-121e-48a1-b7d7-84d2e5af73ba", + "node_name" : "3DP-M781C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER C" + }, + { + "id" : "4c731d2d-6d14-4412-b98f-9a049dbb56eb", + "node_name" : "3DP-P761C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER C" + }, + { + "id" : "fd10a9d9-8340-4bff-848c-315f7f7284e7", + "node_name" : "3DP-P781C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER C" + }, + { + "id" : "cd81182c-613d-42f9-81f1-0e33cae54146", + "node_name" : "PULVERIZER D", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER D", + "model_image": ["model/RBD Model/Image/BOL_DP_MILL D.jpg"] + }, + { + "id" : "df667d57-4757-4481-a1a1-8bd75c553e6f", + "node_name" : "3DP-BM731D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER D" + }, + { + "id" : "537dfb19-1546-426a-82af-347826f89cf5", + "node_name" : "3DP-BM741D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER D" + }, + { + "id" : "dc3411f1-5d31-4e11-abe2-6d0da9307eec", + "node_name" : "3DP-CVT701D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER D" + }, + { + "id" : "56792efe-62b8-44bc-a152-fd613f6be26c", + "node_name" : "3DP-CVT711D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER D" + }, + { + "id" : "c04ab1d3-ed05-4aa3-b0a9-48eb02ec42cb", + "node_name" : "3DP-M731D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER D" + }, + { + "id" : "1a76e179-6cfb-40ee-9f08-a4430c732358", + "node_name" : "3DP-M741D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER D" + }, + { + "id" : "d7c7e3d8-af87-488e-aae4-300e22bd47c6", + "node_name" : "3DP-M761D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER D" + }, + { + "id" : "a07cf0dd-995c-4984-991f-a27b6601d44c", + "node_name" : "3DP-M781D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER D" + }, + { + "id" : "6185ffa5-d16c-46dd-bc83-74e47d5fc7fb", + "node_name" : "3DP-P761D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER D" + }, + { + "id" : "b26aa3f6-d13b-43fc-bbf5-45ae53147e4f", + "node_name" : "3DP-P781D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER D" + }, + { + "id" : "34fc03eb-e28d-4952-bcd6-b2f715e6b675", + "node_name" : "PULVERIZER E", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER E", + "model_image": ["model/RBD Model/Image/BOL_DP_MILL E.jpg"] + }, + { + "id" : "8d188776-8ad8-48fe-850c-9810e887f626", + "node_name" : "3DP-BM731E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER E" + }, + { + "id" : "db6372d5-065d-427c-b011-b278024a1aa2", + "node_name" : "3DP-BM741E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER E" + }, + { + "id" : "36facb59-b78d-4401-85f9-47dd4736b90a", + "node_name" : "3DP-CVT701E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER E" + }, + { + "id" : "da39d6fd-6252-4991-a726-adb54819ffdb", + "node_name" : "3DP-CVT711E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER E" + }, + { + "id" : "831ea328-047f-4275-a6e0-64a3c4f2e629", + "node_name" : "3DP-M731E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER E" + }, + { + "id" : "03b76735-0625-4547-8e8c-84aab8c839da", + "node_name" : "3DP-M741E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER E" + }, + { + "id" : "cca28275-864a-41ad-833f-74ad12b1d4ad", + "node_name" : "3DP-M761E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER E" + }, + { + "id" : "f70cdf65-527d-4cc5-96c7-82ee387af80a", + "node_name" : "3DP-M781E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER E" + }, + { + "id" : "946f21e8-24a7-4ca4-88e8-e1f5513cd27b", + "node_name" : "3DP-P761E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER E" + }, + { + "id" : "432ecd61-1a55-464f-ba90-f91116529459", + "node_name" : "3DP-P781E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER E" + }, + { + "id" : "1639b4ad-dd0f-4180-b6b4-22fefba140e7", + "node_name" : "PULVERIZER F", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER F", + "model_image": ["model/RBD Model/Image/BOL_DP_MILL F.jpg"] + }, + { + "id" : "c995597c-2ada-43c9-9f52-2c14cf70f6ca", + "node_name" : "3DP-BM731F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER F" + }, + { + "id" : "5a0b5c1a-e622-484c-8457-bf77660b8416", + "node_name" : "3DP-BM741F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER F" + }, + { + "id" : "99143f9d-295a-4a85-8390-852e0f8e2f60", + "node_name" : "3DP-CVT701F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER F" + }, + { + "id" : "db81ad36-7378-4b7e-ad84-68ba9cb328b0", + "node_name" : "3DP-CVT711F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER F" + }, + { + "id" : "f638d305-17dc-4c8e-ba9f-07d11b372054", + "node_name" : "3DP-M731F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER F" + }, + { + "id" : "eeb57a10-048f-416e-9725-09cd70ddb0d4", + "node_name" : "3DP-M741F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER F" + }, + { + "id" : "367f5ac7-f52d-41c2-82f8-fbee4697d540", + "node_name" : "3DP-M761F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER F" + }, + { + "id" : "d2e6d5d4-f593-4e6d-8671-a374054c784a", + "node_name" : "3DP-M781F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER F" + }, + { + "id" : "a3e519a4-ee1f-427e-9bd2-765a935fd459", + "node_name" : "3DP-P761F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER F" + }, + { + "id" : "fabd26d9-5fd2-4143-80e8-e57af2b99263", + "node_name" : "3DP-P781F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/DP\/PULVERIZER F" + }, + { + "id" : "e99eed44-358f-4530-83c7-6c9b60ecf57d", + "node_name" : "HRH", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/HRH", + "model_image": ["model/RBD Model/Image/BOL_HRH.jpg"] + }, + { + "id" : "f1153d7c-fec6-4d97-b771-b100ff0a0a63", + "node_name" : "3ATT-N561", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/HRH" + }, + { + "id" : "d835cf36-22a3-4b07-ac67-085352b9c1ad", + "node_name" : "3ATT-N571", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/HRH" + }, + { + "id" : "6763ea6a-197b-4592-9bf1-122317102590", + "node_name" : "3ATT-N581", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/HRH" + }, + { + "id" : "8f875eee-b0c7-4057-826c-5dba43d32882", + "node_name" : "3HRH-HV020A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/HRH" + }, + { + "id" : "be61321b-a01c-4982-8f31-9968014fe3c2", + "node_name" : "3HRH-HV020B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/HRH" + }, + { + "id" : "e864ab08-5b43-46d0-9e0b-869ade55ef98", + "node_name" : "OIL BURNER (DM)", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/OIL BURNER (DM)", + "model_image": ["model/RBD Model/Image/BOL_OB.jpg"] + }, + { + "id" : "978d9ddf-e591-4f43-849e-6b611a772003", + "node_name" : "3DM-B701A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/OIL BURNER (DM)" + }, + { + "id" : "70b77940-14ab-4c7d-a841-c2ae23a49253", + "node_name" : "3DM-B701C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/OIL BURNER (DM)" + }, + { + "id" : "9e8018a2-0c68-492a-946e-0b4d817e8415", + "node_name" : "3DM-B701E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/OIL BURNER (DM)" + }, + { + "id" : "374c6183-73e8-4967-b2df-fea742d46aec", + "node_name" : "3DM-B702A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/OIL BURNER (DM)" + }, + { + "id" : "e23b5e0b-3e3e-4afa-b7f2-bcdb4cee4313", + "node_name" : "3DM-B702C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/OIL BURNER (DM)" + }, + { + "id" : "c016c419-e158-4c4c-8fe1-20665d53bcda", + "node_name" : "3DM-B702E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/OIL BURNER (DM)" + }, + { + "id" : "9dafcd93-5d68-4edb-bbc6-013dab34c562", + "node_name" : "3DM-B703A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/OIL BURNER (DM)" + }, + { + "id" : "a87b1e7d-55a2-4826-92d6-7e00a76eca9f", + "node_name" : "3DM-B703C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/OIL BURNER (DM)" + }, + { + "id" : "206f6d3c-22d7-4890-9a25-9fff4d581cd4", + "node_name" : "3DM-B703E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/OIL BURNER (DM)" + }, + { + "id" : "6d7d8b67-b28b-461f-8ce8-7f0ee4a8d6ac", + "node_name" : "3DM-B704A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/OIL BURNER (DM)" + }, + { + "id" : "8282cc79-8aa6-4b38-af26-596590d22f87", + "node_name" : "3DM-B704C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/OIL BURNER (DM)" + }, + { + "id" : "207946f9-2d83-40d9-8cd9-4908c16ddd73", + "node_name" : "3DM-B704E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/OIL BURNER (DM)" + }, + { + "id" : "d0cfee57-7b1e-4872-b823-7a01a0ec47b7", + "node_name" : "3FO-FCV501", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/OIL BURNER (DM)" + }, + { + "id" : "133aae89-6a3e-459c-8d23-141a8acb4a5a", + "node_name" : "REHEATER", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/REHEATER", + "model_image": ["model/RBD Model/Image/BOL_BRS.jpg"] + }, + { + "id" : "4d39735a-a0e9-4279-8275-3db9aca4b2ac", + "node_name" : "3ATT-N503A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/REHEATER" + }, + { + "id" : "0f7b01ee-6699-4172-b119-a6a4523ad2a7", + "node_name" : "3ATT-N503B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/REHEATER" + }, + { + "id" : "bddab4ec-479e-4f26-865e-c41659212ab0", + "node_name" : "3BRS-H611", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/REHEATER" + }, + { + "id" : "55251ea9-322b-40fd-b46d-6e0a3e1f73cf", + "node_name" : "3BRS-H621", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/REHEATER" + }, + { + "id" : "3207fc92-175c-44f5-b8d1-377cab04d86e", + "node_name" : "3BRS-H631", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/REHEATER" + }, + { + "id" : "fe7a6bf4-9097-46ce-84fb-fe981f65d006", + "node_name" : "SOOTBLOWER", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER", + "model_image": ["model/RBD Model/Image/BOL_SB.jpg"] + }, + { + "id" : "27762c4a-3967-42f1-922b-32739b25b09b", + "node_name" : "3AI-SFV501", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/3AI-SFV501" + }, + { + "id" : "8a3ffa2b-732a-4b72-942e-c6c6f3059945", + "node_name" : "221786", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/3AI-SFV501" + }, + { + "id" : "90c1163d-39d2-495a-bb3d-a5ee02230219", + "node_name" : "3AI-SFV501", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/3AI-SFV501" + }, + { + "id" : "54b9bbdb-5864-47ba-be25-a050d68d0eae", + "node_name" : "HALF RETR.", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR.", + "model_image": ["model/RBD Model/Image/BOL_SB_HALF.jpg"] + }, + { + "id" : "e41ee9d1-512b-4df6-83e5-2ba524e51026", + "node_name" : "3AI-M501H", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "02bbace5-0157-4bb8-a6d3-b5e1e9ce5f39", + "node_name" : "3AI-M501I", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "6d5d8013-ae44-46b4-8c36-5c8e905738cd", + "node_name" : "3AI-M502H", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "d125d1c2-b815-4986-8e0e-310b578627cd", + "node_name" : "3AI-M502I", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "58184fd6-befa-4b26-b283-5a5b2dfb694e", + "node_name" : "3AI-M503H", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "2c01288d-e75c-4ca2-916c-756c06ee153a", + "node_name" : "3AI-M503I", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "3a19718b-94fe-4553-b1ed-3c256cb6cb06", + "node_name" : "3AI-M504H", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "ed13cd4e-dd1f-4037-bb7e-0fb565bf0fac", + "node_name" : "3AI-M504I", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "efeda83c-34ec-4574-bb38-7e6a7b3a8c4d", + "node_name" : "3AI-M505H", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "aa0512ce-8edc-4843-9fed-67aa6297d3a4", + "node_name" : "3AI-M505I", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "d36d5eb7-937b-4bda-afc8-6f1ab55b4b7c", + "node_name" : "3AI-M506H", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "0004c54f-41d8-4985-b906-0a3641d59d48", + "node_name" : "3AI-M506I", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "52be0de1-8bf0-4f48-95ca-0ec9b025d7f9", + "node_name" : "3AI-Y501H", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "99da7bee-eac2-4918-80fc-6a04be2aa28f", + "node_name" : "3AI-Y501I", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "9cf3e5b8-c505-4df8-a7e3-b667cd560e8f", + "node_name" : "3AI-Y502H", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "321836b9-c5c1-4d52-94c2-4fb4c8b2179c", + "node_name" : "3AI-Y502I", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "6ad81a2e-f975-43ac-8a43-2643cbc35baa", + "node_name" : "3AI-Y503H", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "3a86c462-c387-4928-a7b5-9877fc727deb", + "node_name" : "3AI-Y503I", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "d3ec3a26-1a99-4078-9bb1-bb7275872943", + "node_name" : "3AI-Y504H", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "9cfa9e7b-40d8-4882-99c9-249ea17853f0", + "node_name" : "3AI-Y504I", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "8e91b614-05ad-4c4d-af10-8d0f8c9d5dca", + "node_name" : "3AI-Y505H", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "5b9f30e1-042f-40de-b31c-987007cde2e2", + "node_name" : "3AI-Y505I", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "ceb12fc2-6dd0-4088-b556-bfbdda16ef1d", + "node_name" : "3AI-Y506H", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "27953684-5736-4a97-ad07-dcb561419f80", + "node_name" : "3AI-Y506I", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/HALF RETR." + }, + { + "id" : "c49781a6-fbb3-4bed-8b56-4c388c438c37", + "node_name" : "LONG RETR.", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.", + "model_image" : ["model/RBD Model/Image/BOL_SB_LONG.jpg"] + }, + { + "id" : "4734b6d3-cb90-4392-89a3-ea80d7a8bc7a", + "node_name" : "LEFT SOOTBLOWER", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER", + "model_image": ["model/RBD Model/Image/BOL_SB_LONG_LEFT.jpg"] + }, + { + "id" : "f6800448-1e52-4dce-9599-947658a877f6", + "node_name" : "3AI-M501L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "6c541445-07da-45f0-8ffc-59b7631bb12b", + "node_name" : "3AI-M502L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "a29c8384-30d4-4f96-be37-6a4599e5d8a4", + "node_name" : "3AI-M503L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "e3711513-2cad-4fdf-b907-d325c32e49f7", + "node_name" : "3AI-M504L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "19204c52-d70c-4fdd-8a27-da2c5f46d6d0", + "node_name" : "3AI-M505L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "64c07974-7f06-4abe-956a-dbf32c4b0b93", + "node_name" : "3AI-M506L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "4442eb65-267b-41a8-a421-da9ccf3496ff", + "node_name" : "3AI-M507L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "f81dbc57-90d9-4ce4-be56-6d308fc84080", + "node_name" : "3AI-M508L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "bf88f184-1b25-4179-b70a-bd6bc39d8b92", + "node_name" : "3AI-M509L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "63a3bd25-14a4-4f23-8074-11adfecba612", + "node_name" : "3AI-M510L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "ad419a28-2cfe-4b32-b67b-bf6f91372dce", + "node_name" : "3AI-M511L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "e13d66aa-ef04-4996-918e-ce28570aefe1", + "node_name" : "3AI-M512L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "e6fc0c6a-2dba-46e9-8cf8-1d53fe1631ab", + "node_name" : "3AI-M513L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "9337ad63-084d-4116-9da7-bb890930a80b", + "node_name" : "3AI-M514L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "5e84f480-b52f-445c-8888-8badc989997f", + "node_name" : "3AI-M515L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "2520bc5b-ecf2-4611-bc20-4764d0411a98", + "node_name" : "3AI-M516L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "545a3d2b-91e9-475d-af69-246471cb1196", + "node_name" : "3AI-Y501L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "922f23ad-377f-4b95-a91e-51b22de94d7f", + "node_name" : "3AI-Y502L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "9c1b2f6c-0dea-4ef9-96e8-ea52ce12b178", + "node_name" : "3AI-Y503L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "d361c124-4821-4494-b833-305bd1bd9f24", + "node_name" : "3AI-Y504L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "6bac0ffd-bfd2-4cd8-a39e-8333b0fc8921", + "node_name" : "3AI-Y505L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "e96f5b78-3ed2-4dfc-8691-530be73c7855", + "node_name" : "3AI-Y506L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "45c5b4e6-1e7c-45f2-80be-5376d0aab2ca", + "node_name" : "3AI-Y507L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "73a6693b-eb5d-4ac0-9684-d2deff7534fa", + "node_name" : "3AI-Y508L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "19a94604-e0e8-40b4-a5d8-473b0ea2ce3d", + "node_name" : "3AI-Y509L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "36dcff77-49e9-4d86-aeaa-be1a4c3a1fb3", + "node_name" : "3AI-Y510L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "9fc3973e-8082-4609-93b2-963abd2b09d4", + "node_name" : "3AI-Y511L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "9082339c-32e4-4d56-8848-17ba384cbf19", + "node_name" : "3AI-Y512L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "03398ecf-1375-49cd-8f24-e10cf7b98075", + "node_name" : "3AI-Y513L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "d40459d1-f4de-4f63-abb4-e243d4ba2d34", + "node_name" : "3AI-Y514L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "72de89ab-3ef9-424f-907d-107e81b2c88d", + "node_name" : "3AI-Y515L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "e08f16e8-33d5-47d5-bb1c-e011224e5665", + "node_name" : "3AI-Y516L", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/LEFT SOOTBLOWER" + }, + { + "id" : "2a81e7e2-41d7-42f8-ad88-ddf9f5636c66", + "node_name" : "RIGHT SOOTBLOWER", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER", + "model_image": ["model/RBD Model/Image/BOL_SB_LONG_RIGHT.jpg"] + }, + { + "id" : "906015a4-961f-46d2-b3b9-80d12ea67b3b", + "node_name" : "3AI-M501R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "4da7177d-a6b4-4bab-8e59-3db96fb2915f", + "node_name" : "3AI-M502R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "d4390858-72c6-4b95-a2be-245b45ed838e", + "node_name" : "3AI-M503R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "7354772f-bcbe-413a-ba62-c004049fe932", + "node_name" : "3AI-M504R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "40d39f79-bd72-44e0-8606-f142b365956c", + "node_name" : "3AI-M505R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "f0edfd44-4b35-4692-96db-7b289d4e7758", + "node_name" : "3AI-M506R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "365489f9-b970-4b1d-a892-f7cc1700e797", + "node_name" : "3AI-M507R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "91811df8-6794-4d71-9d6d-7dfee782c14f", + "node_name" : "3AI-M508R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "8091f502-86bb-42bc-b960-8262c4f0242b", + "node_name" : "3AI-M509R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "fb97fe88-cec0-452b-ac8a-0183dc6997f6", + "node_name" : "3AI-M510R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "57caf553-ca3d-409e-9195-9c0e58b2adaa", + "node_name" : "3AI-M511R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "bbf882dd-88c2-49d8-ae4f-6e9122f054d2", + "node_name" : "3AI-M512R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "06c22ce5-a843-4ba0-9ad4-6c6e641214dc", + "node_name" : "3AI-M513R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "bb7f0a13-4bc2-4d9b-8578-9a8b69209e86", + "node_name" : "3AI-M514R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "5cd28036-aa6a-4ce5-85af-eca9c657ea37", + "node_name" : "3AI-M515R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "16127272-4c0f-43a4-819e-c5ed1d259f63", + "node_name" : "3AI-M516R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "6a77800f-9bb6-46a3-a193-fffdbd7c2f27", + "node_name" : "3AI-Y501R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "d0fbe8e1-e34b-49af-8e2c-0ff2954eff16", + "node_name" : "3AI-Y502R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "1a6bfd6e-6096-48d7-b36d-fe2f88d5259c", + "node_name" : "3AI-Y503R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "764870e4-9d5a-40d6-b37d-f97953a30e6a", + "node_name" : "3AI-Y504R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "5b0276f7-a869-435a-b7a2-ad62d121f78a", + "node_name" : "3AI-Y505R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "fc83a8c8-647c-4e79-8974-6a36d960c34c", + "node_name" : "3AI-Y506R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "8f9ddbda-5f0e-4fd0-aa10-7cb5fb802d0c", + "node_name" : "3AI-Y507R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "fee33a89-a47c-4d72-8393-e6fb8f1be023", + "node_name" : "3AI-Y508R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "51472726-bd50-4c30-86f7-5feb627b87a4", + "node_name" : "3AI-Y509R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "ab476d3b-b5b5-4e0e-bbd0-f3ae09249d31", + "node_name" : "3AI-Y510R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "311e67d4-bb7f-46a4-93cd-a72f5418851f", + "node_name" : "3AI-Y511R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "6054bac1-c19f-4c3a-a56e-80f22162f9fc", + "node_name" : "3AI-Y512R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "10e9f08e-c7e3-4ee2-a2df-556781611eec", + "node_name" : "3AI-Y513R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "e478e8e0-f325-4346-8340-f4a663c2d796", + "node_name" : "3AI-Y514R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "0245d81d-e14f-4bbf-8178-bb02b4010be7", + "node_name" : "3AI-Y515R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "4648fa74-2abf-4efa-89b5-60e1227314d3", + "node_name" : "3AI-Y516R", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/LONG RETR.\/RIGHT SOOTBLOWER" + }, + { + "id" : "ce233d7d-8bfd-4238-b1f0-46fa2c551b33", + "node_name" : "RAPH", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/RAPH", + "model_image": ["model/RBD Model/Image/BOL_SB_RAPH.jpg"] + }, + { + "id" : "815f66af-adfa-4d6e-924d-e11aeec45290", + "node_name" : "3AI-M551A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/RAPH" + }, + { + "id" : "3aea5003-4092-419d-a8bc-0f03ff9b853d", + "node_name" : "3AI-M551B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/RAPH" + }, + { + "id" : "299fed89-32ef-43f3-85bc-7d7d56d267ad", + "node_name" : "3AI-Y551A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/RAPH" + }, + { + "id" : "4ef3515d-f603-47b1-bd63-c6cc5460b5e3", + "node_name" : "3AI-Y551B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/RAPH" + }, + { + "id" : "0ae05796-6218-42aa-8b4d-47f8dec60bf2", + "node_name" : "WALL DESL.", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.", + "model_image": ["model/RBD Model/Image/BOL_SB_WD.jpg"] + }, + { + "id" : "d10a8a4f-3ee0-420d-b25c-811111a39ef7", + "node_name" : "FRONT WALL", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL", + "model_image": ["model/RBD Model/Image/BOL_SB_WD_FRONT.jpg"] + }, + { + "id" : "71b958a6-087c-4e9a-91ef-0305a7dbfb71", + "node_name" : "3AI-M501A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "cfbf8e1f-e15d-441b-b1ca-4e8884e2d060", + "node_name" : "3AI-M501B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "5599bc34-b1a2-4349-8d3f-b3d90b8c417e", + "node_name" : "3AI-M501C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "9b2583e2-57de-43b8-93f9-c7dbe5c22cca", + "node_name" : "3AI-M502A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "71538664-4b22-44ad-817b-9a0409af1d07", + "node_name" : "3AI-M502B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "58e6060a-462c-4891-bac2-d6032d12520d", + "node_name" : "3AI-M502C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "d4f5651e-1f23-4d0c-80f9-9f71d5bd2d99", + "node_name" : "3AI-M503A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "f97edb75-fd59-4542-a961-6c8521e05fb5", + "node_name" : "3AI-M503B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "1bc34dc9-a325-47c1-8b7e-fbb5da9173d3", + "node_name" : "3AI-M503C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "ec32c447-b0ab-4662-ab77-7ca35f4bcb4e", + "node_name" : "3AI-M504A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "01f60243-3743-45b8-8414-721cb0db479d", + "node_name" : "3AI-M504B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "025be4c4-d322-4a6d-9325-7fec5ceddeec", + "node_name" : "3AI-M504C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "25647265-6262-481b-9256-5b41bde095b2", + "node_name" : "3AI-M505A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "93095df5-7509-4a6d-8856-c0b6ae39ec5e", + "node_name" : "3AI-M505C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "2bf71b12-81d9-4f95-8438-c88d5f85839d", + "node_name" : "3AI-Y501A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "e12ac4ba-02b1-4e15-aea5-70054bd691fd", + "node_name" : "3AI-Y501B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "a9009589-ad21-42d3-91ef-61d111670d4e", + "node_name" : "3AI-Y501C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "31cf8777-1997-4629-b272-0100d726730f", + "node_name" : "3AI-Y502A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "b93fc6fd-3e50-4e1f-9d87-2676eb20d56a", + "node_name" : "3AI-Y502B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "a5abb4e9-15b3-4477-9167-c94c22bb7ab7", + "node_name" : "3AI-Y502C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "e0c4b56b-0e67-4e11-bdc6-2ac5024ca411", + "node_name" : "3AI-Y503A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "110e968c-f196-4b99-92d3-c17bb4b6644c", + "node_name" : "3AI-Y503B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "c3a302a4-76cc-480d-b576-624ea442c80b", + "node_name" : "3AI-Y503C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "4e4ab8a7-2f79-45a3-b315-bb4b6d5656e2", + "node_name" : "3AI-Y504A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "081ffe04-881c-434a-b2c4-bed26389eb90", + "node_name" : "3AI-Y504B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "af3680d3-a0bd-4594-b22f-4b2c048e0916", + "node_name" : "3AI-Y504C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "0e2fef12-5660-4306-907e-25dc99b57b30", + "node_name" : "3AI-Y505A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "c538834b-1e33-4221-b5f1-c9ed54cc9a33", + "node_name" : "3AI-Y505C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/FRONT WALL" + }, + { + "id" : "583ea99f-b318-4554-8bb1-e568de82bfbb", + "node_name" : "LEFT WALL", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL", + "model_image": ["model/RBD Model/Image/BOL_SB_WD_LEFT-1.jpg", "model/RBD Model/Image/BOL_SB_WD_LEFT-2.jpg"] + }, + { + "id" : "9e6d9af0-8f79-46c4-bc96-c9f35bac5404", + "node_name" : "3AI-M512B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "61b211e8-1dce-4884-af49-eed7a17249de", + "node_name" : "3AI-M513B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "92e972a4-243a-4418-9d17-031a11ddbe81", + "node_name" : "3AI-M514B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "b1b26617-94f9-4cd1-8740-96d9a23a6a77", + "node_name" : "3AI-M515A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "bd07710e-8bd2-4bb6-93ac-988cf0bc65f1", + "node_name" : "3AI-M515C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "945ea295-5a68-401d-acb5-cfc215b04844", + "node_name" : "3AI-M516A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "507d23af-7bbf-41b8-8877-4ebab7c69e6d", + "node_name" : "3AI-M516C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "d27122bb-d892-4fbb-8752-44f0fc82f8c6", + "node_name" : "3AI-M517A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "b1b46f00-9bfa-43a1-8074-e24a9764fe07", + "node_name" : "3AI-M517C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "8a3757f5-f573-4552-8441-66b34b008a98", + "node_name" : "3AI-M518A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "cde76acb-0384-4ea8-b81e-127d2b1d45e3", + "node_name" : "3AI-M518C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "702e2f42-85a1-4e53-a977-03acb01ac148", + "node_name" : "3AI-Y512B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "52838e35-df9e-4a4b-a336-4b5b4f837529", + "node_name" : "3AI-Y513B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "34b6d967-845d-4138-9804-33a530b6322d", + "node_name" : "3AI-Y514B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "f5b0127b-7fe9-4f7a-9d6f-3a64b52b69b9", + "node_name" : "3AI-Y515A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "6d8d802d-d6fd-4825-83ee-98ffd0c7f31f", + "node_name" : "3AI-Y515C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "4d157a0e-8be6-44de-85f6-59fe258c86a5", + "node_name" : "3AI-Y516A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "e4b84f80-278c-47fa-b6d9-186b594403ab", + "node_name" : "3AI-Y516C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "3a670b9f-0bd9-4c31-b54c-2bb3f78afeaa", + "node_name" : "3AI-Y517A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "663ff6bb-c2f5-4f63-982b-50f142b2be7f", + "node_name" : "3AI-Y517C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "e145cba5-3ccf-448d-b7bd-3eea4b475615", + "node_name" : "3AI-Y518A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "a13c28ba-bbe9-4395-8bbe-39cb70e0585a", + "node_name" : "3AI-Y518C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/LEFT WALL" + }, + { + "id" : "a3f9d98b-9df6-4973-b326-b06b93067fbb", + "node_name" : "REAR WALL", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL", + "model_image": ["model/RBD Model/Image/BOL_SB_WD_REAR-1.jpg", "model/RBD Model/Image/BOL_SB_WD_REAR-2.jpg"] + }, + { + "id" : "ce8bcb17-9454-4aa8-8bbb-8d26bd181da9", + "node_name" : "3AI-M508B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "d9380e57-87b2-410e-97cc-0d6c77e83f04", + "node_name" : "3AI-M509B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "629fbc41-fe69-4618-bf46-4bee15a37d95", + "node_name" : "3AI-M510A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "67cfc9ba-bdec-4164-b8d6-3059026dda19", + "node_name" : "3AI-M510B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "a1eabc07-3bab-40e8-9e69-92640c38dba9", + "node_name" : "3AI-M510C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "beef1c73-af08-43a8-85da-322a09abca54", + "node_name" : "3AI-M511A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "67f05859-1462-4486-99a5-04f1864a9306", + "node_name" : "3AI-M511B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "574dd81c-c42e-4077-8f52-2a71d6ee9fcd", + "node_name" : "3AI-M511C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "a2bb9308-6780-4560-ad1e-44faec60789d", + "node_name" : "3AI-M512A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "d0f7020d-ba59-4852-84d3-81e2d412eb45", + "node_name" : "3AI-M512C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "6df458bb-5b09-47b4-8721-514fc9e95fb5", + "node_name" : "3AI-M513A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "64afd5a0-992b-4465-ac9a-fb8e91d3c395", + "node_name" : "3AI-M513C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "007bc6c8-d061-4be5-8593-d9a27fab135b", + "node_name" : "3AI-M514A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "6e3724b4-e7ce-4e87-a246-d3c734eaafd5", + "node_name" : "3AI-M514C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "679ce9cd-2171-4380-9562-3dbc96342e70", + "node_name" : "3AI-Y508B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "5a5940bb-864b-4b2b-86c9-96b5756201b5", + "node_name" : "3AI-Y509B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "443b752e-2263-4918-99c2-e4ff3faa3622", + "node_name" : "3AI-Y510A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "ad07e663-14d6-4e74-975d-e6863ad407cb", + "node_name" : "3AI-Y510B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "49774d86-d99c-4718-adb6-e3e3aa5f30e2", + "node_name" : "3AI-Y510C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "000488a2-4828-42ff-a46a-65956f6c9ee7", + "node_name" : "3AI-Y511A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "953cd2cb-dd44-49e1-a4f9-3ce5dfba27f4", + "node_name" : "3AI-Y511B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "96fb18c7-7e48-448a-b61d-1aaef9e2fc0d", + "node_name" : "3AI-Y511C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "20a931c3-db59-4b1a-b000-2e6f662684f3", + "node_name" : "3AI-Y512A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "d81348aa-9fab-462d-9580-1a037c7aee08", + "node_name" : "3AI-Y512C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "f92ecd9f-592d-4545-b770-499110c807a8", + "node_name" : "3AI-Y513A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "f66343ea-5765-48bd-962b-f331a33d060a", + "node_name" : "3AI-Y513C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "28466d07-221d-4702-8202-89a89733c1f8", + "node_name" : "3AI-Y514A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "04de27c9-abe0-4970-b04a-84529d3f43db", + "node_name" : "3AI-Y514C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/REAR WALL" + }, + { + "id" : "0f435203-ce57-4b64-b5b2-6e5d8693d7cb", + "node_name" : "RIGHT WALL", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL", + "model_image": ["model/RBD Model/Image/BOL_SB_WD_RIGHT.jpg"] + }, + { + "id" : "a1dc3e92-7c32-4fab-b63c-2c91185832a5", + "node_name" : "3AI-M505B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "c41d3492-eb9e-48fa-95a0-3116c9e2c4d2", + "node_name" : "3AI-M506A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "d3374dac-da36-44d0-a7c2-b0efd1118e91", + "node_name" : "3AI-M506B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "50d87e4d-19a1-4efc-a538-df7d4276e6cb", + "node_name" : "3AI-M506C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "b041ddeb-9fc8-4a26-a7c8-8e0efd8fb1d9", + "node_name" : "3AI-M507A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "a508044c-f94a-4a0a-a6c1-44be97e05ae6", + "node_name" : "3AI-M507B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "f4f0ffd1-a95b-4128-9869-fbea4f80ba6b", + "node_name" : "3AI-M507C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "13b709ae-060c-4e49-80e5-184e922699f7", + "node_name" : "3AI-M508A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "a6dc0c36-000d-40d0-8ed8-c842f3410dfc", + "node_name" : "3AI-M508C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "37be3c58-b035-4d62-adab-bef020331408", + "node_name" : "3AI-M509A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "3b5145bc-08f3-4848-88c1-f51680a8c85e", + "node_name" : "3AI-M509C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "f16494e0-a8c5-4baf-8b6f-99f154d72b78", + "node_name" : "3AI-Y505B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "55bb292a-132f-405b-b140-4aae4918fd54", + "node_name" : "3AI-Y506A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "bc66ec14-31e5-4e24-aeb7-9c6b1cd803d0", + "node_name" : "3AI-Y506B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "decf6e78-0bed-480f-a641-b2544de1c4f6", + "node_name" : "3AI-Y506C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "42d98694-e452-47e8-8c63-a23889416049", + "node_name" : "3AI-Y507A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "92e862e6-27b9-4034-a856-899dec3fa788", + "node_name" : "3AI-Y507B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "82ed54a1-f9ac-426a-b79b-cb37ac8a5ea7", + "node_name" : "3AI-Y507C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "daff7246-6616-4c10-8839-00ab0f554fab", + "node_name" : "3AI-Y508A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "7297d5b9-a0b2-491b-9239-dbbc3539eb4d", + "node_name" : "3AI-Y508C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "80040b3a-daa3-4f00-8119-df4186a7f097", + "node_name" : "3AI-Y509A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "c0eb5200-0bc0-40e7-a061-71c8a74b2c81", + "node_name" : "3AI-Y509C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SOOTBLOWER\/WALL DESL.\/RIGHT WALL" + }, + { + "id" : "b15889ff-f3f5-4850-a85f-8a84c3d837e9", + "node_name" : "SUPERHEATER", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SUPERHEATER", + "model_image": ["model/RBD Model/Image/BOL_BSS.jpg"] + }, + { + "id" : "afa94f2f-4942-4f68-b32c-30e05a5a3872", + "node_name" : "3ATT-N501A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SUPERHEATER" + }, + { + "id" : "43270b45-8c15-4fb3-b0cb-6e7141672788", + "node_name" : "3ATT-N501B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SUPERHEATER" + }, + { + "id" : "01a4e95e-8cda-4223-9d61-8a3a8ef15654", + "node_name" : "3ATT-N502A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SUPERHEATER" + }, + { + "id" : "6cd3fc54-57f6-43a9-9d09-3e545faecf08", + "node_name" : "3ATT-N502B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SUPERHEATER" + }, + { + "id" : "eb1f9115-c68d-4c9e-adcb-7b30bf6f116c", + "node_name" : "3BSS-H611", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SUPERHEATER" + }, + { + "id" : "14bc2351-bd99-4323-bf79-8fe5df3d821a", + "node_name" : "3BSS-H621", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SUPERHEATER" + }, + { + "id" : "18940491-d6ee-4a07-8002-3e304fa57340", + "node_name" : "3BSS-H631", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/SUPERHEATER" + }, + { + "id" : "fce7a9cd-7821-4031-9006-e905b77f4d0b", + "node_name" : "VALVES (MS)", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/VALVES (MS)", + "model_image": ["model/RBD Model/Image/BOL_MS.jpg"] + }, + { + "id" : "b9a25229-b0b4-4f1f-ab9c-6b1f4e72c326", + "node_name" : "3MS-HV010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/VALVES (MS)" + }, + { + "id" : "d3cae186-25a0-4a90-87af-c735320ccebf", + "node_name" : "3MS-HV010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/VALVES (MS)" + }, + { + "id" : "2192e4ed-5ca2-4ae0-8177-26d381b075b5", + "node_name" : "3MS-HV011", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/VALVES (MS)" + }, + { + "id" : "48bdf0ec-4308-45be-a315-4f5c40d3e8bb", + "node_name" : "3MS-HV012", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/VALVES (MS)" + }, + { + "id" : "9fc45bbe-ddf9-4563-9cd3-29a01fbe37d5", + "node_name" : "3MS-HV013", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/VALVES (MS)" + }, + { + "id" : "da526736-53e2-4597-b61d-b468a63a6b00", + "node_name" : "3MS-HV014", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/VALVES (MS)" + }, + { + "id" : "4f7c114b-d038-48b0-adc8-1d83096b17ea", + "node_name" : "3MS-W001A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/VALVES (MS)" + }, + { + "id" : "075e909f-ef55-492d-9011-bf120b781cb1", + "node_name" : "3MS-W001B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/VALVES (MS)" + }, + { + "id" : "93706d6e-c102-42cc-ae71-59fe1846a715", + "node_name" : "3MS-W004", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Boiler\/VALVES (MS)" + }, + { + "id" : "3531ba38-0d8e-40d0-b931-40e628f99551", + "node_name" : "Condensate Water", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Condensate Water", + "model_image": ["model/RBD Model/Image/- BTG_COND -(1).jpg", "model/RBD Model/Image/- BTG_COND -(2).jpg"] + }, + { + "id" : "cafcb9da-7b62-4257-b6d9-3aa66214b6ae", + "node_name" : "3CAE-H010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Condensate Water" + }, + { + "id" : "60d1289a-c6e3-45a9-be76-fe213b28b980", + "node_name" : "3CAE-H010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Condensate Water" + }, + { + "id" : "69797097-3d49-4256-a41f-210e81452d89", + "node_name" : "3CAE-M010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Condensate Water" + }, + { + "id" : "6467f61c-530f-4922-8f74-ffee585c5582", + "node_name" : "3CAE-M010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Condensate Water" + }, + { + "id" : "4a19a172-25ce-4154-a936-e38eca551db5", + "node_name" : "3CAE-P010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Condensate Water" + }, + { + "id" : "918f6833-dd14-4ff2-8d1b-7c8ff9ff4f6b", + "node_name" : "3CAE-P010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Condensate Water" + }, + { + "id" : "83abe35c-aa14-4444-9a38-f215ce32ea25", + "node_name" : "3CO-FCV001", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Condensate Water" + }, + { + "id" : "f7e2a178-13eb-418e-b6dd-b14ed7f48a7a", + "node_name" : "3CO-H001", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Condensate Water" + }, + { + "id" : "51c7db56-375f-49a2-8c2d-408da2003b35", + "node_name" : "3CO-H010", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Condensate Water" + }, + { + "id" : "1b3ae8db-d9a5-4eca-ad0b-551504df989f", + "node_name" : "3CO-H020", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Condensate Water" + }, + { + "id" : "f2130780-622d-4b99-9657-48352f235543", + "node_name" : "3CO-H030", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Condensate Water" + }, + { + "id" : "e4c51487-e5ba-4838-86df-49c36ba9ccd8", + "node_name" : "3CO-M001A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Condensate Water" + }, + { + "id" : "c8737783-7828-43ff-bb3c-f45d7afef529", + "node_name" : "3CO-M001B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Condensate Water" + }, + { + "id" : "539973bf-805b-432d-9c1e-b4917b67c2e6", + "node_name" : "3CO-P001A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Condensate Water" + }, + { + "id" : "2752ebe9-d2f6-4c6f-899b-7ead0c4c28e6", + "node_name" : "3CO-P001B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Condensate Water" + }, + { + "id" : "93e10d29-b1a1-4f76-82e2-bc511c5fbd23", + "node_name" : "Cooling Water", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Cooling Water", + "model_image": ["model/RBD Model/Image/- BTG_CW -.jpg"] + }, + { + "id" : "f2bc4452-0f2b-495a-98b3-58c25965c9e9", + "node_name" : "3CCCW-H010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Cooling Water" + }, + { + "id" : "58e90ee2-2d8a-4d02-a659-8bec79fb7acd", + "node_name" : "3CCCW-H010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Cooling Water" + }, + { + "id" : "ae4ee221-6499-4305-9bf4-c740694a58b2", + "node_name" : "3CCCW-M010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Cooling Water" + }, + { + "id" : "b4af41ba-5a5b-431a-93d1-045354d5e3e9", + "node_name" : "3CCCW-M010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Cooling Water" + }, + { + "id" : "ed6f5a6c-535b-4053-a6f9-7f1a37c861b1", + "node_name" : "3CCCW-M090", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Cooling Water" + }, + { + "id" : "af863a49-0846-4e85-9626-1ca53a4209c2", + "node_name" : "3CCCW-P010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Cooling Water" + }, + { + "id" : "b5faed94-eeab-4a90-aae5-632ca8f5f663", + "node_name" : "3CCCW-P010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Cooling Water" + }, + { + "id" : "66e84f45-66d4-49c3-afb2-31eed7385fda", + "node_name" : "3CCCW-P090", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Cooling Water" + }, + { + "id" : "f6773041-1889-4360-af7a-18f39a0434f1", + "node_name" : "3CCCW-T010", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Cooling Water" + }, + { + "id" : "f5562909-24f8-4d90-9cee-af1aa2e6d522", + "node_name" : "Feedwater System", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System", + "model_image": ["model/RBD Model/Image/- BTG_FW-.jpg"] + }, + { + "id" : "fdbc3ca1-9f6a-47be-85d4-8fefa7f5d645", + "node_name" : "3FW-H040", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System" + }, + { + "id" : "58ae94cb-f33a-4922-b4ce-4b581b866769", + "node_name" : "3FW-H050", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System" + }, + { + "id" : "fcc51aaa-7ff0-40a8-bea9-161f36c3b431", + "node_name" : "3FW-H060", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System" + }, + { + "id" : "88f271c8-9467-470f-827e-e7926a57ffb9", + "node_name" : "3FW-H070", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System" + }, + { + "id" : "ad42e333-d307-4fd7-bb27-3f95707696d1", + "node_name" : "3LOT-T010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System" + }, + { + "id" : "8068675f-d097-4ae4-86e4-9662236a0c52", + "node_name" : "3LOT-T010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System" + }, + { + "id" : "8c9ec342-a6c2-4c36-afe9-4721174a96f9", + "node_name" : "BFT A", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A", + "model_image": ["model/RBD Model/Image/FW_BFT A-1.jpg", "model/RBD Model/Image/FW_BFT A-2.jpg"] + }, + { + "id" : "dc78efcc-fb44-44f0-a12a-7361c1956a60", + "node_name" : "3BFT-AU040A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "ca232bd5-3241-4650-aa0c-b7e2f62072eb", + "node_name" : "3BFT-ST010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "cdfbfeb9-4509-4c03-961d-77e8084a0b06", + "node_name" : "3FW-AU030A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "110ca692-49d5-4823-9bff-eb4e130d394b", + "node_name" : "3FW-H011A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "4412a027-fe1b-484c-b153-452e43f9b751", + "node_name" : "3FW-H012A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "105dc859-8c2c-4411-a991-369cf7d6af69", + "node_name" : "3FW-P010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "30262b40-4529-4c3b-8b02-45d316be68ff", + "node_name" : "3FW-P020A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "085c1db9-acf5-4245-b4ec-b0f975c7378b", + "node_name" : "3LOT-F120A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "f266ffab-5862-496c-9744-e1b58f27d3e4", + "node_name" : "3LOT-H010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "33f2643d-4055-4f12-9737-4c12fe8c78bc", + "node_name" : "3LOT-M010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "c09330ef-1b54-42c6-aa23-a8887264f6ba", + "node_name" : "3LOT-M020A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "8ba2a07d-f5a0-44ff-b0ed-ee6745e5b144", + "node_name" : "3LOT-M050A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "b178fada-8140-4844-9246-63ec457ce3a9", + "node_name" : "3LOT-M080A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "53547d20-eec3-47cf-a068-4159468dd65c", + "node_name" : "3LOT-M120A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "0038d670-8396-409d-a4aa-39539567e48c", + "node_name" : "3LOT-P010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "5978e395-b73b-4ac0-aa7f-50bd58f6d712", + "node_name" : "3LOT-P020A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "aec2d5bd-872f-4712-9a49-fb2a69439ee4", + "node_name" : "3LOT-P050A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "2b6bdf86-b77b-4054-9879-551aaa7f648b", + "node_name" : "3LOT-P080A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "63cbdf03-68a4-46df-8a07-b1a5794063c1", + "node_name" : "3LOT-PF080A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "0a23e1a2-0e74-4888-bd3c-4635fefc2826", + "node_name" : "3LOT-S010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "38223945-0913-4a8f-92f6-6fab17b47294", + "node_name" : "3LOT-S020A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "d47ff6f8-a4c8-4103-9d05-9d4f474d0f5c", + "node_name" : "3LOT-T090A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "7a0dae43-10c4-410a-993e-8d404f732137", + "node_name" : "3LOT-T100A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT A" + }, + { + "id" : "d7ca628e-14ae-46bd-92fd-c1cfb715543b", + "node_name" : "BFT B", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B", + "model_image": ["model/RBD Model/Image/FW_BFT B-1.jpg", "model/RBD Model/Image/FW_BFT B-2.jpg"] + }, + { + "id" : "21e67c42-97d2-4eec-b80a-d69abc0c18f6", + "node_name" : "3BFT-AU040B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "3752f9ff-99d5-4511-9205-8f1568c5c7cd", + "node_name" : "3BFT-ST010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "6387de69-d5fc-4f3f-abe5-80701bf8145a", + "node_name" : "3FW-AU030B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "d15e47c8-ac11-44ed-acc8-abf4287a2ae4", + "node_name" : "3FW-H011B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "6ea4d287-024d-48f3-913b-c4a4af3156b6", + "node_name" : "3FW-H012B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "873c47e5-c24c-44a7-ad64-b988a74a9c5a", + "node_name" : "3FW-P010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "c8a51ced-150c-479a-92ad-8a396f81acca", + "node_name" : "3FW-P020B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "c3878ff7-fe47-4972-a284-a0f5b4111ec0", + "node_name" : "3LOT-F120B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "a2a3ac2e-996b-491a-a4b9-59ede0030a7a", + "node_name" : "3LOT-H010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "7f04e2f1-d56a-4198-aefa-8fd0a6537090", + "node_name" : "3LOT-M010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "9dd1d759-8ff3-4f3e-801a-6972d0c16577", + "node_name" : "3LOT-M020B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "76acf1c7-b035-40d0-852d-97dfc26db968", + "node_name" : "3LOT-M050B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "bf7370ec-f098-4201-af02-c089c1bcc2b1", + "node_name" : "3LOT-M080B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "00856ce3-1fb1-47cd-808f-167d97d822bb", + "node_name" : "3LOT-M120B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "75b27346-26b2-4d6b-b6d4-360cc521e0ac", + "node_name" : "3LOT-P010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "7df93f53-4dfc-4ea1-880b-0033423beba8", + "node_name" : "3LOT-P020B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "27afc445-3f62-4a32-87d7-bb930cfa4daa", + "node_name" : "3LOT-P050B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "1fdc74a3-6ba2-4857-8d59-febab45293a6", + "node_name" : "3LOT-P080B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "9fabe951-ffd4-4dad-94af-fa47bbdd858c", + "node_name" : "3LOT-PF080B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "1e9d32d3-e292-427f-a8f6-510a96777420", + "node_name" : "3LOT-S010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "3fd039a9-ebe6-44fc-ab44-63ab91f41e5d", + "node_name" : "3LOT-S020B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "f51336aa-74f4-4ae4-be8b-a1c47328ea9a", + "node_name" : "3LOT-T090B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "014b6cb8-28f6-42c0-8442-3e52d14ff986", + "node_name" : "3LOT-T100B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/BFT B" + }, + { + "id" : "dd4e60d9-477b-41d5-b485-1ec33814c6bf", + "node_name" : "MBFP", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/MBFP", + "model_image": ["model/RBD Model/Image/FW_MBFP-1.jpg", "model/RBD Model/Image/FW_MBFP-2.jpg"] + }, + { + "id" : "d11646ad-3969-490b-81f7-971c76515796", + "node_name" : "3FW-AU330", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/MBFP" + }, + { + "id" : "141e5f12-6048-49d3-b8d3-0d5d5f11e052", + "node_name" : "3FW-H301", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/MBFP" + }, + { + "id" : "34e8c6be-f389-4cef-92bd-099841a563fb", + "node_name" : "3FW-H302", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/MBFP" + }, + { + "id" : "f756ebb8-b845-4bc4-8967-a003d7da419c", + "node_name" : "3FW-M320", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/MBFP" + }, + { + "id" : "d3725ec8-682a-4549-b2dc-29e80ece23e1", + "node_name" : "3FW-M321", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/MBFP" + }, + { + "id" : "78492563-b222-4b56-a193-f15ed4b3be20", + "node_name" : "3FW-P300", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/MBFP" + }, + { + "id" : "0cfc7f33-41e8-44f5-9839-32d8f20378dc", + "node_name" : "3FW-P310", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/MBFP" + }, + { + "id" : "0503f52c-ce6b-4da2-9c4d-27f23c0416e0", + "node_name" : "3LOM-H310", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/MBFP" + }, + { + "id" : "78757b6e-aedf-4ea4-ac78-e9507431376c", + "node_name" : "3LOM-H370", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/MBFP" + }, + { + "id" : "c08339b5-45be-422f-9278-dccb4f5eb759", + "node_name" : "3LOM-M330", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/MBFP" + }, + { + "id" : "35c5f7ec-123b-466a-a088-39dee3bc7c23", + "node_name" : "3LOM-P310", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/MBFP" + }, + { + "id" : "5a8ed123-3235-49ef-893a-15c81bd939c7", + "node_name" : "3LOM-P330", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/MBFP" + }, + { + "id" : "8bd99e41-f29c-41ab-aa82-53ef634cd03d", + "node_name" : "3LOM-P370", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Feedwater System\/MBFP" + }, + { + "id" : "ed5b3d18-b3e8-4e4d-8944-c14691a608f3", + "node_name" : "Generator", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator", + "model_image": ["model/RBD Model/Image/- BTG_GEN -.jpg"] + }, + { + "id" : "b6026757-ce2a-4206-9bf3-d720f654a547", + "node_name" : "3GEN-GM001", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator" + }, + { + "id" : "58406bef-41da-4b7d-8491-e70d635d276b", + "node_name" : "GEN", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN", + "model_image": ["model/RBD Model/Image/GEN_GEN.jpg"] + }, + { + "id" : "a85edfba-982f-42c5-a092-2a21eed60eda", + "node_name" : "3GEN-EXC004", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN" + }, + { + "id" : "792e7256-038a-49db-a901-e865952ef666", + "node_name" : "3GEN-EXC005", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN" + }, + { + "id" : "ae191b51-dfce-45bb-b795-9fb751b8da10", + "node_name" : "3GEN-EXC008", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN" + }, + { + "id" : "58f16c13-5973-4ee8-9624-3e4ca1b6f9a6", + "node_name" : "3GEN-EXC009", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN" + }, + { + "id" : "b88c077f-7395-4306-a5fb-4f64073eea24", + "node_name" : "3GEN-GM001", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator" + }, + { + "id" : "c2040416-32fa-4dee-a626-985e7d055f01", + "node_name" : "3GEN-Z012", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN" + }, + { + "id" : "694df638-38ff-428e-ac02-aa6d4bc73a29", + "node_name" : "GMCB COOLING FAN", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN\/GMCB COOLING FAN", + "model_image": ["model/RBD Model/Image/GEN_GEN_GMCB.jpg"] + }, + { + "id" : "a497f23c-9cb8-4f14-a3ee-03ae50f7f7bf", + "node_name" : "3GEN-M201A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN\/GMCB COOLING FAN" + }, + { + "id" : "a8571abd-8d45-451e-a49b-50b2f4a342ca", + "node_name" : "3GEN-M202A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN\/GMCB COOLING FAN" + }, + { + "id" : "fc8d8ec6-04e9-4f40-b517-d530cd8475ab", + "node_name" : "3GEN-M203A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN\/GMCB COOLING FAN" + }, + { + "id" : "59797f93-c366-4d7c-b2b4-07e6729e7c00", + "node_name" : "3GEN-M204A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN\/GMCB COOLING FAN" + }, + { + "id" : "70c7bb91-b6e6-40f3-b50f-32ce2188ab11", + "node_name" : "3GEN-M205A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN\/GMCB COOLING FAN" + }, + { + "id" : "c3d4f10c-ac4c-47ee-b8cc-e7415abe8004", + "node_name" : "3GEN-M206A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN\/GMCB COOLING FAN" + }, + { + "id" : "9c3d6b7a-bb65-4db2-84c8-97c19504ba92", + "node_name" : "THYRISTOR COOLING FAN", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN\/THYRISTOR COOLING FAN", + "model_image": ["model/RBD Model/Image/GEN_GEN_THRS.jpg"] + }, + { + "id" : "f1c426be-0b17-444f-917d-ecf782b06adc", + "node_name" : "3GEN-M101A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN\/THYRISTOR COOLING FAN" + }, + { + "id" : "e1c523a4-ef8e-41aa-a720-7a9aa6af140e", + "node_name" : "3GEN-M101B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN\/THYRISTOR COOLING FAN" + }, + { + "id" : "3f662f7e-c395-4da5-888e-9405a02edcae", + "node_name" : "3GEN-M102A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN\/THYRISTOR COOLING FAN" + }, + { + "id" : "7f488ae2-a20b-4d61-9e40-20cec4dfbfbc", + "node_name" : "3GEN-M102B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN\/THYRISTOR COOLING FAN" + }, + { + "id" : "a75ce6d5-48d3-45b8-97ea-aef607212030", + "node_name" : "3GEN-M103A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN\/THYRISTOR COOLING FAN" + }, + { + "id" : "c6081474-9230-4cab-be88-c21521e31122", + "node_name" : "3GEN-M103B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GEN\/THYRISTOR COOLING FAN" + }, + { + "id" : "b3ccff58-0a3e-41fe-b0c4-b5b6da625f9d", + "node_name" : "GMC", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GMC", + "model_image": ["model/RBD Model/Image/GEN_GMC.jpg"] + }, + { + "id" : "596f80fb-0909-439c-8150-a8400565d54c", + "node_name" : "3GMC-Z001", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GMC" + }, + { + "id" : "1f43200a-52a6-45ce-b02a-aa82a3847025", + "node_name" : "3GMC-Z002", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GMC" + }, + { + "id" : "16ea3214-4ed7-4f81-a16a-77f435281448", + "node_name" : "3GMC-Z003", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GMC" + }, + { + "id" : "1c0474e3-6c6d-496d-a9e3-c78727b3b8ca", + "node_name" : "RCFM MTR", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GMC\/RCFM MTR", + "model_image": ["model/RBD Model/Image/GEN_GMC_RCFM.jpg"] + }, + { + "id" : "7bc952df-1b0d-4f2b-8fb5-fe7b67385a9a", + "node_name" : "3GEN-M211A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GMC\/RCFM MTR" + }, + { + "id" : "08bb920d-d45e-425a-821d-42074a26f611", + "node_name" : "3GEN-M211B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GMC\/RCFM MTR" + }, + { + "id" : "c01644f3-1c99-4a45-8859-ebd64aae0a9a", + "node_name" : "3GEN-M211C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GMC\/RCFM MTR" + }, + { + "id" : "225b1b73-7465-4209-98c4-d9c442a7854d", + "node_name" : "3GEN-M212A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GMC\/RCFM MTR" + }, + { + "id" : "ad6b714a-b63e-41b2-ac4d-797514d5ad28", + "node_name" : "3GEN-M212B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GMC\/RCFM MTR" + }, + { + "id" : "cbf6a6f9-fa83-4457-a623-b7c0011fb4fa", + "node_name" : "3GEN-M212C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GMC\/RCFM MTR" + }, + { + "id" : "9bc5c98d-10eb-49b5-bdfc-4d6adf69b2ad", + "node_name" : "3GEN-M213A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GMC\/RCFM MTR" + }, + { + "id" : "2b808a66-8681-48ea-b316-6322b3a0579f", + "node_name" : "3GEN-M213B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GMC\/RCFM MTR" + }, + { + "id" : "594cede4-73c8-4610-9269-5b075a802470", + "node_name" : "3GEN-M213C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GMC\/RCFM MTR" + }, + { + "id" : "9aecee37-2774-44b2-bb4a-82f8890fe220", + "node_name" : "3GEN-M214A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GMC\/RCFM MTR" + }, + { + "id" : "39cb6c9b-92dd-41eb-9084-7d91cbfcf123", + "node_name" : "3GEN-M214B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GMC\/RCFM MTR" + }, + { + "id" : "98862de8-7f9e-4fe4-8a88-afa93284ef81", + "node_name" : "3GEN-M214C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/GMC\/RCFM MTR" + }, + { + "id" : "c71f91c5-32a9-44d6-81f1-74e55963b943", + "node_name" : "SCW", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/SCW", + "model_image": ["model/RBD Model/Image/GEN_SCW.jpg"] + }, + { + "id" : "930951f5-cc5d-4891-9ed3-fe1eac978505", + "node_name" : "3SCW-H023A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/SCW" + }, + { + "id" : "78517d6a-05c6-4e4b-8ca8-5e216a5fae89", + "node_name" : "3SCW-H023B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/SCW" + }, + { + "id" : "72225542-d668-454b-bc0b-464675151f35", + "node_name" : "3SCW-M001A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/SCW" + }, + { + "id" : "fb34f994-4dcd-4af5-8431-5ab07f6ef528", + "node_name" : "3SCW-M001B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/SCW" + }, + { + "id" : "394fb82d-e1b5-4605-a9ce-a45c9231f23e", + "node_name" : "3SCW-P001A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/SCW" + }, + { + "id" : "16803127-8ee8-466c-b492-c0a245792da3", + "node_name" : "3SCW-P001B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/SCW" + }, + { + "id" : "98397572-bfb7-4175-9874-f801c00ab42e", + "node_name" : "3SCW-PF001", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/SCW" + }, + { + "id" : "1d063d61-c1b0-478e-9774-e4089daa3f96", + "node_name" : "SEAL (SO)", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/SEAL (SO)", + "model_image": ["model/RBD Model/Image/GEN_SO.jpg"] + }, + { + "id" : "676a7990-93db-41f8-bbc0-908da5a3a64a", + "node_name" : "3SO-M001", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/SEAL (SO)" + }, + { + "id" : "5e94dff7-e2ad-4616-91c1-6ed2bd9dab43", + "node_name" : "3SO-M002", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/SEAL (SO)" + }, + { + "id" : "acf1a7b4-b412-45c1-b851-5baecfdec305", + "node_name" : "3SO-P001", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/SEAL (SO)" + }, + { + "id" : "2145f8c8-9189-46f9-b93e-0b3048d6b9aa", + "node_name" : "3SO-P002", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/SEAL (SO)" + }, + { + "id" : "f28535d9-2c2c-48e2-8f75-ef892cce4b47", + "node_name" : "3SO-T113", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/SEAL (SO)" + }, + { + "id" : "5175bf6f-6d4c-4dff-b43a-3c255fb63017", + "node_name" : "3SO-T114", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/SEAL (SO)" + }, + { + "id" : "6100511e-c339-4ef1-8d33-a2378ad4af4e", + "node_name" : "3SO-T116", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/SEAL (SO)" + }, + { + "id" : "a72b1bbc-fd40-475b-b3f1-8e213bdfff11", + "node_name" : "TR", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR", + "model_image": ["model/RBD Model/Image/GEN_TR.jpg"] + }, + { + "id" : "8ebbfa55-ffc1-4161-8e72-4334659d125b", + "node_name" : "3TR-F301", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "5a1aebe5-a953-41b7-9d79-1f0de0544f72", + "node_name" : "3TR-F302", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "a1f721b1-69e5-4969-92bd-dce2a6dfe47c", + "node_name" : "3TR-F303", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "74596cff-fe5d-4006-9026-16b54c2a115f", + "node_name" : "3TR-F304", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "9c6e3b26-3dcf-42cc-a4e4-a96efd9ecab3", + "node_name" : "3TR-F305", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "29163a75-b915-4688-8160-7f5ec3699232", + "node_name" : "3TR-F306", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "57f6c2f8-4244-4596-8968-265158e7d7e6", + "node_name" : "3TR-F307", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "8429865e-1787-4eec-9212-298c459ef9f7", + "node_name" : "3TR-F308", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "f7747e2d-59b2-43f7-bcbb-f8270c77d423", + "node_name" : "3TR-F309", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "c8377783-337b-47d9-9fdb-91085bc87de5", + "node_name" : "3TR-F310", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "083c0049-9deb-49bf-8c98-c68e6fbfedd2", + "node_name" : "3TR-F311", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "ade761db-cf30-4515-b3d1-ba02acbd21c2", + "node_name" : "3TR-F312", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "9c58b26a-d666-4338-93aa-9a3654705dc7", + "node_name" : "3TR-F313", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "7ee68c3b-546b-4c82-b098-595c571bce9c", + "node_name" : "3TR-F314", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "e590e7cd-981d-4103-a900-a88a4a414d68", + "node_name" : "3TR-TF001", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "c87034bd-9c19-45cc-9ecd-0cf0809376a6", + "node_name" : "3TR-TF002A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "b59d7500-4f48-44d9-9a96-022fc39a76d9", + "node_name" : "3TR-TF002B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "ca3fedef-039b-4221-8c3d-10cc624ccedb", + "node_name" : "3TR-TF005", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "987c27fc-5a39-45da-b4f4-9c379386c2e1", + "node_name" : "3TR-Z003A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "dfd86dff-e561-4b78-8b0f-324ca6c781d3", + "node_name" : "3TR-Z003B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Generator\/TR" + }, + { + "id" : "41d58031-2feb-49e4-a678-e5a80386716d", + "node_name" : "KLH", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH" + }, + { + "id" : "a8eb8489-89de-4a72-a8a7-3f3e4fe6f978", + "node_name" : "ABS", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS", + "model_image": ["model/RBD Model/Image/KLH_ABS-1.jpg", "model/RBD Model/Image/KLH_ABS-2.jpg"] + }, + { + "id" : "c5693d17-c745-4ebc-87f6-4c7ed4720279", + "node_name" : "3ABS-ABT851", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "30ca51bb-4e55-4fd6-97be-652b093d0dd7", + "node_name" : "3ABS-AG879A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "f03d49b6-e585-412e-96b7-f3a0e0090077", + "node_name" : "3ABS-AG879B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "3b028087-bcdb-4e72-bbc3-7b2494b29d6b", + "node_name" : "3ABS-AG879C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "d563e8f0-598d-4397-857c-db66618bd1a1", + "node_name" : "3ABS-AG879D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "2f2b3950-c3ef-4abd-aaea-458ff36188be", + "node_name" : "3ABS-AG879E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "3c119c42-2958-4c51-8e03-5ab9d01a54ef", + "node_name" : "3ABS-AG931", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "fcf513f5-4a64-4fc1-874c-ea8203cd1d8e", + "node_name" : "3ABS-M879A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "153a4e2e-50b1-48e3-9689-d403d20568e5", + "node_name" : "3ABS-M879B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "8d6c6c9d-3a2c-44c5-b612-2fd9cfeedbcd", + "node_name" : "3ABS-M879C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "f00af480-ce88-4ee6-a535-8d33d0dde74c", + "node_name" : "3ABS-M879D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "8c03d00c-410b-4c7f-ad15-2af559dca6fc", + "node_name" : "3ABS-M879E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "eb2d44ec-4e9a-48f5-ac5a-ce39f382d4ec", + "node_name" : "3ABS-M888A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "2e3f455e-f2ab-4f2c-a67f-f5d64d185ef7", + "node_name" : "3ABS-M888B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "46ae0109-d58a-4265-a671-e1833b96b291", + "node_name" : "3ABS-M888C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "97666ba7-eb50-44cc-b143-77a809fb5d31", + "node_name" : "3ABS-M910A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "e311b53e-0f69-46b7-be62-b26bc0d62f1e", + "node_name" : "3ABS-M910B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "04a7c7ea-c533-4165-bfff-63b5b8452315", + "node_name" : "3ABS-M931", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "85b995c3-1687-4961-8695-0da1d9e55a0e", + "node_name" : "3ABS-M932A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "b01bd7d7-0da7-4c47-90f1-7bdb4b846c98", + "node_name" : "3ABS-M932B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "3259dcfd-783f-4b23-85c6-a6b3299c51a4", + "node_name" : "3ABS-P888A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "d4b77e3a-7e70-4ae4-a199-797bc488c6cf", + "node_name" : "3ABS-P888B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "dd9a7b86-2432-49b0-9344-cd784c808ad6", + "node_name" : "3ABS-P888C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "5352556b-8581-4ab2-a43e-c6ea9cca3f54", + "node_name" : "3ABS-P910A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "582e9391-f837-4b2d-a0f2-ad229598d9ae", + "node_name" : "3ABS-P910B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "23fc3cc1-c6ef-4775-8b1b-b205c09c233e", + "node_name" : "3ABS-P932A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "431d6f11-d677-44a2-8106-d872b7a8d0de", + "node_name" : "3ABS-P932B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "cb67b98c-b5d3-4d7e-a2f5-d88ffe87bf23", + "node_name" : "3ABS-T931", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/KLH\/ABS" + }, + { + "id" : "58c6eb1c-9d94-47a4-9ea5-0fbb62af9497", + "node_name" : "Plant Control", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control", + "model_image": ["model/RBD Model/Image/- BTG_PC -(1).jpg", "model/RBD Model/Image/- BTG_PC -(2).jpg"] + }, + { + "id" : "7fc03310-6ff9-42cc-a462-7bd40e92d7d9", + "node_name" : "3DCS-CAB001A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "a1874cf0-ede9-4a5e-8837-759983e8cb7a", + "node_name" : "3DCS-CAB001B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "a16374fd-7660-426f-8b03-d07dbbd7a938", + "node_name" : "3DCS-CAB002A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "21bce49e-35c6-4586-80d4-5f1a07fc24c7", + "node_name" : "3DCS-CAB002B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "2c818c68-9f80-44f0-b0ac-8a01a33a5bd5", + "node_name" : "3DCS-CAB003A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "08a96b30-29bf-4225-9ae8-7f66cc11129c", + "node_name" : "3DCS-CAB003B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "a0490ed4-73fc-4be9-870d-acd7048afabe", + "node_name" : "3DCS-CAB004A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "fbd320ce-ed85-4383-b13c-94de7f050f87", + "node_name" : "3DCS-CAB004B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "463019ac-7b44-43d4-82ee-7c5f768903c6", + "node_name" : "3DCS-CAB005A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "5ba712c9-bdf0-4a00-8c6a-0d40f24051b8", + "node_name" : "3DCS-CAB005B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "3f933750-8497-4716-8cad-c18db995369a", + "node_name" : "3DCS-CAB005C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "51ddf160-16e4-4366-b3e4-6b2cad3412a2", + "node_name" : "3DCS-CAB006A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "b46b6598-d655-41f1-8835-7de6d76c25c0", + "node_name" : "3DCS-CAB006B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "e080edd6-35f2-4dc2-9dfa-b64ce60a2dd3", + "node_name" : "3DCS-CAB007", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "ba4811f9-778d-4334-a53c-1b05db269317", + "node_name" : "3DCS-CAB008", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "cfb30f5e-fdfc-4a29-8c26-9be7beee9224", + "node_name" : "3DCS-CAB009A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "0c96ae3b-2402-41ea-8432-e1b293b16a95", + "node_name" : "3DCS-CAB009B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "57a61e54-fccc-4358-aa94-4d0f9e65395b", + "node_name" : "3DCS-CAB010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "f78dbda4-b6eb-47d8-8e64-42ab8a58f9db", + "node_name" : "3DCS-CAB010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "7443e646-7382-4a93-8018-d792dd8ee5d1", + "node_name" : "3DCS-CAB011A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "66c687ec-b307-4d50-80f3-a1515d73fd62", + "node_name" : "3DCS-CAB011B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "e91ad199-7b8c-43eb-9a40-5f3d16887246", + "node_name" : "3DCS-CAB012", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "45112402-fc51-4302-acf0-edfc43d0888d", + "node_name" : "3DCS-CAB013A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "f5161f86-d8ee-4e14-a666-59827e106bb3", + "node_name" : "3DCS-CAB013B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "63519e59-0cf3-4117-8aad-ccf5d4413864", + "node_name" : "3DCS-CAB014A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "e51833a8-b7ab-4e20-8611-19de50e5eaf2", + "node_name" : "3DCS-CAB014B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "087ffc5d-5db7-4a30-9765-cf91e47f0360", + "node_name" : "3DCS-CAB015", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "76f26cb2-41ba-414a-a101-1b7b799195c9", + "node_name" : "3DCS-CO001", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "fe45ffde-0e88-4b0d-81ee-2b171df1a52a", + "node_name" : "3DCS-CO002A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "9728190c-4eac-4c74-9aba-c3bb1abcb12e", + "node_name" : "3DCS-CO002B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "7d7255cd-333d-490a-bcff-cdad4b23fdc1", + "node_name" : "3DCS-CO003A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "4a8f61be-bdc5-409b-becf-288f96f9e5e8", + "node_name" : "3DCS-CO003B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "a42cd0bf-1bc0-4967-9f52-1a43103212f2", + "node_name" : "3DCS-CO003C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "2eeb539d-f8ec-484e-aa6c-02d0be1f795e", + "node_name" : "3DCS-CO003D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "b4efa4ba-046a-4706-a7bc-5bf211719a0f", + "node_name" : "3DCS-CO004", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "6df6084a-1a18-40c9-97b8-35af85884620", + "node_name" : "3DCS-CO005A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "13bcaeb5-6680-4d7a-9cdb-d3a08ff68a38", + "node_name" : "3DCS-CO005B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "042fd8f4-7dce-41af-ab6d-4bbe6f2b708d", + "node_name" : "3DCS-CO005C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "9f97b04b-a2c3-4009-9bd4-441022f656be", + "node_name" : "3DCS-CO006A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "52352725-ac30-4160-8e3a-b48d98a02c0e", + "node_name" : "3DCS-CO006B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "03e9a81e-6407-4746-9f7d-f05ff0f605e2", + "node_name" : "3DCS-CO006C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "d5c3476c-b8b7-47de-bb3f-22d2c09463fb", + "node_name" : "3DCS-CO007", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "b1576692-a737-49d2-9dc5-42876c1473e4", + "node_name" : "3DCS-CO008", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Plant Control" + }, + { + "id" : "d0fd8056-e371-4d6a-999c-a50cb3fd3de6", + "node_name" : "SAC-IAC", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SAC-IAC", + "model_image": ["model/RBD Model/Image/- BTG_SAC -.jpg"] + }, + { + "id" : "0765f22b-608e-479d-83dc-3bdfba11bd01", + "node_name" : "00ACR-C001A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SAC-IAC" + }, + { + "id" : "33adb652-c114-436d-b361-0cba7962f810", + "node_name" : "00ACR-C001B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SAC-IAC" + }, + { + "id" : "59f8b9c0-a4ed-4754-a820-0ddb17e33c32", + "node_name" : "00ACR-C001C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SAC-IAC" + }, + { + "id" : "e13ba3cf-d773-4687-96b0-12c94be1b79f", + "node_name" : "00ACR-C001D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SAC-IAC" + }, + { + "id" : "d6cccff4-1568-400f-a73c-701feed41a05", + "node_name" : "00ACR-M001A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SAC-IAC" + }, + { + "id" : "ea9f064f-7890-4c2f-af5d-cead79b36017", + "node_name" : "00ACR-M001B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SAC-IAC" + }, + { + "id" : "398684d8-82d4-43fd-b23a-15a19516a671", + "node_name" : "00ACR-M001C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SAC-IAC" + }, + { + "id" : "b704e698-510d-47b4-8d85-27dcd9b8c3a7", + "node_name" : "00ACR-M001D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SAC-IAC" + }, + { + "id" : "95ac682c-5e51-42a1-9db3-f56fed198ae4", + "node_name" : "00IA-A001A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SAC-IAC" + }, + { + "id" : "53fdf2b6-58eb-44e3-8586-be4124ec9210", + "node_name" : "00IA-A001B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SAC-IAC" + }, + { + "id" : "7798607c-34d4-43a9-b3f6-0dac28c5f337", + "node_name" : "3IA-T005", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SAC-IAC" + }, + { + "id" : "0c43e14d-40d9-455a-8e33-f38acf466701", + "node_name" : "SCR", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SCR", + "model_image": ["model/RBD Model/Image/- BTG_SCR -.jpg"] + }, + { + "id" : "83034309-ef3b-4bd1-b7ca-2e1186151370", + "node_name" : "00SCR-Z001", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SCR" + }, + { + "id" : "d0ecc066-5ed0-42da-a37e-1349b051b0a3", + "node_name" : "00SCR-Z015", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SCR" + }, + { + "id" : "92c2e44c-d42e-4ff6-a378-561de2bb5771", + "node_name" : "SPS ", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS ", + "model_image": ["model/RBD Model/Image/- BTG_SPS -.jpg"] + }, + { + "id" : "f61b3f90-e1c8-4999-bb08-6ef406dce85b", + "node_name" : "APC", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC", + "model_image": ["model/RBD Model/Image/SPS_APC-1.jpg", "model/RBD Model/Image/SPS_APC-2.jpg", "model/RBD Model/Image/SPS_APC-3.jpg", "model/RBD Model/Image/SPS_APC-4.jpg"] + }, + { + "id" : "d2f3a7dd-90d7-4fa3-b7dc-3656053ddafd", + "node_name" : "3APC-CB811", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "fecf17d6-65b9-4b87-9c21-a036f2e6ad2a", + "node_name" : "3APC-CB812", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "c48d7ae9-7d92-4273-9929-8e24a2c88f54", + "node_name" : "3APC-CB813", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "7e423bea-171a-42fb-997c-ac96094990d2", + "node_name" : "3APC-CB814", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "66002d87-bfd8-44ef-bdee-f33410d7cb10", + "node_name" : "3APC-LV001A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "0eb706eb-dc2d-40a4-9a6d-8bf7be8ae055", + "node_name" : "3APC-LV001B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "0debcf99-aa13-4da3-adc8-32f20cd9e9c0", + "node_name" : "3APC-LV501A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "69cc574a-7f79-4c4f-bef3-9328891d30ac", + "node_name" : "3APC-LV501B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "a379bb77-3438-4561-ac16-1fc4608c9ea5", + "node_name" : "3APC-LV810A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "99b89d20-e55e-4e80-96d0-2f6ff86331cb", + "node_name" : "3APC-LV810B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "b2e20ff9-9b47-4a28-990d-c6ed72c2d706", + "node_name" : "3APC-LV811P1", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "13e1a744-6b74-4ca8-a6cf-29053cd69de3", + "node_name" : "3APC-LV811P2", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "3e491212-b031-457b-9301-e8647836098d", + "node_name" : "3APC-LV811P21", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "ef2517b9-e25e-4625-a2e0-85003e4a745d", + "node_name" : "3APC-LV811P3", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "46640d95-3485-4023-a34c-16fb5f823d82", + "node_name" : "3APC-LV811P4", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "c6703287-e75a-4e4c-841c-f082ec6ba1cb", + "node_name" : "3APC-LV811P5", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "a531d774-b30d-4af0-802d-fd67a38cfe0f", + "node_name" : "3APC-LV851", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "efe40057-fa53-497e-8245-187a3a86e196", + "node_name" : "3APC-MCC002", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "8d68ccf0-c1a3-4197-93ff-1ae697dff38d", + "node_name" : "3APC-MCC501A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "11dea2a9-4b31-4997-a8e8-3631b2effbd4", + "node_name" : "3APC-MCC501B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "bcbc5d1b-1467-41f8-8a83-1e081b74f414", + "node_name" : "3APC-MCC502A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "8ac3de28-30e7-4d58-87cf-050f3bad1f1c", + "node_name" : "3APC-MCC502B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "fb5615f2-b7d6-413b-99e6-ce0d9767d52b", + "node_name" : "3APC-MCC502C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "f83458e8-88bd-4365-960c-790601dd062c", + "node_name" : "3APC-MCC502D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "f82cc189-b9fe-42f6-b64d-6fad71cacfc1", + "node_name" : "3APC-MCC502E", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "f850a697-5785-42fa-9a12-70747f256273", + "node_name" : "3APC-MCC502F", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "e1e0aa31-6fd8-43d2-b29f-484610a21bbb", + "node_name" : "3APC-MCC510", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "a707df34-7d8a-4595-b2a6-1e5fea539dee", + "node_name" : "3APC-MCC851", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "ef1b2dff-d7c0-48ea-8f2d-58ef8840ac78", + "node_name" : "3APC-PD501A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "0101d3c6-ef45-436c-a90e-810ca5556edb", + "node_name" : "3APC-PD501B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "9c2d5615-f072-4eed-b3f4-52fba39975fa", + "node_name" : "3APC-PD901", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "3b328d4b-a534-420f-8ceb-277bd37164e7", + "node_name" : "3APC-PD902", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "73c4aace-ece7-45bb-b325-515859289c64", + "node_name" : "3APC-PD921", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "6900f62f-5e89-4080-9fa7-6fef0977fb35", + "node_name" : "3APC-PD922", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "73f20668-7cf9-4201-8c2a-1f21e86d3ef1", + "node_name" : "3APC-TF001A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "01e2ba65-6f73-4c13-9738-a225e6634c75", + "node_name" : "3APC-TF001B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "a5152c8f-b402-4395-a54b-e61ca64bed40", + "node_name" : "3APC-TF501A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "e4899f7d-70cb-479a-bc0f-8f919ae00255", + "node_name" : "3APC-TF501B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "cacff062-e8b4-440c-a711-3094cff30331", + "node_name" : "3APC-TF502A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "18c7f2fe-a947-4c52-a750-590855b06c60", + "node_name" : "3APC-TF502B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "a763cf63-ea47-4525-9968-4e57e1c1b535", + "node_name" : "3APC-TF810A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "9e5c9d8c-6404-493a-bce2-d63b16c2e09f", + "node_name" : "3APC-TF810B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "65941848-a054-453b-827c-46d673eb20d5", + "node_name" : "3APC-TF811", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "70402fe6-2a50-4c9b-b5c8-ecef8c781c76", + "node_name" : "3APC-TF851", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APC" + }, + { + "id" : "8a88b3b0-cc45-45ed-86c9-c28f1e7d9513", + "node_name" : "APE", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE", + "model_image": ["model/RBD Model/Image/SPS_APE-1.jpg", "model/RBD Model/Image/SPS_APE-2.jpg"] + }, + { + "id" : "1ae651ae-5ef1-4e4b-a252-04eef70d6a4b", + "node_name" : "3APE-CAB852", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "493b9759-b03b-4214-b9ee-fb49f7659137", + "node_name" : "3APE-MV001A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "c15da006-320b-4d82-93c1-2248793554c3", + "node_name" : "3APE-MV001B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "458a1227-2bbc-4f5d-bbd1-88980f0d6839", + "node_name" : "3APE-MV002A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "01dedd6a-2aa7-4538-a841-88a316cd4f56", + "node_name" : "3APE-MV002B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "b0527df7-130b-4e23-b8a0-365c7e9579c5", + "node_name" : "3APE-MV003A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "0c578942-b280-470c-940d-78f5016439e7", + "node_name" : "3APE-MV003B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "8f336372-4969-4b35-9b4a-3db653b9b057", + "node_name" : "3APE-MV003C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "5521c952-7b5e-4248-ad9e-67f2704face2", + "node_name" : "3APE-MV003D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "03a9d815-061f-4ba6-a6c1-ce5c7ff7fad4", + "node_name" : "3APE-MV004A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "5a0be1cb-839a-40d4-9b34-76d87ac49110", + "node_name" : "3APE-MV004B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "660fdf10-f426-49fe-b355-5acc19c7b811", + "node_name" : "3APE-MV851", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "9256d0cd-41ad-4f4f-86ec-ec6c96b85376", + "node_name" : "3APE-MV852", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "99ac86a2-c9cd-444c-ab57-94e10b80b148", + "node_name" : "3APE-TF002A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "e052d57d-2a64-479f-98d0-2d8405de7435", + "node_name" : "3APE-TF002B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "9540fa45-badd-430c-80f1-d1b57fabda82", + "node_name" : "3APE-TF852", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "d9e6a5ec-fd8b-48c5-bdbe-490f0fe19e4f", + "node_name" : "3APE-Z005A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "76550773-bcb0-48ff-953f-a34d0dcc9220", + "node_name" : "3APE-Z005B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/APE" + }, + { + "id" : "3001f6a5-fe75-46bb-b4d3-d0df39e2f641", + "node_name" : "EG", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/EG", + "model_image": ["model/RBD Model/Image/SPS_EG.jpg"] + }, + { + "id" : "4d6b2355-87e0-4e16-88bc-6f51c815ff4f", + "node_name" : "3EG-E001", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/EG" + }, + { + "id" : "8c46cbcd-081d-4b30-bf46-30431ae05f69", + "node_name" : "3EG-T003", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/SPS \/EG" + }, + { + "id" : "c3b87fea-ab9b-4347-9552-ceb2c8078c13", + "node_name" : "Turbine", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine", + "model_image": ["model/RBD Model/Image/- BTG_TUR -.jpg"] + }, + { + "id" : "e0c9d627-43c3-40a7-beb4-a50c76c720ba", + "node_name" : "3AS-BS010", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine" + }, + { + "id" : "b3d1d497-dc2d-4445-b2fd-9cf3ef61b852", + "node_name" : "3AS-T010", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine" + }, + { + "id" : "98e5e31a-79a2-4468-ad3f-88b2e42b00c0", + "node_name" : "3MT-AU040", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine" + }, + { + "id" : "f6e02f29-4f07-4389-b6b4-c8a8e5a0879c", + "node_name" : "3MT-ST010", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine" + }, + { + "id" : "5b49b499-a217-47d4-bb8f-e77846fd444b", + "node_name" : "3MT-ST020", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine" + }, + { + "id" : "61038c02-e711-4ca9-ac7f-06f3e0b81d22", + "node_name" : "3MT-ST030A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine" + }, + { + "id" : "671db315-84c4-432d-9084-9efb2ac6fa9b", + "node_name" : "3MT-ST030B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine" + }, + { + "id" : "029feee5-4f0e-423a-a873-4fe6c74f7be6", + "node_name" : "CW", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/CW", + "model_image": ["model/RBD Model/Image/TUR_CW.jpg"] + }, + { + "id" : "c09492ff-2c08-4dc6-8154-acf4fa92c356", + "node_name" : "3CW-M010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/CW" + }, + { + "id" : "9828bb64-b3b3-44ae-8fa8-20c312826319", + "node_name" : "3CW-M010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/CW" + }, + { + "id" : "61b8fcf6-ad24-492a-80ff-d332d29c51cf", + "node_name" : "3CW-M020A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/CW" + }, + { + "id" : "c7d7a981-7333-4c11-ba8b-776f5d79f5c4", + "node_name" : "3CW-M020B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/CW" + }, + { + "id" : "8e378aad-2147-4203-81fe-0c19166b0a25", + "node_name" : "3CW-P010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/CW" + }, + { + "id" : "9b3198c4-59a1-43cc-9a0e-647ffb5e27dc", + "node_name" : "3CW-P010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/CW" + }, + { + "id" : "0db5e6c7-6f90-43a7-9d74-5f686d16f036", + "node_name" : "3CW-P011A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/CW" + }, + { + "id" : "49358345-e6db-41c9-88da-d05160f014a9", + "node_name" : "3CW-P011B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/CW" + }, + { + "id" : "334056e4-a475-4047-bef1-9990e5c49422", + "node_name" : "3CW-P020A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/CW" + }, + { + "id" : "9ab2374b-f181-4e56-b09d-5850eb9c6467", + "node_name" : "3CW-P020B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/CW" + }, + { + "id" : "494ea688-a93a-443b-a6ee-fa1cecf1cdff", + "node_name" : "EHB (BYPASS VALVES)", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHB (BYPASS VALVES)", + "model_image": ["model/RBD Model/Image/TUR_EHB.jpg"] + }, + { + "id" : "4480ed93-dcb9-4b9f-b36c-bb438495899f", + "node_name" : "3EHB-P010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHB (BYPASS VALVES)" + }, + { + "id" : "7a9a401f-e6a1-4798-a763-2c51c6c144c2", + "node_name" : "3EHB-P010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHB (BYPASS VALVES)" + }, + { + "id" : "7f105074-ce6b-46a5-9423-ce221dc5af62", + "node_name" : "3EHB-P020", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHB (BYPASS VALVES)" + }, + { + "id" : "79daec84-4e6a-4758-b51d-928fa7ec514f", + "node_name" : "3EHB-T110", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHB (BYPASS VALVES)" + }, + { + "id" : "307fc05c-43cf-4b27-97bc-8e1fe7fe4626", + "node_name" : "3EHB-Z010", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHB (BYPASS VALVES)" + }, + { + "id" : "0544351a-9ed3-4ff8-a59f-2498184cf163", + "node_name" : "EHS", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHS", + "model_image": ["model/RBD Model/Image/TUR_EHS.jpg"] + }, + { + "id" : "0caaedcd-97f7-44ca-bad9-3603897458d5", + "node_name" : "3EHS-F015A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHS" + }, + { + "id" : "6bb27c0c-ccfe-4c0e-9225-30c7428c6592", + "node_name" : "3EHS-F015B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHS" + }, + { + "id" : "51f52730-e9aa-4d62-8071-aff2c2e5af48", + "node_name" : "3EHS-H010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHS" + }, + { + "id" : "1737dc0b-2ded-4b68-9edb-0b5a6b3d098c", + "node_name" : "3EHS-H010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHS" + }, + { + "id" : "da03c660-64d2-4270-96cb-69998bee01cd", + "node_name" : "3EHS-M010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHS" + }, + { + "id" : "bc46a846-9af3-42ee-97c3-865a5119562e", + "node_name" : "3EHS-M010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHS" + }, + { + "id" : "265fa75a-eea3-4a71-bfe4-f223a3c73d5d", + "node_name" : "3EHS-M015A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHS" + }, + { + "id" : "c63e1e8e-a30e-455c-8f19-586d57527e74", + "node_name" : "3EHS-M015B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHS" + }, + { + "id" : "9acd1080-2f0e-4be3-bc8f-d9085e1f8e41", + "node_name" : "3EHS-P010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHS" + }, + { + "id" : "33c4651c-4172-4c95-99ca-1c67c9f385cd", + "node_name" : "3EHS-P010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHS" + }, + { + "id" : "d0c58c9a-1326-46b7-8729-9c34b8d935bc", + "node_name" : "3EHS-T090A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHS" + }, + { + "id" : "75ea92c8-a5a5-40e9-b826-7f42b37116e2", + "node_name" : "3EHS-T090B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHS" + }, + { + "id" : "fb58f3e3-6fee-4b5e-8bd0-6705534fc128", + "node_name" : "3EHS-Z010", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/EHS" + }, + { + "id" : "1fee7f1f-e107-4af2-a720-175bb8b5a7e3", + "node_name" : "GSS", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/GSS", + "model_image": ["model/RBD Model/Image/TUR_GSS.jpg"] + }, + { + "id" : "b2dde20b-04e8-425f-9278-1de404c2a5ce", + "node_name" : "3GSS-F011A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/GSS" + }, + { + "id" : "525b4577-3e8f-4dae-baf3-a287f1ad66f9", + "node_name" : "3GSS-F011B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/GSS" + }, + { + "id" : "4030ba8d-e92a-4f53-ade1-c8ac43393500", + "node_name" : "3GSS-H010", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/GSS" + }, + { + "id" : "25b97739-a2fb-4ef1-a575-7e0fc96dff64", + "node_name" : "3GSS-M011A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/GSS" + }, + { + "id" : "393b72de-5768-4275-b7c6-291cbfc9e666", + "node_name" : "3GSS-M011B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/GSS" + }, + { + "id" : "b18f3a22-eaad-4204-a8f3-55c2fa238ced", + "node_name" : "LOS", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS", + "model_image":["model/RBD Model/Image/TUR_LOS-1.jpg", "model/RBD Model/Image/TUR_LOS-2.jpg"] + }, + { + "id" : "3a1f6be1-c3ad-49c7-ae4d-0e8fe6ce6a91", + "node_name" : "3LOS-F020A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "ea740942-605c-464c-9cc5-84ae708eb402", + "node_name" : "3LOS-F020B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "5674552e-b461-4193-9253-744a34002ebe", + "node_name" : "3LOS-H010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "c925c264-580f-4c38-b200-58b3a628ce39", + "node_name" : "3LOS-H010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "614dd1de-6676-4f46-8b20-461a81eee782", + "node_name" : "3LOS-M010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "8a810b25-9701-46ae-a139-1ebdcd9b11bb", + "node_name" : "3LOS-M010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "14a592c1-869f-4bf5-8763-237c3cef9a44", + "node_name" : "3LOS-M020A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "75a9eed8-ddfb-441a-b292-7929959dd6dc", + "node_name" : "3LOS-M020B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "872e03f7-3d9d-4388-ad22-15e605d53084", + "node_name" : "3LOS-M050", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "690728f3-0349-4cfd-aafe-e97d1a6e0b76", + "node_name" : "3LOS-M060", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "89528fe6-8bb3-4fe7-b0fa-17f572f98297", + "node_name" : "3LOS-M080", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "720a023f-132e-44f2-823c-7352c59536c5", + "node_name" : "3LOS-ME020", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "c385d8fd-0504-4db2-90db-5eace18b02b7", + "node_name" : "3LOS-P010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "f43a098c-e5aa-4230-bdc3-e7b90a06d65d", + "node_name" : "3LOS-P010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "5f4e8a31-a8f7-4551-b595-717b47a98d25", + "node_name" : "3LOS-P050", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "f0fd77ec-a778-4247-8b51-00fad885a8be", + "node_name" : "3LOS-P060", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "52f99fb5-d3b0-449d-9f9a-f076a89880a9", + "node_name" : "3LOS-P080", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "398cb487-11f8-413f-997e-2d12037c4dfd", + "node_name" : "3LOS-PF080", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "1269727f-2499-4255-b011-b8814a8c6de3", + "node_name" : "3LOS-S010A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "55158c6e-f039-4135-8b99-c500b3a6890f", + "node_name" : "3LOS-S010B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/BTG\/Turbine\/LOS" + }, + { + "id" : "50d69b69-27be-41a3-8adc-f203894ced55", + "node_name" : "CMN", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN", + "model_image": ["model/RBD Model/Image/- CMN -.jpg"] + }, + { + "id" : "083e1907-7759-4075-9929-b1957ebac803", + "node_name" : "CL", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/CL", + "model_image": ["model/RBD Model/Image/CMN-CL.png"] + }, + { + "id" : "cc4416da-cca2-446b-9673-8720311780be", + "node_name" : "BOOSTER", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/CL" + }, + { + "id" : "87961434-ba96-4395-a410-671ac65b5aca", + "node_name" : "CELL", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/CL" + }, + { + "id" : "0f4bc6e4-c9e7-4f30-9e59-ab1b7567ecd9", + "node_name" : "FILTER", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/CL" + }, + { + "id" : "b80eafc7-e852-43c4-bde0-87402042c4c0", + "node_name" : "SUMP PUMP", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/CL" + }, + { + "id" : "df1ec9c5-b268-402c-b6b0-6dc82cf6d9bc", + "node_name" : "TRAFO", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/CL" + }, + { + "id" : "1d2cbbc9-7945-4acd-9b91-64c70f37b90d", + "node_name" : "COAL HANDLING (CHS)", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)", + "model_image": ["model/RBD Model/Image/- CMN_CHS -(1).jpg", "model/RBD Model/Image/- CMN_CHS -(2).jpg"] + }, + { + "id" : "da446c83-a22f-43c5-8b37-2c4029d913ba", + "node_name" : "00CHA-BW802A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "1492edd4-9240-478c-a984-021f953d9d0a", + "node_name" : "00CHA-BW802B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "fa49f722-816c-43ce-9f90-c1575ff73c12", + "node_name" : "00CHA-CV801A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "ba05fa14-1ea8-4023-a0e1-ea363fa298e7", + "node_name" : "00CHA-CV801B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "326d68ba-8b07-458b-833c-bbd2bcff4b24", + "node_name" : "00CHA-CV802A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "d53cbb1f-3e79-4df2-90c6-18953396727b", + "node_name" : "00CHA-CV802B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "d0aaac07-81d8-4407-ab95-ec09ed2539eb", + "node_name" : "00CHA-CV803A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "73e752b9-508a-418e-bb69-bb214a3b7f88", + "node_name" : "00CHA-CV803B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "622299b0-6d39-4ede-99ef-ba43e5de84db", + "node_name" : "00CHA-CV804", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "b36241c8-81c9-4567-8821-484ea4a3c691", + "node_name" : "00CHA-CV805A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "aa0072cd-7c69-4415-8890-98ef7d7e76ec", + "node_name" : "00CHA-CV805B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "5d5c4e3e-d3cf-4fcb-aa11-137665f38eab", + "node_name" : "00CHA-MS801A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "45a2ac38-1cf6-4db7-adff-a8e852e7bc51", + "node_name" : "00CHA-MS801B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "fdd07fdf-e1af-4120-8416-9807c8471f69", + "node_name" : "00CHA-SU801A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "0cc39cb4-217e-4f60-b283-ffa728215022", + "node_name" : "00CHA-SU801B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "0aacb242-f093-4e2a-93af-7e1a00c0c9f9", + "node_name" : "00CHA-SWT801", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "6e9bf112-e813-4e90-ae37-66b3cb21bd9b", + "node_name" : "00CHA-SWT802", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "d4668832-39e8-438e-87a7-7286b120be30", + "node_name" : "00CHB-SKR805A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "f9379756-3522-4c0a-9348-1af2aa4b8541", + "node_name" : "00CHB-SKR805B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "fe9c24b3-5605-4c66-8c3e-18c13f501ff5", + "node_name" : "header2", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/COAL HANDLING (CHS)" + }, + { + "id" : "deb5af35-f1e4-4c48-ba21-bcdad81117ff", + "node_name" : "DESALINATION (CP)", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)", + "model_image": ["model/RBD Model/Image/- CMN_CP -(1).jpg", "model/RBD Model/Image/- CMN_CP -(2).jpg", "model/RBD Model/Image/- CMN_CP -(3).jpg", "model/RBD Model/Image/- CMN_CP -(4).jpg", "model/RBD Model/Image/- CMN_CP -(5).jpg", "model/RBD Model/Image/- CMN_CP -(6).jpg"] + }, + { + "id" : "f8aa4a39-b94c-490b-9fe4-0a163c3495d1", + "node_name" : "00RO-AG181", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "94e48960-dad4-46c2-861e-24c3e94e846d", + "node_name" : "00RO-F152A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "308d402a-9e67-4c8b-af64-805a89b60b6b", + "node_name" : "00RO-F152B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "e9ca6eed-6914-45ba-9976-12cf2c6ff202", + "node_name" : "00RO-F161A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "96d6b0be-867b-4d80-ad10-f6c961a9e4ca", + "node_name" : "00RO-F161B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "aebfa403-cb88-4fa4-8a1c-818a9e423d58", + "node_name" : "00RO-H181", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "fafbb378-087d-4387-80c9-43f2f8d422c4", + "node_name" : "00RO-M110A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "aaf1fb18-e823-4cb5-a1dd-b565069070cc", + "node_name" : "00RO-M110B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "05e8de6f-130a-4ab9-b3d8-f4c377cf4005", + "node_name" : "00RO-M110C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "9448d4e9-19e7-43da-8270-72db2ba87eed", + "node_name" : "00RO-M110D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "e19ed2f6-b5cb-4b4d-9f39-e6e3312d39c8", + "node_name" : "00RO-M126A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "80ccb846-f85a-481a-baca-fba5ce1df2a2", + "node_name" : "00RO-M126B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "99a1550a-143f-4eb6-b2dd-899ef250abe4", + "node_name" : "00RO-M126C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "f2bb2c63-65ec-4075-90c2-ba2c388d6ef0", + "node_name" : "00RO-M126D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "c7d82eeb-8de2-4d1b-bada-64824681bf02", + "node_name" : "00RO-M150A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "57731cd2-21cc-476c-9fd5-9ec4d9eb1f36", + "node_name" : "00RO-M150B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "80a265ce-969d-46cc-a2ba-d7d5d7c21196", + "node_name" : "00RO-M152A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "7034ed08-2157-4a7f-8f7e-2c5b0c5bc37f", + "node_name" : "00RO-M152B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "0d387aba-09e0-4f0a-bacf-193fcd89fe46", + "node_name" : "00RO-M160A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "4a226018-297f-443c-93d1-12ec6f3d7c34", + "node_name" : "00RO-M160B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "8aa6858c-35e8-4755-8539-65f8981a81f6", + "node_name" : "00RO-M160C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "7af9f393-0247-4666-af6e-917deefe52d2", + "node_name" : "00RO-M160D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "82e64879-a77d-479d-b9b4-acfea67411c0", + "node_name" : "00RO-M170A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "6821cd06-4d01-4ef2-a6f8-07d928569fb1", + "node_name" : "00RO-M170B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "05cfc20a-75db-4326-850b-7c8d9f02235a", + "node_name" : "00RO-M170C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "c7976333-2373-463b-b5c2-2d9058e6526f", + "node_name" : "00RO-M170D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "0edd8f2f-e2f4-4fe7-bdb9-f30d530b2dd7", + "node_name" : "00RO-M180A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "fcd5ab19-2a03-4a5f-8ed4-04dfa0f490bf", + "node_name" : "00RO-M180B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "28d5acb1-9ddd-45d4-bd17-5c96a7ef40bb", + "node_name" : "00RO-M181", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "82e98c71-2f12-4eaf-a4ae-57e460ecd2ba", + "node_name" : "00RO-M190A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "f2177067-3aff-4f67-9051-289d89dbf250", + "node_name" : "00RO-M190B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "79d35437-214f-421f-b1dc-d075a7e169c4", + "node_name" : "00RO-M195A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "54e2cdc4-0c3a-4997-a219-f39f47134051", + "node_name" : "00RO-M195B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "eb0af45b-cf8d-436f-8412-424ba973a9f6", + "node_name" : "00RO-M340A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "bccd5f47-516c-49a5-9c64-ea954c9ece89", + "node_name" : "00RO-M340B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "617326cb-4f04-443e-8773-f7b9e43f9ac3", + "node_name" : "00RO-P110A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "ec3480c3-880e-453f-a525-1334297d5dab", + "node_name" : "00RO-P110B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "b695f8f6-cc71-4892-8e9c-4a90db28f21e", + "node_name" : "00RO-P110C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "bf559789-507e-43c7-a304-0da08233fbb1", + "node_name" : "00RO-P110D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "a5187d77-1aac-4a9d-ab4b-d7e9d9fa45f5", + "node_name" : "00RO-P126A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "deb359e5-3072-45f7-82f4-d522b4f17e35", + "node_name" : "00RO-P126B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "987ddb48-8717-47a1-a428-68627bdb23d4", + "node_name" : "00RO-P126C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "a8fec2cc-9628-472a-8e0e-30ccf652eeb7", + "node_name" : "00RO-P126D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "7e5cbb96-53f6-4843-b512-5ff058ddc447", + "node_name" : "00RO-P150A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "6c1bb5a0-c807-4b26-a2bb-245509343898", + "node_name" : "00RO-P150B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "a4758d7f-e26b-4bd8-bf2c-54be50f83a45", + "node_name" : "00RO-P160A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "d7b1e125-19f6-4d00-acfb-7cc0753e52fe", + "node_name" : "00RO-P160B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "146c4a4b-2a66-4b65-ac48-23d7ef29aedf", + "node_name" : "00RO-P160C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "dbd8b420-a328-4b27-8ae6-e7a8cad9c9d1", + "node_name" : "00RO-P160D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "7a64e630-0089-4ea6-8042-16b07f1528fe", + "node_name" : "00RO-P170A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "1c7acbe7-4f0f-4cd9-85c3-b35027b6413d", + "node_name" : "00RO-P170B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "92fd1afa-9c1c-424d-9a17-170ccbb4cd66", + "node_name" : "00RO-P170C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "84aadc6c-f0d2-4bde-a479-13b6f5b4fec2", + "node_name" : "00RO-P170D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "a06e4c17-01ae-4c6c-a486-f1c11d86a6f8", + "node_name" : "00RO-P180A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "edf34e49-56ac-4285-9aa1-9f49ff41bff2", + "node_name" : "00RO-P180B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "078dabc1-f610-406d-8dbf-c9b72690db83", + "node_name" : "00RO-P190A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "30b16766-ec67-431b-9977-a26c186cc027", + "node_name" : "00RO-P190B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "e8624b66-f392-423e-8c8a-d9573a6eb9ee", + "node_name" : "00RO-P195A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "54835f02-23d1-4736-841b-08ee0548b13b", + "node_name" : "00RO-P195B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "a0ea0039-2f76-47b2-91c8-4c99c1472637", + "node_name" : "00RO-P340A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "fb660633-e2f8-45f6-95c8-b5e888fddaea", + "node_name" : "00RO-P340B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "c7bf97ce-b267-4ef2-ad80-316402bf5daf", + "node_name" : "00RO-T120", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "3f67f34f-cdff-429a-bff8-d3da8ebe4573", + "node_name" : "00RO-T130", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "2775392b-afc8-4532-b775-f4c508a6a56f", + "node_name" : "00RO-T150", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "bcef1db9-91b3-4002-943b-6cf50bde0b3d", + "node_name" : "00RO-T160A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "53005508-a25d-4519-a373-b768c6cf4d4f", + "node_name" : "00RO-T160B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "5462540e-a92e-4ecd-a40d-2e51a9fae4a1", + "node_name" : "00RO-T160C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "33d9e0f2-cc66-43b0-965a-1ca5ce312142", + "node_name" : "00RO-T160D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "24d0e9dc-6aa9-47ba-85f9-3b012b62e86a", + "node_name" : "00RO-T162", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "65a9be44-7614-4ed8-8b2d-585f81a06268", + "node_name" : "00RO-T170", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "2d341f6e-03ba-4360-beac-ae8b47a7b5d5", + "node_name" : "00RO-T320", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "1ffed086-775e-4639-9ff1-5de2c4de61e6", + "node_name" : "00RO-Z110A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "8ec8df13-c639-4e3e-9814-5a569fd89fb7", + "node_name" : "00RO-Z110B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "e4881b57-a048-46c9-9531-3b22f6f1c5d2", + "node_name" : "00RO-Z110C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "0b700fc5-bc90-4bd4-84fd-f775f0ee36d5", + "node_name" : "00RO-Z110D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "7dc22dc2-d9ea-4eee-9bd1-f0d443604b31", + "node_name" : "ANIONIC POLYMER DOSING", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "37eebda5-457f-433c-9d00-5f28316b938f", + "node_name" : "ANTI SCALANT DOSING", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "ab5aac71-d73e-4579-9ed7-7b04e891a4cc", + "node_name" : "CLARIFIER", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "0bf4a121-c782-400e-9718-f2d6a18515b4", + "node_name" : "CLEAR WATER", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "1f1e97e4-5f12-4512-82f9-73a70deb10b9", + "node_name" : "FeCl3 DOSING", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "12c5a240-42a5-4ccf-9a5f-9bebfd7f8cc1", + "node_name" : "H2SO4 DOSING", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "bf1bb440-0029-496e-8a0d-b3ef47d51374", + "node_name" : "header 3", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "2fc1ea06-2b97-4eed-bffe-a86369afef01", + "node_name" : "NaOCL DOSING", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "59c56758-40ad-417d-854c-da208caac28a", + "node_name" : "NaOH DOSING", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "7c53a113-c61c-463d-b73e-8f96c2cb80fc", + "node_name" : "SBS DOSING", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/DESALINATION (CP)" + }, + { + "id" : "7809f264-02da-40d3-b687-eb6fda6026f2", + "node_name" : "FGD (SUP)", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)", + "model_image": ["model/RBD Model/Image/- CMN_FGD-.jpg"] + }, + { + "id" : "60c20b43-68ac-400d-ad90-915c5469f2dd", + "node_name" : "DS", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS", + "model_image": ["model/RBD Model/Image/FGD_DS.jpg"] + }, + { + "id" : "317b4fde-80c1-4680-ba8d-2de0186a557c", + "node_name" : "CHLORIDE", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/CHLORIDE", + "model_image": ["model/RBD Model/Image/FGD_DS_CHLORIDE.jpg"] + }, + { + "id" : "86dd7234-c603-441a-94e9-cdd40bf73c73", + "node_name" : "00DS-AG888", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/CHLORIDE" + }, + { + "id" : "a322b0e6-eb71-49c9-92e4-3ed8d62e20b6", + "node_name" : "00DS-M883A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/CHLORIDE" + }, + { + "id" : "b6079763-bb22-4b96-b557-5edf5cb7e1cf", + "node_name" : "00DS-M883B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/CHLORIDE" + }, + { + "id" : "e78cce72-bec9-409c-8cc8-243be81dedaa", + "node_name" : "00DS-M888", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/CHLORIDE" + }, + { + "id" : "a10fd9a9-3f45-49c3-b244-9b4f24311b35", + "node_name" : "00DS-P883A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/CHLORIDE" + }, + { + "id" : "615a84c9-b2d6-4089-ab50-4e933a45a9b6", + "node_name" : "00DS-P883B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/CHLORIDE" + }, + { + "id" : "4d815b6b-944d-4f6d-8ed3-61e0e3bcbf7a", + "node_name" : "00DS-T888", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/CHLORIDE" + }, + { + "id" : "ee86f7ac-a093-4ebf-bad3-3f297f439f25", + "node_name" : "GYPSUM", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/GYPSUM", + "model_image": ["model/RBD Model/Image/FGD_DS_GYPSUM.jpg"] + }, + { + "id" : "2447b779-2733-4af9-b72d-c8328ba6ef22", + "node_name" : "00DS-AG851", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/GYPSUM" + }, + { + "id" : "39101230-1291-4e93-9aa8-35171762001e", + "node_name" : "00DS-CY851A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/GYPSUM" + }, + { + "id" : "00c27325-7606-473a-ad37-0859659046f1", + "node_name" : "00DS-CY851B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/GYPSUM" + }, + { + "id" : "3d5ec9fc-8428-4dd2-bf78-5dccc8864a20", + "node_name" : "00DS-CY865", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/GYPSUM" + }, + { + "id" : "1a620174-4fa6-47e4-9231-179f2b271024", + "node_name" : "00DS-M851", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/GYPSUM" + }, + { + "id" : "ee98b12f-8a3c-487a-8b1b-e86df7b66f77", + "node_name" : "00DS-M860A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/GYPSUM" + }, + { + "id" : "9d7ed268-612e-4e9c-acda-936fa7159c5a", + "node_name" : "00DS-M860B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/GYPSUM" + }, + { + "id" : "a95392fe-7705-487d-a939-8b46907f51a7", + "node_name" : "00DS-P860A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/GYPSUM" + }, + { + "id" : "6503210c-1f11-42fc-ab4c-befa9a49e712", + "node_name" : "00DS-P860B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/GYPSUM" + }, + { + "id" : "57047fce-3ba6-4c86-bb08-599f4cba13af", + "node_name" : "00DS-T851", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/GYPSUM" + }, + { + "id" : "884df389-6184-47df-87a4-7db1df08d0d4", + "node_name" : "00DS-T852", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/GYPSUM" + }, + { + "id" : "d6076bb3-cb7c-4a73-a522-f1c20b89879c", + "node_name" : "VACUUM", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM", + "model_image": ["model/RBD Model/Image/FGD_DS_VACUUM.jpg"] + }, + { + "id" : "d2f0b09f-3715-48ba-aa84-18b366021724", + "node_name" : "00DS-M900", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "3addfca2-9ef7-4d7c-8464-59f537f8dc59", + "node_name" : "00DS-M901", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "e4ec0118-6d0d-4fc0-b376-b0f6ac84c7de", + "node_name" : "00DS-M902A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "77999ddb-2fd9-4480-900a-19ab7ec4fb5c", + "node_name" : "00DS-M902B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "4cc13021-3a01-4ba5-af01-29ba597e5037", + "node_name" : "00DS-M935", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "77d1bb8d-350a-4b95-a50c-767aac2dc0b0", + "node_name" : "00DS-M936", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "420d82f1-20a3-4eba-a2d0-adce26e55ce6", + "node_name" : "00DS-M937A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "91a25388-6003-4262-ac23-ef922ef7cefc", + "node_name" : "00DS-M937B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "307d34ba-e5be-4949-9f94-dbd024136e52", + "node_name" : "00DS-P901", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "b993d24a-b0ed-4a18-9916-ca25d6f810a0", + "node_name" : "00DS-P902A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "92b6c6ed-e664-457e-89b3-22c08058383b", + "node_name" : "00DS-P902B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "981a5a66-35ee-4e5d-a8b3-6bad0c84950a", + "node_name" : "00DS-P936", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "bfb96664-512b-4abc-9284-7529ec51d727", + "node_name" : "00DS-P937A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "14edfe3b-f425-4e5a-a195-9a993f45fdcf", + "node_name" : "00DS-P937B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "3e8d87f0-c6e0-4707-8877-6af5f4c9a0d1", + "node_name" : "00DS-T900", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "8310d698-627a-43a5-bc19-7635af85161f", + "node_name" : "00DS-T901", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "fa2cf9a3-3d9a-4f81-9c6e-73fef30be57e", + "node_name" : "00DS-T935", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "85176479-21c5-480a-9e40-a86f2b8be6ce", + "node_name" : "00DS-T936", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "d668d1ca-ca14-4c5e-b147-5a4d7d124429", + "node_name" : "Node1", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "561f5f57-3d0d-43fb-b733-9de65ce055f2", + "node_name" : "Node2", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/DS\/VACUUM" + }, + { + "id" : "3e25dcce-2b12-4647-9170-931f65f9fbc5", + "node_name" : "LSH", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH", + "model_image": ["model/RBD Model/Image/FGD_LSH-1.jpg", "model/RBD Model/Image/FGD_LSH-2.jpg"] + }, + { + "id" : "ba64c6bc-b15f-400a-8059-648d6647b4fb", + "node_name" : "00LSH-BW801", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH" + }, + { + "id" : "b863ab4c-67cc-4736-bf44-aa3d4a120850", + "node_name" : "00LSH-COG801", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH" + }, + { + "id" : "12f6d4fd-499b-4eed-850f-c1f7bb77c80d", + "node_name" : "00LSH-CR853", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH" + }, + { + "id" : "d1c0ba30-912b-4eef-90c9-0f32b7a88944", + "node_name" : "00LSH-CV801", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH" + }, + { + "id" : "33b6b2ca-ea38-49ac-bee3-130735e08fcf", + "node_name" : "00LSH-CV852", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH" + }, + { + "id" : "4a1baced-107d-494c-98bb-46e9d6b50033", + "node_name" : "00LSH-DC901", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH" + }, + { + "id" : "6dca6b62-13bf-4b92-a6b2-cea649751f5c", + "node_name" : "00LSH-F901", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH" + }, + { + "id" : "0b1585ac-6b9c-41f7-bdf1-6ade71e14387", + "node_name" : "00LSH-HO801", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH" + }, + { + "id" : "04104ccc-5623-46d5-9ae9-96b0dc7cfcde", + "node_name" : "00LSH-HO851", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH" + }, + { + "id" : "0457df12-cbd1-4f49-840a-835460e64d3e", + "node_name" : "00LSH-M851", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH" + }, + { + "id" : "7d14ea4f-f40c-4894-93ec-cf4d5579da27", + "node_name" : "00LSH-M852", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH" + }, + { + "id" : "b4e782c3-09f7-4c1e-90b8-932de597c692", + "node_name" : "00LSH-M853A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH" + }, + { + "id" : "76544e6d-f161-45e7-8ed1-a474f674afed", + "node_name" : "00LSH-M901", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH" + }, + { + "id" : "09a2b27e-6501-441c-b8ec-10b803aa2780", + "node_name" : "00LSH-MS801", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH" + }, + { + "id" : "a5ead9ec-4c09-4cbe-9fb1-bfce54c79e45", + "node_name" : "00LSH-SU801", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH" + }, + { + "id" : "b3fd7be3-a8fb-4b1b-8031-5ab295922448", + "node_name" : "00LSH-VFD801", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH" + }, + { + "id" : "d8ffcf5a-fcaf-486e-acea-72eb35ea37b2", + "node_name" : "00LSH-VI851", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/LSH" + }, + { + "id" : "a272c37e-e4b7-4e03-80e7-a2ad48958a74", + "node_name" : "OA", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/OA", + "model_image": ["model/RBD Model/Image/FGD_OA.jpg"] + }, + { + "id" : "3b4d58d9-28f3-411b-9719-91fffc4c0838", + "node_name" : "00OA-F851A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/OA" + }, + { + "id" : "18e6133b-116e-4727-b11a-d54101889e4e", + "node_name" : "00OA-F851B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/OA" + }, + { + "id" : "360b52d5-c593-4fea-b171-e911c6bbd0f9", + "node_name" : "00OA-F851C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/OA" + }, + { + "id" : "2ee19abb-b111-43c5-80a1-dde266af6b72", + "node_name" : "00OA-M851A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/OA" + }, + { + "id" : "f72530e9-b2bd-4401-8c78-3e1e5b6fb2d9", + "node_name" : "00OA-M851B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/OA" + }, + { + "id" : "66326b9d-5ef7-4981-92aa-8a5bc686b0b5", + "node_name" : "00OA-M851C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/OA" + }, + { + "id" : "51331a6a-39bc-4e59-9614-4629080c1136", + "node_name" : "RP", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP", + "model_image": ["model/RBD Model/Image/FGD_RP-1.jpg", "model/RBD Model/Image/FGD_RP-2.jpg"] + }, + { + "id" : "0a14fb00-84a6-4d48-a465-1442d615d2f1", + "node_name" : "00RP-AG950", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "37318b8c-6f2f-4714-ad63-66adc80a0327", + "node_name" : "00RP-AG970", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "67284a76-e65e-4718-a5b8-fcefb8dcf3b2", + "node_name" : "00RP-AG985", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "347fec9b-f640-4d35-97ab-de3192c12a13", + "node_name" : "00RP-DX979", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "5193475c-7ede-4132-b196-8e76bf1156ec", + "node_name" : "00RP-M856A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "0d44095f-d96d-4eb3-8e02-238b34094728", + "node_name" : "00RP-M856B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "ced6d215-970d-42eb-b7b0-7569a77d57cc", + "node_name" : "00RP-M950", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "64e549bd-5c98-4d2c-9908-d40a90a7750b", + "node_name" : "00RP-M952A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "0b83bf71-eb04-4387-bfae-ac0d842fb0cf", + "node_name" : "00RP-M952B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "18fe0bb4-eb5f-44ff-bce7-7ca95a613fdb", + "node_name" : "00RP-M970", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "1f108fa7-7a64-4206-8c1c-907da520cdca", + "node_name" : "00RP-M972A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "acd11448-977f-45a8-ad0d-26df15f70e6c", + "node_name" : "00RP-M972B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "8f5780bf-cfb0-42f6-b72f-71e36ac373de", + "node_name" : "00RP-M985", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "2e866717-1b3e-4849-be52-662329624fab", + "node_name" : "00RP-M986A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "b78014b7-73a6-4bf3-8e84-8b8b2fb48cbf", + "node_name" : "00RP-M986B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "7e4c9be5-28b9-44f1-99eb-e36b1920b7ab", + "node_name" : "00RP-P952A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "6f27ff0f-4e5c-4d3a-9c5a-77e2f204e784", + "node_name" : "00RP-P952B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "55d8a60b-fe03-41ed-a34d-05ff0e4517f4", + "node_name" : "00RP-P972A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "437d2f1c-906f-4619-b5d2-70538a575d3e", + "node_name" : "00RP-P972B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "af55847a-9bf9-4d3e-9dcd-db4e3391d3ff", + "node_name" : "00RP-P986A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "a5766fdd-3041-490f-82ee-2f55f55ff064", + "node_name" : "00RP-P986B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "9337b9f8-a42c-4988-aa27-2e8b2e69a78b", + "node_name" : "00RP-T950", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "19e3fbdc-c7fb-481e-8cae-7a3770c10e07", + "node_name" : "00RP-T970", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "d4ff5c3c-0d2e-4f6e-9237-036341c5fce7", + "node_name" : "00RP-T985", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "6c39c9d4-b0b5-467a-8d5e-2eda8ca64ee0", + "node_name" : "00RP-Z851A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "71b2669d-f320-4223-9541-c2f8bd6b5770", + "node_name" : "00RP-Z851B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "bbd29c5e-e479-4fc9-b5b7-8bf5830eee70", + "node_name" : "00RP-Z851C", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "faff9bd2-1685-4a96-bda1-fdbdab5154ca", + "node_name" : "00RP-Z851D", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "558ff12a-ba30-4584-aca0-bd394516e527", + "node_name" : "00RP-Z856A", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/00RP-Z856A" + }, + { + "id" : "e3879fec-6778-4b1d-bdcf-e435148b15c5", + "node_name" : "00RP-Z856A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/00RP-Z856A" + }, + { + "id" : "c5a4148f-60dd-4bd7-b42b-d4a3672e499e", + "node_name" : "203554", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/00RP-Z856A" + }, + { + "id" : "0b4c8b5d-16a5-4d6d-81f5-0c2efe6203bf", + "node_name" : "00RP-Z856B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP" + }, + { + "id" : "6ee9c011-aaa2-405a-8922-ae8a4777f89d", + "node_name" : "MILL", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL", + "model_image": ["model/RBD Model/Image/FGD_RP_MILL.jpg"] + }, + { + "id" : "0d19cf68-e07c-413f-92f3-a6462f979a54", + "node_name" : "MILL A", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL A", + "model_image": ["model/RBD Model/Image/FGD_RP_MILL A.jpg"] + }, + { + "id" : "a9ddacbe-97b0-4084-be94-2ae5ab678b31", + "node_name" : "00RP-AG885", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL A" + }, + { + "id" : "dc731b11-395f-41a1-aa3c-d1a9d009b972", + "node_name" : "00RP-CY871", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL A" + }, + { + "id" : "0e8aa2bc-a255-4cf2-9c26-4f302086be80", + "node_name" : "00RP-DX897", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL A" + }, + { + "id" : "ccfd8275-f620-44fb-a3b0-fb2831253417", + "node_name" : "00RP-F991A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL A" + }, + { + "id" : "8e9307a8-fa16-42d8-82e3-42b967d97506", + "node_name" : "00RP-F991B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL A" + }, + { + "id" : "86fd4cf3-20a8-4d46-9742-5dd650746841", + "node_name" : "00RP-M885", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL A" + }, + { + "id" : "71985947-c648-4898-abc0-aca9b9b57522", + "node_name" : "00RP-M891A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL A" + }, + { + "id" : "07ad16fc-b518-41a4-ac0d-1e9c1670699d", + "node_name" : "00RP-M891B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL A" + }, + { + "id" : "3dd17e5a-4561-4cbf-bfc9-351377595064", + "node_name" : "00RP-P891A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL A" + }, + { + "id" : "86324c20-805b-4125-9b25-10e41fb5e6f2", + "node_name" : "00RP-P891B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL A" + }, + { + "id" : "5771c8ca-db42-41d7-9c68-b18a8efee077", + "node_name" : "00RP-P991A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL A" + }, + { + "id" : "212ad2c3-9a7d-41bd-a7fa-51be43bddcaa", + "node_name" : "00RP-P991B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL A" + }, + { + "id" : "fd6ab382-1d0d-4a52-96f9-2740b1a341cd", + "node_name" : "00RP-P992", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL A" + }, + { + "id" : "43c85815-f79e-40d8-b6da-c15b318baa5c", + "node_name" : "00RP-T885", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL A" + }, + { + "id" : "297f53bf-60b7-445d-8ef0-6f93be92bd23", + "node_name" : "MILL B", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL B", + "model_image": ["model/RBD Model/Image/FGD_RP_MILL B.jpg"] + }, + { + "id" : "0499af2e-28c8-45c4-b791-788542200579", + "node_name" : "00RP-AG925", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL B" + }, + { + "id" : "05f0ec8e-83e8-4909-bc3a-6cfad3fc2e8e", + "node_name" : "00RP-CY911", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL B" + }, + { + "id" : "a887ab55-d9b5-42dd-9ebb-aa083eef14fe", + "node_name" : "00RP-DX837", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL B" + }, + { + "id" : "eca7f4f1-79fb-4ebc-91c4-b9683b8f3de5", + "node_name" : "00RP-F995A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL B" + }, + { + "id" : "5f47f231-d745-48be-820d-28d6c515f848", + "node_name" : "00RP-F995B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL B" + }, + { + "id" : "5a874f14-a51a-40fd-b576-94496a2ccedc", + "node_name" : "00RP-M925", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL B" + }, + { + "id" : "20481d0e-46e0-41bb-a269-990e78b5fb7e", + "node_name" : "00RP-M931A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL B" + }, + { + "id" : "f4a014f5-85ae-48e9-9612-048d80bafb60", + "node_name" : "00RP-M931B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL B" + }, + { + "id" : "e2374795-ea36-4179-9cbe-73b34fcffcd1", + "node_name" : "00RP-P931A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL B" + }, + { + "id" : "e795d643-393a-4381-a99e-69b6d9cc85e5", + "node_name" : "00RP-P931B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL B" + }, + { + "id" : "0092b60c-a476-4661-8645-ca835356bc29", + "node_name" : "00RP-P995", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL B" + }, + { + "id" : "0677ba06-5711-4955-a5dc-a95f03a827ab", + "node_name" : "00RP-P995A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL B" + }, + { + "id" : "ff3c3fd0-f4a1-459f-80a9-c3a6d6b9b7db", + "node_name" : "00RP-P995B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL B" + }, + { + "id" : "25cc5e2f-6fd2-4902-bfff-e6e3fa648297", + "node_name" : "00RP-T925", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/MILL\/MILL B" + }, + { + "id" : "4c34aff6-e434-4c1c-bfec-9e86cff947a8", + "node_name" : "WET MILL", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/WET MILL", + "model_image": ["model/RBD Model/Image/FGD_RP_WET MILL.jpg"] + }, + { + "id" : "c88a4c0a-14b2-48fd-b5da-9cc9e786c561", + "node_name" : "WET MILL A", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/WET MILL\/WET MILL A", + "model_image": ["model/RBD Model/Image/FGD_RP_WET MILL A.jpg"] + }, + { + "id" : "d5a5b6f6-b7f1-4e66-b199-04cc7af85a24", + "node_name" : "00RP-BM871", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/WET MILL\/WET MILL A" + }, + { + "id" : "f311c399-d578-413a-b627-8f5fd6d5522b", + "node_name" : "00RP-M871A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/WET MILL\/WET MILL A" + }, + { + "id" : "0986ea64-1c84-4d5d-afcc-b7f5177df620", + "node_name" : "00RP-M871B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/WET MILL\/WET MILL A" + }, + { + "id" : "c06b0487-2374-4c38-8205-5cc766252a52", + "node_name" : "WET MILL B", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/WET MILL\/WET MILL B", + "model_image": ["model/RBD Model/Image/FGD_RP_WET MILL B.jpg"] + }, + { + "id" : "dbc7bbde-df65-4b56-91b8-7b9cc1328307", + "node_name" : "00RP-BM911", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/WET MILL\/WET MILL B" + }, + { + "id" : "07fdb627-b996-4864-896e-dc56d01cdc60", + "node_name" : "00RP-M911A", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/WET MILL\/WET MILL B" + }, + { + "id" : "82a41994-b36c-4e32-a0ac-d5ee04ea331c", + "node_name" : "00RP-M911B", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/FGD (SUP)\/RP\/WET MILL\/WET MILL B" + }, + { + "id" : "f4844ab5-4ce1-4c59-878f-442a07bde4b1", + "node_name" : "SSB", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/SSB", + "model_image": ["model/RBD Model/Image/- CMN_SSB -(1).jpg", "model/RBD Model/Image/- CMN_SSB -(2).jpg"] + }, + { + "id" : "8062446a-cd26-4d8d-9eab-cc2147f54c84", + "node_name" : "00SSB-EV001", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/SSB" + }, + { + "id" : "919f3ac9-4bcc-48e9-ac83-af92f3c54d84", + "node_name" : "00SSB-EV002", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/SSB" + }, + { + "id" : "a899fd14-bf92-4336-860e-341d712a262d", + "node_name" : "00SSB-EV003", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/SSB" + }, + { + "id" : "85a1fd41-358c-4f66-988a-ecfd1dc308cc", + "node_name" : "00SSB-EV004", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/SSB" + }, + { + "id" : "d8a63c74-29c5-4f41-af65-ce967d2f370a", + "node_name" : "00SSB-EV005", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/SSB" + }, + { + "id" : "3aab2f79-5196-4880-a03f-c6b6e9ec32df", + "node_name" : "00SSB-EV006", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/SSB" + }, + { + "id" : "79d3993b-3759-4332-a6bf-37738292ff7b", + "node_name" : "00SSB-EV007", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/SSB" + }, + { + "id" : "21a02abb-7f45-46be-9aff-73117ee0e1ba", + "node_name" : "00SSB-EV012", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/SSB" + }, + { + "id" : "b306927e-ca2e-44f4-9e0a-c8b5193190e8", + "node_name" : "00SSB-LA008", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/SSB" + }, + { + "id" : "89df71fb-b6fc-47c2-9836-0fe3ebd1948a", + "node_name" : "00SSB-LA009", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/SSB" + }, + { + "id" : "78fb1694-e399-465d-a352-a9b98dca63d1", + "node_name" : "00SSB-TF010", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN\/SSB" + }, + { + "id" : "85c002ab-0d9e-4d15-9291-24d078b8aab3", + "node_name" : "WTP", + "node_type" : "RegularNode", + "structure_name" : "- TJB - Unit 3 -\/CMN" + }, + { + "id" : "20cb8faa-361f-4adc-90a6-2f84c5f3ca1b", + "node_name" : "- TJB - Unit 3 -", + "node_type" : "SchematicNode", + "structure_name" : "- TJB - Unit 3 -", + "model_image": ["model/RBD Model/Image/- TJB - Unit 3 -.jpg"] + } +] diff --git a/model/system_avail.py b/model/system_avail.py new file mode 100644 index 0000000..6456877 --- /dev/null +++ b/model/system_avail.py @@ -0,0 +1,111 @@ +import json + +def series_availability(avails): + result = 1.0 + for a in avails: + result *= a + return result + +def parallel_availability(avails): + result = 1.0 + for a in avails: + result *= (1 - a) + return 1 - result + +def kofn_availability(avails, k): + if k <= 1: + return parallel_availability(avails) + return sum(avails) / len(avails) # simple approx + +def compute_node_availability(node_id, schematic, schematics, overrides, visited): + if node_id in visited: + return 1.0 + visited.add(node_id) + + node = schematic["nodes"].get(node_id) + if not node: + return 1.0 + + node_name = node.get("name", "").strip().lower() + if node_name in overrides: + return overrides[node_name] + + ntype = node["type"].lower() + + if ntype == "regularnode": + return node.get("availability", 1.0) + + elif ntype == "series": + return series_availability([ + compute_node_availability(child, schematic, schematics, overrides, visited.copy()) + for child in node.get("children", []) + ]) + + elif ntype == "parallel": + return parallel_availability([ + compute_node_availability(child, schematic, schematics, overrides, visited.copy()) + for child in node.get("children", []) + ]) + + elif ntype == "kofn": + k = node.get("min_required", 1) + return kofn_availability([ + compute_node_availability(child, schematic, schematics, overrides, visited.copy()) + for child in node.get("children", []) + ], k) + + elif ntype == "subschematic": + tschematic_id = node.get("tschematic_id") + if tschematic_id and str(tschematic_id) in schematics: + sub_schematic = schematics[str(tschematic_id)] + root = sub_schematic.get("root") + if root: + return compute_node_availability(root, sub_schematic, schematics, overrides, set()) + return node.get("availability", 1.0) + + return node.get("availability", 1.0) + + +def compute_schematic_availability(schematic, schematics, overrides): + root = schematic.get("root") + if not root: + return 1.0 + return compute_node_availability(root, schematic, schematics, overrides, set()) + + +def evaluate_project(json_file, overrides=None): + with open(json_file, "r") as f: + data = json.load(f) + + schematics = data["schematics"] + overrides = overrides or {} + + results = {} + top_availability = None + + for sid, schematic in schematics.items(): + name = schematic["schematic_name"].strip() + avail = compute_schematic_availability(schematic, schematics, overrides) + results[name] = avail + if name == "- TJB - Unit 3 -": + top_availability = avail + + return results, top_availability + + +if __name__ == "__main__": + overrides = { + "WTP": 0.0, # Example override + } + + results, top_avail = evaluate_project("project_70_rbd.json", overrides=overrides) + + print("\n--- Schematic Availabilities ---") + for sch_name, avail in results.items(): + print(f"{sch_name:25s}: {avail:.6f}") + + print("\n=== TOTAL SYSTEM AVAILABILITY ===") + if top_avail is not None: + print(f"Top schematic (- TJB - Unit 3 -): {top_avail:.6f}") + else: + print("Top schematic not found in JSON!") diff --git a/model/test.py b/model/test.py new file mode 100644 index 0000000..5eb2ae2 --- /dev/null +++ b/model/test.py @@ -0,0 +1,211 @@ +import json +import os +from typing import Dict, List, Union, Any + +def load_and_merge_models(main_file: str, models_folder: str = ".") -> Dict[str, Any]: + """ + Recursively loads and merges JSON models, replacing file references with actual content. + + Args: + main_file: Name of the main JSON file (e.g., "- TJB - Unit 3 -") + models_folder: Folder containing the JSON files (default: current directory) + + Returns: + Merged dictionary with all file references resolved + """ + + def load_json_file(filename: str) -> Dict[str, Any]: + """Load a JSON file and return its content.""" + filepath = os.path.join(models_folder, f"{filename}.json") + try: + with open(filepath, 'r', encoding='utf-8') as f: + return json.load(f) + except FileNotFoundError: + raise FileNotFoundError(f"JSON file not found: {filepath}") + except json.JSONDecodeError as e: + raise ValueError(f"Invalid JSON in file {filepath}: {e}") + + def resolve_references(data: Any, visited: set = None) -> Any: + """ + Recursively resolve file references in the data structure. + + Args: + data: The data to process (can be dict, list, or primitive) + visited: Set of visited files to prevent circular references + + Returns: + Data with all file references resolved + """ + if visited is None: + visited = set() + + if isinstance(data, dict): + # Process dictionary recursively + result = {} + for key, value in data.items(): + result[key] = resolve_references(value, visited) + return result + + elif isinstance(data, list): + # Process each item in the list + result = [] + for item in data: + if isinstance(item, str): + # Check if this string references a JSON file + json_filepath = os.path.join(models_folder, f"{item}.json") + + if os.path.exists(json_filepath): + # This is a file reference + if item in visited: + raise ValueError(f"Circular reference detected: {item}") + + visited.add(item) + file_content = load_json_file(item) + resolved_content = resolve_references(file_content, visited.copy()) + result.append(resolved_content) + visited.remove(item) + else: + # This is a literal equipment tag + result.append(item) + else: + # Recursively process non-string items + result.append(resolve_references(item, visited)) + return result + + else: + # Return primitive values as-is + return data + + # Load the main file + main_content = load_json_file(main_file) + + # Resolve all references + merged_result = resolve_references(main_content) + + return merged_result + +def save_merged_model(merged_data: Dict[str, Any], output_file: str = "result.json") -> None: + """ + Save the merged model to a JSON file. + + Args: + merged_data: The merged data dictionary + output_file: Output filename (default: "result.json") + """ + with open(output_file, 'w', encoding='utf-8') as f: + json.dump(merged_data, f, indent=2, ensure_ascii=False) + print(f"Merged model saved to: {output_file}") + +def print_structure(data: Any, indent: int = 0) -> None: + """ + Print the structure of the merged model in a readable format. + + Args: + data: The data to print + indent: Current indentation level + """ + spaces = " " * indent + + if isinstance(data, dict): + for key, value in data.items(): + print(f"{spaces}{key}:") + print_structure(value, indent + 1) + elif isinstance(data, list): + for i, item in enumerate(data): + if isinstance(item, str): + print(f"{spaces}[{i}] {item}") + else: + print(f"{spaces}[{i}]:") + print_structure(item, indent + 1) + else: + print(f"{spaces}{data}") + +# Example usage +if __name__ == "__main__": + try: + # Set your main file name here + main_file = "- TJB - Unit 3 -" + + # Set the folder containing your JSON files (default: current directory) + models_folder = "RBD Model" + + print(f"Loading and merging models starting from: {main_file}.json") + print(f"Looking for JSON files in: {os.path.abspath(models_folder)}") + print("-" * 50) + + # Load and merge all models + merged_model = load_and_merge_models(main_file, models_folder) + + # Print the structure + print("Merged model structure:") + print_structure(merged_model) + print("-" * 50) + + # Save to result.json + save_merged_model(merged_model, "result.json") + + # Also save a pretty-printed version for inspection + print("\nMerged model JSON:") + print(json.dumps(merged_model, indent=2, ensure_ascii=False)) + + except Exception as e: + print(f"Error: {e}") + print("\nMake sure your JSON files are in the correct format and the main file exists.") + +# Additional utility functions +def validate_model_structure(data: Any) -> bool: + """ + Validate that the model structure follows the expected format. + + Returns: + True if valid, False otherwise + """ + if not isinstance(data, dict): + return False + + valid_keys = {"series", "parallel", "parallel_no_redundancy"} + + if len(data) != 1: + return False + + key = next(iter(data.keys())) + if key not in valid_keys: + return False + + value = data[key] + if not isinstance(value, list): + return False + + # Recursively validate nested structures + for item in value: + if isinstance(item, dict): + if not validate_model_structure(item): + return False + elif not isinstance(item, str): + return False + + return True + +def get_all_equipment_tags(data: Any) -> List[str]: + """ + Extract all equipment tags from the merged model. + + Args: + data: The merged model data + + Returns: + List of all equipment tag strings found in the model + """ + tags = [] + + if isinstance(data, dict): + for value in data.values(): + tags.extend(get_all_equipment_tags(value)) + elif isinstance(data, list): + for item in data: + if isinstance(item, str): + tags.append(item) + else: + tags.extend(get_all_equipment_tags(item)) + + return tags \ No newline at end of file diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..ee3d499 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,3679 @@ +# This file is automatically @generated by Poetry 2.1.4 and should not be changed by hand. + +[[package]] +name = "aiohappyeyeballs" +version = "2.6.1" +description = "Happy Eyeballs for asyncio" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8"}, + {file = "aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558"}, +] + +[[package]] +name = "aiohttp" +version = "3.13.3" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "aiohttp-3.13.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5a372fd5afd301b3a89582817fdcdb6c34124787c70dbcc616f259013e7eef7"}, + {file = "aiohttp-3.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:147e422fd1223005c22b4fe080f5d93ced44460f5f9c105406b753612b587821"}, + {file = "aiohttp-3.13.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:859bd3f2156e81dd01432f5849fc73e2243d4a487c4fd26609b1299534ee1845"}, + {file = "aiohttp-3.13.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dca68018bf48c251ba17c72ed479f4dafe9dbd5a73707ad8d28a38d11f3d42af"}, + {file = "aiohttp-3.13.3-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fee0c6bc7db1de362252affec009707a17478a00ec69f797d23ca256e36d5940"}, + {file = "aiohttp-3.13.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c048058117fd649334d81b4b526e94bde3ccaddb20463a815ced6ecbb7d11160"}, + {file = "aiohttp-3.13.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:215a685b6fbbfcf71dfe96e3eba7a6f58f10da1dfdf4889c7dd856abe430dca7"}, + {file = "aiohttp-3.13.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2c184bb1fe2cbd2cefba613e9db29a5ab559323f994b6737e370d3da0ac455"}, + {file = "aiohttp-3.13.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:75ca857eba4e20ce9f546cd59c7007b33906a4cd48f2ff6ccf1ccfc3b646f279"}, + {file = "aiohttp-3.13.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81e97251d9298386c2b7dbeb490d3d1badbdc69107fb8c9299dd04eb39bddc0e"}, + {file = "aiohttp-3.13.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c0e2d366af265797506f0283487223146af57815b388623f0357ef7eac9b209d"}, + {file = "aiohttp-3.13.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4e239d501f73d6db1522599e14b9b321a7e3b1de66ce33d53a765d975e9f4808"}, + {file = "aiohttp-3.13.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:0db318f7a6f065d84cb1e02662c526294450b314a02bd9e2a8e67f0d8564ce40"}, + {file = "aiohttp-3.13.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:bfc1cc2fe31a6026a8a88e4ecfb98d7f6b1fec150cfd708adbfd1d2f42257c29"}, + {file = "aiohttp-3.13.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af71fff7bac6bb7508956696dce8f6eec2bbb045eceb40343944b1ae62b5ef11"}, + {file = "aiohttp-3.13.3-cp310-cp310-win32.whl", hash = "sha256:37da61e244d1749798c151421602884db5270faf479cf0ef03af0ff68954c9dd"}, + {file = "aiohttp-3.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:7e63f210bc1b57ef699035f2b4b6d9ce096b5914414a49b0997c839b2bd2223c"}, + {file = "aiohttp-3.13.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5b6073099fb654e0a068ae678b10feff95c5cae95bbfcbfa7af669d361a8aa6b"}, + {file = "aiohttp-3.13.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cb93e166e6c28716c8c6aeb5f99dfb6d5ccf482d29fe9bf9a794110e6d0ab64"}, + {file = "aiohttp-3.13.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:28e027cf2f6b641693a09f631759b4d9ce9165099d2b5d92af9bd4e197690eea"}, + {file = "aiohttp-3.13.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3b61b7169ababd7802f9568ed96142616a9118dd2be0d1866e920e77ec8fa92a"}, + {file = "aiohttp-3.13.3-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:80dd4c21b0f6237676449c6baaa1039abae86b91636b6c91a7f8e61c87f89540"}, + {file = "aiohttp-3.13.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:65d2ccb7eabee90ce0503c17716fc77226be026dcc3e65cce859a30db715025b"}, + {file = "aiohttp-3.13.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5b179331a481cb5529fca8b432d8d3c7001cb217513c94cd72d668d1248688a3"}, + {file = "aiohttp-3.13.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d4c940f02f49483b18b079d1c27ab948721852b281f8b015c058100e9421dd1"}, + {file = "aiohttp-3.13.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f9444f105664c4ce47a2a7171a2418bce5b7bae45fb610f4e2c36045d85911d3"}, + {file = "aiohttp-3.13.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:694976222c711d1d00ba131904beb60534f93966562f64440d0c9d41b8cdb440"}, + {file = "aiohttp-3.13.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f33ed1a2bf1997a36661874b017f5c4b760f41266341af36febaf271d179f6d7"}, + {file = "aiohttp-3.13.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e636b3c5f61da31a92bf0d91da83e58fdfa96f178ba682f11d24f31944cdd28c"}, + {file = "aiohttp-3.13.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:5d2d94f1f5fcbe40838ac51a6ab5704a6f9ea42e72ceda48de5e6b898521da51"}, + {file = "aiohttp-3.13.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2be0e9ccf23e8a94f6f0650ce06042cefc6ac703d0d7ab6c7a917289f2539ad4"}, + {file = "aiohttp-3.13.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9af5e68ee47d6534d36791bbe9b646d2a7c7deb6fc24d7943628edfbb3581f29"}, + {file = "aiohttp-3.13.3-cp311-cp311-win32.whl", hash = "sha256:a2212ad43c0833a873d0fb3c63fa1bacedd4cf6af2fee62bf4b739ceec3ab239"}, + {file = "aiohttp-3.13.3-cp311-cp311-win_amd64.whl", hash = "sha256:642f752c3eb117b105acbd87e2c143de710987e09860d674e068c4c2c441034f"}, + {file = "aiohttp-3.13.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b903a4dfee7d347e2d87697d0713be59e0b87925be030c9178c5faa58ea58d5c"}, + {file = "aiohttp-3.13.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a45530014d7a1e09f4a55f4f43097ba0fd155089372e105e4bff4ca76cb1b168"}, + {file = "aiohttp-3.13.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:27234ef6d85c914f9efeb77ff616dbf4ad2380be0cda40b4db086ffc7ddd1b7d"}, + {file = "aiohttp-3.13.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d32764c6c9aafb7fb55366a224756387cd50bfa720f32b88e0e6fa45b27dcf29"}, + {file = "aiohttp-3.13.3-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b1a6102b4d3ebc07dad44fbf07b45bb600300f15b552ddf1851b5390202ea2e3"}, + {file = "aiohttp-3.13.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c014c7ea7fb775dd015b2d3137378b7be0249a448a1612268b5a90c2d81de04d"}, + {file = "aiohttp-3.13.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2b8d8ddba8f95ba17582226f80e2de99c7a7948e66490ef8d947e272a93e9463"}, + {file = "aiohttp-3.13.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ae8dd55c8e6c4257eae3a20fd2c8f41edaea5992ed67156642493b8daf3cecc"}, + {file = "aiohttp-3.13.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:01ad2529d4b5035578f5081606a465f3b814c542882804e2e8cda61adf5c71bf"}, + {file = "aiohttp-3.13.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bb4f7475e359992b580559e008c598091c45b5088f28614e855e42d39c2f1033"}, + {file = "aiohttp-3.13.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c19b90316ad3b24c69cd78d5c9b4f3aa4497643685901185b65166293d36a00f"}, + {file = "aiohttp-3.13.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:96d604498a7c782cb15a51c406acaea70d8c027ee6b90c569baa6e7b93073679"}, + {file = "aiohttp-3.13.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:084911a532763e9d3dd95adf78a78f4096cd5f58cdc18e6fdbc1b58417a45423"}, + {file = "aiohttp-3.13.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7a4a94eb787e606d0a09404b9c38c113d3b099d508021faa615d70a0131907ce"}, + {file = "aiohttp-3.13.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:87797e645d9d8e222e04160ee32aa06bc5c163e8499f24db719e7852ec23093a"}, + {file = "aiohttp-3.13.3-cp312-cp312-win32.whl", hash = "sha256:b04be762396457bef43f3597c991e192ee7da460a4953d7e647ee4b1c28e7046"}, + {file = "aiohttp-3.13.3-cp312-cp312-win_amd64.whl", hash = "sha256:e3531d63d3bdfa7e3ac5e9b27b2dd7ec9df3206a98e0b3445fa906f233264c57"}, + {file = "aiohttp-3.13.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5dff64413671b0d3e7d5918ea490bdccb97a4ad29b3f311ed423200b2203e01c"}, + {file = "aiohttp-3.13.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:87b9aab6d6ed88235aa2970294f496ff1a1f9adcd724d800e9b952395a80ffd9"}, + {file = "aiohttp-3.13.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:425c126c0dc43861e22cb1c14ba4c8e45d09516d0a3ae0a3f7494b79f5f233a3"}, + {file = "aiohttp-3.13.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7f9120f7093c2a32d9647abcaf21e6ad275b4fbec5b55969f978b1a97c7c86bf"}, + {file = "aiohttp-3.13.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:697753042d57f4bf7122cab985bf15d0cef23c770864580f5af4f52023a56bd6"}, + {file = "aiohttp-3.13.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6de499a1a44e7de70735d0b39f67c8f25eb3d91eb3103be99ca0fa882cdd987d"}, + {file = "aiohttp-3.13.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:37239e9f9a7ea9ac5bf6b92b0260b01f8a22281996da609206a84df860bc1261"}, + {file = "aiohttp-3.13.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f76c1e3fe7d7c8afad7ed193f89a292e1999608170dcc9751a7462a87dfd5bc0"}, + {file = "aiohttp-3.13.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fc290605db2a917f6e81b0e1e0796469871f5af381ce15c604a3c5c7e51cb730"}, + {file = "aiohttp-3.13.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4021b51936308aeea0367b8f006dc999ca02bc118a0cc78c303f50a2ff6afb91"}, + {file = "aiohttp-3.13.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:49a03727c1bba9a97d3e93c9f93ca03a57300f484b6e935463099841261195d3"}, + {file = "aiohttp-3.13.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3d9908a48eb7416dc1f4524e69f1d32e5d90e3981e4e37eb0aa1cd18f9cfa2a4"}, + {file = "aiohttp-3.13.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2712039939ec963c237286113c68dbad80a82a4281543f3abf766d9d73228998"}, + {file = "aiohttp-3.13.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7bfdc049127717581866fa4708791220970ce291c23e28ccf3922c700740fdc0"}, + {file = "aiohttp-3.13.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8057c98e0c8472d8846b9c79f56766bcc57e3e8ac7bfd510482332366c56c591"}, + {file = "aiohttp-3.13.3-cp313-cp313-win32.whl", hash = "sha256:1449ceddcdbcf2e0446957863af03ebaaa03f94c090f945411b61269e2cb5daf"}, + {file = "aiohttp-3.13.3-cp313-cp313-win_amd64.whl", hash = "sha256:693781c45a4033d31d4187d2436f5ac701e7bbfe5df40d917736108c1cc7436e"}, + {file = "aiohttp-3.13.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:ea37047c6b367fd4bd632bff8077449b8fa034b69e812a18e0132a00fae6e808"}, + {file = "aiohttp-3.13.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6fc0e2337d1a4c3e6acafda6a78a39d4c14caea625124817420abceed36e2415"}, + {file = "aiohttp-3.13.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c685f2d80bb67ca8c3837823ad76196b3694b0159d232206d1e461d3d434666f"}, + {file = "aiohttp-3.13.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48e377758516d262bde50c2584fc6c578af272559c409eecbdd2bae1601184d6"}, + {file = "aiohttp-3.13.3-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:34749271508078b261c4abb1767d42b8d0c0cc9449c73a4df494777dc55f0687"}, + {file = "aiohttp-3.13.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:82611aeec80eb144416956ec85b6ca45a64d76429c1ed46ae1b5f86c6e0c9a26"}, + {file = "aiohttp-3.13.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2fff83cfc93f18f215896e3a190e8e5cb413ce01553901aca925176e7568963a"}, + {file = "aiohttp-3.13.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bbe7d4cecacb439e2e2a8a1a7b935c25b812af7a5fd26503a66dadf428e79ec1"}, + {file = "aiohttp-3.13.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b928f30fe49574253644b1ca44b1b8adbd903aa0da4b9054a6c20fc7f4092a25"}, + {file = "aiohttp-3.13.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7b5e8fe4de30df199155baaf64f2fcd604f4c678ed20910db8e2c66dc4b11603"}, + {file = "aiohttp-3.13.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:8542f41a62bcc58fc7f11cf7c90e0ec324ce44950003feb70640fc2a9092c32a"}, + {file = "aiohttp-3.13.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:5e1d8c8b8f1d91cd08d8f4a3c2b067bfca6ec043d3ff36de0f3a715feeedf926"}, + {file = "aiohttp-3.13.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:90455115e5da1c3c51ab619ac57f877da8fd6d73c05aacd125c5ae9819582aba"}, + {file = "aiohttp-3.13.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:042e9e0bcb5fba81886c8b4fbb9a09d6b8a00245fd8d88e4d989c1f96c74164c"}, + {file = "aiohttp-3.13.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2eb752b102b12a76ca02dff751a801f028b4ffbbc478840b473597fc91a9ed43"}, + {file = "aiohttp-3.13.3-cp314-cp314-win32.whl", hash = "sha256:b556c85915d8efaed322bf1bdae9486aa0f3f764195a0fb6ee962e5c71ef5ce1"}, + {file = "aiohttp-3.13.3-cp314-cp314-win_amd64.whl", hash = "sha256:9bf9f7a65e7aa20dd764151fb3d616c81088f91f8df39c3893a536e279b4b984"}, + {file = "aiohttp-3.13.3-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:05861afbbec40650d8a07ea324367cb93e9e8cc7762e04dd4405df99fa65159c"}, + {file = "aiohttp-3.13.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2fc82186fadc4a8316768d61f3722c230e2c1dcab4200d52d2ebdf2482e47592"}, + {file = "aiohttp-3.13.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0add0900ff220d1d5c5ebbf99ed88b0c1bbf87aa7e4262300ed1376a6b13414f"}, + {file = "aiohttp-3.13.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:568f416a4072fbfae453dcf9a99194bbb8bdeab718e08ee13dfa2ba0e4bebf29"}, + {file = "aiohttp-3.13.3-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:add1da70de90a2569c5e15249ff76a631ccacfe198375eead4aadf3b8dc849dc"}, + {file = "aiohttp-3.13.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:10b47b7ba335d2e9b1239fa571131a87e2d8ec96b333e68b2a305e7a98b0bae2"}, + {file = "aiohttp-3.13.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3dd4dce1c718e38081c8f35f323209d4c1df7d4db4bab1b5c88a6b4d12b74587"}, + {file = "aiohttp-3.13.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34bac00a67a812570d4a460447e1e9e06fae622946955f939051e7cc895cfab8"}, + {file = "aiohttp-3.13.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a19884d2ee70b06d9204b2727a7b9f983d0c684c650254679e716b0b77920632"}, + {file = "aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5f8ca7f2bb6ba8348a3614c7918cc4bb73268c5ac2a207576b7afea19d3d9f64"}, + {file = "aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:b0d95340658b9d2f11d9697f59b3814a9d3bb4b7a7c20b131df4bcef464037c0"}, + {file = "aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:a1e53262fd202e4b40b70c3aff944a8155059beedc8a89bba9dc1f9ef06a1b56"}, + {file = "aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:d60ac9663f44168038586cab2157e122e46bdef09e9368b37f2d82d354c23f72"}, + {file = "aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:90751b8eed69435bac9ff4e3d2f6b3af1f57e37ecb0fbeee59c0174c9e2d41df"}, + {file = "aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fc353029f176fd2b3ec6cfc71be166aba1936fe5d73dd1992ce289ca6647a9aa"}, + {file = "aiohttp-3.13.3-cp314-cp314t-win32.whl", hash = "sha256:2e41b18a58da1e474a057b3d35248d8320029f61d70a37629535b16a0c8f3767"}, + {file = "aiohttp-3.13.3-cp314-cp314t-win_amd64.whl", hash = "sha256:44531a36aa2264a1860089ffd4dce7baf875ee5a6079d5fb42e261c704ef7344"}, + {file = "aiohttp-3.13.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:31a83ea4aead760dfcb6962efb1d861db48c34379f2ff72db9ddddd4cda9ea2e"}, + {file = "aiohttp-3.13.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:988a8c5e317544fdf0d39871559e67b6341065b87fceac641108c2096d5506b7"}, + {file = "aiohttp-3.13.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9b174f267b5cfb9a7dba9ee6859cecd234e9a681841eb85068059bc867fb8f02"}, + {file = "aiohttp-3.13.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:947c26539750deeaee933b000fb6517cc770bbd064bad6033f1cff4803881e43"}, + {file = "aiohttp-3.13.3-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9ebf57d09e131f5323464bd347135a88622d1c0976e88ce15b670e7ad57e4bd6"}, + {file = "aiohttp-3.13.3-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4ae5b5a0e1926e504c81c5b84353e7a5516d8778fbbff00429fe7b05bb25cbce"}, + {file = "aiohttp-3.13.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2ba0eea45eb5cc3172dbfc497c066f19c41bac70963ea1a67d51fc92e4cf9a80"}, + {file = "aiohttp-3.13.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bae5c2ed2eae26cc382020edad80d01f36cb8e746da40b292e68fec40421dc6a"}, + {file = "aiohttp-3.13.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8a60e60746623925eab7d25823329941aee7242d559baa119ca2b253c88a7bd6"}, + {file = "aiohttp-3.13.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e50a2e1404f063427c9d027378472316201a2290959a295169bcf25992d04558"}, + {file = "aiohttp-3.13.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:9a9dc347e5a3dc7dfdbc1f82da0ef29e388ddb2ed281bfce9dd8248a313e62b7"}, + {file = "aiohttp-3.13.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b46020d11d23fe16551466c77823df9cc2f2c1e63cc965daf67fa5eec6ca1877"}, + {file = "aiohttp-3.13.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:69c56fbc1993fa17043e24a546959c0178fe2b5782405ad4559e6c13975c15e3"}, + {file = "aiohttp-3.13.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:b99281b0704c103d4e11e72a76f1b543d4946fea7dd10767e7e1b5f00d4e5704"}, + {file = "aiohttp-3.13.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:40c5e40ecc29ba010656c18052b877a1c28f84344825efa106705e835c28530f"}, + {file = "aiohttp-3.13.3-cp39-cp39-win32.whl", hash = "sha256:56339a36b9f1fc708260c76c87e593e2afb30d26de9ae1eb445b5e051b98a7a1"}, + {file = "aiohttp-3.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:c6b8568a3bb5819a0ad087f16d40e5a3fb6099f39ea1d5625a3edc1e923fc538"}, + {file = "aiohttp-3.13.3.tar.gz", hash = "sha256:a949eee43d3782f2daae4f4a2819b2cb9b0c5d3b7f7a927067cc84dafdbb9f88"}, +] + +[package.dependencies] +aiohappyeyeballs = ">=2.5.0" +aiosignal = ">=1.4.0" +attrs = ">=17.3.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +propcache = ">=0.2.0" +yarl = ">=1.17.0,<2.0" + +[package.extras] +speedups = ["Brotli (>=1.2) ; platform_python_implementation == \"CPython\"", "aiodns (>=3.3.0)", "backports.zstd ; platform_python_implementation == \"CPython\" and python_version < \"3.14\"", "brotlicffi (>=1.2) ; platform_python_implementation != \"CPython\""] + +[[package]] +name = "aiosignal" +version = "1.4.0" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e"}, + {file = "aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" +typing-extensions = {version = ">=4.2", markers = "python_version < \"3.13\""} + +[[package]] +name = "aiosqlite" +version = "0.20.0" +description = "asyncio bridge to the standard sqlite3 module" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "aiosqlite-0.20.0-py3-none-any.whl", hash = "sha256:36a1deaca0cac40ebe32aac9977a6e2bbc7f5189f23f4a54d5908986729e5bd6"}, + {file = "aiosqlite-0.20.0.tar.gz", hash = "sha256:6d35c8c256637f4672f843c31021464090805bf925385ac39473fb16eaaca3d7"}, +] + +[package.dependencies] +typing_extensions = ">=4.0" + +[package.extras] +dev = ["attribution (==1.7.0)", "black (==24.2.0)", "coverage[toml] (==7.4.1)", "flake8 (==7.0.0)", "flake8-bugbear (==24.2.6)", "flit (==3.9.0)", "mypy (==1.8.0)", "ufmt (==2.3.0)", "usort (==1.0.8.post1)"] +docs = ["sphinx (==7.2.6)", "sphinx-mdinclude (==0.5.3)"] + +[[package]] +name = "annotated-doc" +version = "0.0.4" +description = "Document parameters, class attributes, return types, and variables inline, with Annotated." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320"}, + {file = "annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4"}, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + +[[package]] +name = "anyio" +version = "4.12.1" +description = "High-level concurrency and networking framework on top of asyncio or Trio" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c"}, + {file = "anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703"}, +] + +[package.dependencies] +idna = ">=2.8" +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} + +[package.extras] +trio = ["trio (>=0.31.0) ; python_version < \"3.10\"", "trio (>=0.32.0) ; python_version >= \"3.10\""] + +[[package]] +name = "async-timeout" +version = "5.0.1" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version == \"3.11\" and python_full_version < \"3.11.3\"" +files = [ + {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, + {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, +] + +[[package]] +name = "asyncpg" +version = "0.30.0" +description = "An asyncio PostgreSQL driver" +optional = false +python-versions = ">=3.8.0" +groups = ["main"] +files = [ + {file = "asyncpg-0.30.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bfb4dd5ae0699bad2b233672c8fc5ccbd9ad24b89afded02341786887e37927e"}, + {file = "asyncpg-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc1f62c792752a49f88b7e6f774c26077091b44caceb1983509edc18a2222ec0"}, + {file = "asyncpg-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3152fef2e265c9c24eec4ee3d22b4f4d2703d30614b0b6753e9ed4115c8a146f"}, + {file = "asyncpg-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7255812ac85099a0e1ffb81b10dc477b9973345793776b128a23e60148dd1af"}, + {file = "asyncpg-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:578445f09f45d1ad7abddbff2a3c7f7c291738fdae0abffbeb737d3fc3ab8b75"}, + {file = "asyncpg-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c42f6bb65a277ce4d93f3fba46b91a265631c8df7250592dd4f11f8b0152150f"}, + {file = "asyncpg-0.30.0-cp310-cp310-win32.whl", hash = "sha256:aa403147d3e07a267ada2ae34dfc9324e67ccc4cdca35261c8c22792ba2b10cf"}, + {file = "asyncpg-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb622c94db4e13137c4c7f98834185049cc50ee01d8f657ef898b6407c7b9c50"}, + {file = "asyncpg-0.30.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5e0511ad3dec5f6b4f7a9e063591d407eee66b88c14e2ea636f187da1dcfff6a"}, + {file = "asyncpg-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:915aeb9f79316b43c3207363af12d0e6fd10776641a7de8a01212afd95bdf0ed"}, + {file = "asyncpg-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c198a00cce9506fcd0bf219a799f38ac7a237745e1d27f0e1f66d3707c84a5a"}, + {file = "asyncpg-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3326e6d7381799e9735ca2ec9fd7be4d5fef5dcbc3cb555d8a463d8460607956"}, + {file = "asyncpg-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:51da377487e249e35bd0859661f6ee2b81db11ad1f4fc036194bc9cb2ead5056"}, + {file = "asyncpg-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bc6d84136f9c4d24d358f3b02be4b6ba358abd09f80737d1ac7c444f36108454"}, + {file = "asyncpg-0.30.0-cp311-cp311-win32.whl", hash = "sha256:574156480df14f64c2d76450a3f3aaaf26105869cad3865041156b38459e935d"}, + {file = "asyncpg-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:3356637f0bd830407b5597317b3cb3571387ae52ddc3bca6233682be88bbbc1f"}, + {file = "asyncpg-0.30.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c902a60b52e506d38d7e80e0dd5399f657220f24635fee368117b8b5fce1142e"}, + {file = "asyncpg-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aca1548e43bbb9f0f627a04666fedaca23db0a31a84136ad1f868cb15deb6e3a"}, + {file = "asyncpg-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c2a2ef565400234a633da0eafdce27e843836256d40705d83ab7ec42074efb3"}, + {file = "asyncpg-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1292b84ee06ac8a2ad8e51c7475aa309245874b61333d97411aab835c4a2f737"}, + {file = "asyncpg-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0f5712350388d0cd0615caec629ad53c81e506b1abaaf8d14c93f54b35e3595a"}, + {file = "asyncpg-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:db9891e2d76e6f425746c5d2da01921e9a16b5a71a1c905b13f30e12a257c4af"}, + {file = "asyncpg-0.30.0-cp312-cp312-win32.whl", hash = "sha256:68d71a1be3d83d0570049cd1654a9bdfe506e794ecc98ad0873304a9f35e411e"}, + {file = "asyncpg-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:9a0292c6af5c500523949155ec17b7fe01a00ace33b68a476d6b5059f9630305"}, + {file = "asyncpg-0.30.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05b185ebb8083c8568ea8a40e896d5f7af4b8554b64d7719c0eaa1eb5a5c3a70"}, + {file = "asyncpg-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c47806b1a8cbb0a0db896f4cd34d89942effe353a5035c62734ab13b9f938da3"}, + {file = "asyncpg-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b6fde867a74e8c76c71e2f64f80c64c0f3163e687f1763cfaf21633ec24ec33"}, + {file = "asyncpg-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46973045b567972128a27d40001124fbc821c87a6cade040cfcd4fa8a30bcdc4"}, + {file = "asyncpg-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9110df111cabc2ed81aad2f35394a00cadf4f2e0635603db6ebbd0fc896f46a4"}, + {file = "asyncpg-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:04ff0785ae7eed6cc138e73fc67b8e51d54ee7a3ce9b63666ce55a0bf095f7ba"}, + {file = "asyncpg-0.30.0-cp313-cp313-win32.whl", hash = "sha256:ae374585f51c2b444510cdf3595b97ece4f233fde739aa14b50e0d64e8a7a590"}, + {file = "asyncpg-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:f59b430b8e27557c3fb9869222559f7417ced18688375825f8f12302c34e915e"}, + {file = "asyncpg-0.30.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:29ff1fc8b5bf724273782ff8b4f57b0f8220a1b2324184846b39d1ab4122031d"}, + {file = "asyncpg-0.30.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64e899bce0600871b55368b8483e5e3e7f1860c9482e7f12e0a771e747988168"}, + {file = "asyncpg-0.30.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b290f4726a887f75dcd1b3006f484252db37602313f806e9ffc4e5996cfe5cb"}, + {file = "asyncpg-0.30.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f86b0e2cd3f1249d6fe6fd6cfe0cd4538ba994e2d8249c0491925629b9104d0f"}, + {file = "asyncpg-0.30.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:393af4e3214c8fa4c7b86da6364384c0d1b3298d45803375572f415b6f673f38"}, + {file = "asyncpg-0.30.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:fd4406d09208d5b4a14db9a9dbb311b6d7aeeab57bded7ed2f8ea41aeef39b34"}, + {file = "asyncpg-0.30.0-cp38-cp38-win32.whl", hash = "sha256:0b448f0150e1c3b96cb0438a0d0aa4871f1472e58de14a3ec320dbb2798fb0d4"}, + {file = "asyncpg-0.30.0-cp38-cp38-win_amd64.whl", hash = "sha256:f23b836dd90bea21104f69547923a02b167d999ce053f3d502081acea2fba15b"}, + {file = "asyncpg-0.30.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f4e83f067b35ab5e6371f8a4c93296e0439857b4569850b178a01385e82e9ad"}, + {file = "asyncpg-0.30.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5df69d55add4efcd25ea2a3b02025b669a285b767bfbf06e356d68dbce4234ff"}, + {file = "asyncpg-0.30.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3479a0d9a852c7c84e822c073622baca862d1217b10a02dd57ee4a7a081f708"}, + {file = "asyncpg-0.30.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26683d3b9a62836fad771a18ecf4659a30f348a561279d6227dab96182f46144"}, + {file = "asyncpg-0.30.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1b982daf2441a0ed314bd10817f1606f1c28b1136abd9e4f11335358c2c631cb"}, + {file = "asyncpg-0.30.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1c06a3a50d014b303e5f6fc1e5f95eb28d2cee89cf58384b700da621e5d5e547"}, + {file = "asyncpg-0.30.0-cp39-cp39-win32.whl", hash = "sha256:1b11a555a198b08f5c4baa8f8231c74a366d190755aa4f99aacec5970afe929a"}, + {file = "asyncpg-0.30.0-cp39-cp39-win_amd64.whl", hash = "sha256:8b684a3c858a83cd876f05958823b68e8d14ec01bb0c0d14a6704c5bf9711773"}, + {file = "asyncpg-0.30.0.tar.gz", hash = "sha256:c551e9928ab6707602f44811817f82ba3c446e018bfe1d3abecc8ba5f3eac851"}, +] + +[package.extras] +docs = ["Sphinx (>=8.1.3,<8.2.0)", "sphinx-rtd-theme (>=1.2.2)"] +gssauth = ["gssapi ; platform_system != \"Windows\"", "sspilib ; platform_system == \"Windows\""] +test = ["distro (>=1.9.0,<1.10.0)", "flake8 (>=6.1,<7.0)", "flake8-pyi (>=24.1.0,<24.2.0)", "gssapi ; platform_system == \"Linux\"", "k5test ; platform_system == \"Linux\"", "mypy (>=1.8.0,<1.9.0)", "sspilib ; platform_system == \"Windows\"", "uvloop (>=0.15.3) ; platform_system != \"Windows\" and python_version < \"3.14.0\""] + +[[package]] +name = "attrs" +version = "25.4.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"}, + {file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"}, +] + +[[package]] +name = "certifi" +version = "2026.1.4" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c"}, + {file = "certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.4" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d"}, + {file = "charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016"}, + {file = "charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525"}, + {file = "charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14"}, + {file = "charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c"}, + {file = "charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-win32.whl", hash = "sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa"}, + {file = "charset_normalizer-3.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966"}, + {file = "charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50"}, + {file = "charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f"}, + {file = "charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a"}, +] + +[[package]] +name = "clamd" +version = "1.0.2" +description = "Clamd is a python interface to Clamd (Clamav daemon)." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "clamd-1.0.2-py2.py3-none-any.whl", hash = "sha256:5c32546b7d1eb00fd6be00a889d79e00fbf980ed082826ccfa369bce3dcff5e7"}, + {file = "clamd-1.0.2.tar.gz", hash = "sha256:d82a2fd814684a35a1b31feadafb2e69c8ebde9403613f6bdaa5d877c0f29560"}, +] + +[[package]] +name = "click" +version = "8.3.1" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6"}, + {file = "click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main"] +markers = "platform_system == \"Windows\" or sys_platform == \"win32\"" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "deprecated" +version = "1.3.1" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +groups = ["main"] +files = [ + {file = "deprecated-1.3.1-py2.py3-none-any.whl", hash = "sha256:597bfef186b6f60181535a29fbe44865ce137a5079f295b479886c82729d5f3f"}, + {file = "deprecated-1.3.1.tar.gz", hash = "sha256:b1b50e0ff0c1fddaa5708a2c6b0a6588bb09b892825ab2b214ac9ea9d92a5223"}, +] + +[package.dependencies] +wrapt = ">=1.10,<3" + +[package.extras] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools ; python_version >= \"3.12\"", "tox"] + +[[package]] +name = "dnspython" +version = "2.8.0" +description = "DNS toolkit" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af"}, + {file = "dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f"}, +] + +[package.extras] +dev = ["black (>=25.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "hypercorn (>=0.17.0)", "mypy (>=1.17)", "pylint (>=3)", "pytest (>=8.4)", "pytest-cov (>=6.2.0)", "quart-trio (>=0.12.0)", "sphinx (>=8.2.0)", "sphinx-rtd-theme (>=3.0.0)", "twine (>=6.1.0)", "wheel (>=0.45.0)"] +dnssec = ["cryptography (>=45)"] +doh = ["h2 (>=4.2.0)", "httpcore (>=1.0.0)", "httpx (>=0.28.0)"] +doq = ["aioquic (>=1.2.0)"] +idna = ["idna (>=3.10)"] +trio = ["trio (>=0.30)"] +wmi = ["wmi (>=1.5.1) ; platform_system == \"Windows\""] + +[[package]] +name = "dotenv" +version = "0.9.9" +description = "Deprecated package" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "dotenv-0.9.9-py2.py3-none-any.whl", hash = "sha256:29cf74a087b31dafdb5a446b6d7e11cbce8ed2741540e2339c69fbef92c94ce9"}, +] + +[package.dependencies] +python-dotenv = "*" + +[[package]] +name = "email-validator" +version = "2.3.0" +description = "A robust email address syntax and deliverability validation library." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4"}, + {file = "email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426"}, +] + +[package.dependencies] +dnspython = ">=2.0.0" +idna = ">=2.0.0" + +[[package]] +name = "et-xmlfile" +version = "2.0.0" +description = "An implementation of lxml.xmlfile for the standard library" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa"}, + {file = "et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54"}, +] + +[[package]] +name = "factory-boy" +version = "3.3.3" +description = "A versatile test fixtures replacement based on thoughtbot's factory_bot for Ruby." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "factory_boy-3.3.3-py2.py3-none-any.whl", hash = "sha256:1c39e3289f7e667c4285433f305f8d506efc2fe9c73aaea4151ebd5cdea394fc"}, + {file = "factory_boy-3.3.3.tar.gz", hash = "sha256:866862d226128dfac7f2b4160287e899daf54f2612778327dd03d0e2cb1e3d03"}, +] + +[package.dependencies] +Faker = ">=0.7.0" + +[package.extras] +dev = ["Django", "Pillow", "SQLAlchemy", "coverage", "flake8", "isort", "mongoengine", "mongomock", "mypy", "tox", "wheel (>=0.32.0)", "zest.releaser[recommended]"] +doc = ["Sphinx", "sphinx-rtd-theme", "sphinxcontrib-spelling"] + +[[package]] +name = "faker" +version = "30.10.0" +description = "Faker is a Python package that generates fake data for you." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "Faker-30.10.0-py3-none-any.whl", hash = "sha256:5f05ee92ddf0e1736d95dca41b2a16ee06d987b736fa4ddecdb047abf2e9024b"}, + {file = "faker-30.10.0.tar.gz", hash = "sha256:c2e627d3becec67f7a45400d3670018b5abb3f0728b7dfaa06c135b7df1ce3fb"}, +] + +[package.dependencies] +python-dateutil = ">=2.4" +typing-extensions = "*" + +[[package]] +name = "fastapi" +version = "0.115.14" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "fastapi-0.115.14-py3-none-any.whl", hash = "sha256:6c0c8bf9420bd58f565e585036d971872472b4f7d3f6c73b698e10cffdefb3ca"}, + {file = "fastapi-0.115.14.tar.gz", hash = "sha256:b1de15cdc1c499a4da47914db35d0e4ef8f1ce62b624e94e0e5824421df99739"}, +] + +[package.dependencies] +email-validator = {version = ">=2.0.0", optional = true, markers = "extra == \"standard\""} +fastapi-cli = {version = ">=0.0.5", extras = ["standard"], optional = true, markers = "extra == \"standard\""} +httpx = {version = ">=0.23.0", optional = true, markers = "extra == \"standard\""} +jinja2 = {version = ">=3.1.5", optional = true, markers = "extra == \"standard\""} +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +python-multipart = {version = ">=0.0.18", optional = true, markers = "extra == \"standard\""} +starlette = ">=0.40.0,<0.47.0" +typing-extensions = ">=4.8.0" +uvicorn = {version = ">=0.12.0", extras = ["standard"], optional = true, markers = "extra == \"standard\""} + +[package.extras] +all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=3.1.5)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "fastapi-cli" +version = "0.0.23" +description = "Run and manage FastAPI apps from the command line with FastAPI CLI. 🚀" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "fastapi_cli-0.0.23-py3-none-any.whl", hash = "sha256:7e9634fc212da0b6cfc75bd3ac366cc9dfdb43b5e9ec12e58bfd1acdd2697f25"}, + {file = "fastapi_cli-0.0.23.tar.gz", hash = "sha256:210ac280ea41e73aac5a57688781256beb23c2cba3a41266896fa43e6445c8e7"}, +] + +[package.dependencies] +fastapi-cloud-cli = {version = ">=0.1.1", optional = true, markers = "extra == \"standard\""} +rich-toolkit = ">=0.14.8" +typer = ">=0.16.0" +uvicorn = {version = ">=0.15.0", extras = ["standard"]} + +[package.extras] +new = ["fastapi-new (>=0.0.2)"] +standard = ["fastapi-cloud-cli (>=0.1.1)", "uvicorn[standard] (>=0.15.0)"] +standard-no-fastapi-cloud-cli = ["uvicorn[standard] (>=0.15.0)"] + +[[package]] +name = "fastapi-cloud-cli" +version = "0.13.0" +description = "Deploy and manage FastAPI Cloud apps from the command line 🚀" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "fastapi_cloud_cli-0.13.0-py3-none-any.whl", hash = "sha256:874a9ed8dba34ec828f198c72de9f9a38de77ac1b15083d6bc3a4d772b0bc477"}, + {file = "fastapi_cloud_cli-0.13.0.tar.gz", hash = "sha256:4d8f42337e8021c648f6cb0672de7d5b31b0fc7387a83d7b12f974600ac3f2fd"}, +] + +[package.dependencies] +fastar = ">=0.8.0" +httpx = ">=0.27.0" +pydantic = [ + {version = ">=2.7.4", extras = ["email"], markers = "python_version < \"3.13\""}, + {version = ">=2.8.0", extras = ["email"], markers = "python_version == \"3.13\""}, + {version = ">=2.12.0", extras = ["email"], markers = "python_version >= \"3.14\""}, +] +rich-toolkit = ">=0.19.4" +rignore = ">=0.5.1" +sentry-sdk = ">=2.20.0" +typer = ">=0.16.0" +uvicorn = {version = ">=0.17.6", extras = ["standard"]} + +[package.extras] +standard = ["uvicorn[standard] (>=0.15.0)"] + +[[package]] +name = "fastar" +version = "0.8.0" +description = "High-level bindings for the Rust tar crate" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "fastar-0.8.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c9f930cff014cf79d396d0541bd9f3a3f170c9b5e45d10d634d98f9ed08788c3"}, + {file = "fastar-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07b70f712d20622346531a4b46bb332569bea621f61314c0b7e80903a16d14cf"}, + {file = "fastar-0.8.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:330639db3bfba4c6d132421a2a4aeb81e7bea8ce9159cdb6e247fbc5fae97686"}, + {file = "fastar-0.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98ea7ceb6231e48d7bb0d7dc13e946baa29c7f6873eaf4afb69725d6da349033"}, + {file = "fastar-0.8.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a90695a601a78bbca910fdf2efcdf3103c55d0de5a5c6e93556d707bf886250b"}, + {file = "fastar-0.8.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d0bf655ff4c9320b0ca8a5b128063d5093c0c8c1645a2b5f7167143fd8531aa"}, + {file = "fastar-0.8.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d8df22cdd8d58e7689aa89b2e4a07e8e5fa4f88d2d9c2621f0e88a49be97ccea"}, + {file = "fastar-0.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8a5e6ad722685128521c8fb44cf25bd38669650ba3a4b466b8903e5aa28e1a0"}, + {file = "fastar-0.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:31cd541231a2456e32104da891cf9962c3b40234d0465cbf9322a6bc8a1b05d5"}, + {file = "fastar-0.8.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:175db2a98d67ced106468e8987975484f8bbbd5ad99201da823b38bafb565ed5"}, + {file = "fastar-0.8.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ada877ab1c65197d772ce1b1c2e244d4799680d8b3f136a4308360f3d8661b23"}, + {file = "fastar-0.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:01084cb75f13ca6a8e80bd41584322523189f8e81b472053743d6e6c3062b5a6"}, + {file = "fastar-0.8.0-cp310-cp310-win32.whl", hash = "sha256:ca639b9909805e44364ea13cca2682b487e74826e4ad75957115ec693228d6b6"}, + {file = "fastar-0.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:fbc0f2ed0f4add7fb58034c576584d44d7eaaf93dee721dfb26dbed6e222dbac"}, + {file = "fastar-0.8.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:cd9c0d3ebf7a0a6f642f771cf41b79f7c98d40a3072a8abe1174fbd9bd615bd3"}, + {file = "fastar-0.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2875a077340fe4f8099bd3ed8fa90d9595e1ac3cd62ae19ab690d5bf550eeb35"}, + {file = "fastar-0.8.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a999263d9f87184bf2801833b2ecf105e03c0dd91cac78685673b70da564fd64"}, + {file = "fastar-0.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c41111da56430f638cbfc498ebdcc7d30f63416e904b27b7695c29bd4889cb8"}, + {file = "fastar-0.8.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3719541a12bb09ab1eae91d2c987a9b2b7d7149c52e7109ba6e15b74aabc49b1"}, + {file = "fastar-0.8.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7a9b0fff8079b18acdface7ef1b7f522fd9a589f65ca4a1a0dd7c92a0886c2a2"}, + {file = "fastar-0.8.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ac073576c1931959191cb20df38bab21dd152f66c940aa3ca8b22e39f753b2f3"}, + {file = "fastar-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:003b59a7c3e405b6a7bff8fab17d31e0ccbc7f06730a8f8ca1694eeea75f3c76"}, + {file = "fastar-0.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a7b96748425efd9fc155cd920d65088a1b0d754421962418ea73413d02ff515a"}, + {file = "fastar-0.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:90957a30e64418b02df5b4d525bea50403d98a4b1f29143ce5914ddfa7e54ee4"}, + {file = "fastar-0.8.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f6e784a8015623fbb7ccca1af372fd82cb511b408ddd2348dc929fc6e415df73"}, + {file = "fastar-0.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a03eaf287bbc93064688a1220580ce261e7557c8898f687f4d0b281c85b28d3c"}, + {file = "fastar-0.8.0-cp311-cp311-win32.whl", hash = "sha256:661a47ed90762f419406c47e802f46af63a08254ba96abd1c8191e4ce967b665"}, + {file = "fastar-0.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:b48abd6056fef7bc3d414aafb453c5b07fdf06d2df5a2841d650288a3aa1e9d3"}, + {file = "fastar-0.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:50c18788b3c6ffb85e176dcb8548bb8e54616a0519dcdbbfba66f6bbc4316933"}, + {file = "fastar-0.8.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0f10d2adfe40f47ff228f4efaa32d409d732ded98580e03ed37c9535b5fc923d"}, + {file = "fastar-0.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b930da9d598e3bc69513d131f397e6d6be4643926ef3de5d33d1e826631eb036"}, + {file = "fastar-0.8.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9d210da2de733ca801de83e931012349d209f38b92d9630ccaa94bd445bdc9b8"}, + {file = "fastar-0.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa02270721517078a5bd61a38719070ac2537a4aa6b6c48cf369cf2abc59174a"}, + {file = "fastar-0.8.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:83c391e5b789a720e4d0029b9559f5d6dee3226693c5b39c0eab8eaece997e0f"}, + {file = "fastar-0.8.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3258d7a78a72793cdd081545da61cabe85b1f37634a1d0b97ffee0ff11d105ef"}, + {file = "fastar-0.8.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6eab95dd985cdb6a50666cbeb9e4814676e59cfe52039c880b69d67cfd44767"}, + {file = "fastar-0.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:829b1854166141860887273c116c94e31357213fa8e9fe8baeb18bd6c38aa8d9"}, + {file = "fastar-0.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b1667eae13f9457a3c737f4376d68e8c3e548353538b28f7e4273a30cb3965cd"}, + {file = "fastar-0.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b864a95229a7db0814cd9ef7987cb713fd43dce1b0d809dd17d9cd6f02fdde3e"}, + {file = "fastar-0.8.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c05fbc5618ce17675a42576fa49858d79734627f0a0c74c0875ab45ee8de340c"}, + {file = "fastar-0.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7f41c51ee96f338662ee3c3df4840511ba3f9969606840f1b10b7cb633a3c716"}, + {file = "fastar-0.8.0-cp312-cp312-win32.whl", hash = "sha256:d949a1a2ea7968b734632c009df0571c94636a5e1622c87a6e2bf712a7334f47"}, + {file = "fastar-0.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:fc645994d5b927d769121094e8a649b09923b3c13a8b0b98696d8f853f23c532"}, + {file = "fastar-0.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:d81ee82e8dc78a0adb81728383bd39611177d642a8fa2d601d4ad5ad59e5f3bd"}, + {file = "fastar-0.8.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:a3253a06845462ca2196024c7a18f5c0ba4de1532ab1c4bad23a40b332a06a6a"}, + {file = "fastar-0.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5cbeb3ebfa0980c68ff8b126295cc6b208ccd81b638aebc5a723d810a7a0e5d2"}, + {file = "fastar-0.8.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1c0d5956b917daac77d333d48b3f0f3ff927b8039d5b32d8125462782369f761"}, + {file = "fastar-0.8.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27b404db2b786b65912927ce7f3790964a4bcbde42cdd13091b82a89cd655e1c"}, + {file = "fastar-0.8.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0902fc89dcf1e7f07b8563032a4159fe2b835e4c16942c76fd63451d0e5f76a3"}, + {file = "fastar-0.8.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:069347e2f0f7a8b99bbac8cd1bc0e06c7b4a31dc964fc60d84b95eab3d869dc1"}, + {file = "fastar-0.8.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7fd135306f6bfe9a835918280e0eb440b70ab303e0187d90ab51ca86e143f70d"}, + {file = "fastar-0.8.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d06d6897f43c27154b5f2d0eb930a43a81b7eec73f6f0b0114814d4a10ab38"}, + {file = "fastar-0.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a922f8439231fa0c32b15e8d70ff6d415619b9d40492029dabbc14a0c53b5f18"}, + {file = "fastar-0.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a739abd51eb766384b4caff83050888e80cd75bbcfec61e6d1e64875f94e4a40"}, + {file = "fastar-0.8.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5a65f419d808b23ac89d5cd1b13a2f340f15bc5d1d9af79f39fdb77bba48ff1b"}, + {file = "fastar-0.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7bb2ae6c0cce58f0db1c9f20495e7557cca2c1ee9c69bbd90eafd54f139171c5"}, + {file = "fastar-0.8.0-cp313-cp313-win32.whl", hash = "sha256:b28753e0d18a643272597cb16d39f1053842aa43131ad3e260c03a2417d38401"}, + {file = "fastar-0.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:620e5d737dce8321d49a5ebb7997f1fd0047cde3512082c27dc66d6ac8c1927a"}, + {file = "fastar-0.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:c4c4bd08df563120cd33e854fe0a93b81579e8571b11f9b7da9e84c37da2d6b6"}, + {file = "fastar-0.8.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:50b36ce654ba44b0e13fae607ae17ee6e1597b69f71df1bee64bb8328d881dfc"}, + {file = "fastar-0.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:63a892762683d7ab00df0227d5ea9677c62ff2cde9b875e666c0be569ed940f3"}, + {file = "fastar-0.8.0-cp314-cp314-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4ae6a145c1bff592644bde13f2115e0239f4b7babaf506d14e7d208483cf01a5"}, + {file = "fastar-0.8.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ae0ff7c0a1c7e1428404b81faee8aebef466bfd0be25bfe4dabf5d535c68741"}, + {file = "fastar-0.8.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dbfd87dbd217b45c898b2dbcd0169aae534b2c1c5cbe3119510881f6a5ac8ef5"}, + {file = "fastar-0.8.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5abd99fcba83ef28c8fe6ae2927edc79053db43a0457a962ed85c9bf150d37"}, + {file = "fastar-0.8.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91d4c685620c3a9d6b5ae091dbabab4f98b20049b7ecc7976e19cc9016c0d5d6"}, + {file = "fastar-0.8.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f77c2f2cad76e9dc7b6701297adb1eba87d0485944b416fc2ccf5516c01219a3"}, + {file = "fastar-0.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e7f07c4a3dada7757a8fc430a5b4a29e6ef696d2212747213f57086ffd970316"}, + {file = "fastar-0.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:90c0c3fe55105c0aed8a83135dbdeb31e683455dbd326a1c48fa44c378b85616"}, + {file = "fastar-0.8.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:fb9ee51e5bffe0dab3d3126d3a4fac8d8f7235cedcb4b8e74936087ce1c157f3"}, + {file = "fastar-0.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e380b1e8d30317f52406c43b11e98d11e1d68723bbd031e18049ea3497b59a6d"}, + {file = "fastar-0.8.0-cp314-cp314-win32.whl", hash = "sha256:1c4ffc06e9c4a8ca498c07e094670d8d8c0d25b17ca6465b9774da44ea997ab1"}, + {file = "fastar-0.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:5517a8ad4726267c57a3e0e2a44430b782e00b230bf51c55b5728e758bb3a692"}, + {file = "fastar-0.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:58030551046ff4a8616931e52a36c83545ff05996db5beb6e0cd2b7e748aa309"}, + {file = "fastar-0.8.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:1e7d29b6bfecb29db126a08baf3c04a5ab667f6cea2b7067d3e623a67729c4a6"}, + {file = "fastar-0.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:05eb7b96940f9526b485f1d0b02393839f0f61cac4b1f60024984f8b326d2640"}, + {file = "fastar-0.8.0-cp314-cp314t-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:619352d8ac011794e2345c462189dc02ba634750d23cd9d86a9267dd71b1f278"}, + {file = "fastar-0.8.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74ebfecef3fe6d7a90355fac1402fd30636988332a1d33f3e80019a10782bb24"}, + {file = "fastar-0.8.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2975aca5a639e26a3ab0d23b4b0628d6dd6d521146c3c11486d782be621a35aa"}, + {file = "fastar-0.8.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afc438eaed8ff0dcdd9308268be5cb38c1db7e94c3ccca7c498ca13a4a4535a3"}, + {file = "fastar-0.8.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6ced0a5399cc0a84a858ef0a31ca2d0c24d3bbec4bcda506a9192d8119f3590a"}, + {file = "fastar-0.8.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec9b23da8c4c039da3fe2e358973c66976a0c8508aa06d6626b4403cb5666c19"}, + {file = "fastar-0.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:dfba078fcd53478032fd0ceed56960ec6b7ff0511cfc013a8a3a4307e3a7bac4"}, + {file = "fastar-0.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:ade56c94c14be356d295fecb47a3fcd473dd43a8803ead2e2b5b9e58feb6dcfa"}, + {file = "fastar-0.8.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e48d938f9366db5e59441728f70b7f6c1ccfab7eff84f96f9b7e689b07786c52"}, + {file = "fastar-0.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:79c441dc1482ff51a54fb3f57ae6f7bb3d2cff88fa2cc5d196c519f8aab64a56"}, + {file = "fastar-0.8.0-cp314-cp314t-win32.whl", hash = "sha256:187f61dc739afe45ac8e47ed7fd1adc45d52eac110cf27d579155720507d6fbe"}, + {file = "fastar-0.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:40e9d763cf8bf85ce2fa256e010aa795c0fe3d3bd1326d5c3084e6ce7857127e"}, + {file = "fastar-0.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:e59673307b6a08210987059a2bdea2614fe26e3335d0e5d1a3d95f49a05b1418"}, + {file = "fastar-0.8.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5793b5db86ff0d588057b9089bf904a9ac288de0323a9973452a011a48ec23eb"}, + {file = "fastar-0.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3cb073ab1905127ab6e052a5c7ccd409557ef086571f27de938764d3eaadfe07"}, + {file = "fastar-0.8.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2716309f7326224b9f1341077d8c65ebb26335e5c93c409e1a23be03f1a01c50"}, + {file = "fastar-0.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5ea223170ee6eb1eaf25ff8193df66a939c891f85a9a33def3add9df2ee1232"}, + {file = "fastar-0.8.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f5f24c6c3628faa3ee51df54d77dbf47c4f77a1951ea4ea14e4ccb855babced5"}, + {file = "fastar-0.8.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d98894e4c3a2178f33f695940a615376728f6109f1a3431ac0a9fe98fe84ec7"}, + {file = "fastar-0.8.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:77d7016f446678d44f1823f40a947db741643fa328142dac6f181046ba205b01"}, + {file = "fastar-0.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e88a80b40b7f929a7719a13d7332b4cb1344c5a1ac497044bd24f2adadf04c4"}, + {file = "fastar-0.8.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:7b8eb42f346024df3800d078fc0763275b1964d5d0762aa831bb0b539b5f1ee3"}, + {file = "fastar-0.8.0-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:41527617a8b592a29fa874e4dba305874b150601e2bf2e17a9f8099a9d179f28"}, + {file = "fastar-0.8.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:feb8f73ad25ad84f986dc53e7c6561b281ee2087500f6e400899c3bf1a3f6dc0"}, + {file = "fastar-0.8.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:afbdc2e87b7e56e11ad330859fe17d7a93a76cd637d7f33d1c9edd566d2f58d9"}, + {file = "fastar-0.8.0-cp38-cp38-win32.whl", hash = "sha256:1ccc1610c05183c0ff82fe93cdbc4eb0ea8b11f2f6d94f6d31ae342164fc6033"}, + {file = "fastar-0.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:c96abf34135cffb9652360cd827bda19855b803038d932dcd2a686b3d4e7e1ce"}, + {file = "fastar-0.8.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:923afc2db5192e56e71952a88e3fe5965c7c9c910d385d2db7573136f064f2fa"}, + {file = "fastar-0.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4fbe775356930f3aab0ce709fdf8ecf90c10882f5bbdcea215c89a3b14090c50"}, + {file = "fastar-0.8.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ff516154e77f4bf78c31a0c11aa78a8a80e11b6964ec6f28982e42ffcbb543c"}, + {file = "fastar-0.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d2fdd1c987ff2300bdf39baed556f8e155f8577018775e794a268ecf1707610"}, + {file = "fastar-0.8.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d80e4dad8ee2362a71870b1e735800bb5e97f12ebbee4bd0cf15a81ad2428b5a"}, + {file = "fastar-0.8.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a17abee1febf5363ed2633f5e13de4be481ba1ab5f77860d39470eccdc4b65af"}, + {file = "fastar-0.8.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64cbde8e0ece3d799090a4727f936f66c5990d3ac59416f3de76a2c676e8e568"}, + {file = "fastar-0.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63d98b26590d293a9d9a379bae88367a8f3a6137c28819ed6dd6e11aca4a5c6e"}, + {file = "fastar-0.8.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bf440983d4d64582bddf2f0bd3c43ea1db93a8c31cf7c20e473bffaf6d9c0b6d"}, + {file = "fastar-0.8.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:1d90cbf984a39afda27afe08e40c2d8eddc49c5e80590af641610c7b6dc20161"}, + {file = "fastar-0.8.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ca0db5e563d84b639fe15385eeca940777b6d2f0a1f3bb7cd5b55ab7124f0554"}, + {file = "fastar-0.8.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:42ff3052d74684a636423d4f040db88eebd4caf20842fa5f06020e0130c01f69"}, + {file = "fastar-0.8.0-cp39-cp39-win32.whl", hash = "sha256:15e3dfaa769d2117ef707e5f47c62126d1b63f8e9c85133112f33f1fbdf8942f"}, + {file = "fastar-0.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:5153aa1c194316d0f67b6884a62d122d51fce4196263e92e4bca2a6c47cd44c0"}, + {file = "fastar-0.8.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2127cf2e80ffd49744a160201e0e2f55198af6c028a7b3f750026e0b1f1caa4e"}, + {file = "fastar-0.8.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ff85094f10003801339ac4fa9b20a3410c2d8f284d4cba2dc99de6e98c877812"}, + {file = "fastar-0.8.0-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:3dbca235f0bd804cca6602fe055d3892bebf95fb802e6c6c7d872fb10f7abc6c"}, + {file = "fastar-0.8.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e54bfdee6c81a0005e147319e93d8797f442308032c92fa28d03ef8fda076"}, + {file = "fastar-0.8.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a78e5221b94a80800930b7fd0d0e797ae73aadf7044c05ed46cb9bdf870f022"}, + {file = "fastar-0.8.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:997092d31ff451de8d0568f6773f3517cb87dcd0bc76184edb65d7154390a6f8"}, + {file = "fastar-0.8.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:558e8fcf8fe574541df5db14a46cd98bfbed14a811b7014a54f2b714c0cfac42"}, + {file = "fastar-0.8.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1d2a54f87e2908cc19e1a6ee249620174fbefc54a219aba1eaa6f31657683c3"}, + {file = "fastar-0.8.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ef94901537be277f9ec59db939eb817960496c6351afede5b102699b5098604d"}, + {file = "fastar-0.8.0-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:0afbb92f78bf29d5e9db76fb46cbabc429e49015cddf72ab9e761afbe88ac100"}, + {file = "fastar-0.8.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:fb59c7925e7710ad178d9e1a3e65edf295d9a042a0cdcb673b4040949eb8ad0a"}, + {file = "fastar-0.8.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e6c4d6329da568ec36b1347b0c09c4d27f9dfdeddf9f438ddb16799ecf170098"}, + {file = "fastar-0.8.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:998e3fa4b555b63eb134e6758437ed739ad1652fdd2a61dfe1dacbfddc35fe66"}, + {file = "fastar-0.8.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5f83e60d845091f3a12bc37f412774264d161576eaf810ed8b43567eb934b7e5"}, + {file = "fastar-0.8.0-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:299672e1c74d8b73c61684fac9159cfc063d35f4b165996a88facb0e26862cb5"}, + {file = "fastar-0.8.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3d3a27066b84d015deab5faee78565509bb33b137896443e4144cb1be1a5f90"}, + {file = "fastar-0.8.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ef0bcf4385bbdd3c1acecce2d9ea7dab7cc9b8ee0581bbccb7ab11908a7ce288"}, + {file = "fastar-0.8.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f10ef62b6eda6cb6fd9ba8e1fe08a07d7b2bdcc8eaa00eb91566143b92ed7eee"}, + {file = "fastar-0.8.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c4f6c82a8ee98c17aa48585ee73b51c89c1b010e5c951af83e07c3436180e3fc"}, + {file = "fastar-0.8.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6129067fcb86276635b5857010f4e9b9c7d5d15dd571bb03c6c1ed73c40fd92"}, + {file = "fastar-0.8.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4cc9e77019e489f1ddac446b6a5b9dfb5c3d9abd142652c22a1d9415dbcc0e47"}, + {file = "fastar-0.8.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:382bfe82c026086487cb17fee12f4c1e2b4e67ce230f2e04487d3e7ddfd69031"}, + {file = "fastar-0.8.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:908d2b9a1ff3d549cc304b32f95706a536da8f0bcb0bc0f9e4c1cce39b80e218"}, + {file = "fastar-0.8.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:1aa7dbde2d2d73eb5b6203d0f74875cb66350f0f1b4325b4839fc8fbbf5d074e"}, + {file = "fastar-0.8.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:284036bae786a520456ad3f58e72aaf1bd5d74e309132e568343564daa4ae383"}, + {file = "fastar-0.8.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5aba0942b4f56acdb8fa8aa7cb506f70c1a17bf13dcab318a17ffb467cb2e7ec"}, + {file = "fastar-0.8.0-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:52eda6230799db7bbd44461c622161e9bcd43603399da19b0daab2782e0030b0"}, + {file = "fastar-0.8.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f860566b9f3cb1900980f46a4c3f003990c0009c11730f988f758542c17a2364"}, + {file = "fastar-0.8.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:78f3fe5f45437c66d1dbece5f31aa487e48ef46d76b2082b873d5fa18013ebe1"}, + {file = "fastar-0.8.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:82bc445202bbc53f067bb15e3b8639f01fd54d3096a0f9601240690cfd7c9684"}, + {file = "fastar-0.8.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b1208b5453cfe7192e54765f73844b80d684bd8dc6d6acbbb60ead42590b13e"}, + {file = "fastar-0.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8922754c66699e27d4f1ce07c9c256228054cdc9bb36363e8bb5b503453a6da"}, + {file = "fastar-0.8.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:92cad46dfbb9969359823c9f61165ec32d5d675d86e863889416e9b64efea95c"}, + {file = "fastar-0.8.0-pp39-pypy39_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:f4eb9560a447ff6a4b377f08b6e5d3a31909a612b028f2c57810ffaf570eceb8"}, + {file = "fastar-0.8.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:52455794e6cc2b6a6dbf141a1c4312a1a1215d75e8849a35fcff694454da880f"}, + {file = "fastar-0.8.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8de5decfa18a03807ae26ba5af095c2c04ac31ae915e9a849363a4495463171f"}, + {file = "fastar-0.8.0.tar.gz", hash = "sha256:f4d4d68dbf1c4c2808f0e730fac5843493fc849f70fe3ad3af60dfbaf68b9a12"}, +] + +[[package]] +name = "frozenlist" +version = "1.8.0" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011"}, + {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565"}, + {file = "frozenlist-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad"}, + {file = "frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2"}, + {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186"}, + {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e"}, + {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450"}, + {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef"}, + {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4"}, + {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff"}, + {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c"}, + {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f"}, + {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7"}, + {file = "frozenlist-1.8.0-cp310-cp310-win32.whl", hash = "sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a"}, + {file = "frozenlist-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6"}, + {file = "frozenlist-1.8.0-cp310-cp310-win_arm64.whl", hash = "sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e"}, + {file = "frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84"}, + {file = "frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9"}, + {file = "frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93"}, + {file = "frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f"}, + {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695"}, + {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52"}, + {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581"}, + {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567"}, + {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b"}, + {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92"}, + {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d"}, + {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd"}, + {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967"}, + {file = "frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25"}, + {file = "frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b"}, + {file = "frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a"}, + {file = "frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1"}, + {file = "frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b"}, + {file = "frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b"}, + {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608"}, + {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa"}, + {file = "frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf"}, + {file = "frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746"}, + {file = "frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd"}, + {file = "frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a"}, + {file = "frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7"}, + {file = "frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40"}, + {file = "frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027"}, + {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822"}, + {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121"}, + {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5"}, + {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e"}, + {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11"}, + {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1"}, + {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1"}, + {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8"}, + {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed"}, + {file = "frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496"}, + {file = "frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231"}, + {file = "frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62"}, + {file = "frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94"}, + {file = "frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c"}, + {file = "frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52"}, + {file = "frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51"}, + {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65"}, + {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82"}, + {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714"}, + {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d"}, + {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506"}, + {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51"}, + {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e"}, + {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0"}, + {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41"}, + {file = "frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b"}, + {file = "frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888"}, + {file = "frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042"}, + {file = "frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0"}, + {file = "frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f"}, + {file = "frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c"}, + {file = "frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2"}, + {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8"}, + {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686"}, + {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e"}, + {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a"}, + {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128"}, + {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f"}, + {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7"}, + {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30"}, + {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7"}, + {file = "frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806"}, + {file = "frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0"}, + {file = "frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b"}, + {file = "frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d"}, + {file = "frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed"}, + {file = "frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930"}, + {file = "frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c"}, + {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24"}, + {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37"}, + {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a"}, + {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2"}, + {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef"}, + {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe"}, + {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8"}, + {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a"}, + {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e"}, + {file = "frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df"}, + {file = "frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd"}, + {file = "frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79"}, + {file = "frozenlist-1.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47"}, + {file = "frozenlist-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca"}, + {file = "frozenlist-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068"}, + {file = "frozenlist-1.8.0-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95"}, + {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459"}, + {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675"}, + {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61"}, + {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6"}, + {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5"}, + {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3"}, + {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1"}, + {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178"}, + {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda"}, + {file = "frozenlist-1.8.0-cp39-cp39-win32.whl", hash = "sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087"}, + {file = "frozenlist-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a"}, + {file = "frozenlist-1.8.0-cp39-cp39-win_arm64.whl", hash = "sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103"}, + {file = "frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d"}, + {file = "frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad"}, +] + +[[package]] +name = "greenlet" +version = "3.3.1" +description = "Lightweight in-process concurrent programming" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "greenlet-3.3.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:04bee4775f40ecefcdaa9d115ab44736cd4b9c5fba733575bfe9379419582e13"}, + {file = "greenlet-3.3.1-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:50e1457f4fed12a50e427988a07f0f9df53cf0ee8da23fab16e6732c2ec909d4"}, + {file = "greenlet-3.3.1-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:070472cd156f0656f86f92e954591644e158fd65aa415ffbe2d44ca77656a8f5"}, + {file = "greenlet-3.3.1-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1108b61b06b5224656121c3c8ee8876161c491cbe74e5c519e0634c837cf93d5"}, + {file = "greenlet-3.3.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3a300354f27dd86bae5fbf7002e6dd2b3255cd372e9242c933faf5e859b703fe"}, + {file = "greenlet-3.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e84b51cbebf9ae573b5fbd15df88887815e3253fc000a7d0ff95170e8f7e9729"}, + {file = "greenlet-3.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0093bd1a06d899892427217f0ff2a3c8f306182b8c754336d32e2d587c131b4"}, + {file = "greenlet-3.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:7932f5f57609b6a3b82cc11877709aa7a98e3308983ed93552a1c377069b20c8"}, + {file = "greenlet-3.3.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:5fd23b9bc6d37b563211c6abbb1b3cab27db385a4449af5c32e932f93017080c"}, + {file = "greenlet-3.3.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09f51496a0bfbaa9d74d36a52d2580d1ef5ed4fdfcff0a73730abfbbbe1403dd"}, + {file = "greenlet-3.3.1-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb0feb07fe6e6a74615ee62a880007d976cf739b6669cce95daa7373d4fc69c5"}, + {file = "greenlet-3.3.1-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:67ea3fc73c8cd92f42467a72b75e8f05ed51a0e9b1d15398c913416f2dafd49f"}, + {file = "greenlet-3.3.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:39eda9ba259cc9801da05351eaa8576e9aa83eb9411e8f0c299e05d712a210f2"}, + {file = "greenlet-3.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e2e7e882f83149f0a71ac822ebf156d902e7a5d22c9045e3e0d1daf59cee2cc9"}, + {file = "greenlet-3.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:80aa4d79eb5564f2e0a6144fcc744b5a37c56c4a92d60920720e99210d88db0f"}, + {file = "greenlet-3.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:32e4ca9777c5addcbf42ff3915d99030d8e00173a56f80001fb3875998fe410b"}, + {file = "greenlet-3.3.1-cp311-cp311-win_arm64.whl", hash = "sha256:da19609432f353fed186cc1b85e9440db93d489f198b4bdf42ae19cc9d9ac9b4"}, + {file = "greenlet-3.3.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:7e806ca53acf6d15a888405880766ec84721aa4181261cd11a457dfe9a7a4975"}, + {file = "greenlet-3.3.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d842c94b9155f1c9b3058036c24ffb8ff78b428414a19792b2380be9cecf4f36"}, + {file = "greenlet-3.3.1-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:20fedaadd422fa02695f82093f9a98bad3dab5fcda793c658b945fcde2ab27ba"}, + {file = "greenlet-3.3.1-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c620051669fd04ac6b60ebc70478210119c56e2d5d5df848baec4312e260e4ca"}, + {file = "greenlet-3.3.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14194f5f4305800ff329cbf02c5fcc88f01886cadd29941b807668a45f0d2336"}, + {file = "greenlet-3.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7b2fe4150a0cf59f847a67db8c155ac36aed89080a6a639e9f16df5d6c6096f1"}, + {file = "greenlet-3.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:49f4ad195d45f4a66a0eb9c1ba4832bb380570d361912fa3554746830d332149"}, + {file = "greenlet-3.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:cc98b9c4e4870fa983436afa999d4eb16b12872fab7071423d5262fa7120d57a"}, + {file = "greenlet-3.3.1-cp312-cp312-win_arm64.whl", hash = "sha256:bfb2d1763d777de5ee495c85309460f6fd8146e50ec9d0ae0183dbf6f0a829d1"}, + {file = "greenlet-3.3.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:7ab327905cabb0622adca5971e488064e35115430cec2c35a50fd36e72a315b3"}, + {file = "greenlet-3.3.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:65be2f026ca6a176f88fb935ee23c18333ccea97048076aef4db1ef5bc0713ac"}, + {file = "greenlet-3.3.1-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7a3ae05b3d225b4155bda56b072ceb09d05e974bc74be6c3fc15463cf69f33fd"}, + {file = "greenlet-3.3.1-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:12184c61e5d64268a160226fb4818af4df02cfead8379d7f8b99a56c3a54ff3e"}, + {file = "greenlet-3.3.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6423481193bbbe871313de5fd06a082f2649e7ce6e08015d2a76c1e9186ca5b3"}, + {file = "greenlet-3.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:33a956fe78bbbda82bfc95e128d61129b32d66bcf0a20a1f0c08aa4839ffa951"}, + {file = "greenlet-3.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b065d3284be43728dd280f6f9a13990b56470b81be20375a207cdc814a983f2"}, + {file = "greenlet-3.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:27289986f4e5b0edec7b5a91063c109f0276abb09a7e9bdab08437525977c946"}, + {file = "greenlet-3.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:2f080e028001c5273e0b42690eaf359aeef9cb1389da0f171ea51a5dc3c7608d"}, + {file = "greenlet-3.3.1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:bd59acd8529b372775cd0fcbc5f420ae20681c5b045ce25bd453ed8455ab99b5"}, + {file = "greenlet-3.3.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b31c05dd84ef6871dd47120386aed35323c944d86c3d91a17c4b8d23df62f15b"}, + {file = "greenlet-3.3.1-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:02925a0bfffc41e542c70aa14c7eda3593e4d7e274bfcccca1827e6c0875902e"}, + {file = "greenlet-3.3.1-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3e0f3878ca3a3ff63ab4ea478585942b53df66ddde327b59ecb191b19dbbd62d"}, + {file = "greenlet-3.3.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34a729e2e4e4ffe9ae2408d5ecaf12f944853f40ad724929b7585bca808a9d6f"}, + {file = "greenlet-3.3.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:aec9ab04e82918e623415947921dea15851b152b822661cce3f8e4393c3df683"}, + {file = "greenlet-3.3.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:71c767cf281a80d02b6c1bdc41c9468e1f5a494fb11bc8688c360524e273d7b1"}, + {file = "greenlet-3.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:96aff77af063b607f2489473484e39a0bbae730f2ea90c9e5606c9b73c44174a"}, + {file = "greenlet-3.3.1-cp314-cp314-win_arm64.whl", hash = "sha256:b066e8b50e28b503f604fa538adc764a638b38cf8e81e025011d26e8a627fa79"}, + {file = "greenlet-3.3.1-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:3e63252943c921b90abb035ebe9de832c436401d9c45f262d80e2d06cc659242"}, + {file = "greenlet-3.3.1-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:76e39058e68eb125de10c92524573924e827927df5d3891fbc97bd55764a8774"}, + {file = "greenlet-3.3.1-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c9f9d5e7a9310b7a2f416dd13d2e3fd8b42d803968ea580b7c0f322ccb389b97"}, + {file = "greenlet-3.3.1-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b9721549a95db96689458a1e0ae32412ca18776ed004463df3a9299c1b257ab"}, + {file = "greenlet-3.3.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:92497c78adf3ac703b57f1e3813c2d874f27f71a178f9ea5887855da413cd6d2"}, + {file = "greenlet-3.3.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ed6b402bc74d6557a705e197d47f9063733091ed6357b3de33619d8a8d93ac53"}, + {file = "greenlet-3.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:59913f1e5ada20fde795ba906916aea25d442abcc0593fba7e26c92b7ad76249"}, + {file = "greenlet-3.3.1-cp314-cp314t-win_amd64.whl", hash = "sha256:301860987846c24cb8964bdec0e31a96ad4a2a801b41b4ef40963c1b44f33451"}, + {file = "greenlet-3.3.1.tar.gz", hash = "sha256:41848f3230b58c08bb43dee542e74a2a2e34d3c59dc3076cec9151aeeedcae98"}, +] + +[package.extras] +docs = ["Sphinx", "furo"] +test = ["objgraph", "psutil", "setuptools"] + +[[package]] +name = "h11" +version = "0.16.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, + {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, + {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.16" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<1.0)"] + +[[package]] +name = "httptools" +version = "0.7.1" +description = "A collection of framework independent HTTP protocol utils." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "httptools-0.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:11d01b0ff1fe02c4c32d60af61a4d613b74fad069e47e06e9067758c01e9ac78"}, + {file = "httptools-0.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d86c1e5afdc479a6fdabf570be0d3eb791df0ae727e8dbc0259ed1249998d4"}, + {file = "httptools-0.7.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c8c751014e13d88d2be5f5f14fc8b89612fcfa92a9cc480f2bc1598357a23a05"}, + {file = "httptools-0.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:654968cb6b6c77e37b832a9be3d3ecabb243bbe7a0b8f65fbc5b6b04c8fcabed"}, + {file = "httptools-0.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b580968316348b474b020edf3988eecd5d6eec4634ee6561e72ae3a2a0e00a8a"}, + {file = "httptools-0.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d496e2f5245319da9d764296e86c5bb6fcf0cf7a8806d3d000717a889c8c0b7b"}, + {file = "httptools-0.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:cbf8317bfccf0fed3b5680c559d3459cccf1abe9039bfa159e62e391c7270568"}, + {file = "httptools-0.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:474d3b7ab469fefcca3697a10d11a32ee2b9573250206ba1e50d5980910da657"}, + {file = "httptools-0.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3c3b7366bb6c7b96bd72d0dbe7f7d5eead261361f013be5f6d9590465ea1c70"}, + {file = "httptools-0.7.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:379b479408b8747f47f3b253326183d7c009a3936518cdb70db58cffd369d9df"}, + {file = "httptools-0.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cad6b591a682dcc6cf1397c3900527f9affef1e55a06c4547264796bbd17cf5e"}, + {file = "httptools-0.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eb844698d11433d2139bbeeb56499102143beb582bd6c194e3ba69c22f25c274"}, + {file = "httptools-0.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f65744d7a8bdb4bda5e1fa23e4ba16832860606fcc09d674d56e425e991539ec"}, + {file = "httptools-0.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:135fbe974b3718eada677229312e97f3b31f8a9c8ffa3ae6f565bf808d5b6bcb"}, + {file = "httptools-0.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:38e0c83a2ea9746ebbd643bdfb521b9aa4a91703e2cd705c20443405d2fd16a5"}, + {file = "httptools-0.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f25bbaf1235e27704f1a7b86cd3304eabc04f569c828101d94a0e605ef7205a5"}, + {file = "httptools-0.7.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2c15f37ef679ab9ecc06bfc4e6e8628c32a8e4b305459de7cf6785acd57e4d03"}, + {file = "httptools-0.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7fe6e96090df46b36ccfaf746f03034e5ab723162bc51b0a4cf58305324036f2"}, + {file = "httptools-0.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f72fdbae2dbc6e68b8239defb48e6a5937b12218e6ffc2c7846cc37befa84362"}, + {file = "httptools-0.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e99c7b90a29fd82fea9ef57943d501a16f3404d7b9ee81799d41639bdaae412c"}, + {file = "httptools-0.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:3e14f530fefa7499334a79b0cf7e7cd2992870eb893526fb097d51b4f2d0f321"}, + {file = "httptools-0.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6babce6cfa2a99545c60bfef8bee0cc0545413cb0018f617c8059a30ad985de3"}, + {file = "httptools-0.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:601b7628de7504077dd3dcb3791c6b8694bbd967148a6d1f01806509254fb1ca"}, + {file = "httptools-0.7.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:04c6c0e6c5fb0739c5b8a9eb046d298650a0ff38cf42537fc372b28dc7e4472c"}, + {file = "httptools-0.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69d4f9705c405ae3ee83d6a12283dc9feba8cc6aaec671b412917e644ab4fa66"}, + {file = "httptools-0.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:44c8f4347d4b31269c8a9205d8a5ee2df5322b09bbbd30f8f862185bb6b05346"}, + {file = "httptools-0.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:465275d76db4d554918aba40bf1cbebe324670f3dfc979eaffaa5d108e2ed650"}, + {file = "httptools-0.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:322d00c2068d125bd570f7bf78b2d367dad02b919d8581d7476d8b75b294e3e6"}, + {file = "httptools-0.7.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:c08fe65728b8d70b6923ce31e3956f859d5e1e8548e6f22ec520a962c6757270"}, + {file = "httptools-0.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7aea2e3c3953521c3c51106ee11487a910d45586e351202474d45472db7d72d3"}, + {file = "httptools-0.7.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0e68b8582f4ea9166be62926077a3334064d422cf08ab87d8b74664f8e9058e1"}, + {file = "httptools-0.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df091cf961a3be783d6aebae963cc9b71e00d57fa6f149025075217bc6a55a7b"}, + {file = "httptools-0.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f084813239e1eb403ddacd06a30de3d3e09a9b76e7894dcda2b22f8a726e9c60"}, + {file = "httptools-0.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7347714368fb2b335e9063bc2b96f2f87a9ceffcd9758ac295f8bbcd3ffbc0ca"}, + {file = "httptools-0.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:cfabda2a5bb85aa2a904ce06d974a3f30fb36cc63d7feaddec05d2050acede96"}, + {file = "httptools-0.7.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ac50afa68945df63ec7a2707c506bd02239272288add34539a2ef527254626a4"}, + {file = "httptools-0.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de987bb4e7ac95b99b805b99e0aae0ad51ae61df4263459d36e07cf4052d8b3a"}, + {file = "httptools-0.7.1-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d169162803a24425eb5e4d51d79cbf429fd7a491b9e570a55f495ea55b26f0bf"}, + {file = "httptools-0.7.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49794f9250188a57fa73c706b46cb21a313edb00d337ca4ce1a011fe3c760b28"}, + {file = "httptools-0.7.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aeefa0648362bb97a7d6b5ff770bfb774930a327d7f65f8208394856862de517"}, + {file = "httptools-0.7.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0d92b10dbf0b3da4823cde6a96d18e6ae358a9daa741c71448975f6a2c339cad"}, + {file = "httptools-0.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:5ddbd045cfcb073db2449563dd479057f2c2b681ebc232380e63ef15edc9c023"}, + {file = "httptools-0.7.1.tar.gz", hash = "sha256:abd72556974f8e7c74a259655924a717a2365b236c882c3f6f8a45fe94703ac9"}, +] + +[[package]] +name = "httpx" +version = "0.27.2" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, + {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "hvac" +version = "2.4.0" +description = "HashiCorp Vault API client" +optional = false +python-versions = "<4.0,>=3.8" +groups = ["main"] +files = [ + {file = "hvac-2.4.0-py3-none-any.whl", hash = "sha256:008db5efd8c2f77bd37d2368ea5f713edceae1c65f11fd608393179478649e0f"}, + {file = "hvac-2.4.0.tar.gz", hash = "sha256:e0056ad9064e7923e874e6769015b032580b639e29246f5ab1044f7959c1c7e0"}, +] + +[package.dependencies] +requests = ">=2.27.1,<3.0.0" + +[package.extras] +parser = ["pyhcl (>=0.4.4,<0.5.0)"] + +[[package]] +name = "idna" +version = "3.11" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, + {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "ijson" +version = "3.4.0.post0" +description = "Iterative JSON parser with standard Python iterator interfaces" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "ijson-3.4.0.post0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8f904a405b58a04b6ef0425f1babbc5c65feb66b0a4cc7f214d4ad7de106f77d"}, + {file = "ijson-3.4.0.post0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a07dcc1a8a1ddd76131a7c7528cbd12951c2e34eb3c3d63697b905069a2d65b1"}, + {file = "ijson-3.4.0.post0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab3be841b8c430c1883b8c0775eb551f21b5500c102c7ee828afa35ddd701bdd"}, + {file = "ijson-3.4.0.post0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:43059ae0d657b11c5ddb11d149bc400c44f9e514fb8663057e9b2ea4d8d44c1f"}, + {file = "ijson-3.4.0.post0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0d3e82963096579d1385c06b2559570d7191e225664b7fa049617da838e1a4a4"}, + {file = "ijson-3.4.0.post0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:461ce4e87a21a261b60c0a68a2ad17c7dd214f0b90a0bec7e559a66b6ae3bd7e"}, + {file = "ijson-3.4.0.post0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:890cf6610c9554efcb9765a93e368efeb5bb6135f59ce0828d92eaefff07fde5"}, + {file = "ijson-3.4.0.post0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6793c29a5728e7751a7df01be58ba7da9b9690c12bf79d32094c70a908fa02b9"}, + {file = "ijson-3.4.0.post0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a56b6674d7feec0401c91f86c376f4e3d8ff8129128a8ad21ca43ec0b1242f79"}, + {file = "ijson-3.4.0.post0-cp310-cp310-win32.whl", hash = "sha256:01767fcbd75a5fa5a626069787b41f04681216b798510d5f63bcf66884386368"}, + {file = "ijson-3.4.0.post0-cp310-cp310-win_amd64.whl", hash = "sha256:09127c06e5dec753feb9e4b8c5f6a23603d1cd672d098159a17e53a73b898eec"}, + {file = "ijson-3.4.0.post0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0b473112e72c0c506da425da3278367b6680f340ecc093084693a1e819d28435"}, + {file = "ijson-3.4.0.post0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:043f9b7cf9cc744263a78175e769947733710d2412d25180df44b1086b23ebd5"}, + {file = "ijson-3.4.0.post0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b55e49045f4c8031f3673f56662fd828dc9e8d65bd3b03a9420dda0d370e64ba"}, + {file = "ijson-3.4.0.post0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:11f13b73194ea2a5a8b4a2863f25b0b4624311f10db3a75747b510c4958179b0"}, + {file = "ijson-3.4.0.post0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:659acb2843433e080c271ecedf7d19c71adde1ee5274fc7faa2fec0a793f9f1c"}, + {file = "ijson-3.4.0.post0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:deda4cfcaafa72ca3fa845350045b1d0fef9364ec9f413241bb46988afbe6ee6"}, + {file = "ijson-3.4.0.post0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47352563e8c594360bacee2e0753e97025f0861234722d02faace62b1b6d2b2a"}, + {file = "ijson-3.4.0.post0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5a48b9486242d1295abe7fd0fbb6308867da5ca3f69b55c77922a93c2b6847aa"}, + {file = "ijson-3.4.0.post0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9c0886234d1fae15cf4581a430bdba03d79251c1ab3b07e30aa31b13ef28d01c"}, + {file = "ijson-3.4.0.post0-cp311-cp311-win32.whl", hash = "sha256:fecae19b5187d92900c73debb3a979b0b3290a53f85df1f8f3c5ba7d1e9fb9cb"}, + {file = "ijson-3.4.0.post0-cp311-cp311-win_amd64.whl", hash = "sha256:b39dbf87071f23a23c8077eea2ae7cfeeca9ff9ffec722dfc8b5f352e4dd729c"}, + {file = "ijson-3.4.0.post0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b607a500fca26101be47d2baf7cddb457b819ab60a75ce51ed1092a40da8b2f9"}, + {file = "ijson-3.4.0.post0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4827d9874a6a81625412c59f7ca979a84d01f7f6bfb3c6d4dc4c46d0382b14e0"}, + {file = "ijson-3.4.0.post0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d4d4afec780881edb2a0d2dd40b1cdbe246e630022d5192f266172a0307986a7"}, + {file = "ijson-3.4.0.post0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:432fb60ffb952926f9438e0539011e2dfcd108f8426ee826ccc6173308c3ff2c"}, + {file = "ijson-3.4.0.post0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:54a0e3e05d9a0c95ecba73d9579f146cf6d5c5874116c849dba2d39a5f30380e"}, + {file = "ijson-3.4.0.post0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05807edc0bcbd222dc6ea32a2b897f0c81dc7f12c8580148bc82f6d7f5e7ec7b"}, + {file = "ijson-3.4.0.post0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a5269af16f715855d9864937f9dd5c348ca1ac49cee6a2c7a1b7091c159e874f"}, + {file = "ijson-3.4.0.post0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b200df83c901f5bfa416d069ac71077aa1608f854a4c50df1b84ced560e9c9ec"}, + {file = "ijson-3.4.0.post0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6458bd8e679cdff459a0a5e555b107c3bbacb1f382da3fe0f40e392871eb518d"}, + {file = "ijson-3.4.0.post0-cp312-cp312-win32.whl", hash = "sha256:55f7f656b5986326c978cbb3a9eea9e33f3ef6ecc4535b38f1d452c731da39ab"}, + {file = "ijson-3.4.0.post0-cp312-cp312-win_amd64.whl", hash = "sha256:e15833dcf6f6d188fdc624a31cd0520c3ba21b6855dc304bc7c1a8aeca02d4ac"}, + {file = "ijson-3.4.0.post0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:114ed248166ac06377e87a245a158d6b98019d2bdd3bb93995718e0bd996154f"}, + {file = "ijson-3.4.0.post0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ffb21203736b08fe27cb30df6a4f802fafb9ef7646c5ff7ef79569b63ea76c57"}, + {file = "ijson-3.4.0.post0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:07f20ecd748602ac7f18c617637e53bd73ded7f3b22260bba3abe401a7fc284e"}, + {file = "ijson-3.4.0.post0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:27aa193d47ffc6bc4e45453896ad98fb089a367e8283b973f1fe5c0198b60b4e"}, + {file = "ijson-3.4.0.post0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ccddb2894eb7af162ba43b9475ac5825d15d568832f82eb8783036e5d2aebd42"}, + {file = "ijson-3.4.0.post0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:61ab0b8c5bf707201dc67e02c116f4b6545c4afd7feb2264b989d242d9c4348a"}, + {file = "ijson-3.4.0.post0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:254cfb8c124af68327a0e7a49b50bbdacafd87c4690a3d62c96eb01020a685ef"}, + {file = "ijson-3.4.0.post0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:04ac9ca54db20f82aeda6379b5f4f6112fdb150d09ebce04affeab98a17b4ed3"}, + {file = "ijson-3.4.0.post0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a603d7474bf35e7b3a8e49c8dabfc4751841931301adff3f3318171c4e407f32"}, + {file = "ijson-3.4.0.post0-cp313-cp313-win32.whl", hash = "sha256:ec5bb1520cb212ebead7dba048bb9b70552c3440584f83b01b0abc96862e2a09"}, + {file = "ijson-3.4.0.post0-cp313-cp313-win_amd64.whl", hash = "sha256:3505dff18bdeb8b171eb28af6df34857e2be80dc01e2e3b624e77215ad58897f"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:45a0b1c833ed2620eaf8da958f06ac8351c59e5e470e078400d23814670ed708"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7809ec8c8f40228edaaa089f33e811dff4c5b8509702652870d3f286c9682e27"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cf4a34c2cfe852aee75c89c05b0a4531c49dc0be27eeed221afd6fbf9c3e149c"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a39d5d36067604b26b78de70b8951c90e9272450642661fe531a8f7a6936a7fa"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83fc738d81c9ea686b452996110b8a6678296c481e0546857db24785bff8da92"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b2a81aee91633868f5b40280e2523f7c5392e920a5082f47c5e991e516b483f6"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:56169e298c5a2e7196aaa55da78ddc2415876a74fe6304f81b1eb0d3273346f7"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:eeb9540f0b1a575cbb5968166706946458f98c16e7accc6f2fe71efa29864241"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ba3478ff0bb49d7ba88783f491a99b6e3fa929c930ab062d2bb7837e6a38fe88"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-win32.whl", hash = "sha256:b005ce84e82f28b00bf777a464833465dfe3efa43a0a26c77b5ac40723e1a728"}, + {file = "ijson-3.4.0.post0-cp313-cp313t-win_amd64.whl", hash = "sha256:fe9c84c9b1c8798afa407be1cea1603401d99bfc7c34497e19f4f5e5ddc9b441"}, + {file = "ijson-3.4.0.post0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da6a21b88cbf5ecbc53371283988d22c9643aa71ae2873bbeaefd2dea3b6160b"}, + {file = "ijson-3.4.0.post0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cf24a48a1c3ca9d44a04feb59ccefeb9aa52bb49b9cb70ad30518c25cce74bb7"}, + {file = "ijson-3.4.0.post0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d14427d366f95f21adcb97d0ed1f6d30f6fdc04d0aa1e4de839152c50c2b8d65"}, + {file = "ijson-3.4.0.post0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:339d49f6c5d24051c85d9226be96d2d56e633cb8b7d09dd8099de8d8b51a97e2"}, + {file = "ijson-3.4.0.post0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7206afcb396aaef66c2b066997b4e9d9042c4b7d777f4d994e9cec6d322c2fe6"}, + {file = "ijson-3.4.0.post0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c8dd327da225887194fe8b93f2b3c9c256353e14a6b9eefc940ed17fde38f5b8"}, + {file = "ijson-3.4.0.post0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4810546e66128af51fd4a0c9a640e84e8508e9c15c4f247d8a3e3253b20e1465"}, + {file = "ijson-3.4.0.post0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:103a0838061297d063bca81d724b0958b616f372bd893bbc278320152252c652"}, + {file = "ijson-3.4.0.post0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:40007c977e230e04118b27322f25a72ae342a3d61464b2057fcd9b21eeb7427a"}, + {file = "ijson-3.4.0.post0-cp314-cp314-win32.whl", hash = "sha256:f932969fc1fd4449ca141cf5f47ff357656a154a361f28d9ebca0badc5b02297"}, + {file = "ijson-3.4.0.post0-cp314-cp314-win_amd64.whl", hash = "sha256:3ed19b1e4349240773a8ce4a4bfa450892d4a57949c02c515cd6be5a46b7696a"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:226447e40ca9340a39ed07d68ea02ee14b52cb4fe649425b256c1f0073531c83"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2c88f0669d45d4b1aa017c9b68d378e7cd15d188dfb6f0209adc78b7f45590a7"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:56b3089dc28c12492d92cc4896d2be585a89ecae34e25d08c1df88f21815cb50"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c117321cfa7b749cc1213f9b4c80dc958f0a206df98ec038ae4bcbbdb8463a15"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8311f48db6a33116db5c81682f08b6e2405501a4b4e460193ae69fec3cd1f87a"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:91c61a3e63e04da648737e6b4abd537df1b46fb8cdf3219b072e790bb3c1a46b"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1709171023ce82651b2f132575c2e6282e47f64ad67bd3260da476418d0e7895"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:5f0a72b1e3c0f78551670c12b2fdc1bf05f2796254d9c2055ba319bec2216020"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b982a3597b0439ce9c8f4cfc929d86c6ed43907908be1e8463a34dc35fe5b258"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-win32.whl", hash = "sha256:4e39bfdc36b0b460ef15a06550a6a385c64c81f7ac205ccff39bd45147918912"}, + {file = "ijson-3.4.0.post0-cp314-cp314t-win_amd64.whl", hash = "sha256:17e45262a5ddef39894013fb1548ee7094e444c8389eb1a97f86708b19bea03e"}, + {file = "ijson-3.4.0.post0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:35eb2760a42fd9461358b4be131287587b49ff504fc37fa3014dca6c27c343f4"}, + {file = "ijson-3.4.0.post0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f82ca7abfb3ef3cf2194c71dad634572bcccd62a5dd466649f78fe73d492c860"}, + {file = "ijson-3.4.0.post0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:97f5ef3d839fc24b0ad47e8b31b4751ae72c5d83606e3ee4c92bb25965c03a4f"}, + {file = "ijson-3.4.0.post0-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a2c873742e9f7e21378516217d81d6fa11d34bae860ed364832c00ab1dbf37ed"}, + {file = "ijson-3.4.0.post0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f8b9ffa2c2dfe3289da9aec4e5ab52684fa2b2da2c853c7891b360ec46fba07"}, + {file = "ijson-3.4.0.post0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0634b21188c67e5cf471cc1d30d193d19f521d89e2125ab1fb602aa8ae61e050"}, + {file = "ijson-3.4.0.post0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3752dd6f51ef58a71799de745649deff293e959700f1b7f5b1989618da366f24"}, + {file = "ijson-3.4.0.post0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:57db77f4ea3eca09f519f627d9f9c76eb862b30edef5d899f031feeed94f05a1"}, + {file = "ijson-3.4.0.post0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:435270a4b75667305f6df3226e5224e83cd6906022d7fdcc9df05caae725f796"}, + {file = "ijson-3.4.0.post0-cp39-cp39-win32.whl", hash = "sha256:742c211b004ab51ccad2b301525d8a6eb2cf68a5fb82d78836f3a351eec44d4e"}, + {file = "ijson-3.4.0.post0-cp39-cp39-win_amd64.whl", hash = "sha256:35aaa979da875fa92bea5dc5969b1541b4912b165091761785459a43f0c20946"}, + {file = "ijson-3.4.0.post0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:add9242f886eae844a7410b84aee2bbb8bdc83c624f227cb1fdb2d0476a96cb1"}, + {file = "ijson-3.4.0.post0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:69718ed41710dfcaa7564b0af42abc05875d4f7aaa24627c808867ef32634bc7"}, + {file = "ijson-3.4.0.post0-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:636b6eca96c6c43c04629c6b37fad0181662eaacf9877c71c698485637f752f9"}, + {file = "ijson-3.4.0.post0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb5e73028f6e63d27b3d286069fe350ed80a4ccc493b022b590fea4bb086710d"}, + {file = "ijson-3.4.0.post0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:461acf4320219459dabe5ed90a45cb86c9ba8cc6d6db9dad0d9427d42f57794c"}, + {file = "ijson-3.4.0.post0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a0fedf09c0f6ffa2a99e7e7fd9c5f3caf74e655c1ee015a0797383e99382ebc3"}, + {file = "ijson-3.4.0.post0.tar.gz", hash = "sha256:9aa02dc70bb245670a6ca7fba737b992aeeb4895360980622f7e568dbf23e41e"}, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"}, + {file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"}, +] + +[[package]] +name = "isort" +version = "6.1.0" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.9.0" +groups = ["main"] +files = [ + {file = "isort-6.1.0-py3-none-any.whl", hash = "sha256:58d8927ecce74e5087aef019f778d4081a3b6c98f15a80ba35782ca8a2097784"}, + {file = "isort-6.1.0.tar.gz", hash = "sha256:9b8f96a14cfee0677e78e941ff62f03769a06d412aabb9e2a90487b3b7e8d481"}, +] + +[package.extras] +colors = ["colorama"] +plugins = ["setuptools"] + +[[package]] +name = "jinja2" +version = "3.1.6" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, + {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "licaeros" +version = "0.1.7" +description = "License App for Aeros" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "licaeros-0.1.7-cp310-cp310-linux_x86_64.whl", hash = "sha256:77bec84f37e02a7aff84f6c45a97a5933a86d99cdfabfd74ede36fa64506bfde"}, + {file = "licaeros-0.1.7-cp311-cp311-linux_x86_64.whl", hash = "sha256:48e874645c5892e05c8f26bdea910dcdaa3e7b0e787be77920a4f4fb5504b2c1"}, + {file = "licaeros-0.1.7-cp312-cp312-linux_x86_64.whl", hash = "sha256:6a0bf6c1b9094693058d927febdb6799c61aea7b5dd10265b014c9d314844135"}, +] + +[package.source] +type = "legacy" +url = "https://git.reliabilityindonesia.com/api/packages/DigitalTwin/pypi/simple" +reference = "licaeros-repo" + +[[package]] +name = "limits" +version = "5.8.0" +description = "Rate limiting utilities" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "limits-5.8.0-py3-none-any.whl", hash = "sha256:ae1b008a43eb43073c3c579398bd4eb4c795de60952532dc24720ab45e1ac6b8"}, + {file = "limits-5.8.0.tar.gz", hash = "sha256:c9e0d74aed837e8f6f50d1fcebcf5fd8130957287206bc3799adaee5092655da"}, +] + +[package.dependencies] +deprecated = ">=1.2" +packaging = ">=21" +typing-extensions = "*" + +[package.extras] +async-memcached = ["memcachio (>=0.3)"] +async-mongodb = ["motor (>=3,<4)"] +async-redis = ["coredis (>=3.4.0,<6)"] +async-valkey = ["valkey (>=6)"] +memcached = ["pymemcache (>3,<5.0.0)"] +mongodb = ["pymongo (>4.1,<5)"] +redis = ["redis (>3,!=4.5.2,!=4.5.3,<8.0.0)"] +rediscluster = ["redis (>=4.2.0,!=4.5.2,!=4.5.3)"] +valkey = ["valkey (>=6)"] + +[[package]] +name = "markdown-it-py" +version = "4.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147"}, + {file = "markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "markdown-it-pyrs", "mistletoe (>=1.0,<2.0)", "mistune (>=3.0,<4.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins (>=0.5.0)"] +profiling = ["gprof2dot"] +rtd = ["ipykernel", "jupyter_sphinx", "mdit-py-plugins (>=0.5.0)", "myst-parser", "pyyaml", "sphinx", "sphinx-book-theme (>=1.0,<2.0)", "sphinx-copybutton", "sphinx-design"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions", "requests"] + +[[package]] +name = "markupsafe" +version = "3.0.3" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559"}, + {file = "markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1"}, + {file = "markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa"}, + {file = "markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8"}, + {file = "markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1"}, + {file = "markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad"}, + {file = "markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a"}, + {file = "markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19"}, + {file = "markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01"}, + {file = "markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c"}, + {file = "markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e"}, + {file = "markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b"}, + {file = "markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d"}, + {file = "markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c"}, + {file = "markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f"}, + {file = "markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795"}, + {file = "markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12"}, + {file = "markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed"}, + {file = "markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5"}, + {file = "markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485"}, + {file = "markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73"}, + {file = "markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287"}, + {file = "markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe"}, + {file = "markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe"}, + {file = "markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9"}, + {file = "markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581"}, + {file = "markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4"}, + {file = "markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab"}, + {file = "markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa"}, + {file = "markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26"}, + {file = "markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc"}, + {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c"}, + {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42"}, + {file = "markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b"}, + {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758"}, + {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2"}, + {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d"}, + {file = "markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7"}, + {file = "markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e"}, + {file = "markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8"}, + {file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"}, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "multidict" +version = "6.7.1" +description = "multidict implementation" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c93c3db7ea657dd4637d57e74ab73de31bccefe144d3d4ce370052035bc85fb5"}, + {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:974e72a2474600827abaeda71af0c53d9ebbc3c2eb7da37b37d7829ae31232d8"}, + {file = "multidict-6.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdea2e7b2456cfb6694fb113066fd0ec7ea4d67e3a35e1f4cbeea0b448bf5872"}, + {file = "multidict-6.7.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17207077e29342fdc2c9a82e4b306f1127bf1ea91f8b71e02d4798a70bb99991"}, + {file = "multidict-6.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4f49cb5661344764e4c7c7973e92a47a59b8fc19b6523649ec9dc4960e58a03"}, + {file = "multidict-6.7.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a9fc4caa29e2e6ae408d1c450ac8bf19892c5fca83ee634ecd88a53332c59981"}, + {file = "multidict-6.7.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c5f0c21549ab432b57dcc82130f388d84ad8179824cc3f223d5e7cfbfd4143f6"}, + {file = "multidict-6.7.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7dfb78d966b2c906ae1d28ccf6e6712a3cd04407ee5088cd276fe8cb42186190"}, + {file = "multidict-6.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b0d9b91d1aa44db9c1f1ecd0d9d2ae610b2f4f856448664e01a3b35899f3f92"}, + {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dd96c01a9dcd4889dcfcf9eb5544ca0c77603f239e3ffab0524ec17aea9a93ee"}, + {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:067343c68cd6612d375710f895337b3a98a033c94f14b9a99eff902f205424e2"}, + {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5884a04f4ff56c6120f6ccf703bdeb8b5079d808ba604d4d53aec0d55dc33568"}, + {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8affcf1c98b82bc901702eb73b6947a1bfa170823c153fe8a47b5f5f02e48e40"}, + {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0d17522c37d03e85c8098ec8431636309b2682cf12e58f4dbc76121fb50e4962"}, + {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24c0cf81544ca5e17cfcb6e482e7a82cd475925242b308b890c9452a074d4505"}, + {file = "multidict-6.7.1-cp310-cp310-win32.whl", hash = "sha256:d82dd730a95e6643802f4454b8fdecdf08667881a9c5670db85bc5a56693f122"}, + {file = "multidict-6.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:cf37cbe5ced48d417ba045aca1b21bafca67489452debcde94778a576666a1df"}, + {file = "multidict-6.7.1-cp310-cp310-win_arm64.whl", hash = "sha256:59bc83d3f66b41dac1e7460aac1d196edc70c9ba3094965c467715a70ecb46db"}, + {file = "multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d"}, + {file = "multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e"}, + {file = "multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855"}, + {file = "multidict-6.7.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8be1802715a8e892c784c0197c2ace276ea52702a0ede98b6310c8f255a5afb3"}, + {file = "multidict-6.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e2d2ed645ea29f31c4c7ea1552fcfd7cb7ba656e1eafd4134a6620c9f5fdd9e"}, + {file = "multidict-6.7.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a"}, + {file = "multidict-6.7.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8"}, + {file = "multidict-6.7.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0"}, + {file = "multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144"}, + {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d3bc717b6fe763b8be3f2bee2701d3c8eb1b2a8ae9f60910f1b2860c82b6c49"}, + {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71"}, + {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0b38ebffd9be37c1170d33bc0f36f4f262e0a09bc1aac1c34c7aa51a7293f0b3"}, + {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c"}, + {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0"}, + {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa"}, + {file = "multidict-6.7.1-cp311-cp311-win32.whl", hash = "sha256:d62b7f64ffde3b99d06b707a280db04fb3855b55f5a06df387236051d0668f4a"}, + {file = "multidict-6.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b"}, + {file = "multidict-6.7.1-cp311-cp311-win_arm64.whl", hash = "sha256:b8c990b037d2fff2f4e33d3f21b9b531c5745b33a49a7d6dbe7a177266af44f6"}, + {file = "multidict-6.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a90f75c956e32891a4eda3639ce6dd86e87105271f43d43442a3aedf3cddf172"}, + {file = "multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fccb473e87eaa1382689053e4a4618e7ba7b9b9b8d6adf2027ee474597128cd"}, + {file = "multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0fa96985700739c4c7853a43c0b3e169360d6855780021bfc6d0f1ce7c123e7"}, + {file = "multidict-6.7.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cb2a55f408c3043e42b40cc8eecd575afa27b7e0b956dfb190de0f8499a57a53"}, + {file = "multidict-6.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb0ce7b2a32d09892b3dd6cc44877a0d02a33241fafca5f25c8b6b62374f8b75"}, + {file = "multidict-6.7.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c3a32d23520ee37bf327d1e1a656fec76a2edd5c038bf43eddfa0572ec49c60b"}, + {file = "multidict-6.7.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9c90fed18bffc0189ba814749fdcc102b536e83a9f738a9003e569acd540a733"}, + {file = "multidict-6.7.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:da62917e6076f512daccfbbde27f46fed1c98fee202f0559adec8ee0de67f71a"}, + {file = "multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfde23ef6ed9db7eaee6c37dcec08524cb43903c60b285b172b6c094711b3961"}, + {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3758692429e4e32f1ba0df23219cd0b4fc0a52f476726fff9337d1a57676a582"}, + {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:398c1478926eca669f2fd6a5856b6de9c0acf23a2cb59a14c0ba5844fa38077e"}, + {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c102791b1c4f3ab36ce4101154549105a53dc828f016356b3e3bcae2e3a039d3"}, + {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a088b62bd733e2ad12c50dad01b7d0166c30287c166e137433d3b410add807a6"}, + {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3d51ff4785d58d3f6c91bdbffcb5e1f7ddfda557727043aa20d20ec4f65e324a"}, + {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc5907494fccf3e7d3f94f95c91d6336b092b5fc83811720fae5e2765890dfba"}, + {file = "multidict-6.7.1-cp312-cp312-win32.whl", hash = "sha256:28ca5ce2fd9716631133d0e9a9b9a745ad7f60bac2bccafb56aa380fc0b6c511"}, + {file = "multidict-6.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcee94dfbd638784645b066074b338bc9cc155d4b4bffa4adce1615c5a426c19"}, + {file = "multidict-6.7.1-cp312-cp312-win_arm64.whl", hash = "sha256:ba0a9fb644d0c1a2194cf7ffb043bd852cea63a57f66fbd33959f7dae18517bf"}, + {file = "multidict-6.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2b41f5fed0ed563624f1c17630cb9941cf2309d4df00e494b551b5f3e3d67a23"}, + {file = "multidict-6.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84e61e3af5463c19b67ced91f6c634effb89ef8bfc5ca0267f954451ed4bb6a2"}, + {file = "multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445"}, + {file = "multidict-6.7.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:432feb25a1cb67fe82a9680b4d65fb542e4635cb3166cd9c01560651ad60f177"}, + {file = "multidict-6.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23"}, + {file = "multidict-6.7.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4cfb48c6ea66c83bcaaf7e4dfa7ec1b6bbcf751b7db85a328902796dfde4c060"}, + {file = "multidict-6.7.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1d540e51b7e8e170174555edecddbd5538105443754539193e3e1061864d444d"}, + {file = "multidict-6.7.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:273d23f4b40f3dce4d6c8a821c741a86dec62cded82e1175ba3d99be128147ed"}, + {file = "multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429"}, + {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6"}, + {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:03ede2a6ffbe8ef936b92cb4529f27f42be7f56afcdab5ab739cd5f27fb1cbf9"}, + {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:90efbcf47dbe33dcf643a1e400d67d59abeac5db07dc3f27d6bdeae497a2198c"}, + {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c4b9bfc148f5a91be9244d6264c53035c8a0dcd2f51f1c3c6e30e30ebaa1c84"}, + {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:401c5a650f3add2472d1d288c26deebc540f99e2fb83e9525007a74cd2116f1d"}, + {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:97891f3b1b3ffbded884e2916cacf3c6fc87b66bb0dde46f7357404750559f33"}, + {file = "multidict-6.7.1-cp313-cp313-win32.whl", hash = "sha256:e1c5988359516095535c4301af38d8a8838534158f649c05dd1050222321bcb3"}, + {file = "multidict-6.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:960c83bf01a95b12b08fd54324a4eb1d5b52c88932b5cba5d6e712bb3ed12eb5"}, + {file = "multidict-6.7.1-cp313-cp313-win_arm64.whl", hash = "sha256:563fe25c678aaba333d5399408f5ec3c383ca5b663e7f774dd179a520b8144df"}, + {file = "multidict-6.7.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:c76c4bec1538375dad9d452d246ca5368ad6e1c9039dadcf007ae59c70619ea1"}, + {file = "multidict-6.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:57b46b24b5d5ebcc978da4ec23a819a9402b4228b8a90d9c656422b4bdd8a963"}, + {file = "multidict-6.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e954b24433c768ce78ab7929e84ccf3422e46deb45a4dc9f93438f8217fa2d34"}, + {file = "multidict-6.7.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3bd231490fa7217cc832528e1cd8752a96f0125ddd2b5749390f7c3ec8721b65"}, + {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292"}, + {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b4c48648d7649c9335cf1927a8b87fa692de3dcb15faa676c6a6f1f1aabda43"}, + {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98bc624954ec4d2c7cb074b8eefc2b5d0ce7d482e410df446414355d158fe4ca"}, + {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1b99af4d9eec0b49927b4402bcbb58dea89d3e0db8806a4086117019939ad3dd"}, + {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6aac4f16b472d5b7dc6f66a0d49dd57b0e0902090be16594dc9ebfd3d17c47e7"}, + {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3"}, + {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f5dd81c45b05518b9aa4da4aa74e1c93d715efa234fd3e8a179df611cc85e5f4"}, + {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:eb304767bca2bb92fb9c5bd33cedc95baee5bb5f6c88e63706533a1c06ad08c8"}, + {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c9035dde0f916702850ef66460bc4239d89d08df4d02023a5926e7446724212c"}, + {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:af959b9beeb66c822380f222f0e0a1889331597e81f1ded7f374f3ecb0fd6c52"}, + {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:41f2952231456154ee479651491e94118229844dd7226541788be783be2b5108"}, + {file = "multidict-6.7.1-cp313-cp313t-win32.whl", hash = "sha256:df9f19c28adcb40b6aae30bbaa1478c389efd50c28d541d76760199fc1037c32"}, + {file = "multidict-6.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d54ecf9f301853f2c5e802da559604b3e95bb7a3b01a9c295c6ee591b9882de8"}, + {file = "multidict-6.7.1-cp313-cp313t-win_arm64.whl", hash = "sha256:5a37ca18e360377cfda1d62f5f382ff41f2b8c4ccb329ed974cc2e1643440118"}, + {file = "multidict-6.7.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee"}, + {file = "multidict-6.7.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a407f13c188f804c759fc6a9f88286a565c242a76b27626594c133b82883b5c2"}, + {file = "multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1"}, + {file = "multidict-6.7.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1e3a8bb24342a8201d178c3b4984c26ba81a577c80d4d525727427460a50c22d"}, + {file = "multidict-6.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31"}, + {file = "multidict-6.7.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b10359683bd8806a200fd2909e7c8ca3a7b24ec1d8132e483d58e791d881048"}, + {file = "multidict-6.7.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:283ddac99f7ac25a4acadbf004cb5ae34480bbeb063520f70ce397b281859362"}, + {file = "multidict-6.7.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:538cec1e18c067d0e6103aa9a74f9e832904c957adc260e61cd9d8cf0c3b3d37"}, + {file = "multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709"}, + {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0"}, + {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2e1425e2f99ec5bd36c15a01b690a1a2456209c5deed58f95469ffb46039ccbb"}, + {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:497394b3239fc6f0e13a78a3e1b61296e72bf1c5f94b4c4eb80b265c37a131cd"}, + {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:233b398c29d3f1b9676b4b6f75c518a06fcb2ea0b925119fb2c1bc35c05e1601"}, + {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:93b1818e4a6e0930454f0f2af7dfce69307ca03cdcfb3739bf4d91241967b6c1"}, + {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b"}, + {file = "multidict-6.7.1-cp314-cp314-win32.whl", hash = "sha256:3ab8b9d8b75aef9df299595d5388b14530839f6422333357af1339443cff777d"}, + {file = "multidict-6.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f"}, + {file = "multidict-6.7.1-cp314-cp314-win_arm64.whl", hash = "sha256:4885cb0e817aef5d00a2e8451d4665c1808378dc27c2705f1bf4ef8505c0d2e5"}, + {file = "multidict-6.7.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581"}, + {file = "multidict-6.7.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:c0abd12629b0af3cf590982c0b413b1e7395cd4ec026f30986818ab95bfaa94a"}, + {file = "multidict-6.7.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c"}, + {file = "multidict-6.7.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17307b22c217b4cf05033dabefe68255a534d637c6c9b0cc8382718f87be4262"}, + {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59"}, + {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5fa6a95dfee63893d80a34758cd0e0c118a30b8dcb46372bf75106c591b77889"}, + {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a0543217a6a017692aa6ae5cc39adb75e587af0f3a82288b1492eb73dd6cc2a4"}, + {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f99fe611c312b3c1c0ace793f92464d8cd263cc3b26b5721950d977b006b6c4d"}, + {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609"}, + {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489"}, + {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:841189848ba629c3552035a6a7f5bf3b02eb304e9fea7492ca220a8eda6b0e5c"}, + {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce1bbd7d780bb5a0da032e095c951f7014d6b0a205f8318308140f1a6aba159e"}, + {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b26684587228afed0d50cf804cc71062cc9c1cdf55051c4c6345d372947b268c"}, + {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9f9af11306994335398293f9958071019e3ab95e9a707dc1383a35613f6abcb9"}, + {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2"}, + {file = "multidict-6.7.1-cp314-cp314t-win32.whl", hash = "sha256:98655c737850c064a65e006a3df7c997cd3b220be4ec8fe26215760b9697d4d7"}, + {file = "multidict-6.7.1-cp314-cp314t-win_amd64.whl", hash = "sha256:497bde6223c212ba11d462853cfa4f0ae6ef97465033e7dc9940cdb3ab5b48e5"}, + {file = "multidict-6.7.1-cp314-cp314t-win_arm64.whl", hash = "sha256:2bbd113e0d4af5db41d5ebfe9ccaff89de2120578164f86a5d17d5a576d1e5b2"}, + {file = "multidict-6.7.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:65573858d27cdeaca41893185677dc82395159aa28875a8867af66532d413a8f"}, + {file = "multidict-6.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c524c6fb8fc342793708ab111c4dbc90ff9abd568de220432500e47e990c0358"}, + {file = "multidict-6.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:aa23b001d968faef416ff70dc0f1ab045517b9b42a90edd3e9bcdb06479e31d5"}, + {file = "multidict-6.7.1-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6704fa2b7453b2fb121740555fa1ee20cd98c4d011120caf4d2b8d4e7c76eec0"}, + {file = "multidict-6.7.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:121a34e5bfa410cdf2c8c49716de160de3b1dbcd86b49656f5681e4543bcd1a8"}, + {file = "multidict-6.7.1-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:026d264228bcd637d4e060844e39cdc60f86c479e463d49075dedc21b18fbbe0"}, + {file = "multidict-6.7.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0e697826df7eb63418ee190fd06ce9f1803593bb4b9517d08c60d9b9a7f69d8f"}, + {file = "multidict-6.7.1-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bb08271280173720e9fea9ede98e5231defcbad90f1624bea26f32ec8a956e2f"}, + {file = "multidict-6.7.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c6b3228e1d80af737b72925ce5fb4daf5a335e49cd7ab77ed7b9fdfbf58c526e"}, + {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3943debf0fbb57bdde5901695c11094a9a36723e5c03875f87718ee15ca2f4d2"}, + {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:98c5787b0a0d9a41d9311eae44c3b76e6753def8d8870ab501320efe75a6a5f8"}, + {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:08ccb2a6dc72009093ebe7f3f073e5ec5964cba9a706fa94b1a1484039b87941"}, + {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:eb351f72c26dc9abe338ca7294661aa22969ad8ffe7ef7d5541d19f368dc854a"}, + {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ac1c665bad8b5d762f5f85ebe4d94130c26965f11de70c708c75671297c776de"}, + {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fa6609d0364f4f6f58351b4659a1f3e0e898ba2a8c5cac04cb2c7bc556b0bc5"}, + {file = "multidict-6.7.1-cp39-cp39-win32.whl", hash = "sha256:6f77ce314a29263e67adadc7e7c1bc699fcb3a305059ab973d038f87caa42ed0"}, + {file = "multidict-6.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:f537b55778cd3cbee430abe3131255d3a78202e0f9ea7ffc6ada893a4bcaeea4"}, + {file = "multidict-6.7.1-cp39-cp39-win_arm64.whl", hash = "sha256:749aa54f578f2e5f439538706a475aa844bfa8ef75854b1401e6e528e4937cf9"}, + {file = "multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56"}, + {file = "multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d"}, +] + +[[package]] +name = "nexus-rpc" +version = "1.3.0" +description = "Nexus Python SDK" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "nexus_rpc-1.3.0-py3-none-any.whl", hash = "sha256:aee0707b4861b22d8124ecb3f27d62dafbe8777dc50c66c91e49c006f971b92d"}, + {file = "nexus_rpc-1.3.0.tar.gz", hash = "sha256:e56d3b57b60d707ce7a72f83f23f106b86eca1043aa658e44582ab5ff30ab9ad"}, +] + +[package.dependencies] +typing-extensions = ">=4.12.2" + +[[package]] +name = "numpy" +version = "2.4.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.11" +groups = ["main"] +files = [ + {file = "numpy-2.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7e88598032542bd49af7c4747541422884219056c268823ef6e5e89851c8825"}, + {file = "numpy-2.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7edc794af8b36ca37ef5fcb5e0d128c7e0595c7b96a2318d1badb6fcd8ee86b1"}, + {file = "numpy-2.4.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:6e9f61981ace1360e42737e2bae58b27bf28a1b27e781721047d84bd754d32e7"}, + {file = "numpy-2.4.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:cb7bbb88aa74908950d979eeaa24dbdf1a865e3c7e45ff0121d8f70387b55f73"}, + {file = "numpy-2.4.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f069069931240b3fc703f1e23df63443dbd6390614c8c44a87d96cd0ec81eb1"}, + {file = "numpy-2.4.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c02ef4401a506fb60b411467ad501e1429a3487abca4664871d9ae0b46c8ba32"}, + {file = "numpy-2.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2653de5c24910e49c2b106499803124dde62a5a1fe0eedeaecf4309a5f639390"}, + {file = "numpy-2.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1ae241bbfc6ae276f94a170b14785e561cb5e7f626b6688cf076af4110887413"}, + {file = "numpy-2.4.2-cp311-cp311-win32.whl", hash = "sha256:df1b10187212b198dd45fa943d8985a3c8cf854aed4923796e0e019e113a1bda"}, + {file = "numpy-2.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:b9c618d56a29c9cb1c4da979e9899be7578d2e0b3c24d52079c166324c9e8695"}, + {file = "numpy-2.4.2-cp311-cp311-win_arm64.whl", hash = "sha256:47c5a6ed21d9452b10227e5e8a0e1c22979811cad7dcc19d8e3e2fb8fa03f1a3"}, + {file = "numpy-2.4.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:21982668592194c609de53ba4933a7471880ccbaadcc52352694a59ecc860b3a"}, + {file = "numpy-2.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40397bda92382fcec844066efb11f13e1c9a3e2a8e8f318fb72ed8b6db9f60f1"}, + {file = "numpy-2.4.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b3a24467af63c67829bfaa61eecf18d5432d4f11992688537be59ecd6ad32f5e"}, + {file = "numpy-2.4.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:805cc8de9fd6e7a22da5aed858e0ab16be5a4db6c873dde1d7451c541553aa27"}, + {file = "numpy-2.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d82351358ffbcdcd7b686b90742a9b86632d6c1c051016484fa0b326a0a1548"}, + {file = "numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e35d3e0144137d9fdae62912e869136164534d64a169f86438bc9561b6ad49f"}, + {file = "numpy-2.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adb6ed2ad29b9e15321d167d152ee909ec73395901b70936f029c3bc6d7f4460"}, + {file = "numpy-2.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8906e71fd8afcb76580404e2a950caef2685df3d2a57fe82a86ac8d33cc007ba"}, + {file = "numpy-2.4.2-cp312-cp312-win32.whl", hash = "sha256:ec055f6dae239a6299cace477b479cca2fc125c5675482daf1dd886933a1076f"}, + {file = "numpy-2.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85"}, + {file = "numpy-2.4.2-cp312-cp312-win_arm64.whl", hash = "sha256:fbde1b0c6e81d56f5dccd95dd4a711d9b95df1ae4009a60887e56b27e8d903fa"}, + {file = "numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25f2059807faea4b077a2b6837391b5d830864b3543627f381821c646f31a63c"}, + {file = "numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bd3a7a9f5847d2fb8c2c6d1c862fa109c31a9abeca1a3c2bd5a64572955b2979"}, + {file = "numpy-2.4.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8e4549f8a3c6d13d55041925e912bfd834285ef1dd64d6bc7d542583355e2e98"}, + {file = "numpy-2.4.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:aea4f66ff44dfddf8c2cffd66ba6538c5ec67d389285292fe428cb2c738c8aef"}, + {file = "numpy-2.4.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3cd545784805de05aafe1dde61752ea49a359ccba9760c1e5d1c88a93bbf2b7"}, + {file = "numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0d9b7c93578baafcbc5f0b83eaf17b79d345c6f36917ba0c67f45226911d499"}, + {file = "numpy-2.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f74f0f7779cc7ae07d1810aab8ac6b1464c3eafb9e283a40da7309d5e6e48fbb"}, + {file = "numpy-2.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c7ac672d699bf36275c035e16b65539931347d68b70667d28984c9fb34e07fa7"}, + {file = "numpy-2.4.2-cp313-cp313-win32.whl", hash = "sha256:8e9afaeb0beff068b4d9cd20d322ba0ee1cecfb0b08db145e4ab4dd44a6b5110"}, + {file = "numpy-2.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622"}, + {file = "numpy-2.4.2-cp313-cp313-win_arm64.whl", hash = "sha256:0fece1d1f0a89c16b03442eae5c56dc0be0c7883b5d388e0c03f53019a4bfd71"}, + {file = "numpy-2.4.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5633c0da313330fd20c484c78cdd3f9b175b55e1a766c4a174230c6b70ad8262"}, + {file = "numpy-2.4.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d9f64d786b3b1dd742c946c42d15b07497ed14af1a1f3ce840cce27daa0ce913"}, + {file = "numpy-2.4.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:b21041e8cb6a1eb5312dd1d2f80a94d91efffb7a06b70597d44f1bd2dfc315ab"}, + {file = "numpy-2.4.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00ab83c56211a1d7c07c25e3217ea6695e50a3e2f255053686b081dc0b091a82"}, + {file = "numpy-2.4.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fb882da679409066b4603579619341c6d6898fc83a8995199d5249f986e8e8f"}, + {file = "numpy-2.4.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:66cb9422236317f9d44b67b4d18f44efe6e9c7f8794ac0462978513359461554"}, + {file = "numpy-2.4.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0f01dcf33e73d80bd8dc0f20a71303abbafa26a19e23f6b68d1aa9990af90257"}, + {file = "numpy-2.4.2-cp313-cp313t-win32.whl", hash = "sha256:52b913ec40ff7ae845687b0b34d8d93b60cb66dcee06996dd5c99f2fc9328657"}, + {file = "numpy-2.4.2-cp313-cp313t-win_amd64.whl", hash = "sha256:5eea80d908b2c1f91486eb95b3fb6fab187e569ec9752ab7d9333d2e66bf2d6b"}, + {file = "numpy-2.4.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fd49860271d52127d61197bb50b64f58454e9f578cb4b2c001a6de8b1f50b0b1"}, + {file = "numpy-2.4.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:444be170853f1f9d528428eceb55f12918e4fda5d8805480f36a002f1415e09b"}, + {file = "numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d1240d50adff70c2a88217698ca844723068533f3f5c5fa6ee2e3220e3bdb000"}, + {file = "numpy-2.4.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:7cdde6de52fb6664b00b056341265441192d1291c130e99183ec0d4b110ff8b1"}, + {file = "numpy-2.4.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:cda077c2e5b780200b6b3e09d0b42205a3d1c68f30c6dceb90401c13bff8fe74"}, + {file = "numpy-2.4.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d30291931c915b2ab5717c2974bb95ee891a1cf22ebc16a8006bd59cd210d40a"}, + {file = "numpy-2.4.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bba37bc29d4d85761deed3954a1bc62be7cf462b9510b51d367b769a8c8df325"}, + {file = "numpy-2.4.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b2f0073ed0868db1dcd86e052d37279eef185b9c8db5bf61f30f46adac63c909"}, + {file = "numpy-2.4.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7f54844851cdb630ceb623dcec4db3240d1ac13d4990532446761baede94996a"}, + {file = "numpy-2.4.2-cp314-cp314-win32.whl", hash = "sha256:12e26134a0331d8dbd9351620f037ec470b7c75929cb8a1537f6bfe411152a1a"}, + {file = "numpy-2.4.2-cp314-cp314-win_amd64.whl", hash = "sha256:068cdb2d0d644cdb45670810894f6a0600797a69c05f1ac478e8d31670b8ee75"}, + {file = "numpy-2.4.2-cp314-cp314-win_arm64.whl", hash = "sha256:6ed0be1ee58eef41231a5c943d7d1375f093142702d5723ca2eb07db9b934b05"}, + {file = "numpy-2.4.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:98f16a80e917003a12c0580f97b5f875853ebc33e2eaa4bccfc8201ac6869308"}, + {file = "numpy-2.4.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:20abd069b9cda45874498b245c8015b18ace6de8546bf50dfa8cea1696ed06ef"}, + {file = "numpy-2.4.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:e98c97502435b53741540a5717a6749ac2ada901056c7db951d33e11c885cc7d"}, + {file = "numpy-2.4.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da6cad4e82cb893db4b69105c604d805e0c3ce11501a55b5e9f9083b47d2ffe8"}, + {file = "numpy-2.4.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e4424677ce4b47fe73c8b5556d876571f7c6945d264201180db2dc34f676ab5"}, + {file = "numpy-2.4.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2b8f157c8a6f20eb657e240f8985cc135598b2b46985c5bccbde7616dc9c6b1e"}, + {file = "numpy-2.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5daf6f3914a733336dab21a05cdec343144600e964d2fcdabaac0c0269874b2a"}, + {file = "numpy-2.4.2-cp314-cp314t-win32.whl", hash = "sha256:8c50dd1fc8826f5b26a5ee4d77ca55d88a895f4e4819c7ecc2a9f5905047a443"}, + {file = "numpy-2.4.2-cp314-cp314t-win_amd64.whl", hash = "sha256:fcf92bee92742edd401ba41135185866f7026c502617f422eb432cfeca4fe236"}, + {file = "numpy-2.4.2-cp314-cp314t-win_arm64.whl", hash = "sha256:1f92f53998a17265194018d1cc321b2e96e900ca52d54c7c77837b71b9465181"}, + {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:89f7268c009bc492f506abd6f5265defa7cb3f7487dc21d357c3d290add45082"}, + {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6dee3bb76aa4009d5a912180bf5b2de012532998d094acee25d9cb8dee3e44a"}, + {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:cd2bd2bbed13e213d6b55dc1d035a4f91748a7d3edc9480c13898b0353708920"}, + {file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:cf28c0c1d4c4bf00f509fa7eb02c58d7caf221b50b467bcb0d9bbf1584d5c821"}, + {file = "numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e04ae107ac591763a47398bb45b568fc38f02dbc4aa44c063f67a131f99346cb"}, + {file = "numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:602f65afdef699cda27ec0b9224ae5dc43e328f4c24c689deaf77133dbee74d0"}, + {file = "numpy-2.4.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:be71bf1edb48ebbbf7f6337b5bfd2f895d1902f6335a5830b20141fc126ffba0"}, + {file = "numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae"}, +] + +[[package]] +name = "openpyxl" +version = "3.1.5" +description = "A Python library to read/write Excel 2010 xlsx/xlsm files" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2"}, + {file = "openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050"}, +] + +[package.dependencies] +et-xmlfile = "*" + +[[package]] +name = "packaging" +version = "26.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529"}, + {file = "packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4"}, +] + +[[package]] +name = "pandas" +version = "2.3.3" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c"}, + {file = "pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a"}, + {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1"}, + {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838"}, + {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250"}, + {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4"}, + {file = "pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826"}, + {file = "pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523"}, + {file = "pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45"}, + {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66"}, + {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b"}, + {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791"}, + {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151"}, + {file = "pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c"}, + {file = "pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53"}, + {file = "pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35"}, + {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908"}, + {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89"}, + {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98"}, + {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084"}, + {file = "pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b"}, + {file = "pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713"}, + {file = "pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8"}, + {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d"}, + {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac"}, + {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c"}, + {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493"}, + {file = "pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee"}, + {file = "pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5"}, + {file = "pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21"}, + {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78"}, + {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110"}, + {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86"}, + {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc"}, + {file = "pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0"}, + {file = "pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593"}, + {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c"}, + {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b"}, + {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6"}, + {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3"}, + {file = "pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5"}, + {file = "pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec"}, + {file = "pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7"}, + {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450"}, + {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5"}, + {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788"}, + {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87"}, + {file = "pandas-2.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c503ba5216814e295f40711470446bc3fd00f0faea8a086cbc688808e26f92a2"}, + {file = "pandas-2.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a637c5cdfa04b6d6e2ecedcb81fc52ffb0fd78ce2ebccc9ea964df9f658de8c8"}, + {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:854d00d556406bffe66a4c0802f334c9ad5a96b4f1f868adf036a21b11ef13ff"}, + {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf1f8a81d04ca90e32a0aceb819d34dbd378a98bf923b6398b9a3ec0bf44de29"}, + {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:23ebd657a4d38268c7dfbdf089fbc31ea709d82e4923c5ffd4fbd5747133ce73"}, + {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5554c929ccc317d41a5e3d1234f3be588248e61f08a74dd17c9eabb535777dc9"}, + {file = "pandas-2.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:d3e28b3e83862ccf4d85ff19cf8c20b2ae7e503881711ff2d534dc8f761131aa"}, + {file = "pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.7" + +[package.extras] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] + +[[package]] +name = "pluggy" +version = "1.6.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, + {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["coverage", "pytest", "pytest-benchmark"] + +[[package]] +name = "propcache" +version = "0.4.1" +description = "Accelerated property cache" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "propcache-0.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db"}, + {file = "propcache-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8"}, + {file = "propcache-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925"}, + {file = "propcache-0.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21"}, + {file = "propcache-0.4.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5"}, + {file = "propcache-0.4.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db"}, + {file = "propcache-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7"}, + {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4"}, + {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60"}, + {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f"}, + {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900"}, + {file = "propcache-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c"}, + {file = "propcache-0.4.1-cp310-cp310-win32.whl", hash = "sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb"}, + {file = "propcache-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37"}, + {file = "propcache-0.4.1-cp310-cp310-win_arm64.whl", hash = "sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581"}, + {file = "propcache-0.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf"}, + {file = "propcache-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5"}, + {file = "propcache-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e"}, + {file = "propcache-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566"}, + {file = "propcache-0.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165"}, + {file = "propcache-0.4.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc"}, + {file = "propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48"}, + {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570"}, + {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85"}, + {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e"}, + {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757"}, + {file = "propcache-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f"}, + {file = "propcache-0.4.1-cp311-cp311-win32.whl", hash = "sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1"}, + {file = "propcache-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6"}, + {file = "propcache-0.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239"}, + {file = "propcache-0.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2"}, + {file = "propcache-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403"}, + {file = "propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207"}, + {file = "propcache-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72"}, + {file = "propcache-0.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367"}, + {file = "propcache-0.4.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4"}, + {file = "propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf"}, + {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3"}, + {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778"}, + {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6"}, + {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9"}, + {file = "propcache-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75"}, + {file = "propcache-0.4.1-cp312-cp312-win32.whl", hash = "sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8"}, + {file = "propcache-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db"}, + {file = "propcache-0.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1"}, + {file = "propcache-0.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf"}, + {file = "propcache-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311"}, + {file = "propcache-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74"}, + {file = "propcache-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe"}, + {file = "propcache-0.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af"}, + {file = "propcache-0.4.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c"}, + {file = "propcache-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f"}, + {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1"}, + {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24"}, + {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa"}, + {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61"}, + {file = "propcache-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66"}, + {file = "propcache-0.4.1-cp313-cp313-win32.whl", hash = "sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81"}, + {file = "propcache-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e"}, + {file = "propcache-0.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1"}, + {file = "propcache-0.4.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b"}, + {file = "propcache-0.4.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566"}, + {file = "propcache-0.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835"}, + {file = "propcache-0.4.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e"}, + {file = "propcache-0.4.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859"}, + {file = "propcache-0.4.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b"}, + {file = "propcache-0.4.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0"}, + {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af"}, + {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393"}, + {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874"}, + {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7"}, + {file = "propcache-0.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1"}, + {file = "propcache-0.4.1-cp313-cp313t-win32.whl", hash = "sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717"}, + {file = "propcache-0.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37"}, + {file = "propcache-0.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a"}, + {file = "propcache-0.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12"}, + {file = "propcache-0.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c"}, + {file = "propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded"}, + {file = "propcache-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641"}, + {file = "propcache-0.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4"}, + {file = "propcache-0.4.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44"}, + {file = "propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d"}, + {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b"}, + {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e"}, + {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f"}, + {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49"}, + {file = "propcache-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144"}, + {file = "propcache-0.4.1-cp314-cp314-win32.whl", hash = "sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f"}, + {file = "propcache-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153"}, + {file = "propcache-0.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992"}, + {file = "propcache-0.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f"}, + {file = "propcache-0.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393"}, + {file = "propcache-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0"}, + {file = "propcache-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a"}, + {file = "propcache-0.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be"}, + {file = "propcache-0.4.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc"}, + {file = "propcache-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a"}, + {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89"}, + {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726"}, + {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367"}, + {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36"}, + {file = "propcache-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455"}, + {file = "propcache-0.4.1-cp314-cp314t-win32.whl", hash = "sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85"}, + {file = "propcache-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1"}, + {file = "propcache-0.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9"}, + {file = "propcache-0.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3d233076ccf9e450c8b3bc6720af226b898ef5d051a2d145f7d765e6e9f9bcff"}, + {file = "propcache-0.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:357f5bb5c377a82e105e44bd3d52ba22b616f7b9773714bff93573988ef0a5fb"}, + {file = "propcache-0.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbc3b6dfc728105b2a57c06791eb07a94229202ea75c59db644d7d496b698cac"}, + {file = "propcache-0.4.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:182b51b421f0501952d938dc0b0eb45246a5b5153c50d42b495ad5fb7517c888"}, + {file = "propcache-0.4.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4b536b39c5199b96fc6245eb5fb796c497381d3942f169e44e8e392b29c9ebcc"}, + {file = "propcache-0.4.1-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:db65d2af507bbfbdcedb254a11149f894169d90488dd3e7190f7cdcb2d6cd57a"}, + {file = "propcache-0.4.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd2dbc472da1f772a4dae4fa24be938a6c544671a912e30529984dd80400cd88"}, + {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:daede9cd44e0f8bdd9e6cc9a607fc81feb80fae7a5fc6cecaff0e0bb32e42d00"}, + {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:71b749281b816793678ae7f3d0d84bd36e694953822eaad408d682efc5ca18e0"}, + {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:0002004213ee1f36cfb3f9a42b5066100c44276b9b72b4e1504cddd3d692e86e"}, + {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:fe49d0a85038f36ba9e3ffafa1103e61170b28e95b16622e11be0a0ea07c6781"}, + {file = "propcache-0.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:99d43339c83aaf4d32bda60928231848eee470c6bda8d02599cc4cebe872d183"}, + {file = "propcache-0.4.1-cp39-cp39-win32.whl", hash = "sha256:a129e76735bc792794d5177069691c3217898b9f5cee2b2661471e52ffe13f19"}, + {file = "propcache-0.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:948dab269721ae9a87fd16c514a0a2c2a1bdb23a9a61b969b0f9d9ee2968546f"}, + {file = "propcache-0.4.1-cp39-cp39-win_arm64.whl", hash = "sha256:5fd37c406dd6dc85aa743e214cef35dc54bbdd1419baac4f6ae5e5b1a2976938"}, + {file = "propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237"}, + {file = "propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d"}, +] + +[[package]] +name = "protobuf" +version = "6.33.5" +description = "" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "protobuf-6.33.5-cp310-abi3-win32.whl", hash = "sha256:d71b040839446bac0f4d162e758bea99c8251161dae9d0983a3b88dee345153b"}, + {file = "protobuf-6.33.5-cp310-abi3-win_amd64.whl", hash = "sha256:3093804752167bcab3998bec9f1048baae6e29505adaf1afd14a37bddede533c"}, + {file = "protobuf-6.33.5-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:a5cb85982d95d906df1e2210e58f8e4f1e3cdc088e52c921a041f9c9a0386de5"}, + {file = "protobuf-6.33.5-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:9b71e0281f36f179d00cbcb119cb19dec4d14a81393e5ea220f64b286173e190"}, + {file = "protobuf-6.33.5-cp39-abi3-manylinux2014_s390x.whl", hash = "sha256:8afa18e1d6d20af15b417e728e9f60f3aa108ee76f23c3b2c07a2c3b546d3afd"}, + {file = "protobuf-6.33.5-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0"}, + {file = "protobuf-6.33.5-cp39-cp39-win32.whl", hash = "sha256:a3157e62729aafb8df6da2c03aa5c0937c7266c626ce11a278b6eb7963c4e37c"}, + {file = "protobuf-6.33.5-cp39-cp39-win_amd64.whl", hash = "sha256:8f04fa32763dcdb4973d537d6b54e615cc61108c7cb38fe59310c3192d29510a"}, + {file = "protobuf-6.33.5-py3-none-any.whl", hash = "sha256:69915a973dd0f60f31a08b8318b73eab2bd6a392c79184b3612226b0a3f8ec02"}, + {file = "protobuf-6.33.5.tar.gz", hash = "sha256:6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c"}, +] + +[[package]] +name = "psycopg2-binary" +version = "2.9.11" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "psycopg2-binary-2.9.11.tar.gz", hash = "sha256:b6aed9e096bf63f9e75edf2581aa9a7e7186d97ab5c177aa6c87797cd591236c"}, + {file = "psycopg2_binary-2.9.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6fe6b47d0b42ce1c9f1fa3e35bb365011ca22e39db37074458f27921dca40f2"}, + {file = "psycopg2_binary-2.9.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6c0e4262e089516603a09474ee13eabf09cb65c332277e39af68f6233911087"}, + {file = "psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c47676e5b485393f069b4d7a811267d3168ce46f988fa602658b8bb901e9e64d"}, + {file = "psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:a28d8c01a7b27a1e3265b11250ba7557e5f72b5ee9e5f3a2fa8d2949c29bf5d2"}, + {file = "psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5f3f2732cf504a1aa9e9609d02f79bea1067d99edf844ab92c247bbca143303b"}, + {file = "psycopg2_binary-2.9.11-cp310-cp310-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:865f9945ed1b3950d968ec4690ce68c55019d79e4497366d36e090327ce7db14"}, + {file = "psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:91537a8df2bde69b1c1db01d6d944c831ca793952e4f57892600e96cee95f2cd"}, + {file = "psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4dca1f356a67ecb68c81a7bc7809f1569ad9e152ce7fd02c2f2036862ca9f66b"}, + {file = "psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:0da4de5c1ac69d94ed4364b6cbe7190c1a70d325f112ba783d83f8440285f152"}, + {file = "psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37d8412565a7267f7d79e29ab66876e55cb5e8e7b3bbf94f8206f6795f8f7e7e"}, + {file = "psycopg2_binary-2.9.11-cp310-cp310-win_amd64.whl", hash = "sha256:c665f01ec8ab273a61c62beeb8cce3014c214429ced8a308ca1fc410ecac3a39"}, + {file = "psycopg2_binary-2.9.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0e8480afd62362d0a6a27dd09e4ca2def6fa50ed3a4e7c09165266106b2ffa10"}, + {file = "psycopg2_binary-2.9.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:763c93ef1df3da6d1a90f86ea7f3f806dc06b21c198fa87c3c25504abec9404a"}, + {file = "psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2e164359396576a3cc701ba8af4751ae68a07235d7a380c631184a611220d9a4"}, + {file = "psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:d57c9c387660b8893093459738b6abddbb30a7eab058b77b0d0d1c7d521ddfd7"}, + {file = "psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2c226ef95eb2250974bf6fa7a842082b31f68385c4f3268370e3f3870e7859ee"}, + {file = "psycopg2_binary-2.9.11-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a311f1edc9967723d3511ea7d2708e2c3592e3405677bf53d5c7246753591fbb"}, + {file = "psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ebb415404821b6d1c47353ebe9c8645967a5235e6d88f914147e7fd411419e6f"}, + {file = "psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f07c9c4a5093258a03b28fab9b4f151aa376989e7f35f855088234e656ee6a94"}, + {file = "psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:00ce1830d971f43b667abe4a56e42c1e2d594b32da4802e44a73bacacb25535f"}, + {file = "psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cffe9d7697ae7456649617e8bb8d7a45afb71cd13f7ab22af3e5c61f04840908"}, + {file = "psycopg2_binary-2.9.11-cp311-cp311-win_amd64.whl", hash = "sha256:304fd7b7f97eef30e91b8f7e720b3db75fee010b520e434ea35ed1ff22501d03"}, + {file = "psycopg2_binary-2.9.11-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:be9b840ac0525a283a96b556616f5b4820e0526addb8dcf6525a0fa162730be4"}, + {file = "psycopg2_binary-2.9.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f090b7ddd13ca842ebfe301cd587a76a4cf0913b1e429eb92c1be5dbeb1a19bc"}, + {file = "psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ab8905b5dcb05bf3fb22e0cf90e10f469563486ffb6a96569e51f897c750a76a"}, + {file = "psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf940cd7e7fec19181fdbc29d76911741153d51cab52e5c21165f3262125685e"}, + {file = "psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fa0f693d3c68ae925966f0b14b8edda71696608039f4ed61b1fe9ffa468d16db"}, + {file = "psycopg2_binary-2.9.11-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a1cf393f1cdaf6a9b57c0a719a1068ba1069f022a59b8b1fe44b006745b59757"}, + {file = "psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ef7a6beb4beaa62f88592ccc65df20328029d721db309cb3250b0aae0fa146c3"}, + {file = "psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:31b32c457a6025e74d233957cc9736742ac5a6cb196c6b68499f6bb51390bd6a"}, + {file = "psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:edcb3aeb11cb4bf13a2af3c53a15b3d612edeb6409047ea0b5d6a21a9d744b34"}, + {file = "psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:62b6d93d7c0b61a1dd6197d208ab613eb7dcfdcca0a49c42ceb082257991de9d"}, + {file = "psycopg2_binary-2.9.11-cp312-cp312-win_amd64.whl", hash = "sha256:b33fabeb1fde21180479b2d4667e994de7bbf0eec22832ba5d9b5e4cf65b6c6d"}, + {file = "psycopg2_binary-2.9.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b8fb3db325435d34235b044b199e56cdf9ff41223a4b9752e8576465170bb38c"}, + {file = "psycopg2_binary-2.9.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:366df99e710a2acd90efed3764bb1e28df6c675d33a7fb40df9b7281694432ee"}, + {file = "psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8c55b385daa2f92cb64b12ec4536c66954ac53654c7f15a203578da4e78105c0"}, + {file = "psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:c0377174bf1dd416993d16edc15357f6eb17ac998244cca19bc67cdc0e2e5766"}, + {file = "psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5c6ff3335ce08c75afaed19e08699e8aacf95d4a260b495a4a8545244fe2ceb3"}, + {file = "psycopg2_binary-2.9.11-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:84011ba3109e06ac412f95399b704d3d6950e386b7994475b231cf61eec2fc1f"}, + {file = "psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ba34475ceb08cccbdd98f6b46916917ae6eeb92b5ae111df10b544c3a4621dc4"}, + {file = "psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b31e90fdd0f968c2de3b26ab014314fe814225b6c324f770952f7d38abf17e3c"}, + {file = "psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:d526864e0f67f74937a8fce859bd56c979f5e2ec57ca7c627f5f1071ef7fee60"}, + {file = "psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:04195548662fa544626c8ea0f06561eb6203f1984ba5b4562764fbeb4c3d14b1"}, + {file = "psycopg2_binary-2.9.11-cp313-cp313-win_amd64.whl", hash = "sha256:efff12b432179443f54e230fdf60de1f6cc726b6c832db8701227d089310e8aa"}, + {file = "psycopg2_binary-2.9.11-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:92e3b669236327083a2e33ccfa0d320dd01b9803b3e14dd986a4fc54aa00f4e1"}, + {file = "psycopg2_binary-2.9.11-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e0deeb03da539fa3577fcb0b3f2554a97f7e5477c246098dbb18091a4a01c16f"}, + {file = "psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9b52a3f9bb540a3e4ec0f6ba6d31339727b2950c9772850d6545b7eae0b9d7c5"}, + {file = "psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:db4fd476874ccfdbb630a54426964959e58da4c61c9feba73e6094d51303d7d8"}, + {file = "psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:47f212c1d3be608a12937cc131bd85502954398aaa1320cb4c14421a0ffccf4c"}, + {file = "psycopg2_binary-2.9.11-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e35b7abae2b0adab776add56111df1735ccc71406e56203515e228a8dc07089f"}, + {file = "psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fcf21be3ce5f5659daefd2b3b3b6e4727b028221ddc94e6c1523425579664747"}, + {file = "psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:9bd81e64e8de111237737b29d68039b9c813bdf520156af36d26819c9a979e5f"}, + {file = "psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:32770a4d666fbdafab017086655bcddab791d7cb260a16679cc5a7338b64343b"}, + {file = "psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c3cb3a676873d7506825221045bd70e0427c905b9c8ee8d6acd70cfcbd6e576d"}, + {file = "psycopg2_binary-2.9.11-cp314-cp314-win_amd64.whl", hash = "sha256:4012c9c954dfaccd28f94e84ab9f94e12df76b4afb22331b1f0d3154893a6316"}, + {file = "psycopg2_binary-2.9.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:20e7fb94e20b03dcc783f76c0865f9da39559dcc0c28dd1a3fce0d01902a6b9c"}, + {file = "psycopg2_binary-2.9.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4bdab48575b6f870f465b397c38f1b415520e9879fdf10a53ee4f49dcbdf8a21"}, + {file = "psycopg2_binary-2.9.11-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9d3a9edcfbe77a3ed4bc72836d466dfce4174beb79eda79ea155cc77237ed9e8"}, + {file = "psycopg2_binary-2.9.11-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:44fc5c2b8fa871ce7f0023f619f1349a0aa03a0857f2c96fbc01c657dcbbdb49"}, + {file = "psycopg2_binary-2.9.11-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9c55460033867b4622cda1b6872edf445809535144152e5d14941ef591980edf"}, + {file = "psycopg2_binary-2.9.11-cp39-cp39-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2d11098a83cca92deaeaed3d58cfd150d49b3b06ee0d0852be466bf87596899e"}, + {file = "psycopg2_binary-2.9.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:691c807d94aecfbc76a14e1408847d59ff5b5906a04a23e12a89007672b9e819"}, + {file = "psycopg2_binary-2.9.11-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:8b81627b691f29c4c30a8f322546ad039c40c328373b11dff7490a3e1b517855"}, + {file = "psycopg2_binary-2.9.11-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:b637d6d941209e8d96a072d7977238eea128046effbf37d1d8b2c0764750017d"}, + {file = "psycopg2_binary-2.9.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:41360b01c140c2a03d346cec3280cf8a71aa07d94f3b1509fa0161c366af66b4"}, + {file = "psycopg2_binary-2.9.11-cp39-cp39-win_amd64.whl", hash = "sha256:875039274f8a2361e5207857899706da840768e2a775bf8c65e82f60b197df02"}, +] + +[[package]] +name = "pydantic" +version = "2.12.5" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d"}, + {file = "pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49"}, +] + +[package.dependencies] +annotated-types = ">=0.6.0" +email-validator = {version = ">=2.0.0", optional = true, markers = "extra == \"email\""} +pydantic-core = "2.41.5" +typing-extensions = ">=4.14.1" +typing-inspection = ">=0.4.2" + +[package.extras] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] + +[[package]] +name = "pydantic-core" +version = "2.41.5" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pydantic_core-2.41.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146"}, + {file = "pydantic_core-2.41.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c"}, + {file = "pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2"}, + {file = "pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556"}, + {file = "pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49"}, + {file = "pydantic_core-2.41.5-cp310-cp310-win32.whl", hash = "sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba"}, + {file = "pydantic_core-2.41.5-cp310-cp310-win_amd64.whl", hash = "sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9"}, + {file = "pydantic_core-2.41.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6"}, + {file = "pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b"}, + {file = "pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284"}, + {file = "pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594"}, + {file = "pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e"}, + {file = "pydantic_core-2.41.5-cp311-cp311-win32.whl", hash = "sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b"}, + {file = "pydantic_core-2.41.5-cp311-cp311-win_amd64.whl", hash = "sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe"}, + {file = "pydantic_core-2.41.5-cp311-cp311-win_arm64.whl", hash = "sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f"}, + {file = "pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7"}, + {file = "pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5"}, + {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c"}, + {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294"}, + {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1"}, + {file = "pydantic_core-2.41.5-cp312-cp312-win32.whl", hash = "sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d"}, + {file = "pydantic_core-2.41.5-cp312-cp312-win_amd64.whl", hash = "sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815"}, + {file = "pydantic_core-2.41.5-cp312-cp312-win_arm64.whl", hash = "sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3"}, + {file = "pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9"}, + {file = "pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d"}, + {file = "pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740"}, + {file = "pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e"}, + {file = "pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858"}, + {file = "pydantic_core-2.41.5-cp313-cp313-win32.whl", hash = "sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36"}, + {file = "pydantic_core-2.41.5-cp313-cp313-win_amd64.whl", hash = "sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11"}, + {file = "pydantic_core-2.41.5-cp313-cp313-win_arm64.whl", hash = "sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd"}, + {file = "pydantic_core-2.41.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a"}, + {file = "pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553"}, + {file = "pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90"}, + {file = "pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07"}, + {file = "pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb"}, + {file = "pydantic_core-2.41.5-cp314-cp314-win32.whl", hash = "sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23"}, + {file = "pydantic_core-2.41.5-cp314-cp314-win_amd64.whl", hash = "sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf"}, + {file = "pydantic_core-2.41.5-cp314-cp314-win_arm64.whl", hash = "sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008"}, + {file = "pydantic_core-2.41.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf"}, + {file = "pydantic_core-2.41.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425"}, + {file = "pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504"}, + {file = "pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5"}, + {file = "pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3"}, + {file = "pydantic_core-2.41.5-cp39-cp39-win32.whl", hash = "sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460"}, + {file = "pydantic_core-2.41.5-cp39-cp39-win_amd64.whl", hash = "sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b"}, + {file = "pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034"}, + {file = "pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c"}, + {file = "pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2"}, + {file = "pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad"}, + {file = "pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd"}, + {file = "pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc"}, + {file = "pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56"}, + {file = "pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51"}, + {file = "pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e"}, +] + +[package.dependencies] +typing-extensions = ">=4.14.1" + +[[package]] +name = "pygments" +version = "2.19.2" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, + {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pytest" +version = "8.4.2" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79"}, + {file = "pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01"}, +] + +[package.dependencies] +colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} +iniconfig = ">=1" +packaging = ">=20" +pluggy = ">=1.5,<2" +pygments = ">=2.7.2" + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-asyncio" +version = "0.24.0" +description = "Pytest support for asyncio" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pytest_asyncio-0.24.0-py3-none-any.whl", hash = "sha256:a811296ed596b69bf0b6f3dc40f83bcaf341b155a269052d82efa2b25ac7037b"}, + {file = "pytest_asyncio-0.24.0.tar.gz", hash = "sha256:d081d828e576d85f875399194281e92bf8a68d60d72d1a2faf2feddb6c46b276"}, +] + +[package.dependencies] +pytest = ">=8.2,<9" + +[package.extras] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] +testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-dotenv" +version = "1.2.1" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "python_dotenv-1.2.1-py3-none-any.whl", hash = "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61"}, + {file = "python_dotenv-1.2.1.tar.gz", hash = "sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "python-multipart" +version = "0.0.22" +description = "A streaming multipart parser for Python" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "python_multipart-0.0.22-py3-none-any.whl", hash = "sha256:2b2cd894c83d21bf49d702499531c7bafd057d730c201782048f7945d82de155"}, + {file = "python_multipart-0.0.22.tar.gz", hash = "sha256:7340bef99a7e0032613f56dc36027b959fd3b30a787ed62d310e951f7c3a3a58"}, +] + +[[package]] +name = "pytz" +version = "2024.2" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, + {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "PyYAML-6.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f"}, + {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4"}, + {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3"}, + {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6"}, + {file = "PyYAML-6.0.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369"}, + {file = "PyYAML-6.0.3-cp38-cp38-win32.whl", hash = "sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295"}, + {file = "PyYAML-6.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b"}, + {file = "pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b"}, + {file = "pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b"}, + {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0"}, + {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69"}, + {file = "pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e"}, + {file = "pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c"}, + {file = "pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e"}, + {file = "pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d"}, + {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a"}, + {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4"}, + {file = "pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b"}, + {file = "pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf"}, + {file = "pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196"}, + {file = "pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc"}, + {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e"}, + {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea"}, + {file = "pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5"}, + {file = "pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b"}, + {file = "pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd"}, + {file = "pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8"}, + {file = "pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6"}, + {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6"}, + {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be"}, + {file = "pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26"}, + {file = "pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c"}, + {file = "pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb"}, + {file = "pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac"}, + {file = "pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5"}, + {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764"}, + {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35"}, + {file = "pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac"}, + {file = "pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3"}, + {file = "pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3"}, + {file = "pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c"}, + {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065"}, + {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65"}, + {file = "pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9"}, + {file = "pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b"}, + {file = "pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da"}, + {file = "pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a"}, + {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926"}, + {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7"}, + {file = "pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0"}, + {file = "pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007"}, + {file = "pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f"}, +] + +[[package]] +name = "redis" +version = "7.2.0" +description = "Python client for Redis database and key-value store" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "redis-7.2.0-py3-none-any.whl", hash = "sha256:01f591f8598e483f1842d429e8ae3a820804566f1c73dca1b80e23af9fba0497"}, + {file = "redis-7.2.0.tar.gz", hash = "sha256:4dd5bf4bd4ae80510267f14185a15cba2a38666b941aff68cccf0256b51c1f26"}, +] + +[package.dependencies] +async-timeout = {version = ">=4.0.3", markers = "python_full_version < \"3.11.3\""} + +[package.extras] +circuit-breaker = ["pybreaker (>=1.4.0)"] +hiredis = ["hiredis (>=3.2.0)"] +jwt = ["pyjwt (>=2.9.0)"] +ocsp = ["cryptography (>=36.0.1)", "pyopenssl (>=20.0.1)", "requests (>=2.31.0)"] +otel = ["opentelemetry-api (>=1.39.1)", "opentelemetry-exporter-otlp-proto-http (>=1.39.1)", "opentelemetry-sdk (>=1.39.1)"] +xxhash = ["xxhash (>=3.6.0,<3.7.0)"] + +[[package]] +name = "requests" +version = "2.32.5" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"}, + {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset_normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rich" +version = "14.3.3" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.8.0" +groups = ["main"] +files = [ + {file = "rich-14.3.3-py3-none-any.whl", hash = "sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d"}, + {file = "rich-14.3.3.tar.gz", hash = "sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "rich-toolkit" +version = "0.19.4" +description = "Rich toolkit for building command-line applications" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "rich_toolkit-0.19.4-py3-none-any.whl", hash = "sha256:34ac344de8862801644be8b703e26becf44b047e687f208d7829e8f7cfc311d6"}, + {file = "rich_toolkit-0.19.4.tar.gz", hash = "sha256:52e23d56f9dc30d1343eb3b3f6f18764c313fbfea24e52e6a1d6069bec9c18eb"}, +] + +[package.dependencies] +click = ">=8.1.7" +rich = ">=13.7.1" +typing-extensions = ">=4.12.2" + +[[package]] +name = "rignore" +version = "0.7.6" +description = "Python Bindings for the ignore crate" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "rignore-0.7.6-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f3c74a7e5ee77aea669c95fdb3933f2a6c7549893700082e759128a29cf67e45"}, + {file = "rignore-0.7.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7202404958f5fe3474bac91f65350f0b1dde1a5e05089f2946549b7e91e79ec"}, + {file = "rignore-0.7.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bde7c5835fa3905bfb7e329a4f1d7eccb676de63da7a3f934ddd5c06df20597"}, + {file = "rignore-0.7.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:626c3d4ba03af266694d25101bc1d8d16eda49c5feb86cedfec31c614fceca7d"}, + {file = "rignore-0.7.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a43841e651e7a05a4274b9026cc408d1912e64016ede8cd4c145dae5d0635be"}, + {file = "rignore-0.7.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7978c498dbf7f74d30cdb8859fe612167d8247f0acd377ae85180e34490725da"}, + {file = "rignore-0.7.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d22f72ab695c07d2d96d2a645208daff17084441b5d58c07378c9dd6f9c4c87"}, + {file = "rignore-0.7.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5bd8e1a91ed1a789b2cbe39eeea9204a6719d4f2cf443a9544b521a285a295f"}, + {file = "rignore-0.7.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bc1fc03efad5789365018e94ac4079f851a999bc154d1551c45179f7fcf45322"}, + {file = "rignore-0.7.6-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:ce2617fe28c51367fd8abfd4eeea9e61664af63c17d4ea00353d8ef56dfb95fa"}, + {file = "rignore-0.7.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:7c4ad2cee85068408e7819a38243043214e2c3047e9bd4c506f8de01c302709e"}, + {file = "rignore-0.7.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:02cd240bfd59ecc3907766f4839cbba20530a2e470abca09eaa82225e4d946fb"}, + {file = "rignore-0.7.6-cp310-cp310-win32.whl", hash = "sha256:fe2bd8fa1ff555259df54c376abc73855cb02628a474a40d51b358c3a1ddc55b"}, + {file = "rignore-0.7.6-cp310-cp310-win_amd64.whl", hash = "sha256:d80afd6071c78baf3765ec698841071b19e41c326f994cfa69b5a1df676f5d39"}, + {file = "rignore-0.7.6-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:40be8226e12d6653abbebaffaea2885f80374c1c8f76fe5ca9e0cadd120a272c"}, + {file = "rignore-0.7.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:182f4e5e4064d947c756819446a7d4cdede8e756b8c81cf9e509683fe38778d7"}, + {file = "rignore-0.7.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16b63047648a916a87be1e51bb5c009063f1b8b6f5afe4f04f875525507e63dc"}, + {file = "rignore-0.7.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ba5524f5178deca4d7695e936604ebc742acb8958f9395776e1fcb8133f8257a"}, + {file = "rignore-0.7.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:62020dbb89a1dd4b84ab3d60547b3b2eb2723641d5fb198463643f71eaaed57d"}, + {file = "rignore-0.7.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b34acd532769d5a6f153a52a98dcb81615c949ab11697ce26b2eb776af2e174d"}, + {file = "rignore-0.7.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c5e53b752f9de44dff7b3be3c98455ce3bf88e69d6dc0cf4f213346c5e3416c"}, + {file = "rignore-0.7.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:25b3536d13a5d6409ce85f23936f044576eeebf7b6db1d078051b288410fc049"}, + {file = "rignore-0.7.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6e01cad2b0b92f6b1993f29fc01f23f2d78caf4bf93b11096d28e9d578eb08ce"}, + {file = "rignore-0.7.6-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5991e46ab9b4868334c9e372ab0892b0150f3f586ff2b1e314272caeb38aaedb"}, + {file = "rignore-0.7.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6c8ae562e5d1246cba5eaeb92a47b2a279e7637102828dde41dcbe291f529a3e"}, + {file = "rignore-0.7.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aaf938530dcc0b47c4cfa52807aa2e5bfd5ca6d57a621125fe293098692f6345"}, + {file = "rignore-0.7.6-cp311-cp311-win32.whl", hash = "sha256:166ebce373105dd485ec213a6a2695986346e60c94ff3d84eb532a237b24a4d5"}, + {file = "rignore-0.7.6-cp311-cp311-win_amd64.whl", hash = "sha256:44f35ee844b1a8cea50d056e6a595190ce9d42d3cccf9f19d280ae5f3058973a"}, + {file = "rignore-0.7.6-cp311-cp311-win_arm64.whl", hash = "sha256:14b58f3da4fa3d5c3fa865cab49821675371f5e979281c683e131ae29159a581"}, + {file = "rignore-0.7.6-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:03e82348cb7234f8d9b2834f854400ddbbd04c0f8f35495119e66adbd37827a8"}, + {file = "rignore-0.7.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b9e624f6be6116ea682e76c5feb71ea91255c67c86cb75befe774365b2931961"}, + {file = "rignore-0.7.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bda49950d405aa8d0ebe26af807c4e662dd281d926530f03f29690a2e07d649a"}, + {file = "rignore-0.7.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5fd5ab3840b8c16851d327ed06e9b8be6459702a53e5ab1fc4073b684b3789e"}, + {file = "rignore-0.7.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ced2a248352636a5c77504cb755dc02c2eef9a820a44d3f33061ce1bb8a7f2d2"}, + {file = "rignore-0.7.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a04a3b73b75ddc12c9c9b21efcdaab33ca3832941d6f1d67bffd860941cd448a"}, + {file = "rignore-0.7.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d24321efac92140b7ec910ac7c53ab0f0c86a41133d2bb4b0e6a7c94967f44dd"}, + {file = "rignore-0.7.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c7aa109d41e593785c55fdaa89ad80b10330affa9f9d3e3a51fa695f739b20"}, + {file = "rignore-0.7.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1734dc49d1e9501b07852ef44421f84d9f378da9fbeda729e77db71f49cac28b"}, + {file = "rignore-0.7.6-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5719ea14ea2b652c0c0894be5dfde954e1853a80dea27dd2fbaa749618d837f5"}, + {file = "rignore-0.7.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8e23424fc7ce35726854f639cb7968151a792c0c3d9d082f7f67e0c362cfecca"}, + {file = "rignore-0.7.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3efdcf1dd84d45f3e2bd2f93303d9be103888f56dfa7c3349b5bf4f0657ec696"}, + {file = "rignore-0.7.6-cp312-cp312-win32.whl", hash = "sha256:ccca9d1a8b5234c76b71546fc3c134533b013f40495f394a65614a81f7387046"}, + {file = "rignore-0.7.6-cp312-cp312-win_amd64.whl", hash = "sha256:c96a285e4a8bfec0652e0bfcf42b1aabcdda1e7625f5006d188e3b1c87fdb543"}, + {file = "rignore-0.7.6-cp312-cp312-win_arm64.whl", hash = "sha256:a64a750e7a8277a323f01ca50b7784a764845f6cce2fe38831cb93f0508d0051"}, + {file = "rignore-0.7.6-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:2bdab1d31ec9b4fb1331980ee49ea051c0d7f7bb6baa28b3125ef03cdc48fdaf"}, + {file = "rignore-0.7.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:90f0a00ce0c866c275bf888271f1dc0d2140f29b82fcf33cdbda1e1a6af01010"}, + {file = "rignore-0.7.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1ad295537041dc2ed4b540fb1a3906bd9ede6ccdad3fe79770cd89e04e3c73c"}, + {file = "rignore-0.7.6-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f782dbd3a65a5ac85adfff69e5c6b101285ef3f845c3a3cae56a54bebf9fe116"}, + {file = "rignore-0.7.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65cece3b36e5b0826d946494734c0e6aaf5a0337e18ff55b071438efe13d559e"}, + {file = "rignore-0.7.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d7e4bb66c13cd7602dc8931822c02dfbbd5252015c750ac5d6152b186f0a8be0"}, + {file = "rignore-0.7.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:297e500c15766e196f68aaaa70e8b6db85fa23fdc075b880d8231fdfba738cd7"}, + {file = "rignore-0.7.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a07084211a8d35e1a5b1d32b9661a5ed20669970b369df0cf77da3adea3405de"}, + {file = "rignore-0.7.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:181eb2a975a22256a1441a9d2f15eb1292839ea3f05606620bd9e1938302cf79"}, + {file = "rignore-0.7.6-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:7bbcdc52b5bf9f054b34ce4af5269df5d863d9c2456243338bc193c28022bd7b"}, + {file = "rignore-0.7.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f2e027a6da21a7c8c0d87553c24ca5cc4364def18d146057862c23a96546238e"}, + {file = "rignore-0.7.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee4a18b82cbbc648e4aac1510066682fe62beb5dc88e2c67c53a83954e541360"}, + {file = "rignore-0.7.6-cp313-cp313-win32.whl", hash = "sha256:a7d7148b6e5e95035d4390396895adc384d37ff4e06781a36fe573bba7c283e5"}, + {file = "rignore-0.7.6-cp313-cp313-win_amd64.whl", hash = "sha256:b037c4b15a64dced08fc12310ee844ec2284c4c5c1ca77bc37d0a04f7bff386e"}, + {file = "rignore-0.7.6-cp313-cp313-win_arm64.whl", hash = "sha256:e47443de9b12fe569889bdbe020abe0e0b667516ee2ab435443f6d0869bd2804"}, + {file = "rignore-0.7.6-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:8e41be9fa8f2f47239ded8920cc283699a052ac4c371f77f5ac017ebeed75732"}, + {file = "rignore-0.7.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6dc1e171e52cefa6c20e60c05394a71165663b48bca6c7666dee4f778f2a7d90"}, + {file = "rignore-0.7.6-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ce2268837c3600f82ab8db58f5834009dc638ee17103582960da668963bebc5"}, + {file = "rignore-0.7.6-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:690a3e1b54bfe77e89c4bacb13f046e642f8baadafc61d68f5a726f324a76ab6"}, + {file = "rignore-0.7.6-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09d12ac7a0b6210c07bcd145007117ebd8abe99c8eeb383e9e4673910c2754b2"}, + {file = "rignore-0.7.6-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a2b2b74a8c60203b08452479b90e5ce3dbe96a916214bc9eb2e5af0b6a9beb0"}, + {file = "rignore-0.7.6-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fc5a531ef02131e44359419a366bfac57f773ea58f5278c2cdd915f7d10ea94"}, + {file = "rignore-0.7.6-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7a1f77d9c4cd7e76229e252614d963442686bfe12c787a49f4fe481df49e7a9"}, + {file = "rignore-0.7.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ead81f728682ba72b5b1c3d5846b011d3e0174da978de87c61645f2ed36659a7"}, + {file = "rignore-0.7.6-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:12ffd50f520c22ffdabed8cd8bfb567d9ac165b2b854d3e679f4bcaef11a9441"}, + {file = "rignore-0.7.6-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:e5a16890fbe3c894f8ca34b0fcacc2c200398d4d46ae654e03bc9b3dbf2a0a72"}, + {file = "rignore-0.7.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3abab3bf99e8a77488ef6c7c9a799fac22224c28fe9f25cc21aa7cc2b72bfc0b"}, + {file = "rignore-0.7.6-cp314-cp314-win32.whl", hash = "sha256:eeef421c1782953c4375aa32f06ecae470c1285c6381eee2a30d2e02a5633001"}, + {file = "rignore-0.7.6-cp314-cp314-win_amd64.whl", hash = "sha256:6aeed503b3b3d5af939b21d72a82521701a4bd3b89cd761da1e7dc78621af304"}, + {file = "rignore-0.7.6-cp314-cp314-win_arm64.whl", hash = "sha256:104f215b60b3c984c386c3e747d6ab4376d5656478694e22c7bd2f788ddd8304"}, + {file = "rignore-0.7.6-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:bb24a5b947656dd94cb9e41c4bc8b23cec0c435b58be0d74a874f63c259549e8"}, + {file = "rignore-0.7.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5b1e33c9501cefe24b70a1eafd9821acfd0ebf0b35c3a379430a14df089993e3"}, + {file = "rignore-0.7.6-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bec3994665a44454df86deb762061e05cd4b61e3772f5b07d1882a8a0d2748d5"}, + {file = "rignore-0.7.6-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:26cba2edfe3cff1dfa72bddf65d316ddebf182f011f2f61538705d6dbaf54986"}, + {file = "rignore-0.7.6-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ffa86694fec604c613696cb91e43892aa22e1fec5f9870e48f111c603e5ec4e9"}, + {file = "rignore-0.7.6-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48efe2ed95aa8104145004afb15cdfa02bea5cdde8b0344afeb0434f0d989aa2"}, + {file = "rignore-0.7.6-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dcae43eb44b7f2457fef7cc87f103f9a0013017a6f4e62182c565e924948f21"}, + {file = "rignore-0.7.6-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2cd649a7091c0dad2f11ef65630d30c698d505cbe8660dd395268e7c099cc99f"}, + {file = "rignore-0.7.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42de84b0289d478d30ceb7ae59023f7b0527786a9a5b490830e080f0e4ea5aeb"}, + {file = "rignore-0.7.6-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:875a617e57b53b4acbc5a91de418233849711c02e29cc1f4f9febb2f928af013"}, + {file = "rignore-0.7.6-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:8703998902771e96e49968105207719f22926e4431b108450f3f430b4e268b7c"}, + {file = "rignore-0.7.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:602ef33f3e1b04c1e9a10a3c03f8bc3cef2d2383dcc250d309be42b49923cabc"}, + {file = "rignore-0.7.6-cp314-cp314t-win32.whl", hash = "sha256:c1d8f117f7da0a4a96a8daef3da75bc090e3792d30b8b12cfadc240c631353f9"}, + {file = "rignore-0.7.6-cp314-cp314t-win_amd64.whl", hash = "sha256:ca36e59408bec81de75d307c568c2d0d410fb880b1769be43611472c61e85c96"}, + {file = "rignore-0.7.6-cp314-cp314t-win_arm64.whl", hash = "sha256:b83adabeb3e8cf662cabe1931b83e165b88c526fa6af6b3aa90429686e474896"}, + {file = "rignore-0.7.6-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:1bd0bf3f4e57f3d50a91dd4eff6a22ddc9b999dbab2b20fb0473332a5551a0be"}, + {file = "rignore-0.7.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:afb5157cd217af4f47a13ad7cbfc35de0aa1740331ba662fa02fea94269d5894"}, + {file = "rignore-0.7.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca877c5a7b78fe74d97b34b735ea8f320f97c49083f7bf8fe9b61a02cf677e67"}, + {file = "rignore-0.7.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5fde2bdfd6b3afee19db5efe01e4165437329f9300441c1b25d5b2aa6752c0cc"}, + {file = "rignore-0.7.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ef2183285a49653517a100f28d8c1a3e037a5e8cefe79cffe205ecc4b98f5095"}, + {file = "rignore-0.7.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87554ae12f813d3a287a0f2aad957c11e5c4ace17bfed15d471e5be13e95d9fb"}, + {file = "rignore-0.7.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3111040f77ec6b543a501a194c48d5260898e618712472deb91bf48026f1606c"}, + {file = "rignore-0.7.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8dfa178ead3abeeaf6b8c4fe9c6c9b333d2d66c88735566f919169d18e728fa5"}, + {file = "rignore-0.7.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:112527b824eaa93c99c2c7eb11e7df83eab46a63d527bcd71a92151bba5d0435"}, + {file = "rignore-0.7.6-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:435c0c0f38f15d9bef2a97b039b5157bbc32791510670b89504e644de1d27a5e"}, + {file = "rignore-0.7.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:96e899cd34b422c2d3ad7bef279e16387f217d53ec5f9a25dbc3fcad19470381"}, + {file = "rignore-0.7.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2ba1b9c80df4ea126ef303c7646021f44486342d43b7153f3454e15cd55eaa87"}, + {file = "rignore-0.7.6-cp38-cp38-win32.whl", hash = "sha256:1a1dffbfd930b27aef1962098710344297d52368b362f918eaf1464b0d8d052c"}, + {file = "rignore-0.7.6-cp38-cp38-win_amd64.whl", hash = "sha256:7f41cecc799005a029407893071b15082d504f9115a57db9ea893b35f3f70604"}, + {file = "rignore-0.7.6-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b3746bda73f2fe6a9c3ab2f20b792e7d810b30acbdba044313fbd2d0174802e7"}, + {file = "rignore-0.7.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:67a99cf19a5137cc12f14b78dc1bb3f48500f1d5580702c623297d5297bf2752"}, + {file = "rignore-0.7.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9e851cfa87033c0c3fd9d35dd8b102aff2981db8bc6e0cab27b460bfe38bf3f"}, + {file = "rignore-0.7.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e9b0def154665036516114437a5d603274e5451c0dc9694f622cc3b7e94603e7"}, + {file = "rignore-0.7.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b81274a47e8121224f7f637392b5dfcd9558e32a53e67ba7d04007d8b5281da9"}, + {file = "rignore-0.7.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d75d0b0696fb476664bea1169c8e67b13197750b91eceb4f10b3c7f379c7a204"}, + {file = "rignore-0.7.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ad3aa4dca77cef9168d0c142f72376f5bd27d1d4b8a81561bd01276d3ad9fe1"}, + {file = "rignore-0.7.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:00f8a59e19d219f44a93af7173de197e0d0e61c386364da20ebe98a303cbe38c"}, + {file = "rignore-0.7.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dd6c682f3cdd741e7a30af2581f6a382ac910080977cd1f97c651467b6268352"}, + {file = "rignore-0.7.6-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ae4e93193f75ebf6b820241594a78f347785cfd5a5fbbac94634052589418352"}, + {file = "rignore-0.7.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1163d8b5d3a320d4d7cc8635213328850dc41f60e438c7869d540061adf66c98"}, + {file = "rignore-0.7.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3e685f47b4c58b2df7dee81ebc1ec9dbb7f798b9455c3f22be6d75ac6bddee30"}, + {file = "rignore-0.7.6-cp39-cp39-win32.whl", hash = "sha256:2af6a0a76575220863cd838693c808a94e750640e0c8a3e9f707e93c2f131fdf"}, + {file = "rignore-0.7.6-cp39-cp39-win_amd64.whl", hash = "sha256:a326eab6db9ab85b4afb5e6eb28736a9f2b885a9246d9e8c1989bc693dd059a0"}, + {file = "rignore-0.7.6-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c3d3a523af1cd4ed2c0cba8d277a32d329b0c96ef9901fb7ca45c8cfaccf31a5"}, + {file = "rignore-0.7.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:990853566e65184a506e1e2af2d15045afad3ebaebb8859cb85b882081915110"}, + {file = "rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cab9ff2e436ce7240d7ee301c8ef806ed77c1fd6b8a8239ff65f9bbbcb5b8a3"}, + {file = "rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d1a6671b2082c13bfd9a5cf4ce64670f832a6d41470556112c4ab0b6519b2fc4"}, + {file = "rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2468729b4c5295c199d084ab88a40afcb7c8b974276805105239c07855bbacee"}, + {file = "rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:775710777fd71e5fdf54df69cdc249996a1d6f447a2b5bfb86dbf033fddd9cf9"}, + {file = "rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4565407f4a77f72cf9d91469e75d15d375f755f0a01236bb8aaa176278cc7085"}, + {file = "rignore-0.7.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dc44c33f8fb2d5c9da748de7a6e6653a78aa740655e7409895e94a247ffa97c8"}, + {file = "rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8f32478f05540513c11923e8838afab9efef0131d66dca7f67f0e1bbd118af6a"}, + {file = "rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:1b63a3dd76225ea35b01dd6596aa90b275b5d0f71d6dc28fce6dd295d98614aa"}, + {file = "rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:fe6c41175c36554a4ef0994cd1b4dbd6d73156fca779066456b781707402048e"}, + {file = "rignore-0.7.6-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9a0c6792406ae36f4e7664dc772da909451d46432ff8485774526232d4885063"}, + {file = "rignore-0.7.6-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a20b6fb61bcced9a83dfcca6599ad45182b06ba720cff7c8d891e5b78db5b65f"}, + {file = "rignore-0.7.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:392dcabfecbe176c9ebbcb40d85a5e86a5989559c4f988c2741da7daf1b5be25"}, + {file = "rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22baa462abdc36fdd5a5e2dae423107723351b85ff093762f9261148b9d0a04a"}, + {file = "rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53fb28882d2538cb2d231972146c4927a9d9455e62b209f85d634408c4103538"}, + {file = "rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87409f7eeb1103d6b77f3472a3a0d9a5953e3ae804a55080bdcb0120ee43995b"}, + {file = "rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:684014e42e4341ab3ea23a203551857fcc03a7f8ae96ca3aefb824663f55db32"}, + {file = "rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77356ebb01ba13f8a425c3d30fcad40e57719c0e37670d022d560884a30e4767"}, + {file = "rignore-0.7.6-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6cbd8a48abbd3747a6c830393cd578782fab5d43f4deea48c5f5e344b8fed2b0"}, + {file = "rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2673225dcec7f90497e79438c35e34638d0d0391ccea3cbb79bfb9adc0dc5bd7"}, + {file = "rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:c081f17290d8a2b96052b79207622aa635686ea39d502b976836384ede3d303c"}, + {file = "rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:57e8327aacc27f921968cb2a174f9e47b084ce9a7dd0122c8132d22358f6bd79"}, + {file = "rignore-0.7.6-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:d8955b57e42f2a5434670d5aa7b75eaf6e74602ccd8955dddf7045379cd762fb"}, + {file = "rignore-0.7.6-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e6ba1511c0ab8cd1ed8d6055bb0a6e629f48bfe04854293e0cd2dd88bd7153f8"}, + {file = "rignore-0.7.6-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:50586d90be15f9aa8a2e2ee5a042ee6c51e28848812a35f0c95d4bfc0533d469"}, + {file = "rignore-0.7.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b129873dd0ade248e67f25a09b5b72288cbef76ba1a9aae6bac193ee1d8be72"}, + {file = "rignore-0.7.6-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d9d6dd947556ddebfd62753005104986ee14a4e0663818aed19cdf2c33a6b5d5"}, + {file = "rignore-0.7.6-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91b95faa532efba888b196331e9af69e693635d469185ac52c796e435e2484e5"}, + {file = "rignore-0.7.6-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a1016f430fb56f7e400838bbc56fdf43adddb6fcb7bf2a14731dfd725c2fae6c"}, + {file = "rignore-0.7.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f00c519861926dc703ecbb7bbeb884be67099f96f98b175671fa0a54718f55d1"}, + {file = "rignore-0.7.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e34d172bf50e881b7c02e530ae8b1ea96093f0b16634c344f637227b39707b41"}, + {file = "rignore-0.7.6-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:101d3143619898db1e7bede2e3e647daf19bb867c4fb25978016d67978d14868"}, + {file = "rignore-0.7.6-pp39-pypy39_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:c9f3b420f54199a2b2b3b532d8c7e0860be3fa51f67501113cca6c7bfc392840"}, + {file = "rignore-0.7.6-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:1c6795e3694d750ae5ef172eab7d68a52aefbd9168d2e06647df691db2b03a50"}, + {file = "rignore-0.7.6-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:750a83a254b020e1193bfa7219dc7edca26bd8888a94cdc59720cbe386ab0c72"}, + {file = "rignore-0.7.6.tar.gz", hash = "sha256:00d3546cd793c30cb17921ce674d2c8f3a4b00501cb0e3dd0e82217dbeba2671"}, +] + +[[package]] +name = "sentry-sdk" +version = "2.53.0" +description = "Python client for Sentry (https://sentry.io)" +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "sentry_sdk-2.53.0-py2.py3-none-any.whl", hash = "sha256:46e1ed8d84355ae54406c924f6b290c3d61f4048625989a723fd622aab838899"}, + {file = "sentry_sdk-2.53.0.tar.gz", hash = "sha256:6520ef2c4acd823f28efc55e43eb6ce2e6d9f954a95a3aa96b6fd14871e92b77"}, +] + +[package.dependencies] +certifi = "*" +urllib3 = ">=1.26.11" + +[package.extras] +aiohttp = ["aiohttp (>=3.5)"] +anthropic = ["anthropic (>=0.16)"] +arq = ["arq (>=0.23)"] +asyncpg = ["asyncpg (>=0.23)"] +beam = ["apache-beam (>=2.12)"] +bottle = ["bottle (>=0.12.13)"] +celery = ["celery (>=3)"] +celery-redbeat = ["celery-redbeat (>=2)"] +chalice = ["chalice (>=1.16.0)"] +clickhouse-driver = ["clickhouse-driver (>=0.2.0)"] +django = ["django (>=1.8)"] +falcon = ["falcon (>=1.4)"] +fastapi = ["fastapi (>=0.79.0)"] +flask = ["blinker (>=1.1)", "flask (>=0.11)", "markupsafe"] +google-genai = ["google-genai (>=1.29.0)"] +grpcio = ["grpcio (>=1.21.1)", "protobuf (>=3.8.0)"] +http2 = ["httpcore[http2] (==1.*)"] +httpx = ["httpx (>=0.16.0)"] +huey = ["huey (>=2)"] +huggingface-hub = ["huggingface_hub (>=0.22)"] +langchain = ["langchain (>=0.0.210)"] +langgraph = ["langgraph (>=0.6.6)"] +launchdarkly = ["launchdarkly-server-sdk (>=9.8.0)"] +litellm = ["litellm (>=1.77.5)"] +litestar = ["litestar (>=2.0.0)"] +loguru = ["loguru (>=0.5)"] +mcp = ["mcp (>=1.15.0)"] +openai = ["openai (>=1.0.0)", "tiktoken (>=0.3.0)"] +openfeature = ["openfeature-sdk (>=0.7.1)"] +opentelemetry = ["opentelemetry-distro (>=0.35b0)"] +opentelemetry-experimental = ["opentelemetry-distro"] +opentelemetry-otlp = ["opentelemetry-distro[otlp] (>=0.35b0)"] +pure-eval = ["asttokens", "executing", "pure_eval"] +pydantic-ai = ["pydantic-ai (>=1.0.0)"] +pymongo = ["pymongo (>=3.1)"] +pyspark = ["pyspark (>=2.4.4)"] +quart = ["blinker (>=1.1)", "quart (>=0.16.1)"] +rq = ["rq (>=0.6)"] +sanic = ["sanic (>=0.8)"] +sqlalchemy = ["sqlalchemy (>=1.2)"] +starlette = ["starlette (>=0.19.1)"] +starlite = ["starlite (>=1.48)"] +statsig = ["statsig (>=0.55.3)"] +tornado = ["tornado (>=6)"] +unleash = ["UnleashClient (>=6.0.1)"] + +[[package]] +name = "shellingham" +version = "1.5.4" +description = "Tool to Detect Surrounding Shell" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, + {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, +] + +[[package]] +name = "six" +version = "1.17.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + +[[package]] +name = "slowapi" +version = "0.1.9" +description = "A rate limiting extension for Starlette and Fastapi" +optional = false +python-versions = ">=3.7,<4.0" +groups = ["main"] +files = [ + {file = "slowapi-0.1.9-py3-none-any.whl", hash = "sha256:cfad116cfb84ad9d763ee155c1e5c5cbf00b0d47399a769b227865f5df576e36"}, + {file = "slowapi-0.1.9.tar.gz", hash = "sha256:639192d0f1ca01b1c6d95bf6c71d794c3a9ee189855337b4821f7f457dddad77"}, +] + +[package.dependencies] +limits = ">=2.3" + +[package.extras] +redis = ["redis (>=3.4.1,<4.0.0)"] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "sqlalchemy" +version = "2.0.46" +description = "Database Abstraction Library" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "sqlalchemy-2.0.46-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:895296687ad06dc9b11a024cf68e8d9d3943aa0b4964278d2553b86f1b267735"}, + {file = "sqlalchemy-2.0.46-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab65cb2885a9f80f979b85aa4e9c9165a31381ca322cbde7c638fe6eefd1ec39"}, + {file = "sqlalchemy-2.0.46-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:52fe29b3817bd191cc20bad564237c808967972c97fa683c04b28ec8979ae36f"}, + {file = "sqlalchemy-2.0.46-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:09168817d6c19954d3b7655da6ba87fcb3a62bb575fb396a81a8b6a9fadfe8b5"}, + {file = "sqlalchemy-2.0.46-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:be6c0466b4c25b44c5d82b0426b5501de3c424d7a3220e86cd32f319ba56798e"}, + {file = "sqlalchemy-2.0.46-cp310-cp310-win32.whl", hash = "sha256:1bc3f601f0a818d27bfe139f6766487d9c88502062a2cd3a7ee6c342e81d5047"}, + {file = "sqlalchemy-2.0.46-cp310-cp310-win_amd64.whl", hash = "sha256:e0c05aff5c6b1bb5fb46a87e0f9d2f733f83ef6cbbbcd5c642b6c01678268061"}, + {file = "sqlalchemy-2.0.46-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:261c4b1f101b4a411154f1da2b76497d73abbfc42740029205d4d01fa1052684"}, + {file = "sqlalchemy-2.0.46-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:181903fe8c1b9082995325f1b2e84ac078b1189e2819380c2303a5f90e114a62"}, + {file = "sqlalchemy-2.0.46-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:590be24e20e2424a4c3c1b0835e9405fa3d0af5823a1a9fc02e5dff56471515f"}, + {file = "sqlalchemy-2.0.46-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7568fe771f974abadce52669ef3a03150ff03186d8eb82613bc8adc435a03f01"}, + {file = "sqlalchemy-2.0.46-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf7e1e78af38047e08836d33502c7a278915698b7c2145d045f780201679999"}, + {file = "sqlalchemy-2.0.46-cp311-cp311-win32.whl", hash = "sha256:9d80ea2ac519c364a7286e8d765d6cd08648f5b21ca855a8017d9871f075542d"}, + {file = "sqlalchemy-2.0.46-cp311-cp311-win_amd64.whl", hash = "sha256:585af6afe518732d9ccd3aea33af2edaae4a7aa881af5d8f6f4fe3a368699597"}, + {file = "sqlalchemy-2.0.46-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3a9a72b0da8387f15d5810f1facca8f879de9b85af8c645138cba61ea147968c"}, + {file = "sqlalchemy-2.0.46-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2347c3f0efc4de367ba00218e0ae5c4ba2306e47216ef80d6e31761ac97cb0b9"}, + {file = "sqlalchemy-2.0.46-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9094c8b3197db12aa6f05c51c05daaad0a92b8c9af5388569847b03b1007fb1b"}, + {file = "sqlalchemy-2.0.46-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37fee2164cf21417478b6a906adc1a91d69ae9aba8f9533e67ce882f4bb1de53"}, + {file = "sqlalchemy-2.0.46-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b1e14b2f6965a685c7128bd315e27387205429c2e339eeec55cb75ca4ab0ea2e"}, + {file = "sqlalchemy-2.0.46-cp312-cp312-win32.whl", hash = "sha256:412f26bb4ba942d52016edc8d12fb15d91d3cd46b0047ba46e424213ad407bcb"}, + {file = "sqlalchemy-2.0.46-cp312-cp312-win_amd64.whl", hash = "sha256:ea3cd46b6713a10216323cda3333514944e510aa691c945334713fca6b5279ff"}, + {file = "sqlalchemy-2.0.46-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:93a12da97cca70cea10d4b4fc602589c4511f96c1f8f6c11817620c021d21d00"}, + {file = "sqlalchemy-2.0.46-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:af865c18752d416798dae13f83f38927c52f085c52e2f32b8ab0fef46fdd02c2"}, + {file = "sqlalchemy-2.0.46-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8d679b5f318423eacb61f933a9a0f75535bfca7056daeadbf6bd5bcee6183aee"}, + {file = "sqlalchemy-2.0.46-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:64901e08c33462acc9ec3bad27fc7a5c2b6491665f2aa57564e57a4f5d7c52ad"}, + {file = "sqlalchemy-2.0.46-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e8ac45e8f4eaac0f9f8043ea0e224158855c6a4329fd4ee37c45c61e3beb518e"}, + {file = "sqlalchemy-2.0.46-cp313-cp313-win32.whl", hash = "sha256:8d3b44b3d0ab2f1319d71d9863d76eeb46766f8cf9e921ac293511804d39813f"}, + {file = "sqlalchemy-2.0.46-cp313-cp313-win_amd64.whl", hash = "sha256:77f8071d8fbcbb2dd11b7fd40dedd04e8ebe2eb80497916efedba844298065ef"}, + {file = "sqlalchemy-2.0.46-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1e8cc6cc01da346dc92d9509a63033b9b1bda4fed7a7a7807ed385c7dccdc10"}, + {file = "sqlalchemy-2.0.46-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:96c7cca1a4babaaf3bfff3e4e606e38578856917e52f0384635a95b226c87764"}, + {file = "sqlalchemy-2.0.46-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b2a9f9aee38039cf4755891a1e50e1effcc42ea6ba053743f452c372c3152b1b"}, + {file = "sqlalchemy-2.0.46-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:db23b1bf8cfe1f7fda19018e7207b20cdb5168f83c437ff7e95d19e39289c447"}, + {file = "sqlalchemy-2.0.46-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:56bdd261bfd0895452006d5316cbf35739c53b9bb71a170a331fa0ea560b2ada"}, + {file = "sqlalchemy-2.0.46-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:33e462154edb9493f6c3ad2125931e273bbd0be8ae53f3ecd1c161ea9a1dd366"}, + {file = "sqlalchemy-2.0.46-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9bcdce05f056622a632f1d44bb47dbdb677f58cad393612280406ce37530eb6d"}, + {file = "sqlalchemy-2.0.46-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8e84b09a9b0f19accedcbeff5c2caf36e0dd537341a33aad8d680336152dc34e"}, + {file = "sqlalchemy-2.0.46-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4f52f7291a92381e9b4de9050b0a65ce5d6a763333406861e33906b8aa4906bf"}, + {file = "sqlalchemy-2.0.46-cp314-cp314-win32.whl", hash = "sha256:70ed2830b169a9960193f4d4322d22be5c0925357d82cbf485b3369893350908"}, + {file = "sqlalchemy-2.0.46-cp314-cp314-win_amd64.whl", hash = "sha256:3c32e993bc57be6d177f7d5d31edb93f30726d798ad86ff9066d75d9bf2e0b6b"}, + {file = "sqlalchemy-2.0.46-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4dafb537740eef640c4d6a7c254611dca2df87eaf6d14d6a5fca9d1f4c3fc0fa"}, + {file = "sqlalchemy-2.0.46-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:42a1643dc5427b69aca967dae540a90b0fbf57eaf248f13a90ea5930e0966863"}, + {file = "sqlalchemy-2.0.46-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ff33c6e6ad006bbc0f34f5faf941cfc62c45841c64c0a058ac38c799f15b5ede"}, + {file = "sqlalchemy-2.0.46-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:82ec52100ec1e6ec671563bbd02d7c7c8d0b9e71a0723c72f22ecf52d1755330"}, + {file = "sqlalchemy-2.0.46-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6ac245604295b521de49b465bab845e3afe6916bcb2147e5929c8041b4ec0545"}, + {file = "sqlalchemy-2.0.46-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e6199143d51e3e1168bedd98cc698397404a8f7508831b81b6a29b18b051069"}, + {file = "sqlalchemy-2.0.46-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:716be5bcabf327b6d5d265dbdc6213a01199be587224eb991ad0d37e83d728fd"}, + {file = "sqlalchemy-2.0.46-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6f827fd687fa1ba7f51699e1132129eac8db8003695513fcf13fc587e1bd47a5"}, + {file = "sqlalchemy-2.0.46-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c805fa6e5d461329fa02f53f88c914d189ea771b6821083937e79550bf31fc19"}, + {file = "sqlalchemy-2.0.46-cp38-cp38-win32.whl", hash = "sha256:3aac08f7546179889c62b53b18ebf1148b10244b3405569c93984b0388d016a7"}, + {file = "sqlalchemy-2.0.46-cp38-cp38-win_amd64.whl", hash = "sha256:0cc3117db526cad3e61074100bd2867b533e2c7dc1569e95c14089735d6fb4fe"}, + {file = "sqlalchemy-2.0.46-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:90bde6c6b1827565a95fde597da001212ab436f1b2e0c2dcc7246e14db26e2a3"}, + {file = "sqlalchemy-2.0.46-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94b1e5f3a5f1ff4f42d5daab047428cd45a3380e51e191360a35cef71c9a7a2a"}, + {file = "sqlalchemy-2.0.46-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93bb0aae40b52c57fd74ef9c6933c08c040ba98daf23ad33c3f9893494b8d3ce"}, + {file = "sqlalchemy-2.0.46-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c4e2cc868b7b5208aec6c960950b7bb821f82c2fe66446c92ee0a571765e91a5"}, + {file = "sqlalchemy-2.0.46-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:965c62be8256d10c11f8907e7a8d3e18127a4c527a5919d85fa87fd9ecc2cfdc"}, + {file = "sqlalchemy-2.0.46-cp39-cp39-win32.whl", hash = "sha256:9397b381dcee8a2d6b99447ae85ea2530dcac82ca494d1db877087a13e38926d"}, + {file = "sqlalchemy-2.0.46-cp39-cp39-win_amd64.whl", hash = "sha256:4396c948d8217e83e2c202fbdcc0389cf8c93d2c1c5e60fa5c5a955eae0e64be"}, + {file = "sqlalchemy-2.0.46-py3-none-any.whl", hash = "sha256:f9c11766e7e7c0a2767dda5acb006a118640c9fc0a4104214b96269bfb78399e"}, + {file = "sqlalchemy-2.0.46.tar.gz", hash = "sha256:cf36851ee7219c170bb0793dbc3da3e80c582e04a5437bc601bfe8c85c9216d7"}, +] + +[package.dependencies] +greenlet = {version = ">=1", markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\""} +typing-extensions = ">=4.6.0" + +[package.extras] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (>=1)"] +aioodbc = ["aioodbc", "greenlet (>=1)"] +aiosqlite = ["aiosqlite", "greenlet (>=1)", "typing_extensions (!=3.10.0.1)"] +asyncio = ["greenlet (>=1)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (>=1)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10)"] +mssql = ["pyodbc"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] +mypy = ["mypy (>=0.910)"] +mysql = ["mysqlclient (>=1.4.0)"] +mysql-connector = ["mysql-connector-python"] +oracle = ["cx_oracle (>=8)"] +oracle-oracledb = ["oracledb (>=1.0.1)"] +postgresql = ["psycopg2 (>=2.7)"] +postgresql-asyncpg = ["asyncpg", "greenlet (>=1)"] +postgresql-pg8000 = ["pg8000 (>=1.29.1)"] +postgresql-psycopg = ["psycopg (>=3.0.7)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] +pymysql = ["pymysql"] +sqlcipher = ["sqlcipher3_binary"] + +[[package]] +name = "sqlalchemy-filters" +version = "0.13.0" +description = "A library to filter SQLAlchemy queries." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "sqlalchemy-filters-0.13.0.tar.gz", hash = "sha256:40f2daead93c4db2409cf5e5abf67a420179f9e5c1df5c15fa1b474f6533b105"}, + {file = "sqlalchemy_filters-0.13.0-py3-none-any.whl", hash = "sha256:aa4595b90d152eb76fa312a3e03d5d675f0c2e16762751f340f5449468689d9a"}, +] + +[package.dependencies] +six = ">=1.10.0" +sqlalchemy = ">=1.0.16" + +[package.extras] +dev = ["Pygments", "coverage (>=5.0.4,<5.1.0)", "coverage-conditional-plugin", "flake8", "pytest (>=4.6.9)", "restructuredtext-lint", "sqlalchemy-utils (>=0.37)"] +mysql = ["mysql-connector-python-rf (==2.2.2)"] +postgresql = ["psycopg2 (==2.8.4)"] + +[[package]] +name = "sqlalchemy-utils" +version = "0.41.2" +description = "Various utility functions for SQLAlchemy." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "SQLAlchemy-Utils-0.41.2.tar.gz", hash = "sha256:bc599c8c3b3319e53ce6c5c3c471120bd325d0071fb6f38a10e924e3d07b9990"}, + {file = "SQLAlchemy_Utils-0.41.2-py3-none-any.whl", hash = "sha256:85cf3842da2bf060760f955f8467b87983fb2e30f1764fd0e24a48307dc8ec6e"}, +] + +[package.dependencies] +SQLAlchemy = ">=1.3" + +[package.extras] +arrow = ["arrow (>=0.3.4)"] +babel = ["Babel (>=1.3)"] +color = ["colour (>=0.0.4)"] +encrypted = ["cryptography (>=0.6)"] +intervals = ["intervals (>=0.7.1)"] +password = ["passlib (>=1.6,<2.0)"] +pendulum = ["pendulum (>=2.0.5)"] +phone = ["phonenumbers (>=5.9.2)"] +test = ["Jinja2 (>=2.3)", "Pygments (>=1.2)", "backports.zoneinfo ; python_version < \"3.9\"", "docutils (>=0.10)", "flake8 (>=2.4.0)", "flexmock (>=0.9.7)", "isort (>=4.2.2)", "pg8000 (>=1.12.4)", "psycopg (>=3.1.8)", "psycopg2 (>=2.5.1)", "psycopg2cffi (>=2.8.1)", "pymysql", "pyodbc", "pytest (==7.4.4)", "python-dateutil (>=2.6)", "pytz (>=2014.2)"] +test-all = ["Babel (>=1.3)", "Jinja2 (>=2.3)", "Pygments (>=1.2)", "arrow (>=0.3.4)", "backports.zoneinfo ; python_version < \"3.9\"", "colour (>=0.0.4)", "cryptography (>=0.6)", "docutils (>=0.10)", "flake8 (>=2.4.0)", "flexmock (>=0.9.7)", "furl (>=0.4.1)", "intervals (>=0.7.1)", "isort (>=4.2.2)", "passlib (>=1.6,<2.0)", "pendulum (>=2.0.5)", "pg8000 (>=1.12.4)", "phonenumbers (>=5.9.2)", "psycopg (>=3.1.8)", "psycopg2 (>=2.5.1)", "psycopg2cffi (>=2.8.1)", "pymysql", "pyodbc", "pytest (==7.4.4)", "python-dateutil", "python-dateutil (>=2.6)", "pytz (>=2014.2)"] +timezone = ["python-dateutil"] +url = ["furl (>=0.4.1)"] + +[[package]] +name = "starlette" +version = "0.46.2" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "starlette-0.46.2-py3-none-any.whl", hash = "sha256:595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35"}, + {file = "starlette-0.46.2.tar.gz", hash = "sha256:7f7361f34eed179294600af672f565727419830b54b7b084efe44bb82d2fccd5"}, +] + +[package.dependencies] +anyio = ">=3.6.2,<5" + +[package.extras] +full = ["httpx (>=0.27.0,<0.29.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.18)", "pyyaml"] + +[[package]] +name = "temporalio" +version = "1.23.0" +description = "Temporal.io Python SDK" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "temporalio-1.23.0-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6b69ac8d75f2d90e66f4edce4316f6a33badc4a30b22efc50e9eddaa9acdc216"}, + {file = "temporalio-1.23.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:1bbbb2f9c3cdd09451565163f6d741e51f109694c49435d475fdfa42b597219d"}, + {file = "temporalio-1.23.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf6570e0ee696f99a38d855da4441a890c7187357c16505ed458ac9ef274ed70"}, + {file = "temporalio-1.23.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b82d6cca54c9f376b50e941dd10d12f7fe5b692a314fb087be72cd2898646a79"}, + {file = "temporalio-1.23.0-cp310-abi3-win_amd64.whl", hash = "sha256:43c3b99a46dd329761a256f3855710c4a5b322afc879785e468bdd0b94faace6"}, + {file = "temporalio-1.23.0.tar.gz", hash = "sha256:72750494b00eb73ded9db76195e3a9b53ff548780f73d878ec3f807ee3191410"}, +] + +[package.dependencies] +nexus-rpc = "1.3.0" +protobuf = ">=3.20,<7.0.0" +types-protobuf = ">=3.20" +typing-extensions = ">=4.2.0,<5" + +[package.extras] +grpc = ["grpcio (>=1.48.2,<2)"] +openai-agents = ["mcp (>=1.9.4,<2)", "openai-agents (>=0.3,<0.7)"] +opentelemetry = ["opentelemetry-api (>=1.11.1,<2)", "opentelemetry-sdk (>=1.11.1,<2)"] +pydantic = ["pydantic (>=2.0.0,<3)"] + +[[package]] +name = "typer" +version = "0.24.0" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "typer-0.24.0-py3-none-any.whl", hash = "sha256:5fc435a9c8356f6160ed6e85a6301fdd6e3d8b2851da502050d1f92c5e9eddc8"}, + {file = "typer-0.24.0.tar.gz", hash = "sha256:f9373dc4eff901350694f519f783c29b6d7a110fc0dcc11b1d7e353b85ca6504"}, +] + +[package.dependencies] +annotated-doc = ">=0.0.2" +click = ">=8.2.1" +rich = ">=12.3.0" +shellingham = ">=1.3.0" + +[[package]] +name = "types-protobuf" +version = "6.32.1.20251210" +description = "Typing stubs for protobuf" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "types_protobuf-6.32.1.20251210-py3-none-any.whl", hash = "sha256:2641f78f3696822a048cfb8d0ff42ccd85c25f12f871fbebe86da63793692140"}, + {file = "types_protobuf-6.32.1.20251210.tar.gz", hash = "sha256:c698bb3f020274b1a2798ae09dc773728ce3f75209a35187bd11916ebfde6763"}, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +description = "Backported and Experimental Type Hints for Python 3.9+" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, + {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +description = "Runtime typing introspection tools" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"}, + {file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"}, +] + +[package.dependencies] +typing-extensions = ">=4.12.0" + +[[package]] +name = "tzdata" +version = "2025.3" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +groups = ["main"] +files = [ + {file = "tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1"}, + {file = "tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7"}, +] + +[[package]] +name = "urllib3" +version = "2.6.3" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4"}, + {file = "urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed"}, +] + +[package.extras] +brotli = ["brotli (>=1.2.0) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=1.2.0.0) ; platform_python_implementation != \"CPython\""] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""] + +[[package]] +name = "uvicorn" +version = "0.32.1" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "uvicorn-0.32.1-py3-none-any.whl", hash = "sha256:82ad92fd58da0d12af7482ecdb5f2470a04c9c9a53ced65b9bbb4a205377602e"}, + {file = "uvicorn-0.32.1.tar.gz", hash = "sha256:ee9519c246a72b1c084cea8d3b44ed6026e78a4a309cbedae9c37e4cb9fbb175"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} +h11 = ">=0.8" +httptools = {version = ">=0.6.3", optional = true, markers = "extra == \"standard\""} +python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} +uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"standard\""} +watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} + +[package.extras] +standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.13)", "websockets (>=10.4)"] + +[[package]] +name = "uvloop" +version = "0.22.1" +description = "Fast implementation of asyncio event loop on top of libuv" +optional = false +python-versions = ">=3.8.1" +groups = ["main"] +markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "uvloop-0.22.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ef6f0d4cc8a9fa1f6a910230cd53545d9a14479311e87e3cb225495952eb672c"}, + {file = "uvloop-0.22.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7cd375a12b71d33d46af85a3343b35d98e8116134ba404bd657b3b1d15988792"}, + {file = "uvloop-0.22.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac33ed96229b7790eb729702751c0e93ac5bc3bcf52ae9eccbff30da09194b86"}, + {file = "uvloop-0.22.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:481c990a7abe2c6f4fc3d98781cc9426ebd7f03a9aaa7eb03d3bfc68ac2a46bd"}, + {file = "uvloop-0.22.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a592b043a47ad17911add5fbd087c76716d7c9ccc1d64ec9249ceafd735f03c2"}, + {file = "uvloop-0.22.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1489cf791aa7b6e8c8be1c5a080bae3a672791fcb4e9e12249b05862a2ca9cec"}, + {file = "uvloop-0.22.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c60ebcd36f7b240b30788554b6f0782454826a0ed765d8430652621b5de674b9"}, + {file = "uvloop-0.22.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b7f102bf3cb1995cfeaee9321105e8f5da76fdb104cdad8986f85461a1b7b77"}, + {file = "uvloop-0.22.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53c85520781d84a4b8b230e24a5af5b0778efdb39142b424990ff1ef7c48ba21"}, + {file = "uvloop-0.22.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:56a2d1fae65fd82197cb8c53c367310b3eabe1bbb9fb5a04d28e3e3520e4f702"}, + {file = "uvloop-0.22.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40631b049d5972c6755b06d0bfe8233b1bd9a8a6392d9d1c45c10b6f9e9b2733"}, + {file = "uvloop-0.22.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:535cc37b3a04f6cd2c1ef65fa1d370c9a35b6695df735fcff5427323f2cd5473"}, + {file = "uvloop-0.22.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:fe94b4564e865d968414598eea1a6de60adba0c040ba4ed05ac1300de402cd42"}, + {file = "uvloop-0.22.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:51eb9bd88391483410daad430813d982010f9c9c89512321f5b60e2cddbdddd6"}, + {file = "uvloop-0.22.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:700e674a166ca5778255e0e1dc4e9d79ab2acc57b9171b79e65feba7184b3370"}, + {file = "uvloop-0.22.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b5b1ac819a3f946d3b2ee07f09149578ae76066d70b44df3fa990add49a82e4"}, + {file = "uvloop-0.22.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e047cc068570bac9866237739607d1313b9253c3051ad84738cbb095be0537b2"}, + {file = "uvloop-0.22.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:512fec6815e2dd45161054592441ef76c830eddaad55c8aa30952e6fe1ed07c0"}, + {file = "uvloop-0.22.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:561577354eb94200d75aca23fbde86ee11be36b00e52a4eaf8f50fb0c86b7705"}, + {file = "uvloop-0.22.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cdf5192ab3e674ca26da2eada35b288d2fa49fdd0f357a19f0e7c4e7d5077c8"}, + {file = "uvloop-0.22.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e2ea3d6190a2968f4a14a23019d3b16870dd2190cd69c8180f7c632d21de68d"}, + {file = "uvloop-0.22.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0530a5fbad9c9e4ee3f2b33b148c6a64d47bbad8000ea63704fa8260f4cf728e"}, + {file = "uvloop-0.22.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bc5ef13bbc10b5335792360623cc378d52d7e62c2de64660616478c32cd0598e"}, + {file = "uvloop-0.22.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1f38ec5e3f18c8a10ded09742f7fb8de0108796eb673f30ce7762ce1b8550cad"}, + {file = "uvloop-0.22.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3879b88423ec7e97cd4eba2a443aa26ed4e59b45e6b76aabf13fe2f27023a142"}, + {file = "uvloop-0.22.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4baa86acedf1d62115c1dc6ad1e17134476688f08c6efd8a2ab076e815665c74"}, + {file = "uvloop-0.22.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:297c27d8003520596236bdb2335e6b3f649480bd09e00d1e3a99144b691d2a35"}, + {file = "uvloop-0.22.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1955d5a1dd43198244d47664a5858082a3239766a839b2102a269aaff7a4e25"}, + {file = "uvloop-0.22.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b31dc2fccbd42adc73bc4e7cdbae4fc5086cf378979e53ca5d0301838c5682c6"}, + {file = "uvloop-0.22.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:93f617675b2d03af4e72a5333ef89450dfaa5321303ede6e67ba9c9d26878079"}, + {file = "uvloop-0.22.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:37554f70528f60cad66945b885eb01f1bb514f132d92b6eeed1c90fd54ed6289"}, + {file = "uvloop-0.22.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:b76324e2dc033a0b2f435f33eb88ff9913c156ef78e153fb210e03c13da746b3"}, + {file = "uvloop-0.22.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:badb4d8e58ee08dad957002027830d5c3b06aea446a6a3744483c2b3b745345c"}, + {file = "uvloop-0.22.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b91328c72635f6f9e0282e4a57da7470c7350ab1c9f48546c0f2866205349d21"}, + {file = "uvloop-0.22.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:daf620c2995d193449393d6c62131b3fbd40a63bf7b307a1527856ace637fe88"}, + {file = "uvloop-0.22.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6cde23eeda1a25c75b2e07d39970f3374105d5eafbaab2a4482be82f272d5a5e"}, + {file = "uvloop-0.22.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:80eee091fe128e425177fbd82f8635769e2f32ec9daf6468286ec57ec0313efa"}, + {file = "uvloop-0.22.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:017bd46f9e7b78e81606329d07141d3da446f8798c6baeec124260e22c262772"}, + {file = "uvloop-0.22.1-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3e5c6727a57cb6558592a95019e504f605d1c54eb86463ee9f7a2dbd411c820"}, + {file = "uvloop-0.22.1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:57df59d8b48feb0e613d9b1f5e57b7532e97cbaf0d61f7aa9aa32221e84bc4b6"}, + {file = "uvloop-0.22.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:55502bc2c653ed2e9692e8c55cb95b397d33f9f2911e929dc97c4d6b26d04242"}, + {file = "uvloop-0.22.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4a968a72422a097b09042d5fa2c5c590251ad484acf910a651b4b620acd7f193"}, + {file = "uvloop-0.22.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b45649628d816c030dba3c80f8e2689bab1c89518ed10d426036cdc47874dfc4"}, + {file = "uvloop-0.22.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ea721dd3203b809039fcc2983f14608dae82b212288b346e0bfe46ec2fab0b7c"}, + {file = "uvloop-0.22.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ae676de143db2b2f60a9696d7eca5bb9d0dd6cc3ac3dad59a8ae7e95f9e1b54"}, + {file = "uvloop-0.22.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:17d4e97258b0172dfa107b89aa1eeba3016f4b1974ce85ca3ef6a66b35cbf659"}, + {file = "uvloop-0.22.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:05e4b5f86e621cf3927631789999e697e58f0d2d32675b67d9ca9eb0bca55743"}, + {file = "uvloop-0.22.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:286322a90bea1f9422a470d5d2ad82d38080be0a29c4dd9b3e6384320a4d11e7"}, + {file = "uvloop-0.22.1.tar.gz", hash = "sha256:6c84bae345b9147082b17371e3dd5d42775bddce91f885499017f4607fdaf39f"}, +] + +[package.extras] +dev = ["Cython (>=3.0,<4.0)", "setuptools (>=60)"] +docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx_rtd_theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] +test = ["aiohttp (>=3.10.5)", "flake8 (>=6.1,<7.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=25.3.0,<25.4.0)", "pycodestyle (>=2.11.0,<2.12.0)"] + +[[package]] +name = "watchfiles" +version = "1.1.1" +description = "Simple, modern and high performance file watching and code reload in python." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "watchfiles-1.1.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:eef58232d32daf2ac67f42dea51a2c80f0d03379075d44a587051e63cc2e368c"}, + {file = "watchfiles-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:03fa0f5237118a0c5e496185cafa92878568b652a2e9a9382a5151b1a0380a43"}, + {file = "watchfiles-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca65483439f9c791897f7db49202301deb6e15fe9f8fe2fed555bf986d10c31"}, + {file = "watchfiles-1.1.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f0ab1c1af0cb38e3f598244c17919fb1a84d1629cc08355b0074b6d7f53138ac"}, + {file = "watchfiles-1.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bc570d6c01c206c46deb6e935a260be44f186a2f05179f52f7fcd2be086a94d"}, + {file = "watchfiles-1.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e84087b432b6ac94778de547e08611266f1f8ffad28c0ee4c82e028b0fc5966d"}, + {file = "watchfiles-1.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:620bae625f4cb18427b1bb1a2d9426dc0dd5a5ba74c7c2cdb9de405f7b129863"}, + {file = "watchfiles-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:544364b2b51a9b0c7000a4b4b02f90e9423d97fbbf7e06689236443ebcad81ab"}, + {file = "watchfiles-1.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bbe1ef33d45bc71cf21364df962af171f96ecaeca06bd9e3d0b583efb12aec82"}, + {file = "watchfiles-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1a0bb430adb19ef49389e1ad368450193a90038b5b752f4ac089ec6942c4dff4"}, + {file = "watchfiles-1.1.1-cp310-cp310-win32.whl", hash = "sha256:3f6d37644155fb5beca5378feb8c1708d5783145f2a0f1c4d5a061a210254844"}, + {file = "watchfiles-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:a36d8efe0f290835fd0f33da35042a1bb5dc0e83cbc092dcf69bce442579e88e"}, + {file = "watchfiles-1.1.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f57b396167a2565a4e8b5e56a5a1c537571733992b226f4f1197d79e94cf0ae5"}, + {file = "watchfiles-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:421e29339983e1bebc281fab40d812742268ad057db4aee8c4d2bce0af43b741"}, + {file = "watchfiles-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e43d39a741e972bab5d8100b5cdacf69db64e34eb19b6e9af162bccf63c5cc6"}, + {file = "watchfiles-1.1.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f537afb3276d12814082a2e9b242bdcf416c2e8fd9f799a737990a1dbe906e5b"}, + {file = "watchfiles-1.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2cd9e04277e756a2e2d2543d65d1e2166d6fd4c9b183f8808634fda23f17b14"}, + {file = "watchfiles-1.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f3f58818dc0b07f7d9aa7fe9eb1037aecb9700e63e1f6acfed13e9fef648f5d"}, + {file = "watchfiles-1.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bb9f66367023ae783551042d31b1d7fd422e8289eedd91f26754a66f44d5cff"}, + {file = "watchfiles-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aebfd0861a83e6c3d1110b78ad54704486555246e542be3e2bb94195eabb2606"}, + {file = "watchfiles-1.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5fac835b4ab3c6487b5dbad78c4b3724e26bcc468e886f8ba8cc4306f68f6701"}, + {file = "watchfiles-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:399600947b170270e80134ac854e21b3ccdefa11a9529a3decc1327088180f10"}, + {file = "watchfiles-1.1.1-cp311-cp311-win32.whl", hash = "sha256:de6da501c883f58ad50db3a32ad397b09ad29865b5f26f64c24d3e3281685849"}, + {file = "watchfiles-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:35c53bd62a0b885bf653ebf6b700d1bf05debb78ad9292cf2a942b23513dc4c4"}, + {file = "watchfiles-1.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:57ca5281a8b5e27593cb7d82c2ac927ad88a96ed406aa446f6344e4328208e9e"}, + {file = "watchfiles-1.1.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:8c89f9f2f740a6b7dcc753140dd5e1ab9215966f7a3530d0c0705c83b401bd7d"}, + {file = "watchfiles-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bd404be08018c37350f0d6e34676bd1e2889990117a2b90070b3007f172d0610"}, + {file = "watchfiles-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8526e8f916bb5b9a0a777c8317c23ce65de259422bba5b31325a6fa6029d33af"}, + {file = "watchfiles-1.1.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2edc3553362b1c38d9f06242416a5d8e9fe235c204a4072e988ce2e5bb1f69f6"}, + {file = "watchfiles-1.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30f7da3fb3f2844259cba4720c3fc7138eb0f7b659c38f3bfa65084c7fc7abce"}, + {file = "watchfiles-1.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8979280bdafff686ba5e4d8f97840f929a87ed9cdf133cbbd42f7766774d2aa"}, + {file = "watchfiles-1.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dcc5c24523771db3a294c77d94771abcfcb82a0e0ee8efd910c37c59ec1b31bb"}, + {file = "watchfiles-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803"}, + {file = "watchfiles-1.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:28475ddbde92df1874b6c5c8aaeb24ad5be47a11f87cde5a28ef3835932e3e94"}, + {file = "watchfiles-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:36193ed342f5b9842edd3532729a2ad55c4160ffcfa3700e0d54be496b70dd43"}, + {file = "watchfiles-1.1.1-cp312-cp312-win32.whl", hash = "sha256:859e43a1951717cc8de7f4c77674a6d389b106361585951d9e69572823f311d9"}, + {file = "watchfiles-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:91d4c9a823a8c987cce8fa2690923b069966dabb196dd8d137ea2cede885fde9"}, + {file = "watchfiles-1.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:a625815d4a2bdca61953dbba5a39d60164451ef34c88d751f6c368c3ea73d404"}, + {file = "watchfiles-1.1.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:130e4876309e8686a5e37dba7d5e9bc77e6ed908266996ca26572437a5271e18"}, + {file = "watchfiles-1.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5f3bde70f157f84ece3765b42b4a52c6ac1a50334903c6eaf765362f6ccca88a"}, + {file = "watchfiles-1.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e0b1fe858430fc0251737ef3824c54027bedb8c37c38114488b8e131cf8219"}, + {file = "watchfiles-1.1.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f27db948078f3823a6bb3b465180db8ebecf26dd5dae6f6180bd87383b6b4428"}, + {file = "watchfiles-1.1.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:059098c3a429f62fc98e8ec62b982230ef2c8df68c79e826e37b895bc359a9c0"}, + {file = "watchfiles-1.1.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfb5862016acc9b869bb57284e6cb35fdf8e22fe59f7548858e2f971d045f150"}, + {file = "watchfiles-1.1.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:319b27255aacd9923b8a276bb14d21a5f7ff82564c744235fc5eae58d95422ae"}, + {file = "watchfiles-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c755367e51db90e75b19454b680903631d41f9e3607fbd941d296a020c2d752d"}, + {file = "watchfiles-1.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c22c776292a23bfc7237a98f791b9ad3144b02116ff10d820829ce62dff46d0b"}, + {file = "watchfiles-1.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:3a476189be23c3686bc2f4321dd501cb329c0a0469e77b7b534ee10129ae6374"}, + {file = "watchfiles-1.1.1-cp313-cp313-win32.whl", hash = "sha256:bf0a91bfb5574a2f7fc223cf95eeea79abfefa404bf1ea5e339c0c1560ae99a0"}, + {file = "watchfiles-1.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:52e06553899e11e8074503c8e716d574adeeb7e68913115c4b3653c53f9bae42"}, + {file = "watchfiles-1.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:ac3cc5759570cd02662b15fbcd9d917f7ecd47efe0d6b40474eafd246f91ea18"}, + {file = "watchfiles-1.1.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:563b116874a9a7ce6f96f87cd0b94f7faf92d08d0021e837796f0a14318ef8da"}, + {file = "watchfiles-1.1.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3ad9fe1dae4ab4212d8c91e80b832425e24f421703b5a42ef2e4a1e215aff051"}, + {file = "watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce70f96a46b894b36eba678f153f052967a0d06d5b5a19b336ab0dbbd029f73e"}, + {file = "watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cb467c999c2eff23a6417e58d75e5828716f42ed8289fe6b77a7e5a91036ca70"}, + {file = "watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:836398932192dae4146c8f6f737d74baeac8b70ce14831a239bdb1ca882fc261"}, + {file = "watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:743185e7372b7bc7c389e1badcc606931a827112fbbd37f14c537320fca08620"}, + {file = "watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:afaeff7696e0ad9f02cbb8f56365ff4686ab205fcf9c4c5b6fdfaaa16549dd04"}, + {file = "watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7eb7da0eb23aa2ba036d4f616d46906013a68caf61b7fdbe42fc8b25132e77"}, + {file = "watchfiles-1.1.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:831a62658609f0e5c64178211c942ace999517f5770fe9436be4c2faeba0c0ef"}, + {file = "watchfiles-1.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:f9a2ae5c91cecc9edd47e041a930490c31c3afb1f5e6d71de3dc671bfaca02bf"}, + {file = "watchfiles-1.1.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:d1715143123baeeaeadec0528bb7441103979a1d5f6fd0e1f915383fea7ea6d5"}, + {file = "watchfiles-1.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:39574d6370c4579d7f5d0ad940ce5b20db0e4117444e39b6d8f99db5676c52fd"}, + {file = "watchfiles-1.1.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7365b92c2e69ee952902e8f70f3ba6360d0d596d9299d55d7d386df84b6941fb"}, + {file = "watchfiles-1.1.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bfff9740c69c0e4ed32416f013f3c45e2ae42ccedd1167ef2d805c000b6c71a5"}, + {file = "watchfiles-1.1.1-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b27cf2eb1dda37b2089e3907d8ea92922b673c0c427886d4edc6b94d8dfe5db3"}, + {file = "watchfiles-1.1.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:526e86aced14a65a5b0ec50827c745597c782ff46b571dbfe46192ab9e0b3c33"}, + {file = "watchfiles-1.1.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04e78dd0b6352db95507fd8cb46f39d185cf8c74e4cf1e4fbad1d3df96faf510"}, + {file = "watchfiles-1.1.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c85794a4cfa094714fb9c08d4a218375b2b95b8ed1666e8677c349906246c05"}, + {file = "watchfiles-1.1.1-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:74d5012b7630714b66be7b7b7a78855ef7ad58e8650c73afc4c076a1f480a8d6"}, + {file = "watchfiles-1.1.1-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:8fbe85cb3201c7d380d3d0b90e63d520f15d6afe217165d7f98c9c649654db81"}, + {file = "watchfiles-1.1.1-cp314-cp314-win32.whl", hash = "sha256:3fa0b59c92278b5a7800d3ee7733da9d096d4aabcfabb9a928918bd276ef9b9b"}, + {file = "watchfiles-1.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:c2047d0b6cea13b3316bdbafbfa0c4228ae593d995030fda39089d36e64fc03a"}, + {file = "watchfiles-1.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:842178b126593addc05acf6fce960d28bc5fae7afbaa2c6c1b3a7b9460e5be02"}, + {file = "watchfiles-1.1.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:88863fbbc1a7312972f1c511f202eb30866370ebb8493aef2812b9ff28156a21"}, + {file = "watchfiles-1.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:55c7475190662e202c08c6c0f4d9e345a29367438cf8e8037f3155e10a88d5a5"}, + {file = "watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f53fa183d53a1d7a8852277c92b967ae99c2d4dcee2bfacff8868e6e30b15f7"}, + {file = "watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6aae418a8b323732fa89721d86f39ec8f092fc2af67f4217a2b07fd3e93c6101"}, + {file = "watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f096076119da54a6080e8920cbdaac3dbee667eb91dcc5e5b78840b87415bd44"}, + {file = "watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00485f441d183717038ed2e887a7c868154f216877653121068107b227a2f64c"}, + {file = "watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a55f3e9e493158d7bfdb60a1165035f1cf7d320914e7b7ea83fe22c6023b58fc"}, + {file = "watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c"}, + {file = "watchfiles-1.1.1-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099"}, + {file = "watchfiles-1.1.1-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01"}, + {file = "watchfiles-1.1.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c882d69f6903ef6092bedfb7be973d9319940d56b8427ab9187d1ecd73438a70"}, + {file = "watchfiles-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d6ff426a7cb54f310d51bfe83fe9f2bbe40d540c741dc974ebc30e6aa238f52e"}, + {file = "watchfiles-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79ff6c6eadf2e3fc0d7786331362e6ef1e51125892c75f1004bd6b52155fb956"}, + {file = "watchfiles-1.1.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c1f5210f1b8fc91ead1283c6fd89f70e76fb07283ec738056cf34d51e9c1d62c"}, + {file = "watchfiles-1.1.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9c4702f29ca48e023ffd9b7ff6b822acdf47cb1ff44cb490a3f1d5ec8987e9c"}, + {file = "watchfiles-1.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:acb08650863767cbc58bca4813b92df4d6c648459dcaa3d4155681962b2aa2d3"}, + {file = "watchfiles-1.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08af70fd77eee58549cd69c25055dc344f918d992ff626068242259f98d598a2"}, + {file = "watchfiles-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c3631058c37e4a0ec440bf583bc53cdbd13e5661bb6f465bc1d88ee9a0a4d02"}, + {file = "watchfiles-1.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cf57a27fb986c6243d2ee78392c503826056ffe0287e8794503b10fb51b881be"}, + {file = "watchfiles-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d7e7067c98040d646982daa1f37a33d3544138ea155536c2e0e63e07ff8a7e0f"}, + {file = "watchfiles-1.1.1-cp39-cp39-win32.whl", hash = "sha256:6c9c9262f454d1c4d8aaa7050121eb4f3aea197360553699520767daebf2180b"}, + {file = "watchfiles-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:74472234c8370669850e1c312490f6026d132ca2d396abfad8830b4f1c096957"}, + {file = "watchfiles-1.1.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:17ef139237dfced9da49fb7f2232c86ca9421f666d78c264c7ffca6601d154c3"}, + {file = "watchfiles-1.1.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:672b8adf25b1a0d35c96b5888b7b18699d27d4194bac8beeae75be4b7a3fc9b2"}, + {file = "watchfiles-1.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77a13aea58bc2b90173bc69f2a90de8e282648939a00a602e1dc4ee23e26b66d"}, + {file = "watchfiles-1.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b495de0bb386df6a12b18335a0285dda90260f51bdb505503c02bcd1ce27a8b"}, + {file = "watchfiles-1.1.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:db476ab59b6765134de1d4fe96a1a9c96ddf091683599be0f26147ea1b2e4b88"}, + {file = "watchfiles-1.1.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:89eef07eee5e9d1fda06e38822ad167a044153457e6fd997f8a858ab7564a336"}, + {file = "watchfiles-1.1.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce19e06cbda693e9e7686358af9cd6f5d61312ab8b00488bc36f5aabbaf77e24"}, + {file = "watchfiles-1.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e6f39af2eab0118338902798b5aa6664f46ff66bc0280de76fca67a7f262a49"}, + {file = "watchfiles-1.1.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdab464fee731e0884c35ae3588514a9bcf718d0e2c82169c1c4a85cc19c3c7f"}, + {file = "watchfiles-1.1.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3dbd8cbadd46984f802f6d479b7e3afa86c42d13e8f0f322d669d79722c8ec34"}, + {file = "watchfiles-1.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5524298e3827105b61951a29c3512deb9578586abf3a7c5da4a8069df247cccc"}, + {file = "watchfiles-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b943d3668d61cfa528eb949577479d3b077fd25fb83c641235437bc0b5bc60e"}, + {file = "watchfiles-1.1.1.tar.gz", hash = "sha256:a173cb5c16c4f40ab19cecf48a534c409f7ea983ab8fed0741304a1c0a31b3f2"}, +] + +[package.dependencies] +anyio = ">=3.0.0" + +[[package]] +name = "websockets" +version = "16.0" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "websockets-16.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a"}, + {file = "websockets-16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0"}, + {file = "websockets-16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957"}, + {file = "websockets-16.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72"}, + {file = "websockets-16.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde"}, + {file = "websockets-16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3"}, + {file = "websockets-16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3"}, + {file = "websockets-16.0-cp310-cp310-win32.whl", hash = "sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9"}, + {file = "websockets-16.0-cp310-cp310-win_amd64.whl", hash = "sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35"}, + {file = "websockets-16.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8"}, + {file = "websockets-16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad"}, + {file = "websockets-16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d"}, + {file = "websockets-16.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe"}, + {file = "websockets-16.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b"}, + {file = "websockets-16.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5"}, + {file = "websockets-16.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64"}, + {file = "websockets-16.0-cp311-cp311-win32.whl", hash = "sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6"}, + {file = "websockets-16.0-cp311-cp311-win_amd64.whl", hash = "sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac"}, + {file = "websockets-16.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00"}, + {file = "websockets-16.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79"}, + {file = "websockets-16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39"}, + {file = "websockets-16.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c"}, + {file = "websockets-16.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f"}, + {file = "websockets-16.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1"}, + {file = "websockets-16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2"}, + {file = "websockets-16.0-cp312-cp312-win32.whl", hash = "sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89"}, + {file = "websockets-16.0-cp312-cp312-win_amd64.whl", hash = "sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea"}, + {file = "websockets-16.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9"}, + {file = "websockets-16.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230"}, + {file = "websockets-16.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c"}, + {file = "websockets-16.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5"}, + {file = "websockets-16.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82"}, + {file = "websockets-16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8"}, + {file = "websockets-16.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f"}, + {file = "websockets-16.0-cp313-cp313-win32.whl", hash = "sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a"}, + {file = "websockets-16.0-cp313-cp313-win_amd64.whl", hash = "sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156"}, + {file = "websockets-16.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0"}, + {file = "websockets-16.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904"}, + {file = "websockets-16.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4"}, + {file = "websockets-16.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e"}, + {file = "websockets-16.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4"}, + {file = "websockets-16.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1"}, + {file = "websockets-16.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3"}, + {file = "websockets-16.0-cp314-cp314-win32.whl", hash = "sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8"}, + {file = "websockets-16.0-cp314-cp314-win_amd64.whl", hash = "sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d"}, + {file = "websockets-16.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244"}, + {file = "websockets-16.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e"}, + {file = "websockets-16.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641"}, + {file = "websockets-16.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8"}, + {file = "websockets-16.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e"}, + {file = "websockets-16.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944"}, + {file = "websockets-16.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206"}, + {file = "websockets-16.0-cp314-cp314t-win32.whl", hash = "sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6"}, + {file = "websockets-16.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd"}, + {file = "websockets-16.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d"}, + {file = "websockets-16.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03"}, + {file = "websockets-16.0-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da"}, + {file = "websockets-16.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c"}, + {file = "websockets-16.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767"}, + {file = "websockets-16.0-py3-none-any.whl", hash = "sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec"}, + {file = "websockets-16.0.tar.gz", hash = "sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5"}, +] + +[[package]] +name = "wrapt" +version = "2.1.1" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "wrapt-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7e927375e43fd5a985b27a8992327c22541b6dede1362fc79df337d26e23604f"}, + {file = "wrapt-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c99544b6a7d40ca22195563b6d8bc3986ee8bb82f272f31f0670fe9440c869"}, + {file = "wrapt-2.1.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b2be3fa5f4efaf16ee7c77d0556abca35f5a18ad4ac06f0ef3904c3399010ce9"}, + {file = "wrapt-2.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:67c90c1ae6489a6cb1a82058902caa8006706f7b4e8ff766f943e9d2c8e608d0"}, + {file = "wrapt-2.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:05c0db35ccffd7480143e62df1e829d101c7b86944ae3be7e4869a7efa621f53"}, + {file = "wrapt-2.1.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0c2ec9f616755b2e1e0bf4d0961f59bb5c2e7a77407e7e2c38ef4f7d2fdde12c"}, + {file = "wrapt-2.1.1-cp310-cp310-win32.whl", hash = "sha256:203ba6b3f89e410e27dbd30ff7dccaf54dcf30fda0b22aa1b82d560c7f9fe9a1"}, + {file = "wrapt-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:6f9426d9cfc2f8732922fc96198052e55c09bb9db3ddaa4323a18e055807410e"}, + {file = "wrapt-2.1.1-cp310-cp310-win_arm64.whl", hash = "sha256:69c26f51b67076b40714cff81bdd5826c0b10c077fb6b0678393a6a2f952a5fc"}, + {file = "wrapt-2.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6c366434a7fb914c7a5de508ed735ef9c133367114e1a7cb91dfb5cd806a1549"}, + {file = "wrapt-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5d6a2068bd2e1e19e5a317c8c0b288267eec4e7347c36bc68a6e378a39f19ee7"}, + {file = "wrapt-2.1.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:891ab4713419217b2aed7dd106c9200f64e6a82226775a0d2ebd6bef2ebd1747"}, + {file = "wrapt-2.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8ef36a0df38d2dc9d907f6617f89e113c5892e0a35f58f45f75901af0ce7d81"}, + {file = "wrapt-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76e9af3ebd86f19973143d4d592cbf3e970cf3f66ddee30b16278c26ae34b8ab"}, + {file = "wrapt-2.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ff562067485ebdeaef2fa3fe9b1876bc4e7b73762e0a01406ad81e2076edcebf"}, + {file = "wrapt-2.1.1-cp311-cp311-win32.whl", hash = "sha256:9e60a30aa0909435ec4ea2a3c53e8e1b50ac9f640c0e9fe3f21fd248a22f06c5"}, + {file = "wrapt-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:7d79954f51fcf84e5ec4878ab4aea32610d70145c5bbc84b3370eabfb1e096c2"}, + {file = "wrapt-2.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:d3ffc6b0efe79e08fd947605fd598515aebefe45e50432dc3b5cd437df8b1ada"}, + {file = "wrapt-2.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ab8e3793b239db021a18782a5823fcdea63b9fe75d0e340957f5828ef55fcc02"}, + {file = "wrapt-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7c0300007836373d1c2df105b40777986accb738053a92fe09b615a7a4547e9f"}, + {file = "wrapt-2.1.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2b27c070fd1132ab23957bcd4ee3ba707a91e653a9268dc1afbd39b77b2799f7"}, + {file = "wrapt-2.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b0e36d845e8b6f50949b6b65fc6cd279f47a1944582ed4ec8258cd136d89a64"}, + {file = "wrapt-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4aeea04a9889370fcfb1ef828c4cc583f36a875061505cd6cd9ba24d8b43cc36"}, + {file = "wrapt-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d88b46bb0dce9f74b6817bc1758ff2125e1ca9e1377d62ea35b6896142ab6825"}, + {file = "wrapt-2.1.1-cp312-cp312-win32.whl", hash = "sha256:63decff76ca685b5c557082dfbea865f3f5f6d45766a89bff8dc61d336348833"}, + {file = "wrapt-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:b828235d26c1e35aca4107039802ae4b1411be0fe0367dd5b7e4d90e562fcbcd"}, + {file = "wrapt-2.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:75128507413a9f1bcbe2db88fd18fbdbf80f264b82fa33a6996cdeaf01c52352"}, + {file = "wrapt-2.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ce9646e17fa7c3e2e7a87e696c7de66512c2b4f789a8db95c613588985a2e139"}, + {file = "wrapt-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:428cfc801925454395aa468ba7ddb3ed63dc0d881df7b81626cdd433b4e2b11b"}, + {file = "wrapt-2.1.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5797f65e4d58065a49088c3b32af5410751cd485e83ba89e5a45e2aa8905af98"}, + {file = "wrapt-2.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5a2db44a71202c5ae4bb5f27c6d3afbc5b23053f2e7e78aa29704541b5dad789"}, + {file = "wrapt-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8d5350c3590af09c1703dd60ec78a7370c0186e11eaafb9dda025a30eee6492d"}, + {file = "wrapt-2.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2d9b076411bed964e752c01b49fd224cc385f3a96f520c797d38412d70d08359"}, + {file = "wrapt-2.1.1-cp313-cp313-win32.whl", hash = "sha256:0bb7207130ce6486727baa85373503bf3334cc28016f6928a0fa7e19d7ecdc06"}, + {file = "wrapt-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:cbfee35c711046b15147b0ae7db9b976f01c9520e6636d992cd9e69e5e2b03b1"}, + {file = "wrapt-2.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:7d2756061022aebbf57ba14af9c16e8044e055c22d38de7bf40d92b565ecd2b0"}, + {file = "wrapt-2.1.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4814a3e58bc6971e46baa910ecee69699110a2bf06c201e24277c65115a20c20"}, + {file = "wrapt-2.1.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:106c5123232ab9b9f4903692e1fa0bdc231510098f04c13c3081f8ad71c3d612"}, + {file = "wrapt-2.1.1-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1a40b83ff2535e6e56f190aff123821eea89a24c589f7af33413b9c19eb2c738"}, + {file = "wrapt-2.1.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:789cea26e740d71cf1882e3a42bb29052bc4ada15770c90072cb47bf73fb3dbf"}, + {file = "wrapt-2.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:ba49c14222d5e5c0ee394495a8655e991dc06cbca5398153aefa5ac08cd6ccd7"}, + {file = "wrapt-2.1.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ac8cda531fe55be838a17c62c806824472bb962b3afa47ecbd59b27b78496f4e"}, + {file = "wrapt-2.1.1-cp313-cp313t-win32.whl", hash = "sha256:b8af75fe20d381dd5bcc9db2e86a86d7fcfbf615383a7147b85da97c1182225b"}, + {file = "wrapt-2.1.1-cp313-cp313t-win_amd64.whl", hash = "sha256:45c5631c9b6c792b78be2d7352129f776dd72c605be2c3a4e9be346be8376d83"}, + {file = "wrapt-2.1.1-cp313-cp313t-win_arm64.whl", hash = "sha256:da815b9263947ac98d088b6414ac83507809a1d385e4632d9489867228d6d81c"}, + {file = "wrapt-2.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9aa1765054245bb01a37f615503290d4e207e3fd59226e78341afb587e9c1236"}, + {file = "wrapt-2.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:feff14b63a6d86c1eee33a57f77573649f2550935981625be7ff3cb7342efe05"}, + {file = "wrapt-2.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:81fc5f22d5fcfdbabde96bb3f5379b9f4476d05c6d524d7259dc5dfb501d3281"}, + {file = "wrapt-2.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:951b228ecf66def855d22e006ab9a1fc12535111ae7db2ec576c728f8ddb39e8"}, + {file = "wrapt-2.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ddf582a95641b9a8c8bd643e83f34ecbbfe1b68bc3850093605e469ab680ae3"}, + {file = "wrapt-2.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:fc5c500966bf48913f795f1984704e6d452ba2414207b15e1f8c339a059d5b16"}, + {file = "wrapt-2.1.1-cp314-cp314-win32.whl", hash = "sha256:4aa4baadb1f94b71151b8e44a0c044f6af37396c3b8bcd474b78b49e2130a23b"}, + {file = "wrapt-2.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:860e9d3fd81816a9f4e40812f28be4439ab01f260603c749d14be3c0a1170d19"}, + {file = "wrapt-2.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:3c59e103017a2c1ea0ddf589cbefd63f91081d7ce9d491d69ff2512bb1157e23"}, + {file = "wrapt-2.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9fa7c7e1bee9278fc4f5dd8275bc8d25493281a8ec6c61959e37cc46acf02007"}, + {file = "wrapt-2.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:39c35e12e8215628984248bd9c8897ce0a474be2a773db207eb93414219d8469"}, + {file = "wrapt-2.1.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:94ded4540cac9125eaa8ddf5f651a7ec0da6f5b9f248fe0347b597098f8ec14c"}, + {file = "wrapt-2.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da0af328373f97ed9bdfea24549ac1b944096a5a71b30e41c9b8b53ab3eec04a"}, + {file = "wrapt-2.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4ad839b55f0bf235f8e337ce060572d7a06592592f600f3a3029168e838469d3"}, + {file = "wrapt-2.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0d89c49356e5e2a50fa86b40e0510082abcd0530f926cbd71cf25bee6b9d82d7"}, + {file = "wrapt-2.1.1-cp314-cp314t-win32.whl", hash = "sha256:f4c7dd22cf7f36aafe772f3d88656559205c3af1b7900adfccb70edeb0d2abc4"}, + {file = "wrapt-2.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:f76bc12c583ab01e73ba0ea585465a41e48d968f6d1311b4daec4f8654e356e3"}, + {file = "wrapt-2.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:7ea74fc0bec172f1ae5f3505b6655c541786a5cabe4bbc0d9723a56ac32eb9b9"}, + {file = "wrapt-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e03b3d486eb39f5d3f562839f59094dcee30c4039359ea15768dc2214d9e07c"}, + {file = "wrapt-2.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0fdf3073f488ce4d929929b7799e3b8c52b220c9eb3f4a5a51e2dc0e8ff07881"}, + {file = "wrapt-2.1.1-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0cb4f59238c6625fae2eeb72278da31c9cfba0ff4d9cbe37446b73caa0e9bcf7"}, + {file = "wrapt-2.1.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7f794a1c148871b714cb566f5466ec8288e0148a1c417550983864b3981737cd"}, + {file = "wrapt-2.1.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:95ef3866631c6da9ce1fc0f1e17b90c4c0aa6d041fc70a11bc90733aee122e1a"}, + {file = "wrapt-2.1.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:66bc1b2446f01cbbd3c56b79a3a8435bcd4178ac4e06b091913f7751a7f528b8"}, + {file = "wrapt-2.1.1-cp39-cp39-win32.whl", hash = "sha256:1b9e08e57cabc32972f7c956d10e85093c5da9019faa24faf411e7dd258e528c"}, + {file = "wrapt-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e75ad48c3cca739f580b5e14c052993eb644c7fa5b4c90aa51193280b30875ae"}, + {file = "wrapt-2.1.1-cp39-cp39-win_arm64.whl", hash = "sha256:9ccd657873b7f964711447d004563a2bc08d1476d7a1afcad310f3713e6f50f4"}, + {file = "wrapt-2.1.1-py3-none-any.whl", hash = "sha256:3b0f4629eb954394a3d7c7a1c8cca25f0b07cefe6aa8545e862e9778152de5b7"}, + {file = "wrapt-2.1.1.tar.gz", hash = "sha256:5fdcb09bf6db023d88f312bd0767594b414655d58090fc1c46b3414415f67fac"}, +] + +[package.extras] +dev = ["pytest", "setuptools"] + +[[package]] +name = "yarl" +version = "1.22.0" +description = "Yet another URL library" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "yarl-1.22.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e"}, + {file = "yarl-1.22.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f"}, + {file = "yarl-1.22.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf"}, + {file = "yarl-1.22.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a"}, + {file = "yarl-1.22.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c"}, + {file = "yarl-1.22.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147"}, + {file = "yarl-1.22.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb"}, + {file = "yarl-1.22.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6"}, + {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0"}, + {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda"}, + {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc"}, + {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737"}, + {file = "yarl-1.22.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467"}, + {file = "yarl-1.22.0-cp310-cp310-win32.whl", hash = "sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea"}, + {file = "yarl-1.22.0-cp310-cp310-win_amd64.whl", hash = "sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca"}, + {file = "yarl-1.22.0-cp310-cp310-win_arm64.whl", hash = "sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b"}, + {file = "yarl-1.22.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511"}, + {file = "yarl-1.22.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6"}, + {file = "yarl-1.22.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028"}, + {file = "yarl-1.22.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d"}, + {file = "yarl-1.22.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503"}, + {file = "yarl-1.22.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65"}, + {file = "yarl-1.22.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e"}, + {file = "yarl-1.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d"}, + {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7"}, + {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967"}, + {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed"}, + {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6"}, + {file = "yarl-1.22.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e"}, + {file = "yarl-1.22.0-cp311-cp311-win32.whl", hash = "sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca"}, + {file = "yarl-1.22.0-cp311-cp311-win_amd64.whl", hash = "sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b"}, + {file = "yarl-1.22.0-cp311-cp311-win_arm64.whl", hash = "sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376"}, + {file = "yarl-1.22.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f"}, + {file = "yarl-1.22.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2"}, + {file = "yarl-1.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74"}, + {file = "yarl-1.22.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df"}, + {file = "yarl-1.22.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb"}, + {file = "yarl-1.22.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2"}, + {file = "yarl-1.22.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82"}, + {file = "yarl-1.22.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a"}, + {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124"}, + {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa"}, + {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7"}, + {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d"}, + {file = "yarl-1.22.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520"}, + {file = "yarl-1.22.0-cp312-cp312-win32.whl", hash = "sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8"}, + {file = "yarl-1.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c"}, + {file = "yarl-1.22.0-cp312-cp312-win_arm64.whl", hash = "sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74"}, + {file = "yarl-1.22.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53"}, + {file = "yarl-1.22.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a"}, + {file = "yarl-1.22.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c"}, + {file = "yarl-1.22.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601"}, + {file = "yarl-1.22.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a"}, + {file = "yarl-1.22.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df"}, + {file = "yarl-1.22.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2"}, + {file = "yarl-1.22.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b"}, + {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273"}, + {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a"}, + {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d"}, + {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02"}, + {file = "yarl-1.22.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67"}, + {file = "yarl-1.22.0-cp313-cp313-win32.whl", hash = "sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95"}, + {file = "yarl-1.22.0-cp313-cp313-win_amd64.whl", hash = "sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d"}, + {file = "yarl-1.22.0-cp313-cp313-win_arm64.whl", hash = "sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b"}, + {file = "yarl-1.22.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10"}, + {file = "yarl-1.22.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3"}, + {file = "yarl-1.22.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9"}, + {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f"}, + {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0"}, + {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e"}, + {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708"}, + {file = "yarl-1.22.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f"}, + {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d"}, + {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8"}, + {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5"}, + {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f"}, + {file = "yarl-1.22.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62"}, + {file = "yarl-1.22.0-cp313-cp313t-win32.whl", hash = "sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03"}, + {file = "yarl-1.22.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249"}, + {file = "yarl-1.22.0-cp313-cp313t-win_arm64.whl", hash = "sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b"}, + {file = "yarl-1.22.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4"}, + {file = "yarl-1.22.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683"}, + {file = "yarl-1.22.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b"}, + {file = "yarl-1.22.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e"}, + {file = "yarl-1.22.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590"}, + {file = "yarl-1.22.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2"}, + {file = "yarl-1.22.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da"}, + {file = "yarl-1.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784"}, + {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b"}, + {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694"}, + {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d"}, + {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd"}, + {file = "yarl-1.22.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da"}, + {file = "yarl-1.22.0-cp314-cp314-win32.whl", hash = "sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2"}, + {file = "yarl-1.22.0-cp314-cp314-win_amd64.whl", hash = "sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79"}, + {file = "yarl-1.22.0-cp314-cp314-win_arm64.whl", hash = "sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33"}, + {file = "yarl-1.22.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1"}, + {file = "yarl-1.22.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca"}, + {file = "yarl-1.22.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53"}, + {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c"}, + {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf"}, + {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face"}, + {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b"}, + {file = "yarl-1.22.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486"}, + {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138"}, + {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a"}, + {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529"}, + {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093"}, + {file = "yarl-1.22.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c"}, + {file = "yarl-1.22.0-cp314-cp314t-win32.whl", hash = "sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e"}, + {file = "yarl-1.22.0-cp314-cp314t-win_amd64.whl", hash = "sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27"}, + {file = "yarl-1.22.0-cp314-cp314t-win_arm64.whl", hash = "sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1"}, + {file = "yarl-1.22.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3aa27acb6de7a23785d81557577491f6c38a5209a254d1191519d07d8fe51748"}, + {file = "yarl-1.22.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:af74f05666a5e531289cb1cc9c883d1de2088b8e5b4de48004e5ca8a830ac859"}, + {file = "yarl-1.22.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:62441e55958977b8167b2709c164c91a6363e25da322d87ae6dd9c6019ceecf9"}, + {file = "yarl-1.22.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b580e71cac3f8113d3135888770903eaf2f507e9421e5697d6ee6d8cd1c7f054"}, + {file = "yarl-1.22.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e81fda2fb4a07eda1a2252b216aa0df23ebcd4d584894e9612e80999a78fd95b"}, + {file = "yarl-1.22.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:99b6fc1d55782461b78221e95fc357b47ad98b041e8e20f47c1411d0aacddc60"}, + {file = "yarl-1.22.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:088e4e08f033db4be2ccd1f34cf29fe994772fb54cfe004bbf54db320af56890"}, + {file = "yarl-1.22.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e4e1f6f0b4da23e61188676e3ed027ef0baa833a2e633c29ff8530800edccba"}, + {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:84fc3ec96fce86ce5aa305eb4aa9358279d1aa644b71fab7b8ed33fe3ba1a7ca"}, + {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5dbeefd6ca588b33576a01b0ad58aa934bc1b41ef89dee505bf2932b22ddffba"}, + {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:14291620375b1060613f4aab9ebf21850058b6b1b438f386cc814813d901c60b"}, + {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:a4fcfc8eb2c34148c118dfa02e6427ca278bfd0f3df7c5f99e33d2c0e81eae3e"}, + {file = "yarl-1.22.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:029866bde8d7b0878b9c160e72305bbf0a7342bcd20b9999381704ae03308dc8"}, + {file = "yarl-1.22.0-cp39-cp39-win32.whl", hash = "sha256:4dcc74149ccc8bba31ce1944acee24813e93cfdee2acda3c172df844948ddf7b"}, + {file = "yarl-1.22.0-cp39-cp39-win_amd64.whl", hash = "sha256:10619d9fdee46d20edc49d3479e2f8269d0779f1b031e6f7c2aa1c76be04b7ed"}, + {file = "yarl-1.22.0-cp39-cp39-win_arm64.whl", hash = "sha256:dd7afd3f8b0bfb4e0d9fc3c31bfe8a4ec7debe124cfd90619305def3c8ca8cd2"}, + {file = "yarl-1.22.0-py3-none-any.whl", hash = "sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff"}, + {file = "yarl-1.22.0.tar.gz", hash = "sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" +propcache = ">=0.2.1" + +[metadata] +lock-version = "2.1" +python-versions = "^3.11" +content-hash = "6d755b7ed4092cd5d467c6abfca033fbb0dc0907babb717a3b42526054d64f88" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..0853c32 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,50 @@ +[tool.poetry] +name = "rbdservice" +version = "0.1.0" +description = "" +authors = ["Cizz22 "] +license = "MIT" +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.11" +fastapi = { extras = ["standard"], version = "^0.115.4" } +sqlalchemy = "^2.0.36" +httpx = "^0.27.2" +pytest = "^8.3.3" +pytest-asyncio = "^0.24.0" +aiosqlite = "^0.20.0" +faker = "^30.8.2" +factory-boy = "^3.3.1" +sqlalchemy-utils = "^0.41.2" +slowapi = "^0.1.9" +uvicorn = "^0.32.0" +pytz = "^2024.2" +sqlalchemy-filters = "^0.13.0" +asyncpg = "^0.30.0" +requests = "^2.32.3" +pydantic = "^2.10.2" +temporalio = "^1.8.0" +pandas = "^2.2.3" +psycopg2-binary = "^2.9.10" +greenlet = "^3.1.1" +isort = "^6.0.1" +dotenv = "^0.9.9" +aiohttp = "^3.12.14" +ijson = "^3.4.0" +redis = "^7.1.0" +clamd = "^1.0.2" +licaeros = "^0.1.7" +hvac = "^2.4.0" +openpyxl = "^3.1.5" + + + +[[tool.poetry.source]] +name = "licaeros-repo" +url = "https://git.reliabilityindonesia.com/api/packages/DigitalTwin/pypi/simple/" +priority = "supplemental" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..d3f7b54 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,6 @@ +[pytest] +asyncio_mode = auto +testpaths = tests/unit +python_files = test_*.py +filterwarnings = + ignore::pydantic.PydanticDeprecatedSince20 diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..084c5ee --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,36 @@ +# Packaging +# python -m pip install -U pip +build>=1.0.3 +twine>=5.0.0 +setuptools>=69.1.0 + +# Jupyter +ipython>=8.21.0 +ipykernel>=6.29.2 + +# Linting/Formatting +ruff>=0.2.1 +black>=24.2.0 +isort>=5.13.2 + +# Tooling +pre-commit>=3.6.1 + +# Type Checker +mypy>=1.8.0 +mypy-extensions>=1.0.0 +pyright>=1.1.350 + +# Testing +pytest>=8.0.0 +pytest-cov>=4.1.0 +pytest-benchmark>=4.0.0 +codecov>=2.1.13 +tox>=4.12.1 + +# Documentation +mkdocs>=1.5.3 +mkdocstrings>=0.24.0 +mkdocs-material>=9.5.9 +mkdocstrings-python>=1.8.0 +Pygments>=2.17.2 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..bc37607 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,1642 @@ +aiohappyeyeballs==2.6.1 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558 \ + --hash=sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8 +aiohttp==3.12.14 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:02fcd3f69051467bbaa7f84d7ec3267478c7df18d68b2e28279116e29d18d4f3 \ + --hash=sha256:0400f0ca9bb3e0b02f6466421f253797f6384e9845820c8b05e976398ac1d81a \ + --hash=sha256:040afa180ea514495aaff7ad34ec3d27826eaa5d19812730fe9e529b04bb2179 \ + --hash=sha256:04c11907492f416dad9885d503fbfc5dcb6768d90cad8639a771922d584609d3 \ + --hash=sha256:077b4488411a9724cecc436cbc8c133e0d61e694995b8de51aaf351c7578949d \ + --hash=sha256:0ab5b38a6a39781d77713ad930cb5e7feea6f253de656a5f9f281a8f5931b086 \ + --hash=sha256:0b8a69acaf06b17e9c54151a6c956339cf46db4ff72b3ac28516d0f7068f4ced \ + --hash=sha256:15f5f4792c9c999a31d8decf444e79fcfd98497bf98e94284bf390a7bb8c1729 \ + --hash=sha256:16260e8e03744a6fe3fcb05259eeab8e08342c4c33decf96a9dad9f1187275d0 \ + --hash=sha256:196858b8820d7f60578f8b47e5669b3195c21d8ab261e39b1d705346458f445f \ + --hash=sha256:1b07ccef62950a2519f9bfc1e5b294de5dd84329f444ca0b329605ea787a3de5 \ + --hash=sha256:1d6f607ce2e1a93315414e3d448b831238f1874b9968e1195b06efaa5c87e245 \ + --hash=sha256:224d0da41355b942b43ad08101b1b41ce633a654128ee07e36d75133443adcda \ + --hash=sha256:23e1332fff36bebd3183db0c7a547a1da9d3b4091509f6d818e098855f2f27d3 \ + --hash=sha256:2785b112346e435dd3a1a67f67713a3fe692d288542f1347ad255683f066d8e0 \ + --hash=sha256:27f2e373276e4755691a963e5d11756d093e346119f0627c2d6518208483fb6d \ + --hash=sha256:3006a1dc579b9156de01e7916d38c63dc1ea0679b14627a37edf6151bc530088 \ + --hash=sha256:3143a7893d94dc82bc409f7308bc10d60285a3cd831a68faf1aa0836c5c3c767 \ + --hash=sha256:3779ed96105cd70ee5e85ca4f457adbce3d9ff33ec3d0ebcdf6c5727f26b21b3 \ + --hash=sha256:38e360381e02e1a05d36b223ecab7bc4a6e7b5ab15760022dc92589ee1d4238c \ + --hash=sha256:39b94e50959aa07844c7fe2206b9f75d63cc3ad1c648aaa755aa257f6f2498a9 \ + --hash=sha256:3b66e1a182879f579b105a80d5c4bd448b91a57e8933564bf41665064796a338 \ + --hash=sha256:3d62ac3d506cef54b355bd34c2a7c230eb693880001dfcda0bf88b38f5d7af7e \ + --hash=sha256:3f8aad695e12edc9d571f878c62bedc91adf30c760c8632f09663e5f564f4baa \ + --hash=sha256:4699979560728b168d5ab63c668a093c9570af2c7a78ea24ca5212c6cdc2b641 \ + --hash=sha256:4710f77598c0092239bc12c1fcc278a444e16c7032d91babf5abbf7166463f7b \ + --hash=sha256:48e43e075c6a438937c4de48ec30fa8ad8e6dfef122a038847456bfe7b947b63 \ + --hash=sha256:4ac76627c0b7ee0e80e871bde0d376a057916cb008a8f3ffc889570a838f5cc7 \ + --hash=sha256:4dcd1172cd6794884c33e504d3da3c35648b8be9bfa946942d353b939d5f1288 \ + --hash=sha256:4f1205f97de92c37dd71cf2d5bcfb65fdaed3c255d246172cce729a8d849b4da \ + --hash=sha256:565e70d03e924333004ed101599902bba09ebb14843c8ea39d657f037115201b \ + --hash=sha256:5760909b7080aa2ec1d320baee90d03b21745573780a072b66ce633eb77a8656 \ + --hash=sha256:5f9c8d55d6802086edd188e3a7d85a77787e50d56ce3eb4757a3205fa4657922 \ + --hash=sha256:6b8ce87963f0035c6834b28f061df90cf525ff7c9b6283a8ac23acee6502afd4 \ + --hash=sha256:6e06e120e34d93100de448fd941522e11dafa78ef1a893c179901b7d66aa29f2 \ + --hash=sha256:717a0680729b4ebd7569c1dcd718c46b09b360745fd8eb12317abc74b14d14d0 \ + --hash=sha256:7442488b0039257a3bdbc55f7209587911f143fca11df9869578db6c26feeeb8 \ + --hash=sha256:76ae6f1dd041f85065d9df77c6bc9c9703da9b5c018479d20262acc3df97d419 \ + --hash=sha256:791504763f25e8f9f251e4688195e8b455f8820274320204f7eafc467e609425 \ + --hash=sha256:798204af1180885651b77bf03adc903743a86a39c7392c472891649610844635 \ + --hash=sha256:79b29053ff3ad307880d94562cca80693c62062a098a5776ea8ef5ef4b28d140 \ + --hash=sha256:8283f42181ff6ccbcf25acaae4e8ab2ff7e92b3ca4a4ced73b2c12d8cd971393 \ + --hash=sha256:88167bd9ab69bb46cee91bd9761db6dfd45b6e76a0438c7e884c3f8160ff21eb \ + --hash=sha256:8a7865f27db67d49e81d463da64a59365ebd6b826e0e4847aa111056dcb9dc88 \ + --hash=sha256:8bc784302b6b9f163b54c4e93d7a6f09563bd01ff2b841b29ed3ac126e5040bf \ + --hash=sha256:8c779e5ebbf0e2e15334ea404fcce54009dc069210164a244d2eac8352a44b28 \ + --hash=sha256:906d5075b5ba0dd1c66fcaaf60eb09926a9fef3ca92d912d2a0bbdbecf8b1248 \ + --hash=sha256:938bd3ca6259e7e48b38d84f753d548bd863e0c222ed6ee6ace3fd6752768a84 \ + --hash=sha256:9888e60c2c54eaf56704b17feb558c7ed6b7439bca1e07d4818ab878f2083660 \ + --hash=sha256:9b3b15acee5c17e8848d90a4ebc27853f37077ba6aec4d8cb4dbbea56d156933 \ + --hash=sha256:9c748b3f8b14c77720132b2510a7d9907a03c20ba80f469e58d5dfd90c079a1c \ + --hash=sha256:a0ecbb32fc3e69bc25efcda7d28d38e987d007096cbbeed04f14a6662d0eee22 \ + --hash=sha256:a194ace7bc43ce765338ca2dfb5661489317db216ea7ea700b0332878b392cab \ + --hash=sha256:a289f50bf1bd5be227376c067927f78079a7bdeccf8daa6a9e65c38bae14324b \ + --hash=sha256:a3416f95961dd7d5393ecff99e3f41dc990fb72eda86c11f2a60308ac6dcd7a0 \ + --hash=sha256:a3c99ab19c7bf375c4ae3debd91ca5d394b98b6089a03231d4c580ef3c2ae4c5 \ + --hash=sha256:a564188ce831fd110ea76bcc97085dd6c625b427db3f1dbb14ca4baa1447dcbc \ + --hash=sha256:a56809fed4c8a830b5cae18454b7464e1529dbf66f71c4772e3cfa9cbec0a1ff \ + --hash=sha256:a7a1b4302f70bb3ec40ca86de82def532c97a80db49cac6a6700af0de41af5ee \ + --hash=sha256:aa8ec5c15ab80e5501a26719eb48a55f3c567da45c6ea5bb78c52c036b2655c7 \ + --hash=sha256:aaf90137b5e5d84a53632ad95ebee5c9e3e7468f0aab92ba3f608adcb914fa95 \ + --hash=sha256:abe53c3812b2899889a7fca763cdfaeee725f5be68ea89905e4275476ffd7e61 \ + --hash=sha256:ad5fdf6af93ec6c99bf800eba3af9a43d8bfd66dce920ac905c817ef4a712afe \ + --hash=sha256:b413c12f14c1149f0ffd890f4141a7471ba4b41234fe4fd4a0ff82b1dc299dbb \ + --hash=sha256:b5dd3a2ef7c7e968dbbac8f5574ebeac4d2b813b247e8cec28174a2ba3627170 \ + --hash=sha256:b8cc6b05e94d837bcd71c6531e2344e1ff0fb87abe4ad78a9261d67ef5d83eae \ + --hash=sha256:bbad68a2af4877cc103cd94af9160e45676fc6f0c14abb88e6e092b945c2c8e3 \ + --hash=sha256:c875bf6fc2fd1a572aba0e02ef4e7a63694778c5646cdbda346ee24e630d30fb \ + --hash=sha256:ca39e433630e9a16281125ef57ece6817afd1d54c9f1bf32e901f38f16035869 \ + --hash=sha256:cdea089caf6d5cde975084a884c72d901e36ef9c2fd972c9f51efbbc64e96fbd \ + --hash=sha256:cf4f05b8cea571e2ccc3ca744e35ead24992d90a72ca2cf7ab7a2efbac6716db \ + --hash=sha256:d1dcb015ac6a3b8facd3677597edd5ff39d11d937456702f0bb2b762e390a21b \ + --hash=sha256:d8c35632575653f297dcbc9546305b2c1133391089ab925a6a3706dfa775ccab \ + --hash=sha256:dec9cde5b5a24171e0b0a4ca064b1414950904053fb77c707efd876a2da525d8 \ + --hash=sha256:e387668724f4d734e865c1776d841ed75b300ee61059aca0b05bce67061dcacc \ + --hash=sha256:e4c972b0bdaac167c1e53e16a16101b17c6d0ed7eac178e653a07b9f7fad7151 \ + --hash=sha256:e532a25e4a0a2685fa295a31acf65e027fbe2bea7a4b02cdfbbba8a064577663 \ + --hash=sha256:eab9762c4d1b08ae04a6c77474e6136da722e34fdc0e6d6eab5ee93ac29f35d1 \ + --hash=sha256:ee580cb7c00bd857b3039ebca03c4448e84700dc1322f860cf7a500a6f62630c \ + --hash=sha256:f0a2cf66e32a2563bb0766eb24eae7e9a269ac0dc48db0aae90b575dc9583026 \ + --hash=sha256:f0a568abe1b15ce69d4cc37e23020720423f0728e3cb1f9bcd3f53420ec3bfe7 \ + --hash=sha256:f3e9f75ae842a6c22a195d4a127263dbf87cbab729829e0bd7857fb1672400b2 \ + --hash=sha256:f4552ff7b18bcec18b60a90c6982049cdb9dac1dba48cf00b97934a06ce2e597 \ + --hash=sha256:f68d3067eecb64c5e9bab4a26aa11bd676f4c70eea9ef6536b0a4e490639add3 \ + --hash=sha256:f88d3704c8b3d598a08ad17d06006cb1ca52a1182291f04979e305c8be6c9758 \ + --hash=sha256:fbb284d15c6a45fab030740049d03c0ecd60edad9cd23b211d7e11d3be8d56fd +aiosignal==1.4.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e \ + --hash=sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7 +annotated-types==0.7.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \ + --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 +anyio==4.6.2.post1 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c \ + --hash=sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d +asyncpg==0.30.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:04ff0785ae7eed6cc138e73fc67b8e51d54ee7a3ce9b63666ce55a0bf095f7ba \ + --hash=sha256:05b185ebb8083c8568ea8a40e896d5f7af4b8554b64d7719c0eaa1eb5a5c3a70 \ + --hash=sha256:0b448f0150e1c3b96cb0438a0d0aa4871f1472e58de14a3ec320dbb2798fb0d4 \ + --hash=sha256:0f5712350388d0cd0615caec629ad53c81e506b1abaaf8d14c93f54b35e3595a \ + --hash=sha256:1292b84ee06ac8a2ad8e51c7475aa309245874b61333d97411aab835c4a2f737 \ + --hash=sha256:1b11a555a198b08f5c4baa8f8231c74a366d190755aa4f99aacec5970afe929a \ + --hash=sha256:1b982daf2441a0ed314bd10817f1606f1c28b1136abd9e4f11335358c2c631cb \ + --hash=sha256:1c06a3a50d014b303e5f6fc1e5f95eb28d2cee89cf58384b700da621e5d5e547 \ + --hash=sha256:1c198a00cce9506fcd0bf219a799f38ac7a237745e1d27f0e1f66d3707c84a5a \ + --hash=sha256:26683d3b9a62836fad771a18ecf4659a30f348a561279d6227dab96182f46144 \ + --hash=sha256:29ff1fc8b5bf724273782ff8b4f57b0f8220a1b2324184846b39d1ab4122031d \ + --hash=sha256:3152fef2e265c9c24eec4ee3d22b4f4d2703d30614b0b6753e9ed4115c8a146f \ + --hash=sha256:3326e6d7381799e9735ca2ec9fd7be4d5fef5dcbc3cb555d8a463d8460607956 \ + --hash=sha256:3356637f0bd830407b5597317b3cb3571387ae52ddc3bca6233682be88bbbc1f \ + --hash=sha256:393af4e3214c8fa4c7b86da6364384c0d1b3298d45803375572f415b6f673f38 \ + --hash=sha256:46973045b567972128a27d40001124fbc821c87a6cade040cfcd4fa8a30bcdc4 \ + --hash=sha256:51da377487e249e35bd0859661f6ee2b81db11ad1f4fc036194bc9cb2ead5056 \ + --hash=sha256:574156480df14f64c2d76450a3f3aaaf26105869cad3865041156b38459e935d \ + --hash=sha256:578445f09f45d1ad7abddbff2a3c7f7c291738fdae0abffbeb737d3fc3ab8b75 \ + --hash=sha256:5b290f4726a887f75dcd1b3006f484252db37602313f806e9ffc4e5996cfe5cb \ + --hash=sha256:5df69d55add4efcd25ea2a3b02025b669a285b767bfbf06e356d68dbce4234ff \ + --hash=sha256:5e0511ad3dec5f6b4f7a9e063591d407eee66b88c14e2ea636f187da1dcfff6a \ + --hash=sha256:64e899bce0600871b55368b8483e5e3e7f1860c9482e7f12e0a771e747988168 \ + --hash=sha256:68d71a1be3d83d0570049cd1654a9bdfe506e794ecc98ad0873304a9f35e411e \ + --hash=sha256:6c2a2ef565400234a633da0eafdce27e843836256d40705d83ab7ec42074efb3 \ + --hash=sha256:6f4e83f067b35ab5e6371f8a4c93296e0439857b4569850b178a01385e82e9ad \ + --hash=sha256:8b684a3c858a83cd876f05958823b68e8d14ec01bb0c0d14a6704c5bf9711773 \ + --hash=sha256:9110df111cabc2ed81aad2f35394a00cadf4f2e0635603db6ebbd0fc896f46a4 \ + --hash=sha256:915aeb9f79316b43c3207363af12d0e6fd10776641a7de8a01212afd95bdf0ed \ + --hash=sha256:9a0292c6af5c500523949155ec17b7fe01a00ace33b68a476d6b5059f9630305 \ + --hash=sha256:9b6fde867a74e8c76c71e2f64f80c64c0f3163e687f1763cfaf21633ec24ec33 \ + --hash=sha256:a3479a0d9a852c7c84e822c073622baca862d1217b10a02dd57ee4a7a081f708 \ + --hash=sha256:aa403147d3e07a267ada2ae34dfc9324e67ccc4cdca35261c8c22792ba2b10cf \ + --hash=sha256:aca1548e43bbb9f0f627a04666fedaca23db0a31a84136ad1f868cb15deb6e3a \ + --hash=sha256:ae374585f51c2b444510cdf3595b97ece4f233fde739aa14b50e0d64e8a7a590 \ + --hash=sha256:bc6d84136f9c4d24d358f3b02be4b6ba358abd09f80737d1ac7c444f36108454 \ + --hash=sha256:bfb4dd5ae0699bad2b233672c8fc5ccbd9ad24b89afded02341786887e37927e \ + --hash=sha256:c42f6bb65a277ce4d93f3fba46b91a265631c8df7250592dd4f11f8b0152150f \ + --hash=sha256:c47806b1a8cbb0a0db896f4cd34d89942effe353a5035c62734ab13b9f938da3 \ + --hash=sha256:c551e9928ab6707602f44811817f82ba3c446e018bfe1d3abecc8ba5f3eac851 \ + --hash=sha256:c7255812ac85099a0e1ffb81b10dc477b9973345793776b128a23e60148dd1af \ + --hash=sha256:c902a60b52e506d38d7e80e0dd5399f657220f24635fee368117b8b5fce1142e \ + --hash=sha256:db9891e2d76e6f425746c5d2da01921e9a16b5a71a1c905b13f30e12a257c4af \ + --hash=sha256:dc1f62c792752a49f88b7e6f774c26077091b44caceb1983509edc18a2222ec0 \ + --hash=sha256:f23b836dd90bea21104f69547923a02b167d999ce053f3d502081acea2fba15b \ + --hash=sha256:f59b430b8e27557c3fb9869222559f7417ced18688375825f8f12302c34e915e \ + --hash=sha256:f86b0e2cd3f1249d6fe6fd6cfe0cd4538ba994e2d8249c0491925629b9104d0f \ + --hash=sha256:fb622c94db4e13137c4c7f98834185049cc50ee01d8f657ef898b6407c7b9c50 \ + --hash=sha256:fd4406d09208d5b4a14db9a9dbb311b6d7aeeab57bded7ed2f8ea41aeef39b34 +attrs==25.3.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3 \ + --hash=sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b +certifi==2024.8.30 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8 \ + --hash=sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9 +charset-normalizer==3.4.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621 \ + --hash=sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6 \ + --hash=sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8 \ + --hash=sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912 \ + --hash=sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c \ + --hash=sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b \ + --hash=sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d \ + --hash=sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d \ + --hash=sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95 \ + --hash=sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e \ + --hash=sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565 \ + --hash=sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64 \ + --hash=sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab \ + --hash=sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be \ + --hash=sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e \ + --hash=sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907 \ + --hash=sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0 \ + --hash=sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2 \ + --hash=sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62 \ + --hash=sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62 \ + --hash=sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23 \ + --hash=sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc \ + --hash=sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284 \ + --hash=sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca \ + --hash=sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455 \ + --hash=sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858 \ + --hash=sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b \ + --hash=sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594 \ + --hash=sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc \ + --hash=sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db \ + --hash=sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b \ + --hash=sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea \ + --hash=sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6 \ + --hash=sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920 \ + --hash=sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749 \ + --hash=sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7 \ + --hash=sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd \ + --hash=sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99 \ + --hash=sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242 \ + --hash=sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee \ + --hash=sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129 \ + --hash=sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2 \ + --hash=sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51 \ + --hash=sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee \ + --hash=sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8 \ + --hash=sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b \ + --hash=sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613 \ + --hash=sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742 \ + --hash=sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe \ + --hash=sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3 \ + --hash=sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5 \ + --hash=sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631 \ + --hash=sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7 \ + --hash=sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15 \ + --hash=sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c \ + --hash=sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea \ + --hash=sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417 \ + --hash=sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250 \ + --hash=sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88 \ + --hash=sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca \ + --hash=sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa \ + --hash=sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99 \ + --hash=sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149 \ + --hash=sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41 \ + --hash=sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574 \ + --hash=sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0 \ + --hash=sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f \ + --hash=sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d \ + --hash=sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654 \ + --hash=sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3 \ + --hash=sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19 \ + --hash=sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90 \ + --hash=sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578 \ + --hash=sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9 \ + --hash=sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1 \ + --hash=sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51 \ + --hash=sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719 \ + --hash=sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236 \ + --hash=sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a \ + --hash=sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c \ + --hash=sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade \ + --hash=sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944 \ + --hash=sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc \ + --hash=sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6 \ + --hash=sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6 \ + --hash=sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27 \ + --hash=sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6 \ + --hash=sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2 \ + --hash=sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12 \ + --hash=sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf \ + --hash=sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114 \ + --hash=sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7 \ + --hash=sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf \ + --hash=sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d \ + --hash=sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b \ + --hash=sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed \ + --hash=sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03 \ + --hash=sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4 \ + --hash=sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67 \ + --hash=sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365 \ + --hash=sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a \ + --hash=sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748 \ + --hash=sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b \ + --hash=sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079 \ + --hash=sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482 +click==8.1.7 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ + --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de +colorama==0.4.6 ; python_version >= "3.11" and python_version < "4.0" and (platform_system == "Windows" or sys_platform == "win32") \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 +deprecated==1.2.15 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:353bc4a8ac4bfc96800ddab349d89c25dec1079f65fd53acdcc1e0b975b21320 \ + --hash=sha256:683e561a90de76239796e6b6feac66b99030d2dd3fcf61ef996330f14bbb9b0d +dnspython==2.7.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86 \ + --hash=sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1 +dotenv==0.9.9 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:29cf74a087b31dafdb5a446b6d7e11cbce8ed2741540e2339c69fbef92c94ce9 +email-validator==2.2.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631 \ + --hash=sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7 +factory-boy==3.3.1 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:7b1113c49736e1e9995bc2a18f4dbf2c52cf0f841103517010b1d825712ce3ca \ + --hash=sha256:8317aa5289cdfc45f9cae570feb07a6177316c82e34d14df3c2e1f22f26abef0 +faker==30.10.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:5f05ee92ddf0e1736d95dca41b2a16ee06d987b736fa4ddecdb047abf2e9024b \ + --hash=sha256:c2e627d3becec67f7a45400d3670018b5abb3f0728b7dfaa06c135b7df1ce3fb +fastapi-cli==0.0.5 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:d30e1239c6f46fcb95e606f02cdda59a1e2fa778a54b64686b3ff27f6211ff9f \ + --hash=sha256:e94d847524648c748a5350673546bbf9bcaeb086b33c24f2e82e021436866a46 +fastapi==0.115.5 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:0e7a4d0dc0d01c68df21887cce0945e72d3c48b9f4f79dfe7a7d53aa08fbb289 \ + --hash=sha256:596b95adbe1474da47049e802f9a65ab2ffa9c2b07e7efee70eb8a66c9f2f796 +frozenlist==1.7.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:04fb24d104f425da3540ed83cbfc31388a586a7696142004c577fa61c6298c3f \ + --hash=sha256:05579bf020096fe05a764f1f84cd104a12f78eaab68842d036772dc6d4870b4b \ + --hash=sha256:0aa7e176ebe115379b5b1c95b4096fb1c17cce0847402e227e712c27bdb5a949 \ + --hash=sha256:1073557c941395fdfcfac13eb2456cb8aad89f9de27bae29fabca8e563b12615 \ + --hash=sha256:1137b78384eebaf70560a36b7b229f752fb64d463d38d1304939984d5cb887b6 \ + --hash=sha256:15900082e886edb37480335d9d518cec978afc69ccbc30bd18610b7c1b22a718 \ + --hash=sha256:15a7eaba63983d22c54d255b854e8108e7e5f3e89f647fc854bd77a237e767df \ + --hash=sha256:1a85e345b4c43db8b842cab1feb41be5cc0b10a1830e6295b69d7310f99becaf \ + --hash=sha256:1e63344c4e929b1a01e29bc184bbb5fd82954869033765bfe8d65d09e336a677 \ + --hash=sha256:1eaa7e9c6d15df825bf255649e05bd8a74b04a4d2baa1ae46d9c2d00b2ca2cb5 \ + --hash=sha256:1ed8d2fa095aae4bdc7fdd80351009a48d286635edffee66bf865e37a9125c50 \ + --hash=sha256:1f5906d3359300b8a9bb194239491122e6cf1444c2efb88865426f170c262cdb \ + --hash=sha256:21884e23cffabb157a9dd7e353779077bf5b8f9a58e9b262c6caad2ef5f80a56 \ + --hash=sha256:24c34bea555fe42d9f928ba0a740c553088500377448febecaa82cc3e88aa1fa \ + --hash=sha256:284d233a8953d7b24f9159b8a3496fc1ddc00f4db99c324bd5fb5f22d8698ea7 \ + --hash=sha256:290a172aae5a4c278c6da8a96222e6337744cd9c77313efe33d5670b9f65fc43 \ + --hash=sha256:2e310d81923c2437ea8670467121cc3e9b0f76d3043cc1d2331d56c7fb7a3a8f \ + --hash=sha256:2ea2a7369eb76de2217a842f22087913cdf75f63cf1307b9024ab82dfb525938 \ + --hash=sha256:32dc2e08c67d86d0969714dd484fd60ff08ff81d1a1e40a77dd34a387e6ebc0c \ + --hash=sha256:34a69a85e34ff37791e94542065c8416c1afbf820b68f720452f636d5fb990cd \ + --hash=sha256:376b6222d114e97eeec13d46c486facd41d4f43bab626b7c3f6a8b4e81a5192c \ + --hash=sha256:3789ebc19cb811163e70fe2bd354cea097254ce6e707ae42e56f45e31e96cb8e \ + --hash=sha256:387cbfdcde2f2353f19c2f66bbb52406d06ed77519ac7ee21be0232147c2592d \ + --hash=sha256:3a14027124ddb70dfcee5148979998066897e79f89f64b13328595c4bdf77c81 \ + --hash=sha256:3bf8010d71d4507775f658e9823210b7427be36625b387221642725b515dcf3e \ + --hash=sha256:3d688126c242a6fabbd92e02633414d40f50bb6002fa4cf995a1d18051525657 \ + --hash=sha256:3dabd5a8f84573c8d10d8859a50ea2dec01eea372031929871368c09fa103478 \ + --hash=sha256:3dbf9952c4bb0e90e98aec1bd992b3318685005702656bc6f67c1a32b76787f2 \ + --hash=sha256:3fbba20e662b9c2130dc771e332a99eff5da078b2b2648153a40669a6d0e36ca \ + --hash=sha256:400ddd24ab4e55014bba442d917203c73b2846391dd42ca5e38ff52bb18c3c5e \ + --hash=sha256:41be2964bd4b15bf575e5daee5a5ce7ed3115320fb3c2b71fca05582ffa4dc9e \ + --hash=sha256:426c7bc70e07cfebc178bc4c2bf2d861d720c4fff172181eeb4a4c41d4ca2ad3 \ + --hash=sha256:43a82fce6769c70f2f5a06248b614a7d268080a9d20f7457ef10ecee5af82b63 \ + --hash=sha256:45a6f2fdbd10e074e8814eb98b05292f27bad7d1883afbe009d96abdcf3bc898 \ + --hash=sha256:46d84d49e00c9429238a7ce02dc0be8f6d7cd0cd405abd1bebdc991bf27c15bd \ + --hash=sha256:488d0a7d6a0008ca0db273c542098a0fa9e7dfaa7e57f70acef43f32b3f69dca \ + --hash=sha256:4a646531fa8d82c87fe4bb2e596f23173caec9185bfbca5d583b4ccfb95183e2 \ + --hash=sha256:4e7e9652b3d367c7bd449a727dc79d5043f48b88d0cbfd4f9f1060cf2b414104 \ + --hash=sha256:52109052b9791a3e6b5d1b65f4b909703984b770694d3eb64fad124c835d7cba \ + --hash=sha256:563b72efe5da92e02eb68c59cb37205457c977aa7a449ed1b37e6939e5c47c6a \ + --hash=sha256:5fc4df05a6591c7768459caba1b342d9ec23fa16195e744939ba5914596ae3e1 \ + --hash=sha256:61d1a5baeaac6c0798ff6edfaeaa00e0e412d49946c53fae8d4b8e8b3566c4ae \ + --hash=sha256:69cac419ac6a6baad202c85aaf467b65ac860ac2e7f2ac1686dc40dbb52f6577 \ + --hash=sha256:6a5c505156368e4ea6b53b5ac23c92d7edc864537ff911d2fb24c140bb175e60 \ + --hash=sha256:6aeac207a759d0dedd2e40745575ae32ab30926ff4fa49b1635def65806fddee \ + --hash=sha256:6eb93efb8101ef39d32d50bce242c84bcbddb4f7e9febfa7b524532a239b4464 \ + --hash=sha256:716a9973a2cc963160394f701964fe25012600f3d311f60c790400b00e568b61 \ + --hash=sha256:72c1b0fe8fe451b34f12dce46445ddf14bd2a5bcad7e324987194dc8e3a74c86 \ + --hash=sha256:73bd45e1488c40b63fe5a7df892baf9e2a4d4bb6409a2b3b78ac1c6236178e01 \ + --hash=sha256:74739ba8e4e38221d2c5c03d90a7e542cb8ad681915f4ca8f68d04f810ee0a87 \ + --hash=sha256:765bb588c86e47d0b68f23c1bee323d4b703218037765dcf3f25c838c6fecceb \ + --hash=sha256:79b2ffbba483f4ed36a0f236ccb85fbb16e670c9238313709638167670ba235f \ + --hash=sha256:7d536ee086b23fecc36c2073c371572374ff50ef4db515e4e503925361c24f71 \ + --hash=sha256:7edf5c043c062462f09b6820de9854bf28cc6cc5b6714b383149745e287181a8 \ + --hash=sha256:82d664628865abeb32d90ae497fb93df398a69bb3434463d172b80fc25b0dd7d \ + --hash=sha256:836b42f472a0e006e02499cef9352ce8097f33df43baaba3e0a28a964c26c7d2 \ + --hash=sha256:8bd7eb96a675f18aa5c553eb7ddc24a43c8c18f22e1f9925528128c052cdbe00 \ + --hash=sha256:8fc5d5cda37f62b262405cf9652cf0856839c4be8ee41be0afe8858f17f4c94b \ + --hash=sha256:912a7e8375a1c9a68325a902f3953191b7b292aa3c3fb0d71a216221deca460b \ + --hash=sha256:9537c2777167488d539bc5de2ad262efc44388230e5118868e172dd4a552b146 \ + --hash=sha256:960d67d0611f4c87da7e2ae2eacf7ea81a5be967861e0c63cf205215afbfac59 \ + --hash=sha256:974c5336e61d6e7eb1ea5b929cb645e882aadab0095c5a6974a111e6479f8878 \ + --hash=sha256:99886d98e1643269760e5fe0df31e5ae7050788dd288947f7f007209b8c33f08 \ + --hash=sha256:9a19e85cc503d958abe5218953df722748d87172f71b73cf3c9257a91b999890 \ + --hash=sha256:9a5af342e34f7e97caf8c995864c7a396418ae2859cc6fdf1b1073020d516a7e \ + --hash=sha256:9b35db7ce1cd71d36ba24f80f0c9e7cff73a28d7a74e91fe83e23d27c7828750 \ + --hash=sha256:9ccec739a99e4ccf664ea0775149f2749b8a6418eb5b8384b4dc0a7d15d304cb \ + --hash=sha256:a0fd1bad056a3600047fb9462cff4c5322cebc59ebf5d0a3725e0ee78955001d \ + --hash=sha256:a26f205c9ca5829cbf82bb2a84b5c36f7184c4316617d7ef1b271a56720d6b30 \ + --hash=sha256:a47f2abb4e29b3a8d0b530f7c3598badc6b134562b1a5caee867f7c62fee51e3 \ + --hash=sha256:a6f86e4193bb0e235ef6ce3dde5cbabed887e0b11f516ce8a0f4d3b33078ec2d \ + --hash=sha256:aa51e147a66b2d74de1e6e2cf5921890de6b0f4820b257465101d7f37b49fb5a \ + --hash=sha256:aa57daa5917f1738064f302bf2626281a1cb01920c32f711fbc7bc36111058a8 \ + --hash=sha256:ac64b6478722eeb7a3313d494f8342ef3478dff539d17002f849101b212ef97c \ + --hash=sha256:acd03d224b0175f5a850edc104ac19040d35419eddad04e7cf2d5986d98427f1 \ + --hash=sha256:af369aa35ee34f132fcfad5be45fbfcde0e3a5f6a1ec0712857f286b7d20cca9 \ + --hash=sha256:b0d5ce521d1dd7d620198829b87ea002956e4319002ef0bc8d3e6d045cb4646e \ + --hash=sha256:b3950f11058310008a87757f3eee16a8e1ca97979833239439586857bc25482e \ + --hash=sha256:b8c05e4c8e5f36e5e088caa1bf78a687528f83c043706640a92cb76cd6999384 \ + --hash=sha256:bcacfad3185a623fa11ea0e0634aac7b691aa925d50a440f39b458e41c561d98 \ + --hash=sha256:bd8c4e58ad14b4fa7802b8be49d47993182fdd4023393899632c88fd8cd994eb \ + --hash=sha256:bfe2b675cf0aaa6d61bf8fbffd3c274b3c9b7b1623beb3809df8a81399a4a9c4 \ + --hash=sha256:c0303e597eb5a5321b4de9c68e9845ac8f290d2ab3f3e2c864437d3c5a30cd65 \ + --hash=sha256:c193dda2b6d49f4c4398962810fa7d7c78f032bf45572b3e04dd5249dff27e08 \ + --hash=sha256:c70db4a0ab5ab20878432c40563573229a7ed9241506181bba12f6b7d0dc41cb \ + --hash=sha256:cbb65198a9132ebc334f237d7b0df163e4de83fb4f2bdfe46c1e654bdb0c5d43 \ + --hash=sha256:cc4df77d638aa2ed703b878dd093725b72a824c3c546c076e8fdf276f78ee84a \ + --hash=sha256:ce48b2fece5aeb45265bb7a58259f45027db0abff478e3077e12b05b17fb9da7 \ + --hash=sha256:cea3dbd15aea1341ea2de490574a4a37ca080b2ae24e4b4f4b51b9057b4c3630 \ + --hash=sha256:d1a81c85417b914139e3a9b995d4a1c84559afc839a93cf2cb7f15e6e5f6ed2d \ + --hash=sha256:d50ac7627b3a1bd2dcef6f9da89a772694ec04d9a61b66cf87f7d9446b4a0c31 \ + --hash=sha256:dab46c723eeb2c255a64f9dc05b8dd601fde66d6b19cdb82b2e09cc6ff8d8b5d \ + --hash=sha256:dfcebf56f703cb2e346315431699f00db126d158455e513bd14089d992101e44 \ + --hash=sha256:e22b9a99741294b2571667c07d9f8cceec07cb92aae5ccda39ea1b6052ed4319 \ + --hash=sha256:e2cdfaaec6a2f9327bf43c933c0319a7c429058e8537c508964a133dffee412e \ + --hash=sha256:e4389e06714cfa9d47ab87f784a7c5be91d3934cd6e9a7b85beef808297cc025 \ + --hash=sha256:e793a9f01b3e8b5c0bc646fb59140ce0efcc580d22a3468d70766091beb81b35 \ + --hash=sha256:ee80eeda5e2a4e660651370ebffd1286542b67e268aa1ac8d6dbe973120ef7ee \ + --hash=sha256:f2038310bc582f3d6a09b3816ab01737d60bf7b1ec70f5356b09e84fb7408ab1 \ + --hash=sha256:f22dac33bb3ee8fe3e013aa7b91dc12f60d61d05b7fe32191ffa84c3aafe77bd \ + --hash=sha256:f34560fb1b4c3e30ba35fa9a13894ba39e5acfc5f60f57d8accde65f46cc5e74 \ + --hash=sha256:f3f4410a0a601d349dd406b5713fec59b4cee7e71678d5b17edda7f4655a940b \ + --hash=sha256:f89f65d85774f1797239693cef07ad4c97fdd0639544bad9ac4b869782eb1981 \ + --hash=sha256:fe2365ae915a1fafd982c146754e1de6ab3478def8a59c86e1f7242d794f97d5 +greenlet==3.1.1 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:0153404a4bb921f0ff1abeb5ce8a5131da56b953eda6e14b88dc6bbc04d2049e \ + --hash=sha256:03a088b9de532cbfe2ba2034b2b85e82df37874681e8c470d6fb2f8c04d7e4b7 \ + --hash=sha256:04b013dc07c96f83134b1e99888e7a79979f1a247e2a9f59697fa14b5862ed01 \ + --hash=sha256:05175c27cb459dcfc05d026c4232f9de8913ed006d42713cb8a5137bd49375f1 \ + --hash=sha256:09fc016b73c94e98e29af67ab7b9a879c307c6731a2c9da0db5a7d9b7edd1159 \ + --hash=sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563 \ + --hash=sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83 \ + --hash=sha256:1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9 \ + --hash=sha256:1776fd7f989fc6b8d8c8cb8da1f6b82c5814957264d1f6cf818d475ec2bf6395 \ + --hash=sha256:1d3755bcb2e02de341c55b4fca7a745a24a9e7212ac953f6b3a48d117d7257aa \ + --hash=sha256:23f20bb60ae298d7d8656c6ec6db134bca379ecefadb0b19ce6f19d1f232a942 \ + --hash=sha256:275f72decf9932639c1c6dd1013a1bc266438eb32710016a1c742df5da6e60a1 \ + --hash=sha256:2846930c65b47d70b9d178e89c7e1a69c95c1f68ea5aa0a58646b7a96df12441 \ + --hash=sha256:3319aa75e0e0639bc15ff54ca327e8dc7a6fe404003496e3c6925cd3142e0e22 \ + --hash=sha256:346bed03fe47414091be4ad44786d1bd8bef0c3fcad6ed3dee074a032ab408a9 \ + --hash=sha256:36b89d13c49216cadb828db8dfa6ce86bbbc476a82d3a6c397f0efae0525bdd0 \ + --hash=sha256:37b9de5a96111fc15418819ab4c4432e4f3c2ede61e660b1e33971eba26ef9ba \ + --hash=sha256:396979749bd95f018296af156201d6211240e7a23090f50a8d5d18c370084dc3 \ + --hash=sha256:3b2813dc3de8c1ee3f924e4d4227999285fd335d1bcc0d2be6dc3f1f6a318ec1 \ + --hash=sha256:411f015496fec93c1c8cd4e5238da364e1da7a124bcb293f085bf2860c32c6f6 \ + --hash=sha256:47da355d8687fd65240c364c90a31569a133b7b60de111c255ef5b606f2ae291 \ + --hash=sha256:48ca08c771c268a768087b408658e216133aecd835c0ded47ce955381105ba39 \ + --hash=sha256:4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d \ + --hash=sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467 \ + --hash=sha256:4ead44c85f8ab905852d3de8d86f6f8baf77109f9da589cb4fa142bd3b57b475 \ + --hash=sha256:54558ea205654b50c438029505def3834e80f0869a70fb15b871c29b4575ddef \ + --hash=sha256:5e06afd14cbaf9e00899fae69b24a32f2196c19de08fcb9f4779dd4f004e5e7c \ + --hash=sha256:62ee94988d6b4722ce0028644418d93a52429e977d742ca2ccbe1c4f4a792511 \ + --hash=sha256:63e4844797b975b9af3a3fb8f7866ff08775f5426925e1e0bbcfe7932059a12c \ + --hash=sha256:6510bf84a6b643dabba74d3049ead221257603a253d0a9873f55f6a59a65f822 \ + --hash=sha256:667a9706c970cb552ede35aee17339a18e8f2a87a51fba2ed39ceeeb1004798a \ + --hash=sha256:6ef9ea3f137e5711f0dbe5f9263e8c009b7069d8a1acea822bd5e9dae0ae49c8 \ + --hash=sha256:7017b2be767b9d43cc31416aba48aab0d2309ee31b4dbf10a1d38fb7972bdf9d \ + --hash=sha256:7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01 \ + --hash=sha256:73aaad12ac0ff500f62cebed98d8789198ea0e6f233421059fa68a5aa7220145 \ + --hash=sha256:77c386de38a60d1dfb8e55b8c1101d68c79dfdd25c7095d51fec2dd800892b80 \ + --hash=sha256:7876452af029456b3f3549b696bb36a06db7c90747740c5302f74a9e9fa14b13 \ + --hash=sha256:7939aa3ca7d2a1593596e7ac6d59391ff30281ef280d8632fa03d81f7c5f955e \ + --hash=sha256:8320f64b777d00dd7ccdade271eaf0cad6636343293a25074cc5566160e4de7b \ + --hash=sha256:85f3ff71e2e60bd4b4932a043fbbe0f499e263c628390b285cb599154a3b03b1 \ + --hash=sha256:8b8b36671f10ba80e159378df9c4f15c14098c4fd73a36b9ad715f057272fbef \ + --hash=sha256:93147c513fac16385d1036b7e5b102c7fbbdb163d556b791f0f11eada7ba65dc \ + --hash=sha256:935e943ec47c4afab8965954bf49bfa639c05d4ccf9ef6e924188f762145c0ff \ + --hash=sha256:94b6150a85e1b33b40b1464a3f9988dcc5251d6ed06842abff82e42632fac120 \ + --hash=sha256:94ebba31df2aa506d7b14866fed00ac141a867e63143fe5bca82a8e503b36437 \ + --hash=sha256:95ffcf719966dd7c453f908e208e14cde192e09fde6c7186c8f1896ef778d8cd \ + --hash=sha256:98884ecf2ffb7d7fe6bd517e8eb99d31ff7855a840fa6d0d63cd07c037f6a981 \ + --hash=sha256:99cfaa2110534e2cf3ba31a7abcac9d328d1d9f1b95beede58294a60348fba36 \ + --hash=sha256:9e8f8c9cb53cdac7ba9793c276acd90168f416b9ce36799b9b885790f8ad6c0a \ + --hash=sha256:a0dfc6c143b519113354e780a50381508139b07d2177cb6ad6a08278ec655798 \ + --hash=sha256:b2795058c23988728eec1f36a4e5e4ebad22f8320c85f3587b539b9ac84128d7 \ + --hash=sha256:b42703b1cf69f2aa1df7d1030b9d77d3e584a70755674d60e710f0af570f3761 \ + --hash=sha256:b7cede291382a78f7bb5f04a529cb18e068dd29e0fb27376074b6d0317bf4dd0 \ + --hash=sha256:b8a678974d1f3aa55f6cc34dc480169d58f2e6d8958895d68845fa4ab566509e \ + --hash=sha256:b8da394b34370874b4572676f36acabac172602abf054cbc4ac910219f3340af \ + --hash=sha256:c3a701fe5a9695b238503ce5bbe8218e03c3bcccf7e204e455e7462d770268aa \ + --hash=sha256:c4aab7f6381f38a4b42f269057aee279ab0fc7bf2e929e3d4abfae97b682a12c \ + --hash=sha256:ca9d0ff5ad43e785350894d97e13633a66e2b50000e8a183a50a88d834752d42 \ + --hash=sha256:d0028e725ee18175c6e422797c407874da24381ce0690d6b9396c204c7f7276e \ + --hash=sha256:d21e10da6ec19b457b82636209cbe2331ff4306b54d06fa04b7c138ba18c8a81 \ + --hash=sha256:d5e975ca70269d66d17dd995dafc06f1b06e8cb1ec1e9ed54c1d1e4a7c4cf26e \ + --hash=sha256:da7a9bff22ce038e19bf62c4dd1ec8391062878710ded0a845bcf47cc0200617 \ + --hash=sha256:db32b5348615a04b82240cc67983cb315309e88d444a288934ee6ceaebcad6cc \ + --hash=sha256:dcc62f31eae24de7f8dce72134c8651c58000d3b1868e01392baea7c32c247de \ + --hash=sha256:dfc59d69fc48664bc693842bd57acfdd490acafda1ab52c7836e3fc75c90a111 \ + --hash=sha256:e347b3bfcf985a05e8c0b7d462ba6f15b1ee1c909e2dcad795e49e91b152c383 \ + --hash=sha256:e4d333e558953648ca09d64f13e6d8f0523fa705f51cae3f03b5983489958c70 \ + --hash=sha256:ed10eac5830befbdd0c32f83e8aa6288361597550ba669b04c48f0f9a2c843c6 \ + --hash=sha256:efc0f674aa41b92da8c49e0346318c6075d734994c3c4e4430b1c3f853e498e4 \ + --hash=sha256:f1695e76146579f8c06c1509c7ce4dfe0706f49c6831a817ac04eebb2fd02011 \ + --hash=sha256:f1d4aeb8891338e60d1ab6127af1fe45def5259def8094b9c7e34690c8858803 \ + --hash=sha256:f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79 \ + --hash=sha256:f6ff3b14f2df4c41660a7dec01045a045653998784bf8cfcb5a525bdffffbc8f +h11==0.14.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ + --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 +httpcore==1.0.7 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c \ + --hash=sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd +httptools==0.6.4 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:0614154d5454c21b6410fdf5262b4a3ddb0f53f1e1721cfd59d55f32138c578a \ + --hash=sha256:0e563e54979e97b6d13f1bbc05a96109923e76b901f786a5eae36e99c01237bd \ + --hash=sha256:16e603a3bff50db08cd578d54f07032ca1631450ceb972c2f834c2b860c28ea2 \ + --hash=sha256:288cd628406cc53f9a541cfaf06041b4c71d751856bab45e3702191f931ccd17 \ + --hash=sha256:28908df1b9bb8187393d5b5db91435ccc9c8e891657f9cbb42a2541b44c82fc8 \ + --hash=sha256:322d20ea9cdd1fa98bd6a74b77e2ec5b818abdc3d36695ab402a0de8ef2865a3 \ + --hash=sha256:342dd6946aa6bda4b8f18c734576106b8a31f2fe31492881a9a160ec84ff4bd5 \ + --hash=sha256:345c288418f0944a6fe67be8e6afa9262b18c7626c3ef3c28adc5eabc06a68da \ + --hash=sha256:3c73ce323711a6ffb0d247dcd5a550b8babf0f757e86a52558fe5b86d6fefcc0 \ + --hash=sha256:40a5ec98d3f49904b9fe36827dcf1aadfef3b89e2bd05b0e35e94f97c2b14721 \ + --hash=sha256:40b0f7fe4fd38e6a507bdb751db0379df1e99120c65fbdc8ee6c1d044897a636 \ + --hash=sha256:40dc6a8e399e15ea525305a2ddba998b0af5caa2566bcd79dcbe8948181eeaff \ + --hash=sha256:4b36913ba52008249223042dca46e69967985fb4051951f94357ea681e1f5dc0 \ + --hash=sha256:4d87b29bd4486c0093fc64dea80231f7c7f7eb4dc70ae394d70a495ab8436071 \ + --hash=sha256:4e93eee4add6493b59a5c514da98c939b244fce4a0d8879cd3f466562f4b7d5c \ + --hash=sha256:59e724f8b332319e2875efd360e61ac07f33b492889284a3e05e6d13746876f4 \ + --hash=sha256:69422b7f458c5af875922cdb5bd586cc1f1033295aa9ff63ee196a87519ac8e1 \ + --hash=sha256:703c346571fa50d2e9856a37d7cd9435a25e7fd15e236c397bf224afaa355fe9 \ + --hash=sha256:85071a1e8c2d051b507161f6c3e26155b5c790e4e28d7f236422dbacc2a9cc44 \ + --hash=sha256:856f4bc0478ae143bad54a4242fccb1f3f86a6e1be5548fecfd4102061b3a083 \ + --hash=sha256:85797e37e8eeaa5439d33e556662cc370e474445d5fab24dcadc65a8ffb04003 \ + --hash=sha256:90d96a385fa941283ebd231464045187a31ad932ebfa541be8edf5b3c2328959 \ + --hash=sha256:94978a49b8f4569ad607cd4946b759d90b285e39c0d4640c6b36ca7a3ddf2efc \ + --hash=sha256:aafe0f1918ed07b67c1e838f950b1c1fabc683030477e60b335649b8020e1076 \ + --hash=sha256:ab9ba8dcf59de5181f6be44a77458e45a578fc99c31510b8c65b7d5acc3cf490 \ + --hash=sha256:ade273d7e767d5fae13fa637f4d53b6e961fb7fd93c7797562663f0171c26660 \ + --hash=sha256:b799de31416ecc589ad79dd85a0b2657a8fe39327944998dea368c1d4c9e55e6 \ + --hash=sha256:c26f313951f6e26147833fc923f78f95604bbec812a43e5ee37f26dc9e5a686c \ + --hash=sha256:ca80b7485c76f768a3bc83ea58373f8db7b015551117375e4918e2aa77ea9b50 \ + --hash=sha256:d1ffd262a73d7c28424252381a5b854c19d9de5f56f075445d33919a637e3547 \ + --hash=sha256:d3f0d369e7ffbe59c4b6116a44d6a8eb4783aae027f2c0b366cf0aa964185dba \ + --hash=sha256:d54efd20338ac52ba31e7da78e4a72570cf729fac82bc31ff9199bedf1dc7440 \ + --hash=sha256:dacdd3d10ea1b4ca9df97a0a303cbacafc04b5cd375fa98732678151643d4988 \ + --hash=sha256:db353d22843cf1028f43c3651581e4bb49374d85692a85f95f7b9a130e1b2cab \ + --hash=sha256:db78cb9ca56b59b016e64b6031eda5653be0589dba2b1b43453f6e8b405a0970 \ + --hash=sha256:deee0e3343f98ee8047e9f4c5bc7cedbf69f5734454a94c38ee829fb2d5fa3c1 \ + --hash=sha256:df017d6c780287d5c80601dafa31f17bddb170232d85c066604d8558683711a2 \ + --hash=sha256:df959752a0c2748a65ab5387d08287abf6779ae9165916fe053e68ae1fbdc47f \ + --hash=sha256:ec4f178901fa1834d4a060320d2f3abc5c9e39766953d038f1458cb885f47e81 \ + --hash=sha256:f47f8ed67cc0ff862b84a1189831d1d33c963fb3ce1ee0c65d3b0cbe7b711069 \ + --hash=sha256:f8787367fbdfccae38e35abf7641dafc5310310a5987b689f4c32cc8cc3ee975 \ + --hash=sha256:f9eb89ecf8b290f2e293325c646a211ff1c2493222798bb80a530c5e7502494f \ + --hash=sha256:fc411e1c0a7dcd2f902c7c48cf079947a7e65b5485dea9decb82b9105ca71a43 +httpx==0.27.2 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0 \ + --hash=sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2 +idna==3.10 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \ + --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 +importlib-resources==6.4.5 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065 \ + --hash=sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717 +iniconfig==2.0.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ + --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 +isort==6.0.1 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:1cb5df28dfbc742e490c5e41bad6da41b805b0a8be7bc93cd0fb2a8a890ac450 \ + --hash=sha256:2dc5d7f65c9678d94c88dfc29161a320eec67328bc97aad576874cb4be1e9615 +jinja2==3.1.4 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369 \ + --hash=sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d +limits==3.13.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:6571b0c567bfa175a35fed9f8a954c0c92f1c3200804282f1b8f1de4ad98a953 \ + --hash=sha256:9767f7233da4255e9904b79908a728e8ec0984c0b086058b4cbbd309aea553f6 +markdown-it-py==3.0.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ + --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb +markupsafe==3.0.2 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ + --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ + --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ + --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ + --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ + --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ + --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ + --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ + --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ + --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ + --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ + --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ + --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ + --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ + --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ + --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ + --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ + --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ + --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ + --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ + --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ + --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ + --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ + --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ + --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ + --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ + --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ + --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ + --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ + --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ + --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ + --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ + --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ + --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ + --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ + --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ + --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ + --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ + --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ + --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ + --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ + --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ + --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ + --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ + --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ + --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ + --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ + --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ + --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ + --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ + --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ + --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ + --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ + --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ + --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ + --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ + --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ + --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ + --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ + --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ + --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 +mdurl==0.1.2 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba +multidict==6.6.3 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:02fd8f32d403a6ff13864b0851f1f523d4c988051eea0471d4f1fd8010f11134 \ + --hash=sha256:04cbcce84f63b9af41bad04a54d4cc4e60e90c35b9e6ccb130be2d75b71f8c17 \ + --hash=sha256:056bebbeda16b2e38642d75e9e5310c484b7c24e3841dc0fb943206a72ec89d6 \ + --hash=sha256:05db2f66c9addb10cfa226e1acb363450fab2ff8a6df73c622fefe2f5af6d4e7 \ + --hash=sha256:0b9e59946b49dafaf990fd9c17ceafa62976e8471a14952163d10a7a630413a9 \ + --hash=sha256:0db58da8eafb514db832a1b44f8fa7906fdd102f7d982025f816a93ba45e3dcb \ + --hash=sha256:0f1130b896ecb52d2a1e615260f3ea2af55fa7dc3d7c3003ba0c3121a759b18b \ + --hash=sha256:10bea2ee839a759ee368b5a6e47787f399b41e70cf0c20d90dfaf4158dfb4e55 \ + --hash=sha256:12f4581d2930840295c461764b9a65732ec01250b46c6b2c510d7ee68872b140 \ + --hash=sha256:1328201ee930f069961ae707d59c6627ac92e351ed5b92397cf534d1336ce557 \ + --hash=sha256:135631cb6c58eac37d7ac0df380294fecdc026b28837fa07c02e459c7fb9c54e \ + --hash=sha256:14117a41c8fdb3ee19c743b1c027da0736fdb79584d61a766da53d399b71176c \ + --hash=sha256:15332783596f227db50fb261c2c251a58ac3873c457f3a550a95d5c0aa3c770d \ + --hash=sha256:159ca68bfd284a8860f8d8112cf0521113bffd9c17568579e4d13d1f1dc76b65 \ + --hash=sha256:18f4eba0cbac3546b8ae31e0bbc55b02c801ae3cbaf80c247fcdd89b456ff58c \ + --hash=sha256:1bf99b4daf908c73856bd87ee0a2499c3c9a3d19bb04b9c6025e66af3fd07462 \ + --hash=sha256:1c8082e5814b662de8589d6a06c17e77940d5539080cbab9fe6794b5241b76d9 \ + --hash=sha256:208b9b9757060b9faa6f11ab4bc52846e4f3c2fb8b14d5680c8aac80af3dc751 \ + --hash=sha256:20c5a0c3c13a15fd5ea86c42311859f970070e4e24de5a550e99d7c271d76318 \ + --hash=sha256:2334cfb0fa9549d6ce2c21af2bfbcd3ac4ec3646b1b1581c88e3e2b1779ec92b \ + --hash=sha256:233ad16999afc2bbd3e534ad8dbe685ef8ee49a37dbc2cdc9514e57b6d589ced \ + --hash=sha256:274d416b0df887aef98f19f21578653982cfb8a05b4e187d4a17103322eeaf8f \ + --hash=sha256:295adc9c0551e5d5214b45cf29ca23dbc28c2d197a9c30d51aed9e037cb7c578 \ + --hash=sha256:2e4cc8d848cd4fe1cdee28c13ea79ab0ed37fc2e89dd77bac86a2e7959a8c3bc \ + --hash=sha256:346055630a2df2115cd23ae271910b4cae40f4e336773550dca4889b12916e75 \ + --hash=sha256:35712f1748d409e0707b165bf49f9f17f9e28ae85470c41615778f8d4f7d9609 \ + --hash=sha256:3713303e4a6663c6d01d648a68f2848701001f3390a030edaaf3fc949c90bf7c \ + --hash=sha256:37b09ca60998e87734699e88c2363abfd457ed18cfbf88e4009a4e83788e63ed \ + --hash=sha256:3893a0d7d28a7fe6ca7a1f760593bc13038d1d35daf52199d431b61d2660602b \ + --hash=sha256:41bb9d1d4c303886e2d85bade86e59885112a7f4277af5ad47ab919a2251f306 \ + --hash=sha256:42ca5aa9329a63be8dc49040f63817d1ac980e02eeddba763a9ae5b4027b9c9c \ + --hash=sha256:43571f785b86afd02b3855c5ac8e86ec921b760298d6f82ff2a61daf5a35330b \ + --hash=sha256:448e4a9afccbf297577f2eaa586f07067441e7b63c8362a3540ba5a38dc0f14a \ + --hash=sha256:4ef421045f13879e21c994b36e728d8e7d126c91a64b9185810ab51d474f27e7 \ + --hash=sha256:500b84f51654fdc3944e936f2922114349bf8fdcac77c3092b03449f0e5bc2b3 \ + --hash=sha256:531e331a2ee53543ab32b16334e2deb26f4e6b9b28e41f8e0c87e99a6c8e2d69 \ + --hash=sha256:53becb01dd8ebd19d1724bebe369cfa87e4e7f29abbbe5c14c98ce4c383e16cd \ + --hash=sha256:540d3c06d48507357a7d57721e5094b4f7093399a0106c211f33540fdc374d55 \ + --hash=sha256:555ff55a359302b79de97e0468e9ee80637b0de1fce77721639f7cd9440b3a10 \ + --hash=sha256:5633a82fba8e841bc5c5c06b16e21529573cd654f67fd833650a215520a6210e \ + --hash=sha256:5bd8d6f793a787153956cd35e24f60485bf0651c238e207b9a54f7458b16d539 \ + --hash=sha256:61af8a4b771f1d4d000b3168c12c3120ccf7284502a94aa58c68a81f5afac090 \ + --hash=sha256:639ecc9fe7cd73f2495f62c213e964843826f44505a3e5d82805aa85cac6f89e \ + --hash=sha256:67c92ed673049dec52d7ed39f8cf9ebbadf5032c774058b4406d18c8f8fe7063 \ + --hash=sha256:68e9e12ed00e2089725669bdc88602b0b6f8d23c0c95e52b95f0bc69f7fe9b55 \ + --hash=sha256:6c1e61bb4f80895c081790b6b09fa49e13566df8fbff817da3f85b3a8192e36b \ + --hash=sha256:70b72e749a4f6e7ed8fb334fa8d8496384840319512746a5f42fa0aec79f4d61 \ + --hash=sha256:70d974eaaa37211390cd02ef93b7e938de564bbffa866f0b08d07e5e65da783d \ + --hash=sha256:712b348f7f449948e0a6c4564a21c7db965af900973a67db432d724619b3c680 \ + --hash=sha256:72d8815f2cd3cf3df0f83cac3f3ef801d908b2d90409ae28102e0553af85545a \ + --hash=sha256:7394888236621f61dcdd25189b2768ae5cc280f041029a5bcf1122ac63df79f9 \ + --hash=sha256:73ab034fb8d58ff85c2bcbadc470efc3fafeea8affcf8722855fb94557f14cc5 \ + --hash=sha256:766a4a5996f54361d8d5a9050140aa5362fe48ce51c755a50c0bc3706460c430 \ + --hash=sha256:769841d70ca8bdd140a715746199fc6473414bd02efd678d75681d2d6a8986c5 \ + --hash=sha256:775b464d31dac90f23192af9c291dc9f423101857e33e9ebf0020a10bfcf4144 \ + --hash=sha256:798a9eb12dab0a6c2e29c1de6f3468af5cb2da6053a20dfa3344907eed0937cc \ + --hash=sha256:7af039820cfd00effec86bda5d8debef711a3e86a1d3772e85bea0f243a4bd65 \ + --hash=sha256:7c6df517cf177da5d47ab15407143a89cd1a23f8b335f3a28d57e8b0a3dbb884 \ + --hash=sha256:81ef2f64593aba09c5212a3d0f8c906a0d38d710a011f2f42759704d4557d3f2 \ + --hash=sha256:877443eaaabcd0b74ff32ebeed6f6176c71850feb7d6a1d2db65945256ea535c \ + --hash=sha256:8db10f29c7541fc5da4defd8cd697e1ca429db743fa716325f236079b96f775a \ + --hash=sha256:8df25594989aebff8a130f7899fa03cbfcc5d2b5f4a461cf2518236fe6f15961 \ + --hash=sha256:900eb9f9da25ada070f8ee4a23f884e0ee66fe4e1a38c3af644256a508ad81ca \ + --hash=sha256:934796c81ea996e61914ba58064920d6cad5d99140ac3167901eb932150e2e56 \ + --hash=sha256:94c47ea3ade005b5976789baaed66d4de4480d0a0bf31cef6edaa41c1e7b56a6 \ + --hash=sha256:9c19cea2a690f04247d43f366d03e4eb110a0dc4cd1bbeee4d445435428ed35b \ + --hash=sha256:9e236a7094b9c4c1b7585f6b9cca34b9d833cf079f7e4c49e6a4a6ec9bfdc68f \ + --hash=sha256:9e864486ef4ab07db5e9cb997bad2b681514158d6954dd1958dfb163b83d53e6 \ + --hash=sha256:9ed948328aec2072bc00f05d961ceadfd3e9bfc2966c1319aeaf7b7c21219183 \ + --hash=sha256:9f5b28c074c76afc3e4c610c488e3493976fe0e596dd3db6c8ddfbb0134dcac5 \ + --hash=sha256:9f97e181f344a0ef3881b573d31de8542cc0dbc559ec68c8f8b5ce2c2e91646d \ + --hash=sha256:a2be5b7b35271f7fff1397204ba6708365e3d773579fe2a30625e16c4b4ce817 \ + --hash=sha256:ab0a34a007704c625e25a9116c6770b4d3617a071c8a7c30cd338dfbadfe6485 \ + --hash=sha256:acf6b97bd0884891af6a8b43d0f586ab2fcf8e717cbd47ab4bdddc09e20652d8 \ + --hash=sha256:b1db4d2093d6b235de76932febf9d50766cf49a5692277b2c28a501c9637f616 \ + --hash=sha256:b24576f208793ebae00280c59927c3b7c2a3b1655e443a25f753c4611bc1c373 \ + --hash=sha256:b8fee016722550a2276ca2cb5bb624480e0ed2bd49125b2b73b7010b9090e888 \ + --hash=sha256:b9cbc60010de3562545fa198bfc6d3825df430ea96d2cc509c39bd71e2e7d648 \ + --hash=sha256:b9fe5a0e57c6dbd0e2ce81ca66272282c32cd11d31658ee9553849d91289e1c1 \ + --hash=sha256:bb933c891cd4da6bdcc9733d048e994e22e1883287ff7540c2a0f3b117605092 \ + --hash=sha256:bc7f6fbc61b1c16050a389c630da0b32fc6d4a3d191394ab78972bf5edc568c2 \ + --hash=sha256:bd0578596e3a835ef451784053cfd327d607fc39ea1a14812139339a18a0dbc3 \ + --hash=sha256:bf9bd1fd5eec01494e0f2e8e446a74a85d5e49afb63d75a9934e4a5423dba21d \ + --hash=sha256:c60b401f192e79caec61f166da9c924e9f8bc65548d4246842df91651e83d600 \ + --hash=sha256:c8161b5a7778d3137ea2ee7ae8a08cce0010de3b00ac671c5ebddeaa17cefd22 \ + --hash=sha256:cdf22e4db76d323bcdc733514bf732e9fb349707c98d341d40ebcc6e9318ef3d \ + --hash=sha256:ce8b7693da41a3c4fde5871c738a81490cea5496c671d74374c8ab889e1834fb \ + --hash=sha256:d04d01f0a913202205a598246cf77826fe3baa5a63e9f6ccf1ab0601cf56eca0 \ + --hash=sha256:d25594d3b38a2e6cabfdcafef339f754ca6e81fbbdb6650ad773ea9775af35ab \ + --hash=sha256:d4e47d8faffaae822fb5cba20937c048d4f734f43572e7079298a6c39fb172cb \ + --hash=sha256:dbc7cf464cc6d67e83e136c9f55726da3a30176f020a36ead246eceed87f1cd8 \ + --hash=sha256:dd7793bab517e706c9ed9d7310b06c8672fd0aeee5781bfad612f56b8e0f7d14 \ + --hash=sha256:e098c17856a8c9ade81b4810888c5ad1914099657226283cab3062c0540b0643 \ + --hash=sha256:e0cb0ab69915c55627c933f0b555a943d98ba71b4d1c57bc0d0a66e2567c7471 \ + --hash=sha256:e252017a817fad7ce05cafbe5711ed40faeb580e63b16755a3a24e66fa1d87c0 \ + --hash=sha256:e2db616467070d0533832d204c54eea6836a5e628f2cb1e6dfd8cd6ba7277cb7 \ + --hash=sha256:e4e15d2138ee2694e038e33b7c3da70e6b0ad8868b9f8094a72e1414aeda9c1a \ + --hash=sha256:e5511cb35f5c50a2db21047c875eb42f308c5583edf96bd8ebf7d770a9d68f6d \ + --hash=sha256:e5e8523bb12d7623cd8300dbd91b9e439a46a028cd078ca695eb66ba31adee3c \ + --hash=sha256:e5f481cccb3c5c5e5de5d00b5141dc589c1047e60d07e85bbd7dea3d4580d63f \ + --hash=sha256:e924fb978615a5e33ff644cc42e6aa241effcf4f3322c09d4f8cebde95aff5f8 \ + --hash=sha256:e93089c1570a4ad54c3714a12c2cef549dc9d58e97bcded193d928649cab78e9 \ + --hash=sha256:e995a34c3d44ab511bfc11aa26869b9d66c2d8c799fa0e74b28a473a692532d6 \ + --hash=sha256:ef43b5dd842382329e4797c46f10748d8c2b6e0614f46b4afe4aee9ac33159df \ + --hash=sha256:ef58340cc896219e4e653dade08fea5c55c6df41bcc68122e3be3e9d873d9a7b \ + --hash=sha256:f114d8478733ca7388e7c7e0ab34b72547476b97009d643644ac33d4d3fe1821 \ + --hash=sha256:f3aa090106b1543f3f87b2041eef3c156c8da2aed90c63a2fbed62d875c49c37 \ + --hash=sha256:f3fc723ab8a5c5ed6c50418e9bfcd8e6dceba6c271cee6728a10a4ed8561520c \ + --hash=sha256:f54cb79d26d0cd420637d184af38f0668558f3c4bbe22ab7ad830e67249f2e0b \ + --hash=sha256:fc9dc435ec8699e7b602b94fe0cd4703e69273a01cbc34409af29e7820f777f1 +numpy==2.1.3 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe \ + --hash=sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0 \ + --hash=sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48 \ + --hash=sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a \ + --hash=sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564 \ + --hash=sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958 \ + --hash=sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17 \ + --hash=sha256:15cb89f39fa6d0bdfb600ea24b250e5f1a3df23f901f51c8debaa6a5d122b2f0 \ + --hash=sha256:17ee83a1f4fef3c94d16dc1802b998668b5419362c8a4f4e8a491de1b41cc3ee \ + --hash=sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b \ + --hash=sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4 \ + --hash=sha256:3522b0dfe983a575e6a9ab3a4a4dfe156c3e428468ff08ce582b9bb6bd1d71d4 \ + --hash=sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6 \ + --hash=sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4 \ + --hash=sha256:4d1167c53b93f1f5d8a139a742b3c6f4d429b54e74e6b57d0eff40045187b15d \ + --hash=sha256:4f2015dfe437dfebbfce7c85c7b53d81ba49e71ba7eadbf1df40c915af75979f \ + --hash=sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f \ + --hash=sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f \ + --hash=sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56 \ + --hash=sha256:576a1c1d25e9e02ed7fa5477f30a127fe56debd53b8d2c89d5578f9857d03ca9 \ + --hash=sha256:6a4825252fcc430a182ac4dee5a505053d262c807f8a924603d411f6718b88fd \ + --hash=sha256:72dcc4a35a8515d83e76b58fdf8113a5c969ccd505c8a946759b24e3182d1f23 \ + --hash=sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed \ + --hash=sha256:762479be47a4863e261a840e8e01608d124ee1361e48b96916f38b119cfda04a \ + --hash=sha256:78574ac2d1a4a02421f25da9559850d59457bac82f2b8d7a44fe83a64f770098 \ + --hash=sha256:825656d0743699c529c5943554d223c021ff0494ff1442152ce887ef4f7561a1 \ + --hash=sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512 \ + --hash=sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f \ + --hash=sha256:973faafebaae4c0aaa1a1ca1ce02434554d67e628b8d805e61f874b84e136b09 \ + --hash=sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f \ + --hash=sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc \ + --hash=sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8 \ + --hash=sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0 \ + --hash=sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761 \ + --hash=sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef \ + --hash=sha256:b47fbb433d3260adcd51eb54f92a2ffbc90a4595f8970ee00e064c644ac788f5 \ + --hash=sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e \ + --hash=sha256:bc6f24b3d1ecc1eebfbf5d6051faa49af40b03be1aaa781ebdadcbc090b4539b \ + --hash=sha256:c006b607a865b07cd981ccb218a04fc86b600411d83d6fc261357f1c0966755d \ + --hash=sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43 \ + --hash=sha256:c7662f0e3673fe4e832fe07b65c50342ea27d989f92c80355658c7f888fcc83c \ + --hash=sha256:c80e4a09b3d95b4e1cac08643f1152fa71a0a821a2d4277334c88d54b2219a41 \ + --hash=sha256:c894b4305373b9c5576d7a12b473702afdf48ce5369c074ba304cc5ad8730dff \ + --hash=sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408 \ + --hash=sha256:d89dd2b6da69c4fff5e39c28a382199ddedc3a5be5390115608345dec660b9e2 \ + --hash=sha256:d9beb777a78c331580705326d2367488d5bc473b49a9bc3036c154832520aca9 \ + --hash=sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57 \ + --hash=sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb \ + --hash=sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9 \ + --hash=sha256:e711e02f49e176a01d0349d82cb5f05ba4db7d5e7e0defd026328e5cfb3226d3 \ + --hash=sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a \ + --hash=sha256:ecc76a9ba2911d8d37ac01de72834d8849e55473457558e12995f4cd53e778e0 \ + --hash=sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e \ + --hash=sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598 \ + --hash=sha256:fa2d1337dc61c8dc417fbccf20f6d1e139896a30721b7f1e832b2bb6ef4eb6c4 +packaging==24.2 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 \ + --hash=sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f +pandas==2.2.3 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a \ + --hash=sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d \ + --hash=sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5 \ + --hash=sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4 \ + --hash=sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0 \ + --hash=sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32 \ + --hash=sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea \ + --hash=sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28 \ + --hash=sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f \ + --hash=sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348 \ + --hash=sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18 \ + --hash=sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468 \ + --hash=sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5 \ + --hash=sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e \ + --hash=sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667 \ + --hash=sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645 \ + --hash=sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13 \ + --hash=sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30 \ + --hash=sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3 \ + --hash=sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d \ + --hash=sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb \ + --hash=sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3 \ + --hash=sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039 \ + --hash=sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8 \ + --hash=sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd \ + --hash=sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761 \ + --hash=sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659 \ + --hash=sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57 \ + --hash=sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c \ + --hash=sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c \ + --hash=sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4 \ + --hash=sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a \ + --hash=sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9 \ + --hash=sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42 \ + --hash=sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2 \ + --hash=sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39 \ + --hash=sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc \ + --hash=sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698 \ + --hash=sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed \ + --hash=sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015 \ + --hash=sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24 \ + --hash=sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319 +pluggy==1.5.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1 \ + --hash=sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669 +propcache==0.3.2 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:035e631be25d6975ed87ab23153db6a73426a48db688070d925aa27e996fe93c \ + --hash=sha256:03c89c1b14a5452cf15403e291c0ccd7751d5b9736ecb2c5bab977ad6c5bcd81 \ + --hash=sha256:06766d8f34733416e2e34f46fea488ad5d60726bb9481d3cddf89a6fa2d9603f \ + --hash=sha256:0a2f2235ac46a7aa25bdeb03a9e7060f6ecbd213b1f9101c43b3090ffb971ef6 \ + --hash=sha256:0b504d29f3c47cf6b9e936c1852246c83d450e8e063d50562115a6be6d3a2535 \ + --hash=sha256:0b8d2f607bd8f80ddc04088bc2a037fdd17884a6fcadc47a96e334d72f3717be \ + --hash=sha256:0cc17efde71e12bbaad086d679ce575268d70bc123a5a71ea7ad76f70ba30bba \ + --hash=sha256:0d0fda578d1dc3f77b6b5a5dce3b9ad69a8250a891760a548df850a5e8da87f3 \ + --hash=sha256:156c03d07dc1323d8dacaa221fbe028c5c70d16709cdd63502778e6c3ccca1b0 \ + --hash=sha256:1f43837d4ca000243fd7fd6301947d7cb93360d03cd08369969450cc6b2ce3b4 \ + --hash=sha256:20d7d62e4e7ef05f221e0db2856b979540686342e7dd9973b815599c7057e168 \ + --hash=sha256:2183111651d710d3097338dd1893fcf09c9f54e27ff1a8795495a16a469cc90b \ + --hash=sha256:21d8759141a9e00a681d35a1f160892a36fb6caa715ba0b832f7747da48fb6ea \ + --hash=sha256:22d9962a358aedbb7a2e36187ff273adeaab9743373a272976d2e348d08c7770 \ + --hash=sha256:261df2e9474a5949c46e962065d88eb9b96ce0f2bd30e9d3136bcde84befd8f2 \ + --hash=sha256:261fa020c1c14deafd54c76b014956e2f86991af198c51139faf41c4d5e83892 \ + --hash=sha256:28710b0d3975117239c76600ea351934ac7b5ff56e60953474342608dbbb6154 \ + --hash=sha256:2a4092e8549031e82facf3decdbc0883755d5bbcc62d3aea9d9e185549936dcf \ + --hash=sha256:2ca6d378f09adb13837614ad2754fa8afaee330254f404299611bce41a8438cb \ + --hash=sha256:310d11aa44635298397db47a3ebce7db99a4cc4b9bbdfcf6c98a60c8d5261cf1 \ + --hash=sha256:31248e44b81d59d6addbb182c4720f90b44e1efdc19f58112a3c3a1615fb47ef \ + --hash=sha256:34a624af06c048946709f4278b4176470073deda88d91342665d95f7c6270fbe \ + --hash=sha256:36c8d9b673ec57900c3554264e630d45980fd302458e4ac801802a7fd2ef7897 \ + --hash=sha256:3def3da3ac3ce41562d85db655d18ebac740cb3fa4367f11a52b3da9d03a5cc3 \ + --hash=sha256:404d70768080d3d3bdb41d0771037da19d8340d50b08e104ca0e7f9ce55fce70 \ + --hash=sha256:4445542398bd0b5d32df908031cb1b30d43ac848e20470a878b770ec2dcc6330 \ + --hash=sha256:46d7f8aa79c927e5f987ee3a80205c987717d3659f035c85cf0c3680526bdb44 \ + --hash=sha256:4927842833830942a5d0a56e6f4839bc484785b8e1ce8d287359794818633ba0 \ + --hash=sha256:4adfb44cb588001f68c5466579d3f1157ca07f7504fc91ec87862e2b8e556b88 \ + --hash=sha256:4ba3fef1c30f306b1c274ce0b8baaa2c3cdd91f645c48f06394068f37d3837a1 \ + --hash=sha256:4c1396592321ac83157ac03a2023aa6cc4a3cc3cfdecb71090054c09e5a7cce3 \ + --hash=sha256:4c181cad81158d71c41a2bce88edce078458e2dd5ffee7eddd6b05da85079f43 \ + --hash=sha256:54e02207c79968ebbdffc169591009f4474dde3b4679e16634d34c9363ff56b4 \ + --hash=sha256:55780d5e9a2ddc59711d727226bb1ba83a22dd32f64ee15594b9392b1f544eb1 \ + --hash=sha256:55ffda449a507e9fbd4aca1a7d9aa6753b07d6166140e5a18d2ac9bc49eac220 \ + --hash=sha256:5745bc7acdafa978ca1642891b82c19238eadc78ba2aaa293c6863b304e552d7 \ + --hash=sha256:59d61f6970ecbd8ff2e9360304d5c8876a6abd4530cb752c06586849ac8a9dc9 \ + --hash=sha256:5f559e127134b07425134b4065be45b166183fdcb433cb6c24c8e4149056ad50 \ + --hash=sha256:5f57aa0847730daceff0497f417c9de353c575d8da3579162cc74ac294c5369e \ + --hash=sha256:6107ddd08b02654a30fb8ad7a132021759d750a82578b94cd55ee2772b6ebea2 \ + --hash=sha256:62180e0b8dbb6b004baec00a7983e4cc52f5ada9cd11f48c3528d8cfa7b96a66 \ + --hash=sha256:62b4239611205294cc433845b914131b2a1f03500ff3c1ed093ed216b82621e1 \ + --hash=sha256:64a67fb39229a8a8491dd42f864e5e263155e729c2e7ff723d6e25f596b1e8cb \ + --hash=sha256:6d8f3f0eebf73e3c0ff0e7853f68be638b4043c65a70517bb575eff54edd8dbe \ + --hash=sha256:7046e79b989d7fe457bb755844019e10f693752d169076138abf17f31380800c \ + --hash=sha256:70bd8b9cd6b519e12859c99f3fc9a93f375ebd22a50296c3a295028bea73b9e7 \ + --hash=sha256:7435d766f978b4ede777002e6b3b6641dd229cd1da8d3d3106a45770365f9ad9 \ + --hash=sha256:74413c0ba02ba86f55cf60d18daab219f7e531620c15f1e23d95563f505efe7e \ + --hash=sha256:76cace5d6b2a54e55b137669b30f31aa15977eeed390c7cbfb1dafa8dfe9a701 \ + --hash=sha256:7a2368eed65fc69a7a7a40b27f22e85e7627b74216f0846b04ba5c116e191ec9 \ + --hash=sha256:7a4f30862869fa2b68380d677cc1c5fcf1e0f2b9ea0cf665812895c75d0ca3b8 \ + --hash=sha256:7ca3aee1aa955438c4dba34fc20a9f390e4c79967257d830f137bd5a8a32ed3b \ + --hash=sha256:7f08f1cc28bd2eade7a8a3d2954ccc673bb02062e3e7da09bc75d843386b342f \ + --hash=sha256:85871b050f174bc0bfb437efbdb68aaf860611953ed12418e4361bc9c392749e \ + --hash=sha256:8a08154613f2249519e549de2330cf8e2071c2887309a7b07fb56098f5170a02 \ + --hash=sha256:8a544caaae1ac73f1fecfae70ded3e93728831affebd017d53449e3ac052ac1e \ + --hash=sha256:8cabf5b5902272565e78197edb682017d21cf3b550ba0460ee473753f28d23c1 \ + --hash=sha256:8de106b6c84506b31c27168582cd3cb3000a6412c16df14a8628e5871ff83c10 \ + --hash=sha256:92b69e12e34869a6970fd2f3da91669899994b47c98f5d430b781c26f1d9f387 \ + --hash=sha256:9704bedf6e7cbe3c65eca4379a9b53ee6a83749f047808cbb5044d40d7d72198 \ + --hash=sha256:98f1ec44fb675f5052cccc8e609c46ed23a35a1cfd18545ad4e29002d858a43f \ + --hash=sha256:9a3cf035bbaf035f109987d9d55dc90e4b0e36e04bbbb95af3055ef17194057b \ + --hash=sha256:9bec58347a5a6cebf239daba9bda37dffec5b8d2ce004d9fe4edef3d2815137e \ + --hash=sha256:9da1cf97b92b51253d5b68cf5a2b9e0dafca095e36b7f2da335e27dc6172a614 \ + --hash=sha256:9ecb0aad4020e275652ba3975740f241bd12a61f1a784df044cf7477a02bc252 \ + --hash=sha256:a2dc1f4a1df4fecf4e6f68013575ff4af84ef6f478fe5344317a65d38a8e6dc9 \ + --hash=sha256:a7fad897f14d92086d6b03fdd2eb844777b0c4d7ec5e3bac0fbae2ab0602bbe5 \ + --hash=sha256:ab50cef01b372763a13333b4e54021bdcb291fc9a8e2ccb9c2df98be51bcde6c \ + --hash=sha256:abb7fa19dbf88d3857363e0493b999b8011eea856b846305d8c0512dfdf8fbb1 \ + --hash=sha256:acdf05d00696bc0447e278bb53cb04ca72354e562cf88ea6f9107df8e7fd9770 \ + --hash=sha256:aff2e4e06435d61f11a428360a932138d0ec288b0a31dd9bd78d200bd4a2b339 \ + --hash=sha256:b77ec3c257d7816d9f3700013639db7491a434644c906a2578a11daf13176251 \ + --hash=sha256:bca54bd347a253af2cf4544bbec232ab982f4868de0dd684246b67a51bc6b1db \ + --hash=sha256:be29c4f4810c5789cf10ddf6af80b041c724e629fa51e308a7a0fb19ed1ef7bf \ + --hash=sha256:c0075bf773d66fa8c9d41f66cc132ecc75e5bb9dd7cce3cfd14adc5ca184cb95 \ + --hash=sha256:c144ca294a204c470f18cf4c9d78887810d04a3e2fbb30eea903575a779159df \ + --hash=sha256:c5c2a784234c28854878d68978265617aa6dc0780e53d44b4d67f3651a17a9a2 \ + --hash=sha256:ca592ed634a73ca002967458187109265e980422116c0a107cf93d81f95af945 \ + --hash=sha256:cab90ac9d3f14b2d5050928483d3d3b8fb6b4018893fc75710e6aa361ecb2474 \ + --hash=sha256:cc2782eb0f7a16462285b6f8394bbbd0e1ee5f928034e941ffc444012224171b \ + --hash=sha256:ce26862344bdf836650ed2487c3d724b00fbfec4233a1013f597b78c1cb73615 \ + --hash=sha256:ce2ac2675a6aa41ddb2a0c9cbff53780a617ac3d43e620f8fd77ba1c84dcfc06 \ + --hash=sha256:d1a342c834734edb4be5ecb1e9fb48cb64b1e2320fccbd8c54bf8da8f2a84c33 \ + --hash=sha256:d4a996adb6904f85894570301939afeee65f072b4fd265ed7e569e8d9058e4ec \ + --hash=sha256:d81ac3ae39d38588ad0549e321e6f773a4e7cc68e7751524a22885d5bbadf886 \ + --hash=sha256:db429c19a6c7e8a1c320e6a13c99799450f411b02251fb1b75e6217cf4a14fcb \ + --hash=sha256:df4a81b9b53449ebc90cc4deefb052c1dd934ba85012aa912c7ea7b7e38b60c1 \ + --hash=sha256:e41671f1594fc4ab0a6dec1351864713cb3a279910ae8b58f884a88a0a632c05 \ + --hash=sha256:e514326b79e51f0a177daab1052bc164d9d9e54133797a3a58d24c9c87a3fe6d \ + --hash=sha256:e53af8cb6a781b02d2ea079b5b853ba9430fcbe18a8e3ce647d5982a3ff69f39 \ + --hash=sha256:ee6f22b6eaa39297c751d0e80c0d3a454f112f5c6481214fcf4c092074cecd67 \ + --hash=sha256:eef914c014bf72d18efb55619447e0aecd5fb7c2e3fa7441e2e5d6099bddff7e \ + --hash=sha256:f066b437bb3fa39c58ff97ab2ca351db465157d68ed0440abecb21715eb24b28 \ + --hash=sha256:f1304b085c83067914721e7e9d9917d41ad87696bf70f0bc7dee450e9c71ad0a \ + --hash=sha256:f86e5d7cd03afb3a1db8e9f9f6eff15794e79e791350ac48a8c924e6f439f394 \ + --hash=sha256:fad3b2a085ec259ad2c2842666b2a0a49dea8463579c606426128925af1ed725 \ + --hash=sha256:fb075ad271405dcad8e2a7ffc9a750a3bf70e533bd86e89f0603e607b93aa64c \ + --hash=sha256:fd3e6019dc1261cd0291ee8919dd91fbab7b169bb76aeef6c716833a3f65d206 +protobuf==5.29.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:0cd67a1e5c2d88930aa767f702773b2d054e29957432d7c6a18f8be02a07719a \ + --hash=sha256:0d10091d6d03537c3f902279fcf11e95372bdd36a79556311da0487455791b20 \ + --hash=sha256:17d128eebbd5d8aee80300aed7a43a48a25170af3337f6f1333d1fac2c6839ac \ + --hash=sha256:34a90cf30c908f47f40ebea7811f743d360e202b6f10d40c02529ebd84afc069 \ + --hash=sha256:445a0c02483869ed8513a585d80020d012c6dc60075f96fa0563a724987b1001 \ + --hash=sha256:6c3009e22717c6cc9e6594bb11ef9f15f669b19957ad4087214d69e08a213368 \ + --hash=sha256:85286a47caf63b34fa92fdc1fd98b649a8895db595cfa746c5286eeae890a0b1 \ + --hash=sha256:88c4af76a73183e21061881360240c0cdd3c39d263b4e8fb570aaf83348d608f \ + --hash=sha256:c931c61d0cc143a2e756b1e7f8197a508de5365efd40f83c907a9febf36e6b43 \ + --hash=sha256:e467f81fdd12ded9655cea3e9b83dc319d93b394ce810b556fb0f421d8613e86 \ + --hash=sha256:ea7fb379b257911c8c020688d455e8f74efd2f734b72dc1ea4b4d7e9fd1326f2 +psycopg2-binary==2.9.10 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:04392983d0bb89a8717772a193cfaac58871321e3ec69514e1c4e0d4957b5aff \ + --hash=sha256:056470c3dc57904bbf63d6f534988bafc4e970ffd50f6271fc4ee7daad9498a5 \ + --hash=sha256:0ea8e3d0ae83564f2fc554955d327fa081d065c8ca5cc6d2abb643e2c9c1200f \ + --hash=sha256:155e69561d54d02b3c3209545fb08938e27889ff5a10c19de8d23eb5a41be8a5 \ + --hash=sha256:18c5ee682b9c6dd3696dad6e54cc7ff3a1a9020df6a5c0f861ef8bfd338c3ca0 \ + --hash=sha256:19721ac03892001ee8fdd11507e6a2e01f4e37014def96379411ca99d78aeb2c \ + --hash=sha256:1a6784f0ce3fec4edc64e985865c17778514325074adf5ad8f80636cd029ef7c \ + --hash=sha256:2286791ececda3a723d1910441c793be44625d86d1a4e79942751197f4d30341 \ + --hash=sha256:230eeae2d71594103cd5b93fd29d1ace6420d0b86f4778739cb1a5a32f607d1f \ + --hash=sha256:245159e7ab20a71d989da00f280ca57da7641fa2cdcf71749c193cea540a74f7 \ + --hash=sha256:26540d4a9a4e2b096f1ff9cce51253d0504dca5a85872c7f7be23be5a53eb18d \ + --hash=sha256:270934a475a0e4b6925b5f804e3809dd5f90f8613621d062848dd82f9cd62007 \ + --hash=sha256:27422aa5f11fbcd9b18da48373eb67081243662f9b46e6fd07c3eb46e4535142 \ + --hash=sha256:2ad26b467a405c798aaa1458ba09d7e2b6e5f96b1ce0ac15d82fd9f95dc38a92 \ + --hash=sha256:2b3d2491d4d78b6b14f76881905c7a8a8abcf974aad4a8a0b065273a0ed7a2cb \ + --hash=sha256:2ce3e21dc3437b1d960521eca599d57408a695a0d3c26797ea0f72e834c7ffe5 \ + --hash=sha256:30e34c4e97964805f715206c7b789d54a78b70f3ff19fbe590104b71c45600e5 \ + --hash=sha256:3216ccf953b3f267691c90c6fe742e45d890d8272326b4a8b20850a03d05b7b8 \ + --hash=sha256:32581b3020c72d7a421009ee1c6bf4a131ef5f0a968fab2e2de0c9d2bb4577f1 \ + --hash=sha256:35958ec9e46432d9076286dda67942ed6d968b9c3a6a2fd62b48939d1d78bf68 \ + --hash=sha256:3abb691ff9e57d4a93355f60d4f4c1dd2d68326c968e7db17ea96df3c023ef73 \ + --hash=sha256:3c18f74eb4386bf35e92ab2354a12c17e5eb4d9798e4c0ad3a00783eae7cd9f1 \ + --hash=sha256:3c4745a90b78e51d9ba06e2088a2fe0c693ae19cc8cb051ccda44e8df8a6eb53 \ + --hash=sha256:3c4ded1a24b20021ebe677b7b08ad10bf09aac197d6943bfe6fec70ac4e4690d \ + --hash=sha256:3e9c76f0ac6f92ecfc79516a8034a544926430f7b080ec5a0537bca389ee0906 \ + --hash=sha256:48b338f08d93e7be4ab2b5f1dbe69dc5e9ef07170fe1f86514422076d9c010d0 \ + --hash=sha256:4b3df0e6990aa98acda57d983942eff13d824135fe2250e6522edaa782a06de2 \ + --hash=sha256:512d29bb12608891e349af6a0cccedce51677725a921c07dba6342beaf576f9a \ + --hash=sha256:5a507320c58903967ef7384355a4da7ff3f28132d679aeb23572753cbf2ec10b \ + --hash=sha256:5c370b1e4975df846b0277b4deba86419ca77dbc25047f535b0bb03d1a544d44 \ + --hash=sha256:6b269105e59ac96aba877c1707c600ae55711d9dcd3fc4b5012e4af68e30c648 \ + --hash=sha256:6d4fa1079cab9018f4d0bd2db307beaa612b0d13ba73b5c6304b9fe2fb441ff7 \ + --hash=sha256:6dc08420625b5a20b53551c50deae6e231e6371194fa0651dbe0fb206452ae1f \ + --hash=sha256:73aa0e31fa4bb82578f3a6c74a73c273367727de397a7a0f07bd83cbea696baa \ + --hash=sha256:7559bce4b505762d737172556a4e6ea8a9998ecac1e39b5233465093e8cee697 \ + --hash=sha256:79625966e176dc97ddabc142351e0409e28acf4660b88d1cf6adb876d20c490d \ + --hash=sha256:7a813c8bdbaaaab1f078014b9b0b13f5de757e2b5d9be6403639b298a04d218b \ + --hash=sha256:7b2c956c028ea5de47ff3a8d6b3cc3330ab45cf0b7c3da35a2d6ff8420896526 \ + --hash=sha256:7f4152f8f76d2023aac16285576a9ecd2b11a9895373a1f10fd9db54b3ff06b4 \ + --hash=sha256:7f5d859928e635fa3ce3477704acee0f667b3a3d3e4bb109f2b18d4005f38287 \ + --hash=sha256:851485a42dbb0bdc1edcdabdb8557c09c9655dfa2ca0460ff210522e073e319e \ + --hash=sha256:8608c078134f0b3cbd9f89b34bd60a943b23fd33cc5f065e8d5f840061bd0673 \ + --hash=sha256:880845dfe1f85d9d5f7c412efea7a08946a46894537e4e5d091732eb1d34d9a0 \ + --hash=sha256:8aabf1c1a04584c168984ac678a668094d831f152859d06e055288fa515e4d30 \ + --hash=sha256:8aecc5e80c63f7459a1a2ab2c64df952051df196294d9f739933a9f6687e86b3 \ + --hash=sha256:8cd9b4f2cfab88ed4a9106192de509464b75a906462fb846b936eabe45c2063e \ + --hash=sha256:8de718c0e1c4b982a54b41779667242bc630b2197948405b7bd8ce16bcecac92 \ + --hash=sha256:9440fa522a79356aaa482aa4ba500b65f28e5d0e63b801abf6aa152a29bd842a \ + --hash=sha256:b5f86c56eeb91dc3135b3fd8a95dc7ae14c538a2f3ad77a19645cf55bab1799c \ + --hash=sha256:b73d6d7f0ccdad7bc43e6d34273f70d587ef62f824d7261c4ae9b8b1b6af90e8 \ + --hash=sha256:bb89f0a835bcfc1d42ccd5f41f04870c1b936d8507c6df12b7737febc40f0909 \ + --hash=sha256:c3cc28a6fd5a4a26224007712e79b81dbaee2ffb90ff406256158ec4d7b52b47 \ + --hash=sha256:ce5ab4bf46a211a8e924d307c1b1fcda82368586a19d0a24f8ae166f5c784864 \ + --hash=sha256:d00924255d7fc916ef66e4bf22f354a940c67179ad3fd7067d7a0a9c84d2fbfc \ + --hash=sha256:d7cd730dfa7c36dbe8724426bf5612798734bff2d3c3857f36f2733f5bfc7c00 \ + --hash=sha256:e217ce4d37667df0bc1c397fdcd8de5e81018ef305aed9415c3b093faaeb10fb \ + --hash=sha256:e3923c1d9870c49a2d44f795df0c889a22380d36ef92440ff618ec315757e539 \ + --hash=sha256:e5720a5d25e3b99cd0dc5c8a440570469ff82659bb09431c1439b92caf184d3b \ + --hash=sha256:e8b58f0a96e7a1e341fc894f62c1177a7c83febebb5ff9123b579418fdc8a481 \ + --hash=sha256:e984839e75e0b60cfe75e351db53d6db750b00de45644c5d1f7ee5d1f34a1ce5 \ + --hash=sha256:eb09aa7f9cecb45027683bb55aebaaf45a0df8bf6de68801a6afdc7947bb09d4 \ + --hash=sha256:ec8a77f521a17506a24a5f626cb2aee7850f9b69a0afe704586f63a464f3cd64 \ + --hash=sha256:ecced182e935529727401b24d76634a357c71c9275b356efafd8a2a91ec07392 \ + --hash=sha256:ee0e8c683a7ff25d23b55b11161c2663d4b099770f6085ff0a20d4505778d6b4 \ + --hash=sha256:f0c2d907a1e102526dd2986df638343388b94c33860ff3bbe1384130828714b1 \ + --hash=sha256:f758ed67cab30b9a8d2833609513ce4d3bd027641673d4ebc9c067e4d208eec1 \ + --hash=sha256:f8157bed2f51db683f31306aa497311b560f2265998122abe1dce6428bd86567 \ + --hash=sha256:ffe8ed017e4ed70f68b7b371d84b7d4a790368db9203dfc2d222febd3a9c8863 +pydantic-core==2.27.1 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9 \ + --hash=sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b \ + --hash=sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c \ + --hash=sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529 \ + --hash=sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc \ + --hash=sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854 \ + --hash=sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d \ + --hash=sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278 \ + --hash=sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a \ + --hash=sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c \ + --hash=sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f \ + --hash=sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27 \ + --hash=sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f \ + --hash=sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac \ + --hash=sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2 \ + --hash=sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97 \ + --hash=sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a \ + --hash=sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919 \ + --hash=sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9 \ + --hash=sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4 \ + --hash=sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c \ + --hash=sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131 \ + --hash=sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5 \ + --hash=sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd \ + --hash=sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089 \ + --hash=sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107 \ + --hash=sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6 \ + --hash=sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60 \ + --hash=sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf \ + --hash=sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5 \ + --hash=sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08 \ + --hash=sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05 \ + --hash=sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2 \ + --hash=sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e \ + --hash=sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c \ + --hash=sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17 \ + --hash=sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62 \ + --hash=sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23 \ + --hash=sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be \ + --hash=sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067 \ + --hash=sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02 \ + --hash=sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f \ + --hash=sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235 \ + --hash=sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840 \ + --hash=sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5 \ + --hash=sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807 \ + --hash=sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16 \ + --hash=sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c \ + --hash=sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864 \ + --hash=sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e \ + --hash=sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a \ + --hash=sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35 \ + --hash=sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737 \ + --hash=sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a \ + --hash=sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3 \ + --hash=sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52 \ + --hash=sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05 \ + --hash=sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31 \ + --hash=sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89 \ + --hash=sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de \ + --hash=sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6 \ + --hash=sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36 \ + --hash=sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c \ + --hash=sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154 \ + --hash=sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb \ + --hash=sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e \ + --hash=sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd \ + --hash=sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3 \ + --hash=sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f \ + --hash=sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78 \ + --hash=sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960 \ + --hash=sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618 \ + --hash=sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08 \ + --hash=sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4 \ + --hash=sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c \ + --hash=sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c \ + --hash=sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330 \ + --hash=sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8 \ + --hash=sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792 \ + --hash=sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025 \ + --hash=sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9 \ + --hash=sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f \ + --hash=sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01 \ + --hash=sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337 \ + --hash=sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4 \ + --hash=sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f \ + --hash=sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd \ + --hash=sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51 \ + --hash=sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab \ + --hash=sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc \ + --hash=sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676 \ + --hash=sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381 \ + --hash=sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed \ + --hash=sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb \ + --hash=sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967 \ + --hash=sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073 \ + --hash=sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae \ + --hash=sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c \ + --hash=sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206 \ + --hash=sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b +pydantic==2.10.2 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:2bc2d7f17232e0841cbba4641e65ba1eb6fafb3a08de3a091ff3ce14a197c4fa \ + --hash=sha256:cfb96e45951117c3024e6b67b25cdc33a3cb7b2fa62e239f7af1378358a1d99e +pygments==2.18.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \ + --hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a +pytest==8.3.3 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181 \ + --hash=sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2 +python-dateutil==2.9.0.post0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 +python-dotenv==1.0.1 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca \ + --hash=sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a +python-multipart==0.0.17 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:15dc4f487e0a9476cc1201261188ee0940165cffc94429b6fc565c4d3045cb5d \ + --hash=sha256:41330d831cae6e2f22902704ead2826ea038d0419530eadff3ea80175aec5538 +pytz==2024.2 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a \ + --hash=sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725 +pyyaml==6.0.2 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ + --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ + --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ + --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ + --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ + --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ + --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ + --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ + --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ + --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ + --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ + --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ + --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ + --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ + --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ + --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ + --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ + --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ + --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ + --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ + --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ + --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ + --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ + --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ + --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ + --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ + --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ + --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ + --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ + --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ + --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ + --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ + --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ + --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ + --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ + --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ + --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ + --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ + --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ + --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ + --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ + --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ + --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ + --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ + --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ + --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ + --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ + --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ + --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ + --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ + --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ + --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ + --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 +requests==2.32.3 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ + --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 +rich==13.9.4 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098 \ + --hash=sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90 +shellingham==1.5.4 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 \ + --hash=sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de +six==1.16.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 +slowapi==0.1.9 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:639192d0f1ca01b1c6d95bf6c71d794c3a9ee189855337b4821f7f457dddad77 \ + --hash=sha256:cfad116cfb84ad9d763ee155c1e5c5cbf00b0d47399a769b227865f5df576e36 +sniffio==1.3.1 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ + --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc +sqlalchemy-filters==0.13.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:40f2daead93c4db2409cf5e5abf67a420179f9e5c1df5c15fa1b474f6533b105 \ + --hash=sha256:aa4595b90d152eb76fa312a3e03d5d675f0c2e16762751f340f5449468689d9a +sqlalchemy-utils==0.41.2 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:85cf3842da2bf060760f955f8467b87983fb2e30f1764fd0e24a48307dc8ec6e \ + --hash=sha256:bc599c8c3b3319e53ce6c5c3c471120bd325d0071fb6f38a10e924e3d07b9990 +sqlalchemy==2.0.36 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:03e08af7a5f9386a43919eda9de33ffda16b44eb11f3b313e6822243770e9763 \ + --hash=sha256:0572f4bd6f94752167adfd7c1bed84f4b240ee6203a95e05d1e208d488d0d436 \ + --hash=sha256:07b441f7d03b9a66299ce7ccf3ef2900abc81c0db434f42a5694a37bd73870f2 \ + --hash=sha256:1bc330d9d29c7f06f003ab10e1eaced295e87940405afe1b110f2eb93a233588 \ + --hash=sha256:1e0d612a17581b6616ff03c8e3d5eff7452f34655c901f75d62bd86449d9750e \ + --hash=sha256:23623166bfefe1487d81b698c423f8678e80df8b54614c2bf4b4cfcd7c711959 \ + --hash=sha256:2519f3a5d0517fc159afab1015e54bb81b4406c278749779be57a569d8d1bb0d \ + --hash=sha256:28120ef39c92c2dd60f2721af9328479516844c6b550b077ca450c7d7dc68575 \ + --hash=sha256:37350015056a553e442ff672c2d20e6f4b6d0b2495691fa239d8aa18bb3bc908 \ + --hash=sha256:39769a115f730d683b0eb7b694db9789267bcd027326cccc3125e862eb03bfd8 \ + --hash=sha256:3c01117dd36800f2ecaa238c65365b7b16497adc1522bf84906e5710ee9ba0e8 \ + --hash=sha256:3d6718667da04294d7df1670d70eeddd414f313738d20a6f1d1f379e3139a545 \ + --hash=sha256:3dbb986bad3ed5ceaf090200eba750b5245150bd97d3e67343a3cfed06feecf7 \ + --hash=sha256:4557e1f11c5f653ebfdd924f3f9d5ebfc718283b0b9beebaa5dd6b77ec290971 \ + --hash=sha256:46331b00096a6db1fdc052d55b101dbbfc99155a548e20a0e4a8e5e4d1362855 \ + --hash=sha256:4a121d62ebe7d26fec9155f83f8be5189ef1405f5973ea4874a26fab9f1e262c \ + --hash=sha256:4f5e9cd989b45b73bd359f693b935364f7e1f79486e29015813c338450aa5a71 \ + --hash=sha256:50aae840ebbd6cdd41af1c14590e5741665e5272d2fee999306673a1bb1fdb4d \ + --hash=sha256:59b1ee96617135f6e1d6f275bbe988f419c5178016f3d41d3c0abb0c819f75bb \ + --hash=sha256:59b8f3adb3971929a3e660337f5dacc5942c2cdb760afcabb2614ffbda9f9f72 \ + --hash=sha256:66bffbad8d6271bb1cc2f9a4ea4f86f80fe5e2e3e501a5ae2a3dc6a76e604e6f \ + --hash=sha256:69f93723edbca7342624d09f6704e7126b152eaed3cdbb634cb657a54332a3c5 \ + --hash=sha256:6a440293d802d3011028e14e4226da1434b373cbaf4a4bbb63f845761a708346 \ + --hash=sha256:72c28b84b174ce8af8504ca28ae9347d317f9dba3999e5981a3cd441f3712e24 \ + --hash=sha256:79d2e78abc26d871875b419e1fd3c0bca31a1cb0043277d0d850014599626c2e \ + --hash=sha256:7f2767680b6d2398aea7082e45a774b2b0767b5c8d8ffb9c8b683088ea9b29c5 \ + --hash=sha256:8318f4776c85abc3f40ab185e388bee7a6ea99e7fa3a30686580b209eaa35c08 \ + --hash=sha256:8958b10490125124463095bbdadda5aa22ec799f91958e410438ad6c97a7b793 \ + --hash=sha256:8c78ac40bde930c60e0f78b3cd184c580f89456dd87fc08f9e3ee3ce8765ce88 \ + --hash=sha256:90812a8933df713fdf748b355527e3af257a11e415b613dd794512461eb8a686 \ + --hash=sha256:9bc633f4ee4b4c46e7adcb3a9b5ec083bf1d9a97c1d3854b92749d935de40b9b \ + --hash=sha256:9e46ed38affdfc95d2c958de328d037d87801cfcbea6d421000859e9789e61c2 \ + --hash=sha256:9fe53b404f24789b5ea9003fc25b9a3988feddebd7e7b369c8fac27ad6f52f28 \ + --hash=sha256:a4e46a888b54be23d03a89be510f24a7652fe6ff660787b96cd0e57a4ebcb46d \ + --hash=sha256:a86bfab2ef46d63300c0f06936bd6e6c0105faa11d509083ba8f2f9d237fb5b5 \ + --hash=sha256:ac9dfa18ff2a67b09b372d5db8743c27966abf0e5344c555d86cc7199f7ad83a \ + --hash=sha256:af148a33ff0349f53512a049c6406923e4e02bf2f26c5fb285f143faf4f0e46a \ + --hash=sha256:b11d0cfdd2b095e7b0686cf5fabeb9c67fae5b06d265d8180715b8cfa86522e3 \ + --hash=sha256:b2985c0b06e989c043f1dc09d4fe89e1616aadd35392aea2844f0458a989eacf \ + --hash=sha256:b544ad1935a8541d177cb402948b94e871067656b3a0b9e91dbec136b06a2ff5 \ + --hash=sha256:b5cc79df7f4bc3d11e4b542596c03826063092611e481fcf1c9dfee3c94355ef \ + --hash=sha256:b817d41d692bf286abc181f8af476c4fbef3fd05e798777492618378448ee689 \ + --hash=sha256:b81ee3d84803fd42d0b154cb6892ae57ea6b7c55d8359a02379965706c7efe6c \ + --hash=sha256:be9812b766cad94a25bc63bec11f88c4ad3629a0cec1cd5d4ba48dc23860486b \ + --hash=sha256:c245b1fbade9c35e5bd3b64270ab49ce990369018289ecfde3f9c318411aaa07 \ + --hash=sha256:c3f3631693003d8e585d4200730616b78fafd5a01ef8b698f6967da5c605b3fa \ + --hash=sha256:c4ae3005ed83f5967f961fd091f2f8c5329161f69ce8480aa8168b2d7fe37f06 \ + --hash=sha256:c54a1e53a0c308a8e8a7dffb59097bff7facda27c70c286f005327f21b2bd6b1 \ + --hash=sha256:d0ddd9db6e59c44875211bc4c7953a9f6638b937b0a88ae6d09eb46cced54eff \ + --hash=sha256:dc022184d3e5cacc9579e41805a681187650e170eb2fd70e28b86192a479dcaa \ + --hash=sha256:e32092c47011d113dc01ab3e1d3ce9f006a47223b18422c5c0d150af13a00687 \ + --hash=sha256:f7b64e6ec3f02c35647be6b4851008b26cff592a95ecb13b6788a54ef80bbdd4 \ + --hash=sha256:f942a799516184c855e1a32fbc7b29d7e571b52612647866d4ec1c3242578fcb \ + --hash=sha256:f9511d8dd4a6e9271d07d150fb2f81874a3c8c95e11ff9af3a2dfc35fe42ee44 \ + --hash=sha256:fd3a55deef00f689ce931d4d1b23fa9f04c880a48ee97af488fd215cf24e2a6c \ + --hash=sha256:fddbe92b4760c6f5d48162aef14824add991aeda8ddadb3c31d56eb15ca69f8e \ + --hash=sha256:fdf3386a801ea5aba17c6410dd1dc8d39cf454ca2565541b5ac42a84e1e28f53 +starlette==0.41.3 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:0e4ab3d16522a255be6b28260b938eae2482f98ce5cc934cb08dce8dc3ba5835 \ + --hash=sha256:44cedb2b7c77a9de33a8b74b2b90e9f50d11fcf25d8270ea525ad71a25374ff7 +temporalio==1.8.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:4ee13d155dc917e7792b87d1e37b1a0e837c361deb722ccc294edaa5344f2fa2 \ + --hash=sha256:6a45571c09859b6cbf33be26dd5d5fab7e7ee3625750a7b91ebde5770e61015b \ + --hash=sha256:6b67c115b6eaceddae373dc2c597e5ad5dd567282f4bb0ee63c99124f5f0c12d \ + --hash=sha256:6ec61660631b2513ce710b468068135280996af105571126295c9645bf29ee22 \ + --hash=sha256:b9e239b8bfd60126a4b591c6e2e691392b69afc8cac9db452d692654bf85f9cc \ + --hash=sha256:c6acb217d4bd7297389db756dd9da73ef2bae17f6afee1faa8bf77be200e8b93 +typer==0.13.1 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:5b59580fd925e89463a29d363e0a43245ec02765bde9fb77d39e5d0f29dd7157 \ + --hash=sha256:9d444cb96cc268ce6f8b94e13b4335084cef4c079998a9f4851a90229a3bd25c +types-protobuf==5.28.3.20241030 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:f3dae16adf342d4fb5bb3673cabb22549a6252e5dd66fc52d8310b1a39c64ba9 \ + --hash=sha256:f7e6b45845d75393fb41c0b3ce82c46d775f9771fae2097414a1dbfe5b51a988 +typing-extensions==4.12.2 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \ + --hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8 +tzdata==2024.2 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc \ + --hash=sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd +urllib3==2.2.3 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac \ + --hash=sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9 +uvicorn==0.32.1 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:82ad92fd58da0d12af7482ecdb5f2470a04c9c9a53ced65b9bbb4a205377602e \ + --hash=sha256:ee9519c246a72b1c084cea8d3b44ed6026e78a4a309cbedae9c37e4cb9fbb175 +uvloop==0.21.0 ; python_version >= "3.11" and python_version < "4.0" and sys_platform != "win32" and sys_platform != "cygwin" and platform_python_implementation != "PyPy" \ + --hash=sha256:0878c2640cf341b269b7e128b1a5fed890adc4455513ca710d77d5e93aa6d6a0 \ + --hash=sha256:10d66943def5fcb6e7b37310eb6b5639fd2ccbc38df1177262b0640c3ca68c1f \ + --hash=sha256:10da8046cc4a8f12c91a1c39d1dd1585c41162a15caaef165c2174db9ef18bdc \ + --hash=sha256:17df489689befc72c39a08359efac29bbee8eee5209650d4b9f34df73d22e414 \ + --hash=sha256:183aef7c8730e54c9a3ee3227464daed66e37ba13040bb3f350bc2ddc040f22f \ + --hash=sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d \ + --hash=sha256:221f4f2a1f46032b403bf3be628011caf75428ee3cc204a22addf96f586b19fd \ + --hash=sha256:2d1f581393673ce119355d56da84fe1dd9d2bb8b3d13ce792524e1607139feff \ + --hash=sha256:359ec2c888397b9e592a889c4d72ba3d6befba8b2bb01743f72fffbde663b59c \ + --hash=sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3 \ + --hash=sha256:4509360fcc4c3bd2c70d87573ad472de40c13387f5fda8cb58350a1d7475e58d \ + --hash=sha256:460def4412e473896ef179a1671b40c039c7012184b627898eea5072ef6f017a \ + --hash=sha256:461d9ae6660fbbafedd07559c6a2e57cd553b34b0065b6550685f6653a98c1cb \ + --hash=sha256:46923b0b5ee7fc0020bef24afe7836cb068f5050ca04caf6b487c513dc1a20b2 \ + --hash=sha256:53e420a3afe22cdcf2a0f4846e377d16e718bc70103d7088a4f7623567ba5fb0 \ + --hash=sha256:5ee4d4ef48036ff6e5cfffb09dd192c7a5027153948d85b8da7ff705065bacc6 \ + --hash=sha256:67dd654b8ca23aed0a8e99010b4c34aca62f4b7fce88f39d452ed7622c94845c \ + --hash=sha256:787ae31ad8a2856fc4e7c095341cccc7209bd657d0e71ad0dc2ea83c4a6fa8af \ + --hash=sha256:86975dca1c773a2c9864f4c52c5a55631038e387b47eaf56210f873887b6c8dc \ + --hash=sha256:87c43e0f13022b998eb9b973b5e97200c8b90823454d4bc06ab33829e09fb9bb \ + --hash=sha256:88cb67cdbc0e483da00af0b2c3cdad4b7c61ceb1ee0f33fe00e09c81e3a6cb75 \ + --hash=sha256:8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb \ + --hash=sha256:a5c39f217ab3c663dc699c04cbd50c13813e31d917642d459fdcec07555cc553 \ + --hash=sha256:b9fb766bb57b7388745d8bcc53a359b116b8a04c83a2288069809d2b3466c37e \ + --hash=sha256:baa0e6291d91649c6ba4ed4b2f982f9fa165b5bbd50a9e203c416a2797bab3c6 \ + --hash=sha256:baa4dcdbd9ae0a372f2167a207cd98c9f9a1ea1188a8a526431eef2f8116cc8d \ + --hash=sha256:bc09f0ff191e61c2d592a752423c767b4ebb2986daa9ed62908e2b1b9a9ae206 \ + --hash=sha256:bd53ecc9a0f3d87ab847503c2e1552b690362e005ab54e8a48ba97da3924c0dc \ + --hash=sha256:bfd55dfcc2a512316e65f16e503e9e450cab148ef11df4e4e679b5e8253a5281 \ + --hash=sha256:c097078b8031190c934ed0ebfee8cc5f9ba9642e6eb88322b9958b649750f72b \ + --hash=sha256:c0f3fa6200b3108919f8bdabb9a7f87f20e7097ea3c543754cabc7d717d95cf8 \ + --hash=sha256:e678ad6fe52af2c58d2ae3c73dc85524ba8abe637f134bf3564ed07f555c5e79 \ + --hash=sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f \ + --hash=sha256:f0ce1b49560b1d2d8a2977e3ba4afb2414fb46b86a1b64056bc4ab929efdafbe \ + --hash=sha256:f38b2e090258d051d68a5b14d1da7203a3c3677321cf32a95a6f4db4dd8b6f26 \ + --hash=sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816 \ + --hash=sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2 +watchfiles==1.0.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:06d828fe2adc4ac8a64b875ca908b892a3603d596d43e18f7948f3fef5fc671c \ + --hash=sha256:074c7618cd6c807dc4eaa0982b4a9d3f8051cd0b72793511848fd64630174b17 \ + --hash=sha256:09551237645d6bff3972592f2aa5424df9290e7a2e15d63c5f47c48cde585935 \ + --hash=sha256:0fc3bf0effa2d8075b70badfdd7fb839d7aa9cea650d17886982840d71fdeabf \ + --hash=sha256:12ab123135b2f42517f04e720526d41448667ae8249e651385afb5cda31fedc0 \ + --hash=sha256:13a4f9ee0cd25682679eea5c14fc629e2eaa79aab74d963bc4e21f43b8ea1877 \ + --hash=sha256:1d19df28f99d6a81730658fbeb3ade8565ff687f95acb59665f11502b441be5f \ + --hash=sha256:1e176b6b4119b3f369b2b4e003d53a226295ee862c0962e3afd5a1c15680b4e3 \ + --hash=sha256:1ee5edc939f53466b329bbf2e58333a5461e6c7b50c980fa6117439e2c18b42d \ + --hash=sha256:1f73c2147a453315d672c1ad907abe6d40324e34a185b51e15624bc793f93cc6 \ + --hash=sha256:1ff236d7a3f4b0a42f699a22fc374ba526bc55048a70cbb299661158e1bb5e1f \ + --hash=sha256:245fab124b9faf58430da547512d91734858df13f2ddd48ecfa5e493455ffccb \ + --hash=sha256:28babb38cf2da8e170b706c4b84aa7e4528a6fa4f3ee55d7a0866456a1662041 \ + --hash=sha256:28fb64b5843d94e2c2483f7b024a1280662a44409bedee8f2f51439767e2d107 \ + --hash=sha256:29cf884ad4285d23453c702ed03d689f9c0e865e3c85d20846d800d4787de00f \ + --hash=sha256:2a825ba4b32c214e3855b536eb1a1f7b006511d8e64b8215aac06eb680642d84 \ + --hash=sha256:2ac778a460ea22d63c7e6fb0bc0f5b16780ff0b128f7f06e57aaec63bd339285 \ + --hash=sha256:2c2696611182c85eb0e755b62b456f48debff484b7306b56f05478b843ca8ece \ + --hash=sha256:2d9c0518fabf4a3f373b0a94bb9e4ea7a1df18dec45e26a4d182aa8918dee855 \ + --hash=sha256:2de52b499e1ab037f1a87cb8ebcb04a819bf087b1015a4cf6dcf8af3c2a2613e \ + --hash=sha256:37566c844c9ce3b5deb964fe1a23378e575e74b114618d211fbda8f59d7b5dab \ + --hash=sha256:3d94fd83ed54266d789f287472269c0def9120a2022674990bd24ad989ebd7a0 \ + --hash=sha256:48051d1c504448b2fcda71c5e6e3610ae45de6a0b8f5a43b961f250be4bdf5a8 \ + --hash=sha256:487d15927f1b0bd24e7df921913399bb1ab94424c386bea8b267754d698f8f0e \ + --hash=sha256:4a3b33c3aefe9067ebd87846806cd5fc0b017ab70d628aaff077ab9abf4d06b3 \ + --hash=sha256:4ff9c7e84e8b644a8f985c42bcc81457240316f900fc72769aaedec9d088055a \ + --hash=sha256:533a7cbfe700e09780bb31c06189e39c65f06c7f447326fee707fd02f9a6e945 \ + --hash=sha256:53ae447f06f8f29f5ab40140f19abdab822387a7c426a369eb42184b021e97eb \ + --hash=sha256:550109001920a993a4383b57229c717fa73627d2a4e8fcb7ed33c7f1cddb0c85 \ + --hash=sha256:5bbd0311588c2de7f9ea5cf3922ccacfd0ec0c1922870a2be503cc7df1ca8be7 \ + --hash=sha256:5dccfc70480087567720e4e36ec381bba1ed68d7e5f368fe40c93b3b1eba0105 \ + --hash=sha256:5f75cd42e7e2254117cf37ff0e68c5b3f36c14543756b2da621408349bd9ca7c \ + --hash=sha256:648e2b6db53eca6ef31245805cd528a16f56fa4cc15aeec97795eaf713c11435 \ + --hash=sha256:774ef36b16b7198669ce655d4f75b4c3d370e7f1cbdfb997fb10ee98717e2058 \ + --hash=sha256:8a2127cd68950787ee36753e6d401c8ea368f73beaeb8e54df5516a06d1ecd82 \ + --hash=sha256:90004553be36427c3d06ec75b804233f8f816374165d5225b93abd94ba6e7234 \ + --hash=sha256:905f69aad276639eff3893759a07d44ea99560e67a1cf46ff389cd62f88872a2 \ + --hash=sha256:9122b8fdadc5b341315d255ab51d04893f417df4e6c1743b0aac8bf34e96e025 \ + --hash=sha256:9272fdbc0e9870dac3b505bce1466d386b4d8d6d2bacf405e603108d50446940 \ + --hash=sha256:936f362e7ff28311b16f0b97ec51e8f2cc451763a3264640c6ed40fb252d1ee4 \ + --hash=sha256:947ccba18a38b85c366dafeac8df2f6176342d5992ca240a9d62588b214d731f \ + --hash=sha256:95dc785bc284552d044e561b8f4fe26d01ab5ca40d35852a6572d542adfeb4bc \ + --hash=sha256:95de85c254f7fe8cbdf104731f7f87f7f73ae229493bebca3722583160e6b152 \ + --hash=sha256:9b4fb98100267e6a5ebaff6aaa5d20aea20240584647470be39fe4823012ac96 \ + --hash=sha256:9c01446626574561756067f00b37e6b09c8622b0fc1e9fdbc7cbcea328d4e514 \ + --hash=sha256:9c9a8d8fd97defe935ef8dd53d562e68942ad65067cd1c54d6ed8a088b1d931d \ + --hash=sha256:9e1d9284cc84de7855fcf83472e51d32daf6f6cecd094160192628bc3fee1b78 \ + --hash=sha256:a0abf173975eb9dd17bb14c191ee79999e650997cc644562f91df06060610e62 \ + --hash=sha256:a2218e78e2c6c07b1634a550095ac2a429026b2d5cbcd49a594f893f2bb8c936 \ + --hash=sha256:a5a7a06cfc65e34fd0a765a7623c5ba14707a0870703888e51d3d67107589817 \ + --hash=sha256:b2bca898c1dc073912d3db7fa6926cc08be9575add9e84872de2c99c688bac4e \ + --hash=sha256:b46e15c34d4e401e976d6949ad3a74d244600d5c4b88c827a3fdf18691a46359 \ + --hash=sha256:b551c465a59596f3d08170bd7e1c532c7260dd90ed8135778038e13c5d48aa81 \ + --hash=sha256:b555a93c15bd2c71081922be746291d776d47521a00703163e5fbe6d2a402399 \ + --hash=sha256:bc338ce9f8846543d428260fa0f9a716626963148edc937d71055d01d81e1525 \ + --hash=sha256:bedf84835069f51c7b026b3ca04e2e747ea8ed0a77c72006172c72d28c9f69fc \ + --hash=sha256:c3d258d78341d5d54c0c804a5b7faa66cd30ba50b2756a7161db07ce15363b8d \ + --hash=sha256:c83a6d33a9eda0af6a7470240d1af487807adc269704fe76a4972dd982d16236 \ + --hash=sha256:c9a13ac46b545a7d0d50f7641eefe47d1597e7d1783a5d89e09d080e6dff44b0 \ + --hash=sha256:cf517701a4a872417f4e02a136e929537743461f9ec6cdb8184d9a04f4843545 \ + --hash=sha256:d2b39aa8edd9e5f56f99a2a2740a251dc58515398e9ed5a4b3e5ff2827060755 \ + --hash=sha256:d3572d4c34c4e9c33d25b3da47d9570d5122f8433b9ac6519dca49c2740d23cd \ + --hash=sha256:d562a6114ddafb09c33246c6ace7effa71ca4b6a2324a47f4b09b6445ea78941 \ + --hash=sha256:e1ed613ee107269f66c2df631ec0fc8efddacface85314d392a4131abe299f00 \ + --hash=sha256:e3750434c83b61abb3163b49c64b04180b85b4dabb29a294513faec57f2ffdb7 \ + --hash=sha256:eba98901a2eab909dbd79681190b9049acc650f6111fde1845484a4450761e98 \ + --hash=sha256:f159ac795785cde4899e0afa539f4c723fb5dd336ce5605bc909d34edd00b79b \ + --hash=sha256:f8c4f3a1210ed099a99e6a710df4ff2f8069411059ffe30fa5f9467ebed1256b \ + --hash=sha256:fa13d604fcb9417ae5f2e3de676e66aa97427d888e83662ad205bed35a313176 \ + --hash=sha256:fbd0ab7a9943bbddb87cbc2bf2f09317e74c77dc55b1f5657f81d04666c25269 \ + --hash=sha256:ffd98a299b0a74d1b704ef0ed959efb753e656a4e0425c14e46ae4c3cbdd2919 +websockets==14.1 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:00fe5da3f037041da1ee0cf8e308374e236883f9842c7c465aa65098b1c9af59 \ + --hash=sha256:01bb2d4f0a6d04538d3c5dfd27c0643269656c28045a53439cbf1c004f90897a \ + --hash=sha256:034feb9f4286476f273b9a245fb15f02c34d9586a5bc936aff108c3ba1b21beb \ + --hash=sha256:04a97aca96ca2acedf0d1f332c861c5a4486fdcba7bcef35873820f940c4231e \ + --hash=sha256:0d4290d559d68288da9f444089fd82490c8d2744309113fc26e2da6e48b65da6 \ + --hash=sha256:1288369a6a84e81b90da5dbed48610cd7e5d60af62df9851ed1d1d23a9069f10 \ + --hash=sha256:14839f54786987ccd9d03ed7f334baec0f02272e7ec4f6e9d427ff584aeea8b4 \ + --hash=sha256:1d045cbe1358d76b24d5e20e7b1878efe578d9897a25c24e6006eef788c0fdf0 \ + --hash=sha256:1f874ba705deea77bcf64a9da42c1f5fc2466d8f14daf410bc7d4ceae0a9fcb0 \ + --hash=sha256:205f672a6c2c671a86d33f6d47c9b35781a998728d2c7c2a3e1cf3333fcb62b7 \ + --hash=sha256:2177ee3901075167f01c5e335a6685e71b162a54a89a56001f1c3e9e3d2ad250 \ + --hash=sha256:219c8187b3ceeadbf2afcf0f25a4918d02da7b944d703b97d12fb01510869078 \ + --hash=sha256:25225cc79cfebc95ba1d24cd3ab86aaa35bcd315d12fa4358939bd55e9bd74a5 \ + --hash=sha256:3630b670d5057cd9e08b9c4dab6493670e8e762a24c2c94ef312783870736ab9 \ + --hash=sha256:368a05465f49c5949e27afd6fbe0a77ce53082185bbb2ac096a3a8afaf4de52e \ + --hash=sha256:36ebd71db3b89e1f7b1a5deaa341a654852c3518ea7a8ddfdf69cc66acc2db1b \ + --hash=sha256:39450e6215f7d9f6f7bc2a6da21d79374729f5d052333da4d5825af8a97e6735 \ + --hash=sha256:398b10c77d471c0aab20a845e7a60076b6390bfdaac7a6d2edb0d2c59d75e8d8 \ + --hash=sha256:3c3deac3748ec73ef24fc7be0b68220d14d47d6647d2f85b2771cb35ea847aa1 \ + --hash=sha256:3f14a96a0034a27f9d47fd9788913924c89612225878f8078bb9d55f859272b0 \ + --hash=sha256:3fc753451d471cff90b8f467a1fc0ae64031cf2d81b7b34e1811b7e2691bc4bc \ + --hash=sha256:414ffe86f4d6f434a8c3b7913655a1a5383b617f9bf38720e7c0799fac3ab1c6 \ + --hash=sha256:449d77d636f8d9c17952628cc7e3b8faf6e92a17ec581ec0c0256300717e1512 \ + --hash=sha256:4b6caec8576e760f2c7dd878ba817653144d5f369200b6ddf9771d64385b84d4 \ + --hash=sha256:4d4fc827a20abe6d544a119896f6b78ee13fe81cbfef416f3f2ddf09a03f0e2e \ + --hash=sha256:5a42d3ecbb2db5080fc578314439b1d79eef71d323dc661aa616fb492436af5d \ + --hash=sha256:5b918d288958dc3fa1c5a0b9aa3256cb2b2b84c54407f4813c45d52267600cd3 \ + --hash=sha256:5ef440054124728cc49b01c33469de06755e5a7a4e83ef61934ad95fc327fbb0 \ + --hash=sha256:660c308dabd2b380807ab64b62985eaccf923a78ebc572bd485375b9ca2b7dc7 \ + --hash=sha256:6a6c9bcf7cdc0fd41cc7b7944447982e8acfd9f0d560ea6d6845428ed0562058 \ + --hash=sha256:6d24fc337fc055c9e83414c94e1ee0dee902a486d19d2a7f0929e49d7d604b09 \ + --hash=sha256:7048eb4415d46368ef29d32133134c513f507fff7d953c18c91104738a68c3b3 \ + --hash=sha256:77569d19a13015e840b81550922056acabc25e3f52782625bc6843cfa034e1da \ + --hash=sha256:8149a0f5a72ca36720981418eeffeb5c2729ea55fa179091c81a0910a114a5d2 \ + --hash=sha256:836bef7ae338a072e9d1863502026f01b14027250a4545672673057997d5c05a \ + --hash=sha256:8621a07991add373c3c5c2cf89e1d277e49dc82ed72c75e3afc74bd0acc446f0 \ + --hash=sha256:87e31011b5c14a33b29f17eb48932e63e1dcd3fa31d72209848652310d3d1f0d \ + --hash=sha256:88cf9163ef674b5be5736a584c999e98daf3aabac6e536e43286eb74c126b9c7 \ + --hash=sha256:8fda642151d5affdee8a430bd85496f2e2517be3a2b9d2484d633d5712b15c56 \ + --hash=sha256:90b5d9dfbb6d07a84ed3e696012610b6da074d97453bd01e0e30744b472c8179 \ + --hash=sha256:90f4c7a069c733d95c308380aae314f2cb45bd8a904fb03eb36d1a4983a4993f \ + --hash=sha256:9481a6de29105d73cf4515f2bef8eb71e17ac184c19d0b9918a3701c6c9c4f23 \ + --hash=sha256:9607b9a442392e690a57909c362811184ea429585a71061cd5d3c2b98065c199 \ + --hash=sha256:9777564c0a72a1d457f0848977a1cbe15cfa75fa2f67ce267441e465717dcf1a \ + --hash=sha256:a032855dc7db987dff813583d04f4950d14326665d7e714d584560b140ae6b8b \ + --hash=sha256:a0adf84bc2e7c86e8a202537b4fd50e6f7f0e4a6b6bf64d7ccb96c4cd3330b29 \ + --hash=sha256:a35f704be14768cea9790d921c2c1cc4fc52700410b1c10948511039be824aac \ + --hash=sha256:a3dfff83ca578cada2d19e665e9c8368e1598d4e787422a460ec70e531dbdd58 \ + --hash=sha256:a4c805c6034206143fbabd2d259ec5e757f8b29d0a2f0bf3d2fe5d1f60147a4a \ + --hash=sha256:a655bde548ca98f55b43711b0ceefd2a88a71af6350b0c168aa77562104f3f45 \ + --hash=sha256:ad2ab2547761d79926effe63de21479dfaf29834c50f98c4bf5b5480b5838434 \ + --hash=sha256:b1f3628a0510bd58968c0f60447e7a692933589b791a6b572fcef374053ca280 \ + --hash=sha256:b7e7ea2f782408c32d86b87a0d2c1fd8871b0399dd762364c731d86c86069a78 \ + --hash=sha256:bc6ccf7d54c02ae47a48ddf9414c54d48af9c01076a2e1023e3b486b6e72c707 \ + --hash=sha256:bea45f19b7ca000380fbd4e02552be86343080120d074b87f25593ce1700ad58 \ + --hash=sha256:cc1fc87428c1d18b643479caa7b15db7d544652e5bf610513d4a3478dbe823d0 \ + --hash=sha256:cd7c11968bc3860d5c78577f0dbc535257ccec41750675d58d8dc66aa47fe52c \ + --hash=sha256:ceada5be22fa5a5a4cdeec74e761c2ee7db287208f54c718f2df4b7e200b8d4a \ + --hash=sha256:cf5201a04550136ef870aa60ad3d29d2a59e452a7f96b94193bee6d73b8ad9a9 \ + --hash=sha256:d9fd19ecc3a4d5ae82ddbfb30962cf6d874ff943e56e0c81f5169be2fda62979 \ + --hash=sha256:ddaa4a390af911da6f680be8be4ff5aaf31c4c834c1a9147bc21cbcbca2d4370 \ + --hash=sha256:df174ece723b228d3e8734a6f2a6febbd413ddec39b3dc592f5a4aa0aff28098 \ + --hash=sha256:e0744623852f1497d825a49a99bfbec9bea4f3f946df6eb9d8a2f0c37a2fec2e \ + --hash=sha256:e5dc25a9dbd1a7f61eca4b7cb04e74ae4b963d658f9e4f9aad9cd00b688692c8 \ + --hash=sha256:e7591d6f440af7f73c4bd9404f3772bfee064e639d2b6cc8c94076e71b2471c1 \ + --hash=sha256:eb6d38971c800ff02e4a6afd791bbe3b923a9a57ca9aeab7314c21c84bf9ff05 \ + --hash=sha256:ed907449fe5e021933e46a3e65d651f641975a768d0649fee59f10c2985529ed \ + --hash=sha256:f6cf0ad281c979306a6a34242b371e90e891bce504509fb6bb5246bbbf31e7b6 \ + --hash=sha256:f95ba34d71e2fa0c5d225bde3b3bdb152e957150100e75c86bc7f3964c450d89 +wrapt==1.17.0 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:0229b247b0fc7dee0d36176cbb79dbaf2a9eb7ecc50ec3121f40ef443155fb1d \ + --hash=sha256:0698d3a86f68abc894d537887b9bbf84d29bcfbc759e23f4644be27acf6da301 \ + --hash=sha256:0a0a1a1ec28b641f2a3a2c35cbe86c00051c04fffcfcc577ffcdd707df3f8635 \ + --hash=sha256:0b48554952f0f387984da81ccfa73b62e52817a4386d070c75e4db7d43a28c4a \ + --hash=sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed \ + --hash=sha256:140ea00c87fafc42739bd74a94a5a9003f8e72c27c47cd4f61d8e05e6dec8721 \ + --hash=sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801 \ + --hash=sha256:17fcf043d0b4724858f25b8826c36e08f9fb2e475410bece0ec44a22d533da9b \ + --hash=sha256:18b956061b8db634120b58f668592a772e87e2e78bc1f6a906cfcaa0cc7991c1 \ + --hash=sha256:2399408ac33ffd5b200480ee858baa58d77dd30e0dd0cab6a8a9547135f30a88 \ + --hash=sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8 \ + --hash=sha256:2dfb7cff84e72e7bf975b06b4989477873dcf160b2fd89959c629535df53d4e0 \ + --hash=sha256:2f495b6754358979379f84534f8dd7a43ff8cff2558dcdea4a148a6e713a758f \ + --hash=sha256:33539c6f5b96cf0b1105a0ff4cf5db9332e773bb521cc804a90e58dc49b10578 \ + --hash=sha256:3c34f6896a01b84bab196f7119770fd8466c8ae3dfa73c59c0bb281e7b588ce7 \ + --hash=sha256:498fec8da10e3e62edd1e7368f4b24aa362ac0ad931e678332d1b209aec93045 \ + --hash=sha256:4d63f4d446e10ad19ed01188d6c1e1bb134cde8c18b0aa2acfd973d41fcc5ada \ + --hash=sha256:4e4b4385363de9052dac1a67bfb535c376f3d19c238b5f36bddc95efae15e12d \ + --hash=sha256:4e547b447073fc0dbfcbff15154c1be8823d10dab4ad401bdb1575e3fdedff1b \ + --hash=sha256:4f643df3d4419ea3f856c5c3f40fec1d65ea2e89ec812c83f7767c8730f9827a \ + --hash=sha256:4f763a29ee6a20c529496a20a7bcb16a73de27f5da6a843249c7047daf135977 \ + --hash=sha256:5ae271862b2142f4bc687bdbfcc942e2473a89999a54231aa1c2c676e28f29ea \ + --hash=sha256:5d8fd17635b262448ab8f99230fe4dac991af1dabdbb92f7a70a6afac8a7e346 \ + --hash=sha256:69c40d4655e078ede067a7095544bcec5a963566e17503e75a3a3e0fe2803b13 \ + --hash=sha256:69d093792dc34a9c4c8a70e4973a3361c7a7578e9cd86961b2bbf38ca71e4e22 \ + --hash=sha256:6a9653131bda68a1f029c52157fd81e11f07d485df55410401f745007bd6d339 \ + --hash=sha256:6ff02a91c4fc9b6a94e1c9c20f62ea06a7e375f42fe57587f004d1078ac86ca9 \ + --hash=sha256:714c12485aa52efbc0fc0ade1e9ab3a70343db82627f90f2ecbc898fdf0bb181 \ + --hash=sha256:7264cbb4a18dc4acfd73b63e4bcfec9c9802614572025bdd44d0721983fc1d9c \ + --hash=sha256:73a96fd11d2b2e77d623a7f26e004cc31f131a365add1ce1ce9a19e55a1eef90 \ + --hash=sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a \ + --hash=sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489 \ + --hash=sha256:8425cfce27b8b20c9b89d77fb50e368d8306a90bf2b6eef2cdf5cd5083adf83f \ + --hash=sha256:875d240fdbdbe9e11f9831901fb8719da0bd4e6131f83aa9f69b96d18fae7504 \ + --hash=sha256:879591c2b5ab0a7184258274c42a126b74a2c3d5a329df16d69f9cee07bba6ea \ + --hash=sha256:89fc28495896097622c3fc238915c79365dd0ede02f9a82ce436b13bd0ab7569 \ + --hash=sha256:8a5e7cc39a45fc430af1aefc4d77ee6bad72c5bcdb1322cfde852c15192b8bd4 \ + --hash=sha256:8f8909cdb9f1b237786c09a810e24ee5e15ef17019f7cecb207ce205b9b5fcce \ + --hash=sha256:914f66f3b6fc7b915d46c1cc424bc2441841083de01b90f9e81109c9759e43ab \ + --hash=sha256:92a3d214d5e53cb1db8b015f30d544bc9d3f7179a05feb8f16df713cecc2620a \ + --hash=sha256:948a9bd0fb2c5120457b07e59c8d7210cbc8703243225dbd78f4dfc13c8d2d1f \ + --hash=sha256:9c900108df470060174108012de06d45f514aa4ec21a191e7ab42988ff42a86c \ + --hash=sha256:9f2939cd4a2a52ca32bc0b359015718472d7f6de870760342e7ba295be9ebaf9 \ + --hash=sha256:a4192b45dff127c7d69b3bdfb4d3e47b64179a0b9900b6351859f3001397dabf \ + --hash=sha256:a8fc931382e56627ec4acb01e09ce66e5c03c384ca52606111cee50d931a342d \ + --hash=sha256:ad47b095f0bdc5585bced35bd088cbfe4177236c7df9984b3cc46b391cc60627 \ + --hash=sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d \ + --hash=sha256:ba1739fb38441a27a676f4de4123d3e858e494fac05868b7a281c0a383c098f4 \ + --hash=sha256:baa7ef4e0886a6f482e00d1d5bcd37c201b383f1d314643dfb0367169f94f04c \ + --hash=sha256:bb90765dd91aed05b53cd7a87bd7f5c188fcd95960914bae0d32c5e7f899719d \ + --hash=sha256:bc7f729a72b16ee21795a943f85c6244971724819819a41ddbaeb691b2dd85ad \ + --hash=sha256:bdf62d25234290db1837875d4dceb2151e4ea7f9fff2ed41c0fde23ed542eb5b \ + --hash=sha256:c30970bdee1cad6a8da2044febd824ef6dc4cc0b19e39af3085c763fdec7de33 \ + --hash=sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371 \ + --hash=sha256:d751300b94e35b6016d4b1e7d0e7bbc3b5e1751e2405ef908316c2a9024008a1 \ + --hash=sha256:da427d311782324a376cacb47c1a4adc43f99fd9d996ffc1b3e8529c4074d393 \ + --hash=sha256:daba396199399ccabafbfc509037ac635a6bc18510ad1add8fd16d4739cdd106 \ + --hash=sha256:e185ec6060e301a7e5f8461c86fb3640a7beb1a0f0208ffde7a65ec4074931df \ + --hash=sha256:e4a557d97f12813dc5e18dad9fa765ae44ddd56a672bb5de4825527c847d6379 \ + --hash=sha256:e5ed16d95fd142e9c72b6c10b06514ad30e846a0d0917ab406186541fe68b451 \ + --hash=sha256:e711fc1acc7468463bc084d1b68561e40d1eaa135d8c509a65dd534403d83d7b \ + --hash=sha256:f28b29dc158ca5d6ac396c8e0a2ef45c4e97bb7e65522bfc04c989e6fe814575 \ + --hash=sha256:f335579a1b485c834849e9075191c9898e0731af45705c2ebf70e0cd5d58beed \ + --hash=sha256:fce6fee67c318fdfb7f285c29a82d84782ae2579c0e1b385b7f36c6e8074fffb \ + --hash=sha256:fd136bb85f4568fffca995bd3c8d52080b1e5b225dbf1c2b17b66b4c5fa02838 +yarl==1.20.1 ; python_version >= "3.11" and python_version < "4.0" \ + --hash=sha256:03aa1e041727cb438ca762628109ef1333498b122e4c76dd858d186a37cec845 \ + --hash=sha256:041eaa14f73ff5a8986b4388ac6bb43a77f2ea09bf1913df7a35d4646db69e53 \ + --hash=sha256:0b5ff0fbb7c9f1b1b5ab53330acbfc5247893069e7716840c8e7d5bb7355038a \ + --hash=sha256:0c869f2651cc77465f6cd01d938d91a11d9ea5d798738c1dc077f3de0b5e5fed \ + --hash=sha256:1112ae8154186dfe2de4732197f59c05a83dc814849a5ced892b708033f40dc2 \ + --hash=sha256:11a62c839c3a8eac2410e951301309426f368388ff2f33799052787035793b02 \ + --hash=sha256:12e768f966538e81e6e7550f9086a6236b16e26cd964cf4df35349970f3551cf \ + --hash=sha256:14a85f3bd2d7bb255be7183e5d7d6e70add151a98edf56a770d6140f5d5f4010 \ + --hash=sha256:14f326acd845c2b2e2eb38fb1346c94f7f3b01a4f5c788f8144f9b630bfff9a3 \ + --hash=sha256:1c48912653e63aef91ff988c5432832692ac5a1d8f0fb8a33091520b5bbe19ef \ + --hash=sha256:1c92f4390e407513f619d49319023664643d3339bd5e5a56a3bebe01bc67ec04 \ + --hash=sha256:1f8a891e4a22a89f5dde7862994485e19db246b70bb288d3ce73a34422e55b23 \ + --hash=sha256:21242b4288a6d56f04ea193adde174b7e347ac46ce6bc84989ff7c1b1ecea84e \ + --hash=sha256:255b468adf57b4a7b65d8aad5b5138dce6a0752c139965711bdcb81bc370e1b6 \ + --hash=sha256:26ef53a9e726e61e9cd1cda6b478f17e350fb5800b4bd1cd9fe81c4d91cfeb2e \ + --hash=sha256:2c26b0c49220d5799f7b22c6838409ee9bc58ee5c95361a4d7831f03cc225b5a \ + --hash=sha256:2c7b34d804b8cf9b214f05015c4fee2ebe7ed05cf581e7192c06555c71f4446a \ + --hash=sha256:2c89b5c792685dd9cd3fa9761c1b9f46fc240c2a3265483acc1565769996a3f8 \ + --hash=sha256:30c41ad5d717b3961b2dd785593b67d386b73feca30522048d37298fee981805 \ + --hash=sha256:33f29ecfe0330c570d997bcf1afd304377f2e48f61447f37e846a6058a4d33b2 \ + --hash=sha256:344d1103e9c1523f32a5ed704d576172d2cabed3122ea90b1d4e11fe17c66458 \ + --hash=sha256:377fae2fef158e8fd9d60b4c8751387b8d1fb121d3d0b8e9b0be07d1b41e83dc \ + --hash=sha256:3cf34efa60eb81dd2645a2e13e00bb98b76c35ab5061a3989c7a70f78c85006d \ + --hash=sha256:41493b9b7c312ac448b7f0a42a089dffe1d6e6e981a2d76205801a023ed26a2b \ + --hash=sha256:41ebd28167bc6af8abb97fec1a399f412eec5fd61a3ccbe2305a18b84fb4ca73 \ + --hash=sha256:468f6e40285de5a5b3c44981ca3a319a4b208ccc07d526b20b12aeedcfa654b7 \ + --hash=sha256:46b5e0ccf1943a9a6e766b2c2b8c732c55b34e28be57d8daa2b3c1d1d4009309 \ + --hash=sha256:47ee6188fea634bdfaeb2cc420f5b3b17332e6225ce88149a17c413c77ff269e \ + --hash=sha256:48ea7d7f9be0487339828a4de0360d7ce0efc06524a48e1810f945c45b813698 \ + --hash=sha256:495b4ef2fea40596bfc0affe3837411d6aa3371abcf31aac0ccc4bdd64d4ef5c \ + --hash=sha256:49bdd1b8e00ce57e68ba51916e4bb04461746e794e7c4d4bbc42ba2f18297691 \ + --hash=sha256:4a979218c1fdb4246a05efc2cc23859d47c89af463a90b99b7c56094daf25a16 \ + --hash=sha256:4c3ae28f3ae1563c50f3d37f064ddb1511ecc1d5584e88c6b7c63cf7702a6d5f \ + --hash=sha256:541d050a355bbbc27e55d906bc91cb6fe42f96c01413dd0f4ed5a5240513874f \ + --hash=sha256:564ab3d517e3d01c408c67f2e5247aad4019dcf1969982aba3974b4093279004 \ + --hash=sha256:56dac5f452ed25eef0f6e3c6a066c6ab68971d96a9fb441791cad0efba6140d3 \ + --hash=sha256:57edc88517d7fc62b174fcfb2e939fbc486a68315d648d7e74d07fac42cec240 \ + --hash=sha256:59174e7332f5d153d8f7452a102b103e2e74035ad085f404df2e40e663a22b28 \ + --hash=sha256:595c07bc79af2494365cc96ddeb772f76272364ef7c80fb892ef9d0649586513 \ + --hash=sha256:597f40615b8d25812f14562699e287f0dcc035d25eb74da72cae043bb884d773 \ + --hash=sha256:59febc3969b0781682b469d4aca1a5cab7505a4f7b85acf6db01fa500fa3f6ba \ + --hash=sha256:6032e6da6abd41e4acda34d75a816012717000fa6839f37124a47fcefc49bec4 \ + --hash=sha256:62915e6688eb4d180d93840cda4110995ad50c459bf931b8b3775b37c264af1e \ + --hash=sha256:642980ef5e0fa1de5fa96d905c7e00cb2c47cb468bfcac5a18c58e27dbf8d8d1 \ + --hash=sha256:66252d780b45189975abfed839616e8fd2dbacbdc262105ad7742c6ae58f3e31 \ + --hash=sha256:67e708dfb8e78d8a19169818eeb5c7a80717562de9051bf2413aca8e3696bf16 \ + --hash=sha256:680e19c7ce3710ac4cd964e90dad99bf9b5029372ba0c7cbfcd55e54d90ea819 \ + --hash=sha256:69e9b141de5511021942a6866990aea6d111c9042235de90e08f94cf972ca03d \ + --hash=sha256:69ff8439d8ba832d6bed88af2c2b3445977eba9a4588b787b32945871c2444e3 \ + --hash=sha256:6c4fbf6b02d70e512d7ade4b1f998f237137f1417ab07ec06358ea04f69134f8 \ + --hash=sha256:6f3eff4cc3f03d650d8755c6eefc844edde99d641d0dcf4da3ab27141a5f8ddf \ + --hash=sha256:749d73611db8d26a6281086f859ea7ec08f9c4c56cec864e52028c8b328db723 \ + --hash=sha256:76d12524d05841276b0e22573f28d5fbcb67589836772ae9244d90dd7d66aa13 \ + --hash=sha256:793fd0580cb9664548c6b83c63b43c477212c0260891ddf86809e1c06c8b08f1 \ + --hash=sha256:7a8900a42fcdaad568de58887c7b2f602962356908eedb7628eaf6021a6e435b \ + --hash=sha256:7bdd2f80f4a7df852ab9ab49484a4dee8030023aa536df41f2d922fd57bf023f \ + --hash=sha256:812303eb4aa98e302886ccda58d6b099e3576b1b9276161469c25803a8db277d \ + --hash=sha256:835ab2cfc74d5eb4a6a528c57f05688099da41cf4957cf08cad38647e4a83b30 \ + --hash=sha256:83b8eb083fe4683c6115795d9fc1cfaf2cbbefb19b3a1cb68f6527460f483a77 \ + --hash=sha256:8570d998db4ddbfb9a590b185a0a33dbf8aafb831d07a5257b4ec9948df9cb0a \ + --hash=sha256:8601bc010d1d7780592f3fc1bdc6c72e2b6466ea34569778422943e1a1f3c389 \ + --hash=sha256:86971e2795584fe8c002356d3b97ef6c61862720eeff03db2a7c86b678d85b3e \ + --hash=sha256:88cab98aa4e13e1ade8c141daeedd300a4603b7132819c484841bb7af3edce9e \ + --hash=sha256:8e0fe9364ad0fddab2688ce72cb7a8e61ea42eff3c7caeeb83874a5d479c896c \ + --hash=sha256:8f64fbf81878ba914562c672024089e3401974a39767747691c65080a67b18c1 \ + --hash=sha256:8f969afbb0a9b63c18d0feecf0db09d164b7a44a053e78a7d05f5df163e43833 \ + --hash=sha256:909313577e9619dcff8c31a0ea2aa0a2a828341d92673015456b3ae492e7317b \ + --hash=sha256:90bbd29c4fe234233f7fa2b9b121fb63c321830e5d05b45153a2ca68f7d310ee \ + --hash=sha256:9427925776096e664c39e131447aa20ec738bdd77c049c48ea5200db2237e000 \ + --hash=sha256:97c75596019baae7c71ccf1d8cc4738bc08134060d0adfcbe5642f778d1dca38 \ + --hash=sha256:98c4a7d166635147924aa0bf9bfe8d8abad6fffa6102de9c99ea04a1376f91e8 \ + --hash=sha256:a97d67108e79cfe22e2b430d80d7571ae57d19f17cda8bb967057ca8a7bf5bfd \ + --hash=sha256:aef6c4d69554d44b7f9d923245f8ad9a707d971e6209d51279196d8e8fe1ae16 \ + --hash=sha256:b121ff6a7cbd4abc28985b6028235491941b9fe8fe226e6fdc539c977ea1739d \ + --hash=sha256:b29a2c385a5f5b9c7d9347e5812b6f7ab267193c62d282a540b4fc528c8a9d2a \ + --hash=sha256:b5f307337819cdfdbb40193cad84978a029f847b0a357fbe49f712063cfc4f06 \ + --hash=sha256:b982fa7f74c80d5c0c7b5b38f908971e513380a10fecea528091405f519b9ebb \ + --hash=sha256:bad6d131fda8ef508b36be3ece16d0902e80b88ea7200f030a0f6c11d9e508d4 \ + --hash=sha256:bdcc4cd244e58593a4379fe60fdee5ac0331f8eb70320a24d591a3be197b94a9 \ + --hash=sha256:bea21cdae6c7eb02ba02a475f37463abfe0a01f5d7200121b03e605d6a0439f8 \ + --hash=sha256:c03bfebc4ae8d862f853a9757199677ab74ec25424d0ebd68a0027e9c639a390 \ + --hash=sha256:c5e9642f27036283550f5f57dc6156c51084b458570b9d0d96100c8bebb186a8 \ + --hash=sha256:c7d7f497126d65e2cad8dc5f97d34c27b19199b6414a40cb36b52f41b79014be \ + --hash=sha256:c7ddf7a09f38667aea38801da8b8d6bfe81df767d9dfc8c88eb45827b195cd1c \ + --hash=sha256:d017a4997ee50c91fd5466cef416231bb82177b93b029906cefc542ce14c35ac \ + --hash=sha256:d0f6500f69e8402d513e5eedb77a4e1818691e8f45e6b687147963514d84b44b \ + --hash=sha256:d1a4fbb50e14396ba3d375f68bfe02215d8e7bc3ec49da8341fe3157f59d2ff5 \ + --hash=sha256:d25ddcf954df1754ab0f86bb696af765c5bfaba39b74095f27eececa049ef9a4 \ + --hash=sha256:d2b6fb3622b7e5bf7a6e5b679a69326b4279e805ed1699d749739a61d242449e \ + --hash=sha256:daadbdc1f2a9033a2399c42646fbd46da7992e868a5fe9513860122d7fe7a73f \ + --hash=sha256:dab096ce479d5894d62c26ff4f699ec9072269d514b4edd630a393223f45a0ee \ + --hash=sha256:daea0d313868da1cf2fac6b2d3a25c6e3a9e879483244be38c8e6a41f1d876a5 \ + --hash=sha256:dd803820d44c8853a109a34e3660e5a61beae12970da479cf44aa2954019bf70 \ + --hash=sha256:df018d92fe22aaebb679a7f89fe0c0f368ec497e3dda6cb81a567610f04501f1 \ + --hash=sha256:df47c55f7d74127d1b11251fe6397d84afdde0d53b90bedb46a23c0e534f9d24 \ + --hash=sha256:e3968ec7d92a0c0f9ac34d5ecfd03869ec0cab0697c91a45db3fbbd95fe1b653 \ + --hash=sha256:e42ba79e2efb6845ebab49c7bf20306c4edf74a0b20fc6b2ccdd1a219d12fad3 \ + --hash=sha256:eae7bfe2069f9c1c5b05fc7fe5d612e5bbc089a39309904ee8b829e322dcad00 \ + --hash=sha256:f5a5928ff5eb13408c62a968ac90d43f8322fd56d87008b8f9dabf3c0f6ee983 \ + --hash=sha256:f60233b98423aab21d249a30eb27c389c14929f47be8430efa7dbd91493a729d \ + --hash=sha256:f60e4ad5db23f0b96e49c018596707c3ae89f5d0bd97f0ad3684bcbad899f1e7 \ + --hash=sha256:f6342d643bf9a1de97e512e45e4b9560a043347e779a173250824f8b254bd5ce \ + --hash=sha256:fe41919b9d899661c5c28a8b4b0acf704510b88f27f0934ac7a7bebdd8938d5e \ + --hash=sha256:ff70f32aa316393eaf8222d518ce9118148eddb8a53073c2403863b41033eed5 +clamd==1.0.2 diff --git a/run.py b/run.py new file mode 100644 index 0000000..9b82e7b --- /dev/null +++ b/run.py @@ -0,0 +1,6 @@ +import uvicorn + +from src.config import HOST, PORT + +if __name__ == "__main__": + uvicorn.run("src.main:app", host=HOST, port=PORT, reload=True,) diff --git a/run_worker.py b/run_worker.py new file mode 100644 index 0000000..5e88d6d --- /dev/null +++ b/run_worker.py @@ -0,0 +1,40 @@ +import asyncio +import os +from temporalio.client import Client +from temporalio.worker import Worker + +from temporal.activity import calculate_plant_eaf_activity, execute_simulation_activity, update_contribution_bulk_mappings_activity, update_equipment_for_simulation_activity, call_callback_ahm, acquire_lock, release_lock,execute_update_node +from temporal.workflow import SimulationWorkflow + +TEMPORAL_URL = os.environ.get("TEMPORAL_URL", "http://192.168.1.86:7233") + +async def main(): + client = await Client.connect(TEMPORAL_URL) + + try: + worker = Worker( + client, + task_queue="simulation-task-queue", + workflows=[SimulationWorkflow], + activities=[ + update_equipment_for_simulation_activity, + execute_simulation_activity, + calculate_plant_eaf_activity, + update_contribution_bulk_mappings_activity, + call_callback_ahm, + acquire_lock, + release_lock, + execute_update_node + ], + max_concurrent_workflow_tasks=50, + max_concurrent_activities=12 + ) + await worker.run() + except Exception as e: + print(f"Worker failed: {e}") + import traceback + traceback.print_exc() + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/aeros_contribution/result.json b/src/aeros_contribution/result.json new file mode 100644 index 0000000..1d90f88 --- /dev/null +++ b/src/aeros_contribution/result.json @@ -0,0 +1,2704 @@ +{ + "series": [ + { + "series": [ + { + "series": [ + { + "k_of_n": { + "k": 2, + "components": [ + "3DCS-CAB001A", + "3DCS-CAB001B" + ] + } + }, + { + "k_of_n": { + "k": 2, + "components": [ + "3DCS-CAB002A", + "3DCS-CAB002B" + ] + } + }, + { + "k_of_n": { + "k": 2, + "components": [ + "3DCS-CAB003A", + "3DCS-CAB003B" + ] + } + }, + { + "k_of_n": { + "k": 2, + "components": [ + "3DCS-CAB004A", + "3DCS-CAB004B" + ] + } + }, + { + "k_of_n": { + "k": 2, + "components": [ + "3DCS-CAB005A", + "3DCS-CAB005B", + "3DCS-CAB005C" + ] + } + }, + { + "k_of_n": { + "k": 2, + "components": [ + "3DCS-CAB006A", + "3DCS-CAB006B" + ] + } + }, + "3DCS-CAB007", + "3DCS-CAB008", + { + "k_of_n": { + "k": 2, + "components": [ + "3DCS-CAB009A", + "3DCS-CAB009B" + ] + } + }, + { + "k_of_n": { + "k": 2, + "components": [ + "3DCS-CAB010A", + "3DCS-CAB010B" + ] + } + }, + { + "k_of_n": { + "k": 2, + "components": [ + "3DCS-CAB011A", + "3DCS-CAB011B" + ] + } + }, + "3DCS-CAB012", + { + "k_of_n": { + "k": 1, + "components": [ + "3DCS-CAB013A", + "3DCS-CAB013B" + ] + } + }, + { + "parallel": [ + "3DCS-CAB014A", + "3DCS-CAB014B" + ] + }, + "3DCS-CAB015", + "3DCS-CO001", + { + "k_of_n": { + "k": 2, + "components": [ + "3DCS-CO002A", + "3DCS-CO002B" + ] + } + }, + { + "parallel": [ + "3DCS-CO003A", + "3DCS-CO003B", + "3DCS-CO003C", + "3DCS-CO003D" + ] + }, + "3DCS-CO004", + { + "k_of_n": { + "k": 3, + "components": [ + "3DCS-CO005A", + "3DCS-CO005B", + "3DCS-CO005C" + ] + } + }, + { + "parallel": [ + "3DCS-CO006A", + "3DCS-CO006B", + "3DCS-CO006C" + ] + }, + "3DCS-CO007", + "3DCS-CO008" + ] + }, + { + "series": [ + { + "parallel": [ + { + "series": [ + "00ACR-M001A", + "00ACR-C001A" + ] + }, + { + "series": [ + "00ACR-M001B", + "00ACR-C001B" + ] + }, + { + "series": [ + "00ACR-M001C", + "00ACR-C001C" + ] + }, + { + "series": [ + "00ACR-M001D", + "00ACR-C001D" + ] + } + ] + }, + { + "parallel": [ + "00IA-A001A", + "00IA-A001B" + ] + }, + "3IA-T005" + ] + }, + { + "series": [ + "00SCR-Z001", + "00SCR-Z015" + ] + }, + { + "series": [ + "3FW-H040", + { + "parallel": [ + { + "series": [ + "3LOT-T010A", + { + "series": [ + "3LOT-H010A", + { + "parallel": [ + "3LOT-T090A", + "3LOT-T100A" + ] + }, + { + "parallel": [ + { + "series": [ + "3LOT-M010A", + "3LOT-P010A" + ] + }, + { + "series": [ + "3LOT-M020A", + "3LOT-P020A" + ] + }, + { + "series": [ + "3LOT-M050A", + "3LOT-P050A" + ] + } + ] + }, + "3LOT-M080A", + "3LOT-P080A", + { + "parallel": [ + "3LOT-S010A", + "3LOT-S020A" + ] + }, + "3LOT-PF080A", + "3LOT-M120A", + "3LOT-F120A", + "3FW-P020A", + "3FW-H011A", + "3FW-H012A", + "3FW-AU030A", + "3FW-P010A", + "3BFT-ST010A", + "3BFT-AU040A" + ] + } + ] + }, + { + "series": [ + "3LOT-T010B", + { + "series": [ + "3LOT-H010B", + { + "parallel": [ + "3LOT-T090B", + "3LOT-T100B" + ] + }, + { + "parallel": [ + { + "series": [ + "3LOT-M010B", + "3LOT-P010B" + ] + }, + { + "series": [ + "3LOT-M020B", + "3LOT-P020B" + ] + }, + { + "series": [ + "3LOT-M050B", + "3LOT-P050B" + ] + } + ] + }, + "3LOT-M080B", + "3LOT-P080B", + { + "parallel": [ + "3LOT-S010B", + "3LOT-S020B" + ] + }, + "3LOT-PF080B", + "3LOT-M120B", + "3LOT-F120B", + "3FW-P020B", + "3FW-H011B", + "3FW-H012B", + "3FW-AU030B", + "3FW-P010B", + "3BFT-ST010B", + "3BFT-AU040B" + ] + } + ] + }, + { + "series": [ + "3LOM-M330", + "3LOM-P330", + "3LOM-H310", + "3LOM-P310", + "3LOM-H370", + "3LOM-P370", + "3FW-P310", + "3FW-M321", + "3FW-M320", + "3FW-AU330", + "3FW-H301", + "3FW-H302", + "3FW-P300" + ] + } + ] + }, + "3FW-H070", + "3FW-H060", + "3FW-H050" + ] + }, + { + "series": [ + { + "series": [ + "3BOL-FD501", + { + "parallel": [ + { + "series": [ + { + "series": [ + "3DP-FDR711A", + "3DP-M712A", + "3DP-M711A" + ] + }, + { + "series": [ + "3DP-M741A", + "3DP-BM741A", + "3DP-CVT701A", + "3DP-CVT711A", + "3DP-M761A", + "3DP-P761A", + "3DP-M781A", + "3DP-P781A", + "3DP-M731A", + "3DP-BM731A" + ] + }, + { + "series": [ + "3DP-B701A", + "3DP-B702A", + "3DP-B703A", + "3DP-B704A" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711B", + "3DP-M712B", + "3DP-M711B" + ] + }, + { + "series": [ + "3DP-M741B", + "3DP-BM741B", + "3DP-CVT701B", + "3DP-CVT711B", + "3DP-M761B", + "3DP-P761B", + "3DP-M781B", + "3DP-P781B", + "3DP-M731B", + "3DP-BM731B" + ] + }, + { + "series": [ + "3DP-B701B", + "3DP-B702B", + "3DP-B703B", + "3DP-B704B" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711C", + "3DP-M712C", + "3DP-M711C" + ] + }, + { + "series": [ + "3DP-M741C", + "3DP-BM741C", + "3DP-CVT701C", + "3DP-CVT711C", + "3DP-M761C", + "3DP-P761C", + "3DP-M781C", + "3DP-P781C", + "3DP-M731C", + "3DP-BM731C" + ] + }, + { + "series": [ + "3DP-B701C", + "3DP-B702C", + "3DP-B703C", + "3DP-B704C" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711D", + "3DP-M712D", + "3DP-M711D" + ] + }, + { + "series": [ + "3DP-M741D", + "3DP-BM741D", + "3DP-CVT701D", + "3DP-CVT711D", + "3DP-M761D", + "3DP-P761D", + "3DP-M781D", + "3DP-P781D", + "3DP-M731D", + "3DP-BM731D" + ] + }, + { + "series": [ + "3DP-B701D", + "3DP-B702D", + "3DP-B703D", + "3DP-B704D" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711E", + "3DP-M712E", + "3DP-M711E" + ] + }, + { + "series": [ + "3DP-M741E", + "3DP-BM741E", + "3DP-CVT701E", + "3DP-CVT711E", + "3DP-M761E", + "3DP-P761E", + "3DP-M781E", + "3DP-P781E", + "3DP-M731E", + "3DP-BM731E" + ] + }, + { + "series": [ + "3DP-B701E", + "3DP-B702E", + "3DP-B703E", + "3DP-B704E" + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3DP-FDR711F", + "3DP-M712F", + "3DP-M711F" + ] + }, + { + "series": [ + "3DP-M741F", + "3DP-BM741F", + "3DP-CVT701F", + "3DP-CVT711F", + "3DP-M761F", + "3DP-P761F", + "3DP-M781F", + "3DP-P781F", + "3DP-M731F", + "3DP-BM731F" + ] + }, + { + "series": [ + "3DP-B701F", + "3DP-B702F", + "3DP-B703F", + "3DP-B704F" + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + "3FO-FCV501", + { + "parallel": [ + { + "series": [ + "3DM-B701A", + "3DM-B702A", + "3DM-B703A", + "3DM-B704A" + ] + }, + { + "series": [ + "3DM-B701C", + "3DM-B702C", + "3DM-B703C", + "3DM-B704C" + ] + }, + { + "series": [ + "3DM-B701E", + "3DM-B702E", + "3DM-B703E", + "3DM-B704E" + ] + } + ] + } + ] + }, + { + "series": [ + "3BDW-H601", + "3BDW-T601", + "3BDW-H611", + "3BDW-H621", + "3BDW-H631", + "3BDW-H641", + { + "parallel": [ + { + "series": [ + "3BDW-M521A", + "3BDW-P521A", + "3BDW-H521A" + ] + }, + { + "series": [ + "3BDW-M521B", + "3BDW-P521B", + "3BDW-H521B" + ] + } + ] + } + ] + }, + "3BOL-H501", + { + "series": [ + "3MS-HV011", + "3MS-HV012", + "3MS-HV013", + "3MS-HV014", + { + "parallel": [ + "3MS-HV010A", + "3MS-HV010B" + ] + }, + { + "parallel": [ + "3MS-W001A", + "3MS-W001B" + ] + }, + "3MS-W004" + ] + }, + { + "series": [ + "3BSS-H611", + { + "parallel": [ + "3ATT-N501A", + "3ATT-N501B" + ] + }, + "3BSS-H621", + { + "parallel": [ + "3ATT-N502A", + "3ATT-N502B" + ] + }, + "3BSS-H631" + ] + }, + "3CRH-W002", + { + "series": [ + { + "parallel": [ + "3ATT-N503A", + "3ATT-N503B" + ] + }, + "3BRS-H611", + "3BRS-H621", + "3BRS-H631" + ] + }, + { + "series": [ + { + "parallel": [ + "3HRH-HV020A", + "3HRH-HV020B" + ] + }, + "3ATT-N561", + "3ATT-N571", + "3ATT-N581" + ] + }, + { + "series": [ + "3AI-SFV501", + { + "parallel": [ + { + "parallel": [ + { + "series": [ + "3AI-M501H", + "3AI-Y501H", + "3AI-M502H", + "3AI-Y502H", + "3AI-M503H", + "3AI-Y503H", + "3AI-M504H", + "3AI-Y504H", + "3AI-M505H", + "3AI-Y505H", + "3AI-M506H", + "3AI-Y506H" + ] + }, + { + "series": [ + "3AI-M501I", + "3AI-Y501I", + "3AI-M502I", + "3AI-Y502I", + "3AI-M503I", + "3AI-Y503I", + "3AI-M504I", + "3AI-Y504I", + "3AI-M505I", + "3AI-Y505I", + "3AI-M506I", + "3AI-Y506I" + ] + } + ] + }, + { + "parallel": [ + { + "parallel": [ + { + "series": [ + "3AI-M501L", + "3AI-Y501L", + "3AI-M503L", + "3AI-Y503L", + "3AI-M504L", + "3AI-Y504L", + "3AI-M505L", + "3AI-Y505L" + ] + }, + { + "series": [ + "3AI-M502L", + "3AI-Y502L", + "3AI-M506L", + "3AI-Y506L", + "3AI-M507L", + "3AI-Y507L", + "3AI-M508L", + "3AI-Y508L", + "3AI-M509L", + "3AI-Y509L", + "3AI-M510L", + "3AI-Y510L" + ] + }, + { + "series": [ + "3AI-M511L", + "3AI-Y511L", + "3AI-M512L", + "3AI-Y512L", + "3AI-M513L", + "3AI-Y513L", + "3AI-M514L", + "3AI-Y514L", + "3AI-M515L", + "3AI-Y515L", + "3AI-M516L", + "3AI-Y516L" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3AI-M501R", + "3AI-Y501R", + "3AI-M503R", + "3AI-Y503R", + "3AI-M504R", + "3AI-Y504R", + "3AI-M505R", + "3AI-Y505R" + ] + }, + { + "series": [ + "3AI-M502R", + "3AI-Y502R", + "3AI-M506R", + "3AI-Y506R", + "3AI-M507R", + "3AI-Y507R", + "3AI-M508R", + "3AI-Y508R", + "3AI-M509R", + "3AI-Y509R", + "3AI-M510R", + "3AI-Y510R" + ] + }, + { + "series": [ + "3AI-M511R", + "3AI-Y511R", + "3AI-M512R", + "3AI-Y512R", + "3AI-M513R", + "3AI-Y513R", + "3AI-M514R", + "3AI-Y514R", + "3AI-M515R", + "3AI-Y515R", + "3AI-M516R", + "3AI-Y516R" + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "parallel": [ + { + "series": [ + "3AI-M501A", + "3AI-Y501A", + "3AI-M502A", + "3AI-Y502A", + "3AI-M503A", + "3AI-Y503A", + "3AI-M504A", + "3AI-Y504A", + "3AI-M505A", + "3AI-Y505A" + ] + }, + { + "series": [ + "3AI-M501B", + "3AI-Y501B", + "3AI-M502B", + "3AI-Y502B", + "3AI-M503B", + "3AI-Y503B", + "3AI-M504B", + "3AI-Y504B" + ] + }, + { + "series": [ + "3AI-M501C", + "3AI-Y501C", + "3AI-M502C", + "3AI-Y502C", + "3AI-M503C", + "3AI-Y503C", + "3AI-M504C", + "3AI-Y504C", + "3AI-M505C", + "3AI-Y505C" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3AI-M506A", + "3AI-Y506A", + "3AI-M507A", + "3AI-Y507A", + "3AI-M508A", + "3AI-Y508A", + "3AI-M509A", + "3AI-Y509A" + ] + }, + { + "series": [ + "3AI-M505B", + "3AI-Y505B", + "3AI-M506B", + "3AI-Y506B", + "3AI-M507B", + "3AI-Y507B" + ] + }, + { + "series": [ + "3AI-M506C", + "3AI-Y506C", + "3AI-M507C", + "3AI-Y507C", + "3AI-M508C", + "3AI-Y508C", + "3AI-M509C", + "3AI-Y509C" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3AI-M515A", + "3AI-Y515A", + "3AI-M516A", + "3AI-Y516A", + "3AI-M517A", + "3AI-Y517A", + "3AI-M518A", + "3AI-Y518A" + ] + }, + { + "series": [ + "3AI-M512B", + "3AI-Y512B", + "3AI-M513B", + "3AI-Y513B", + "3AI-M514B", + "3AI-Y514B" + ] + }, + { + "series": [ + "3AI-M515C", + "3AI-Y515C", + "3AI-M516C", + "3AI-Y516C", + "3AI-M517C", + "3AI-Y517C", + "3AI-M518C", + "3AI-Y518C" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3AI-M510A", + "3AI-Y510A", + "3AI-M511A", + "3AI-Y511A", + "3AI-M512A", + "3AI-Y512A", + "3AI-M513A", + "3AI-Y513A", + "3AI-M514A", + "3AI-Y514A" + ] + }, + { + "series": [ + "3AI-M508B", + "3AI-Y508B", + "3AI-M509B", + "3AI-Y509B", + "3AI-M510B", + "3AI-Y510B", + "3AI-M511B", + "3AI-Y511B" + ] + }, + { + "series": [ + "3AI-M510C", + "3AI-Y510C", + "3AI-M511C", + "3AI-Y511C", + "3AI-M512C", + "3AI-Y512C", + "3AI-M513C", + "3AI-Y513C", + "3AI-M514C", + "3AI-Y514C" + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3AI-M551A", + "3AI-Y551A" + ] + }, + { + "series": [ + "3AI-M551B", + "3AI-Y551B" + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + { + "parallel": [ + { + "series": [ + "3LOS-M010A", + "3LOS-P010A" + ] + }, + { + "series": [ + "3LOS-M010B", + "3LOS-P010B" + ] + }, + { + "series": [ + "3LOS-M050", + "3LOS-P050" + ] + } + ] + }, + { + "parallel": [ + "3LOS-H010A", + "3LOS-H010B" + ] + }, + "3LOS-M080", + "3LOS-P080", + { + "parallel": [ + "3LOS-S010A", + "3LOS-S010B" + ] + }, + "3LOS-PF080", + { + "parallel": [ + { + "series": [ + "3LOS-M020A", + "3LOS-F020A" + ] + }, + { + "series": [ + "3LOS-M020B", + "3LOS-F020B" + ] + } + ] + }, + "3LOS-ME020", + "3LOS-M060", + "3LOS-P060" + ] + }, + { + "series": [ + "3EHS-Z010", + { + "parallel": [ + { + "series": [ + "3EHS-M010A", + "3EHS-P010A" + ] + }, + { + "series": [ + "3EHS-M010B", + "3EHS-P010B" + ] + } + ] + }, + { + "parallel": [ + "3EHS-T090A", + "3EHS-T090B" + ] + }, + { + "parallel": [ + { + "series": [ + "3EHS-M015A", + "3EHS-F015A", + "3EHS-H010A" + ] + }, + { + "series": [ + "3EHS-M015B", + "3EHS-F015B", + "3EHS-H010B" + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3MT-ST010", + "3MT-ST020" + ] + }, + { + "series": [ + "3HPB-PCV010", + { + "series": [ + "3EHB-Z010", + "3EHB-P020", + "3EHB-T110", + { + "parallel": [ + "3EHB-P010A", + "3EHB-P010B" + ] + } + ] + } + ] + } + ] + }, + "3MT-ST030A", + "3MT-ST030B", + "3MT-AU040", + "3AS-T010", + "3AS-BS010", + { + "series": [ + "3SCW-PF001", + { + "parallel": [ + { + "series": [ + "3SCW-H023A", + "3SCW-M001A", + "3SCW-P001A" + ] + }, + { + "series": [ + "3SCW-H023B", + "3SCW-M001B", + "3SCW-P001B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "parallel": [ + { + "series": [ + "3CW-M020A", + "3CW-P020A" + ] + }, + { + "series": [ + "3CW-M020B", + "3CW-P020B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3CW-M010A", + "3CW-P010A" + ] + }, + { + "series": [ + "3CW-M010B", + "3CW-P010B" + ] + } + ] + }, + { + "parallel": [ + "3CW-P011A", + "3CW-P011B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3GSS-H010", + { + "parallel": [ + { + "series": [ + "3GSS-M011A", + "3GSS-F011A" + ] + }, + { + "series": [ + "3GSS-M011B", + "3GSS-F011B" + ] + } + ] + } + ] + }, + "3GEN-GM001", + { + "series": [ + "3SO-T116", + "3SO-T114", + "3SO-T113", + { + "parallel": [ + { + "series": [ + "3SO-M001", + "3SO-P001" + ] + }, + { + "series": [ + "3SO-M002", + "3SO-P002" + ] + } + ] + } + ] + }, + { + "series": [ + "3GEN-EXC008", + "3GEN-EXC009", + "3GEN-EXC004", + "3GEN-EXC005", + "3GEN-GM001", + "3GEN-Z012", + { + "parallel": [ + { + "series": [ + "3GEN-M101A", + "3GEN-M102A", + "3GEN-M103A" + ] + }, + { + "series": [ + "3GEN-M101B", + "3GEN-M102B", + "3GEN-M103B" + ] + } + ] + }, + { + "parallel": [ + "3GEN-M201A", + "3GEN-M202A", + "3GEN-M203A", + "3GEN-M204A", + "3GEN-M205A", + "3GEN-M206A" + ] + } + ] + }, + { + "series": [ + "3GMC-Z002", + "3GMC-Z001", + "3GMC-Z003", + { + "parallel": [ + { + "series": [ + "3GEN-M211A", + "3GEN-M211B", + "3GEN-M211C" + ] + }, + { + "series": [ + "3GEN-M212A", + "3GEN-M212B", + "3GEN-M212C" + ] + }, + { + "series": [ + "3GEN-M213A", + "3GEN-M213B", + "3GEN-M213C" + ] + }, + { + "series": [ + "3GEN-M214A", + "3GEN-M214B", + "3GEN-M214C" + ] + } + ] + } + ] + }, + { + "series": [ + { + "parallel": [ + "3TR-TF002A", + "3TR-TF002B" + ] + }, + { + "parallel": [ + "3TR-Z003A", + "3TR-Z003A" + ] + }, + "3TR-TF001", + "3TR-TF005", + { + "parallel": [ + "3TR-F301", + "3TR-F302", + "3TR-F303", + "3TR-F304", + "3TR-F305", + "3TR-F306", + "3TR-F307", + "3TR-F308", + "3TR-F309", + "3TR-F310", + "3TR-F311", + "3TR-F312", + "3TR-F313", + "3TR-F314" + ] + } + ] + } + ] + }, + { + "series": [ + "3CO-H001", + { + "parallel": [ + { + "series": [ + "3CO-M001A", + "3CO-P001A" + ] + }, + { + "series": [ + "3CO-M001B", + "3CO-P001B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3CAE-M010A", + "3CAE-P010A", + "3CAE-H010A" + ] + }, + { + "series": [ + "3CAE-M010B", + "3CAE-P010B", + "3CAE-H010B" + ] + } + ] + }, + "3CO-FCV001", + "3CO-H010", + "3CO-H020", + "3CO-H030" + ] + }, + { + "series": [ + "3CCCW-T010", + "3CCCW-M090", + "3CCCW-P090", + { + "parallel": [ + "3CCCW-M010A", + "3CCCW-M010B" + ] + }, + { + "parallel": [ + { + "series": [ + "3CCCW-P010A", + "3CCCW-H010A" + ] + }, + { + "series": [ + "3CCCW-P010B", + "3CCCW-H010B" + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + { + "series": [ + "3AF-FCV501A", + "3AF-M501A", + "3AF-F501A" + ] + }, + { + "series": [ + "3AL-PCV501A", + "3AL-M501A", + "3AL-F501A" + ] + }, + { + "series": [ + "3AH-AU501A", + "3AH-M531A", + "3AH-P531A", + "3AH-H531A", + "3AH-M502A", + "3AH-M501A", + "3AH-H501A" + ] + }, + { + "series": [ + { + "parallel": [ + { + "series": [ + "3ESP-CAB801", + "3ESP-CAB821", + "A1-FIELD 1", + "A1-FIELD 2", + "A1-FIELD 3", + "A1-FIELD 4" + ] + }, + { + "series": [ + "3ESP-CAB802", + "3ESP-CAB822", + "A2-FIELD 1", + "A2-FIELD 2", + "A2-FIELD 3", + "A2-FIELD 4" + ] + } + ] + }, + "3GG-AX801A" + ] + }, + { + "series": [ + "3GG-M810A", + "3GG-F801A", + { + "parallel": [ + "3GG-F802A", + "3GG-F802B" + ] + }, + "3GG-M801A", + { + "parallel": [ + "3GG-F803A", + "3GG-F803B" + ] + }, + { + "parallel": [ + "3GG-P801A", + "3GG-P801B" + ] + } + ] + }, + { + "series": [ + { + "parallel": [ + "3GG-F853A", + "3GG-F853B", + "3GG-F853C", + "3GG-F853D" + ] + }, + "3GG-M851", + "3GG-M851A", + "3GG-F851", + "3GG-H877", + "3GG-F865A", + "3GG-M870A", + "3GG-F870A", + { + "parallel": [ + { + "series": [ + "3GG-M875A", + "3GG-F875A" + ] + }, + { + "series": [ + "3GG-M875B", + "3GG-F875B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3GG-M877A", + "3GG-P877A" + ] + }, + { + "series": [ + "3GG-M877B", + "3GG-P877B" + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + "3AF-FCV501B", + "3AF-M501B", + "3AF-F501B" + ] + }, + { + "series": [ + "3AL-PCV501B", + "3AL-M501B", + "3AL-F501B" + ] + }, + { + "series": [ + "3AH-AU501B", + "3AH-M531B", + "3AH-P531B", + "3AH-H531B", + "3AH-M502B", + "3AH-M501B", + "3AH-H501B" + ] + }, + { + "series": [ + { + "parallel": [ + { + "series": [ + "3ESP-CAB803", + "3ESP-CAB823", + "B1-FIELD 1", + "B1-FIELD 2", + "B1-FIELD 3", + "B1-FIELD 4" + ] + }, + { + "series": [ + "3ESP-CAB804", + "3ESP-CAB824", + "B2-FIELD 1", + "B2-FIELD 2", + "B2-FIELD 3", + "B2-FIELD 4" + ] + } + ] + }, + "3GG-AX801B" + ] + }, + { + "series": [ + "3GG-M810B", + "3GG-F801B", + { + "parallel": [ + "3GG-F804A", + "3GG-F804B" + ] + }, + { + "parallel": [ + "3GG-F805A", + "3GG-F805B" + ] + }, + "3GG-M801B", + "3GG-T801B", + { + "parallel": [ + "3GG-P802A", + "3GG-P802B" + ] + } + ] + }, + { + "series": [ + { + "parallel": [ + "3GG-F854A", + "3GG-F854B", + "3GG-F854C", + "3GG-F854D" + ] + }, + "3GG-M852", + "3GG-M851B", + "3GG-F852", + "3GG-H878", + "3GG-F865B", + "3GG-M870B", + "3GG-F870B", + { + "parallel": [ + { + "series": [ + "3GG-M880A", + "3GG-F880A" + ] + }, + { + "series": [ + "3GG-M880B", + "3GG-F880B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3GG-M878A", + "3GG-P878A" + ] + }, + { + "series": [ + "3GG-M878B", + "3GG-P878B" + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "series": [ + "3BAD-PAN501", + "3BAD-M531", + "3BAD-AG531", + "3BAD-PN501", + { + "parallel": [ + { + "series": [ + "3BAD-H511A", + "3BAD-M511A", + "3BAD-P511A" + ] + }, + { + "series": [ + "3BAD-H511B", + "3BAD-M511B", + "3BAD-P511B" + ] + } + ] + }, + "3BAD-M501", + "3BAD-CV501", + "3BAD-T531", + "3BAD-T532", + { + "parallel": [ + { + "series": [ + "3BAD-M521A", + "3BAD-P521A" + ] + }, + { + "series": [ + "3BAD-M521B", + "3BAD-P521B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + { + "parallel": [ + "3APC-CB811", + "3APC-CB812", + "3APC-CB813", + "3APC-CB814" + ] + }, + { + "parallel": [ + "3APC-LV001A", + "3APC-LV001B" + ] + }, + { + "parallel": [ + "3APC-LV501A", + "3APC-LV501B" + ] + }, + { + "parallel": [ + "3APC-LV810A", + "3APC-LV810B" + ] + }, + { + "parallel": [ + "3APC-LV811P1", + "3APC-LV811P2", + "3APC-LV811P3", + "3APC-LV811P4", + "3APC-LV811P5", + "3APC-LV811P21" + ] + }, + "3APC-LV851", + "3APC-MCC002", + { + "parallel": [ + "3APC-MCC501A", + "3APC-MCC501B" + ] + }, + { + "parallel": [ + "3APC-MCC502A", + "3APC-MCC502B", + "3APC-MCC502C", + "3APC-MCC502D", + "3APC-MCC502E", + "3APC-MCC502F" + ] + }, + "3APC-MCC510", + "3APC-MCC851", + { + "parallel": [ + "3APC-PD501A", + "3APC-PD501B" + ] + }, + { + "parallel": [ + "3APC-PD901", + "3APC-PD902" + ] + }, + { + "parallel": [ + "3APC-PD921", + "3APC-PD922" + ] + }, + { + "parallel": [ + "3APC-TF001A", + "3APC-TF001B" + ] + }, + { + "parallel": [ + "3APC-TF501A", + "3APC-TF501B" + ] + }, + { + "parallel": [ + "3APC-TF502A", + "3APC-TF502B" + ] + }, + { + "parallel": [ + "3APC-TF810A", + "3APC-TF810B" + ] + }, + "3APC-TF811", + "3APC-TF851" + ] + }, + { + "series": [ + "3APE-CAB852", + { + "k_of_n": { + "k": 2, + "components": [ + "3APE-MV001A", + "3APE-MV001B" + ] + } + }, + { + "k_of_n": { + "k": 2, + "components": [ + "3APE-MV002A", + "3APE-MV002B" + ] + } + }, + { + "k_of_n": { + "k": 4, + "components": [ + "3APE-MV003A", + "3APE-MV003B", + "3APE-MV003C", + "3APE-MV003D" + ] + } + }, + { + "k_of_n": { + "k": 2, + "components": [ + "3APE-MV004A", + "3APE-MV004B" + ] + } + }, + "3APE-MV851", + "3APE-MV852", + { + "parallel": [ + "3APE-TF002A", + "3APE-TF002B" + ] + }, + "3APE-TF852", + { + "parallel": [ + "3APE-Z005A", + "3APE-Z005B" + ] + } + ] + }, + { + "series": [ + "3EG-E001", + "3EG-T003" + ] + } + ] + }, + { + "series": [ + { + "series": [ + { + "parallel": [ + { + "series": [ + "3ABS-M879A", + "3ABS-AG879A" + ] + }, + { + "series": [ + "3ABS-M879B", + "3ABS-AG879B" + ] + }, + { + "series": [ + "3ABS-M879C", + "3ABS-AG879C" + ] + }, + { + "series": [ + "3ABS-M879D", + "3ABS-AG879D" + ] + }, + { + "series": [ + "3ABS-M879E", + "3ABS-AG879E" + ] + } + ] + }, + "3ABS-T931", + "3ABS-M931", + "3ABS-AG931", + { + "parallel": [ + { + "series": [ + "3ABS-M932A", + "3ABS-P932A" + ] + }, + { + "series": [ + "3ABS-M932B", + "3ABS-P932B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3ABS-M888A", + "3ABS-P888A" + ] + }, + { + "series": [ + "3ABS-M888B", + "3ABS-P888B" + ] + }, + { + "series": [ + "3ABS-M888C", + "3ABS-P888C" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "3ABS-M910A", + "3ABS-P910A" + ] + }, + { + "series": [ + "3ABS-M910B", + "3ABS-P910B" + ] + } + ] + }, + "3ABS-ABT858" + ] + } + ] + } + ] + }, + { + "series": [ + { + "series": [ + { + "parallel": [ + { + "series": [ + "00CHA-SU801A", + "00CHA-CV801A", + "00CHA-MS801A", + "00CHA-BW802A", + "00CHA-CV802A", + "00CHA-CV803A", + "00CHA-SWT801" + ] + }, + { + "series": [ + "00CHA-SU801B", + "00CHA-CV801B", + "00CHA-MS801B", + "00CHA-BW802B", + "00CHA-CV802B", + "00CHA-CV803B", + "00CHA-SWT802" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00CHA-CV805A", + "00CHB-SKR805A" + ] + }, + { + "series": [ + "00CHA-CV804", + "00CHA-CV805B", + "00CHB-SKR805B" + ] + } + ] + }, + "COAL YARD" + ] + }, + { + "series": [ + "BOOSTER", + "FILTER", + "TRAFO", + "CELL", + "SUMP PUMP" + ] + }, + { + "series": [ + { + "parallel": [ + { + "series": [ + "00RO-M110A", + "00RO-P110A" + ] + }, + { + "series": [ + "00RO-M110B", + "00RO-P110B" + ] + }, + { + "series": [ + "00RO-M110C", + "00RO-P110C" + ] + }, + { + "series": [ + "00RO-M110D", + "00RO-P110D" + ] + } + ] + }, + "00RO-T120", + "FeCl3 DOSING", + "ANIONIC POLYMER DOSING", + "CLEAR WATER", + "CLARIFIER", + "00RO-T170", + { + "parallel": [ + { + "series": [ + "00RO-M195A", + "00RO-P195A" + ] + }, + { + "series": [ + "00RO-M195B", + "00RO-P195B" + ] + } + ] + }, + "00RO-T320", + "00RO-T130", + { + "parallel": [ + { + "series": [ + "00RO-M126A", + "00RO-P126A" + ] + }, + { + "series": [ + "00RO-M126B", + "00RO-P126B" + ] + }, + { + "series": [ + "00RO-M126C", + "00RO-P126C" + ] + }, + { + "series": [ + "00RO-M126D", + "00RO-P126D" + ] + } + ] + }, + "NaOCL DOSING", + { + "parallel": [ + { + "series": [ + "00RO-F161A", + "00RO-M152A", + "00RO-F152A" + ] + }, + { + "series": [ + "00RO-F161B", + "00RO-M152B", + "00RO-F152B" + ] + } + ] + }, + "00RO-T150", + { + "parallel": [ + { + "series": [ + "00RO-M150A", + "00RO-P150A" + ] + }, + { + "series": [ + "00RO-M150B", + "00RO-P150B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00RO-M160A", + "00RO-P160A" + ] + }, + { + "series": [ + "00RO-M160B", + "00RO-P160B" + ] + }, + { + "series": [ + "00RO-M160C", + "00RO-P160C" + ] + }, + { + "series": [ + "00RO-M160D", + "00RO-P160D" + ] + } + ] + }, + "H2SO4 DOSING", + "SBS DOSING", + "ANTI SCALANT DOSING", + { + "parallel": [ + { + "series": [ + "00RO-M170A", + "00RO-P170A", + "00RO-T160A", + "00RO-Z110A" + ] + }, + { + "series": [ + "00RO-M170B", + "00RO-P170B", + "00RO-T160B", + "00RO-Z110B" + ] + }, + { + "series": [ + "00RO-M170C", + "00RO-P170C", + "00RO-T160C", + "00RO-Z110C" + ] + }, + { + "series": [ + "00RO-M170D", + "00RO-P170D", + "00RO-T160D", + "00RO-Z110D" + ] + } + ] + }, + "NaOH DOSING", + "00RO-H181", + "00RO-AG181", + "00RO-M181", + { + "parallel": [ + { + "series": [ + "00RO-M180A", + "00RO-P180A" + ] + }, + { + "series": [ + "00RO-M180B", + "00RO-P180B" + ] + } + ] + }, + "header 3", + { + "parallel": [ + { + "series": [ + "00RO-M340A", + "00RO-P340A" + ] + }, + { + "series": [ + "00RO-M340B", + "00RO-P340B" + ] + } + ] + }, + "00RO-T162", + { + "parallel": [ + { + "series": [ + "00RO-M190A", + "00RO-P190A" + ] + }, + { + "series": [ + "00RO-M190B", + "00RO-P190B" + ] + } + ] + } + ] + }, + "WTP", + { + "series": [ + { + "series": [ + { + "series": [ + "00DS-T888", + "00DS-M888", + "00DS-AG888", + { + "parallel": [ + { + "series": [ + "00DS-M883A", + "00DS-P883A" + ] + }, + { + "series": [ + "00DS-M883B", + "00DS-P883B" + ] + } + ] + } + ] + }, + { + "series": [ + { + "parallel": [ + "00DS-CY851A", + "00DS-CY851B" + ] + }, + "00DS-T851", + "00DS-M851", + "00DS-AG851", + { + "parallel": [ + { + "series": [ + "00DS-M860A", + "00DS-P860A" + ] + }, + { + "series": [ + "00DS-M860B", + "00DS-P860B" + ] + } + ] + }, + "00DS-T852", + "00DS-CY865" + ] + }, + { + "parallel": [ + { + "series": [ + "00DS-T901", + "00DS-M900", + "00DS-M901", + "00DS-P901", + "00DS-T900", + { + "parallel": [ + { + "series": [ + "00DS-M902A", + "00DS-P902A" + ] + }, + { + "series": [ + "00DS-M902B", + "00DS-P902B" + ] + } + ] + } + ] + }, + { + "series": [ + "00DS-T936", + "00DS-M935", + "00DS-M936", + "00DS-P936", + "00DS-T935", + { + "parallel": [ + { + "series": [ + "00DS-M937A", + "00DS-P937A" + ] + }, + { + "series": [ + "00DS-M937B", + "00DS-P937B" + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00OA-M851A", + "00OA-F851A" + ] + }, + { + "series": [ + "00OA-M851B", + "00OA-F851B" + ] + }, + { + "series": [ + "00OA-M851C", + "00OA-F851C" + ] + } + ] + }, + { + "series": [ + "00LSH-SU801", + "00LSH-HO801", + "00LSH-BW801", + "00LSH-COG801", + "00LSH-M851", + "00LSH-VFD801", + "00LSH-VI851", + "00LSH-M853A", + "00LSH-CR853", + "00LSH-CV801", + "00LSH-M901", + "00LSH-F901", + "00LSH-DC901", + "00LSH-MS801", + "00LSH-M852", + "00LSH-CV852", + "00LSH-HO851" + ] + }, + { + "series": [ + "00RP-T985", + "00RP-M985", + "00RP-AG985", + { + "parallel": [ + { + "series": [ + "00RP-M986A", + "00RP-P986A" + ] + }, + { + "series": [ + "00RP-M986B", + "00RP-P986B" + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00RP-BM871", + { + "parallel": [ + "00RP-M871A", + "00RP-M871B" + ] + } + ] + }, + { + "series": [ + "00RP-BM911", + { + "parallel": [ + "00RP-M911A", + "00RP-M911B" + ] + } + ] + } + ] + }, + { + "parallel": [ + { + "series": [ + "00RP-CY871", + "00RP-DX897", + { + "parallel": [ + "00RP-F991A", + "00RP-F991B" + ] + }, + "00RP-T885", + "00RP-M885", + "00RP-AG885", + "00RP-P992", + { + "parallel": [ + { + "series": [ + "00RP-P991A", + "00RP-M891A", + "00RP-P891A" + ] + }, + { + "series": [ + "00RP-P991B", + "00RP-M891B", + "00RP-P891B" + ] + } + ] + } + ] + }, + { + "series": [ + "00RP-CY911", + "00RP-DX837", + { + "parallel": [ + "00RP-F995A", + "00RP-F995B" + ] + }, + "00RP-F995A", + "00RP-T925", + "00RP-M925", + "00RP-AG925", + "00RP-P995", + { + "parallel": [ + { + "series": [ + "00RP-P995A", + "00RP-M931A", + "00RP-P931A" + ] + }, + { + "series": [ + "00RP-P995B", + "00RP-M931B", + "00RP-P931B" + ] + } + ] + } + ] + } + ] + }, + "00RP-T970", + "00RP-M970", + "00RP-AG970", + { + "parallel": [ + { + "series": [ + "00RP-M972A", + "00RP-P972A" + ] + }, + { + "series": [ + "00RP-M972B", + "00RP-P972B" + ] + } + ] + }, + "00RP-T950", + "00RP-M950", + "00RP-AG950", + { + "parallel": [ + { + "series": [ + "00RP-M952A", + "00RP-P952A" + ] + }, + { + "series": [ + "00RP-M952B", + "00RP-P952B" + ] + } + ] + }, + { + "parallel": [ + "00RP-Z851A", + "00RP-Z851B", + "00RP-Z851C", + "00RP-Z851D" + ] + }, + { + "parallel": [ + { + "series": [ + "00RP-M856A", + "00RP-Z856A" + ] + }, + { + "series": [ + "00RP-M856B", + "00RP-Z856B" + ] + } + ] + }, + "00RP-DX979" + ] + } + ] + }, + { + "series": [ + "00SSB-EV001", + "00SSB-EV002", + "00SSB-EV003", + { + "parallel": [ + "00SSB-EV004", + "00SSB-EV005" + ] + }, + "00SSB-EV006", + "00SSB-EV007", + "00SSB-EV012", + "00SSB-LA008", + "00SSB-LA009", + "00SSB-TF010" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/aeros_contribution/router.py b/src/aeros_contribution/router.py new file mode 100644 index 0000000..19aa264 --- /dev/null +++ b/src/aeros_contribution/router.py @@ -0,0 +1,25 @@ + +from fastapi import APIRouter + +from src.aeros_contribution.service import update_contribution_bulk_mappings +from src.database.core import DbSession +from src.models import StandardResponse + + +router = APIRouter() +active_simulations = {} + + +@router.get("", response_model=StandardResponse[dict]) +async def get_all_simulation(db_session: DbSession): + """Get all simulation.""" + + simulation_id = "eb8a1214-3d8f-48a9-8fa3-877a69a1fe98" + + results = await update_contribution_bulk_mappings(db_session=db_session, simulation_id=simulation_id) + + return { + "data": results, + "status": "success", + "message": "Simulations result retrieved successfully", + } diff --git a/src/aeros_contribution/service.py b/src/aeros_contribution/service.py new file mode 100644 index 0000000..af49ded --- /dev/null +++ b/src/aeros_contribution/service.py @@ -0,0 +1,362 @@ +import json +import logging +from typing import Dict, Union, Tuple +from decimal import Decimal, getcontext +import math + +from src.aeros_simulation.service import get_simulation_with_calc_result + +# Set high precision for decimal calculations +getcontext().prec = 50 + +Structure = Union[str, Dict[str, list]] + +log = logging.getLogger(__name__) + +def prod(iterable): + """Compute product of all elements in iterable with high precision.""" + result = Decimal('1.0') + for x in iterable: + if isinstance(x, (int, float)): + x = Decimal(str(x)) + result *= x + return float(result) + + +def system_availability(structure: Structure, availabilities: Dict[str, float]) -> float: + """Recursively compute system availability with precise calculations.""" + if isinstance(structure, str): # base case - component + if structure not in availabilities: + raise ValueError(f"Component '{structure}' not found in availabilities") + return float(Decimal(str(availabilities[structure]))) + + if isinstance(structure, dict): + if "series" in structure: + components = structure["series"] + if not components: # Handle empty series + return 1.0 + + # Series: A_system = A1 * A2 * ... * An + product = Decimal('1.0') + for s in components: + availability = system_availability(s, availabilities) + product *= Decimal(str(availability)) + return float(product) + + elif "parallel" in structure: + components = structure["parallel"] + if not components: # Handle empty parallel + return 0.0 + + # Parallel: A_system = 1 - (1-A1) * (1-A2) * ... * (1-An) + product = Decimal('1.0') + for s in components: + availability = system_availability(s, availabilities) + unavailability = Decimal('1.0') - Decimal(str(availability)) + product *= unavailability + + result = Decimal('1.0') - product + return float(result) + + elif "k_of_n" in structure: + k = structure["k_of_n"]["k"] + components = structure["k_of_n"]["components"] + + if not components: + return 0.0 + + component_availabilities = [system_availability(s, availabilities) for s in components] + return k_of_n_availability(component_availabilities, k) + + raise ValueError(f"Invalid structure definition: {structure}") + +from itertools import combinations +from decimal import Decimal +from math import comb + +def k_of_n_availability(availabilities: list[float], k: int) -> float: + n = len(availabilities) + total = Decimal('0.0') + + # Iterate over all combinations of components that can be working + for j in range(k, n+1): + for subset in combinations(range(n), j): + prob = Decimal('1.0') + for i in range(n): + if i in subset: + prob *= Decimal(str(availabilities[i])) + else: + prob *= (Decimal('1.0') - Decimal(str(availabilities[i]))) + total += prob + + return float(total) + + + +def get_all_components(structure) -> set: + """Extract all component/location_tag strings from a nested structure (series, parallel, k_of_n).""" + components = set() + + def extract(substructure): + if isinstance(substructure, str): + # Found a component or location tag + components.add(substructure) + elif isinstance(substructure, dict): + # If it's k_of_n, check "components" + if "k_of_n" in substructure and "components" in substructure["k_of_n"]: + for comp in substructure["k_of_n"]["components"]: + extract(comp) + # If it's series/parallel or other nested structures + for value in substructure.values(): + extract(value) + elif isinstance(substructure, list): + for item in substructure: + extract(item) + + extract(structure) + return components + + +def birnbaum_importance(structure: Structure, availabilities: Dict[str, float], component: str) -> float: + """ + Calculate Birnbaum importance for a component. + + Birnbaum importance = ∂A_system/∂A_component + + This is approximated as: + I_B = A_system(A_i=1) - A_system(A_i=0) + + Where A_i is the availability of component i. + """ + # Create copies for calculations + avail_up = availabilities.copy() + avail_down = availabilities.copy() + + # Set component availability to 1 (perfect) + avail_up[component] = 1.0 + + # Set component availability to 0 (failed) + avail_down[component] = 0.0 + + # Calculate system availability in both cases + system_up = system_availability(structure, avail_up) + system_down = system_availability(structure, avail_down) + + # Birnbaum importance is the difference + return system_up - system_down + + +def criticality_importance(structure: Structure, availabilities: Dict[str, float], component: str) -> float: + """ + Calculate Criticality importance for a component. + + Criticality importance = Birnbaum importance * (1 - A_component) / (1 - A_system) + + This represents the probability that component i is critical to system failure. + """ + birnbaum = birnbaum_importance(structure, availabilities, component) + system_avail = system_availability(structure, availabilities) + component_avail = availabilities[component] + + if system_avail >= 1.0: # Perfect system + return 0.0 + + criticality = birnbaum * (1.0 - component_avail) / (1.0 - system_avail) + return criticality + + +def fussell_vesely_importance(structure: Structure, availabilities: Dict[str, float], component: str) -> float: + """ + Calculate Fussell-Vesely importance for a component. + + FV importance = (A_system - A_system(A_i=0)) / A_system + + This represents the fractional decrease in system availability when component i fails. + """ + system_avail = system_availability(structure, availabilities) + + if system_avail <= 0.0: + return 0.0 + + # Calculate system availability with component failed + avail_down = availabilities.copy() + avail_down[component] = 0.0 + system_down = system_availability(structure, avail_down) + + fv = (system_avail - system_down) / system_avail + return fv + + +def compute_all_importance_measures(structure: Structure, availabilities: Dict[str, float]) -> Dict[str, Dict[str, float]]: + """ + Compute all importance measures for each component. + + Returns: + Dictionary with component names as keys and importance measures as values + """ + # Normalize availabilities to 0-1 range if needed + normalized_availabilities = {} + for k, v in availabilities.items(): + if v > 1.0: + normalized_availabilities[k] = v / 100.0 + else: + normalized_availabilities[k] = v + # Clamp to valid range [0, 1] + normalized_availabilities[k] = max(0.0, min(1.0, normalized_availabilities[k])) + + # Get all components in the system + all_components = get_all_components(structure) + + + # Check for missing components + missing_components = all_components - set(normalized_availabilities.keys()) + if missing_components: + log.warning(f"Missing components (assuming 100% availability): {missing_components}") + for comp in missing_components: + normalized_availabilities[comp] = 1.0 + + + + # Calculate system baseline availability + system_avail = system_availability(structure, normalized_availabilities) + + + # Calculate importance measures for each component + results = {} + total_birnbaum = 0.0 + + for component in all_components: + if component in normalized_availabilities: + birnbaum = birnbaum_importance(structure, normalized_availabilities, component) + criticality = criticality_importance(structure, normalized_availabilities, component) + fv = fussell_vesely_importance(structure, normalized_availabilities, component) + + + results[component] = { + 'birnbaum_importance': birnbaum, + 'criticality_importance': criticality, + 'fussell_vesely_importance': fv, + 'component_availability': normalized_availabilities[component] + } + + total_birnbaum += birnbaum + + # Calculate contribution percentages based on Birnbaum importance + if total_birnbaum > 0: + for component in results: + contribution_pct = results[component]['birnbaum_importance'] / total_birnbaum + results[component]['contribution_percentage'] = contribution_pct + else: + for component in results: + results[component]['contribution_percentage'] = 0.0 + + # Add system-level information + results['_system_info'] = { + 'system_availability': system_avail, + 'system_unavailability': 1.0 - system_avail, + 'total_birnbaum_importance': total_birnbaum + } + + return results + + +def calculate_contribution_accurate(availabilities: Dict[str, float], structure_file: str = 'src/aeros_contribution/result.json') -> Dict[str, Dict[str, float]]: + """ + Calculate component contributions using proper importance measures. + + Args: + availabilities: Dictionary of component availabilities + structure_file: Path to RBD structure JSON file + + Returns: + Dictionary containing all importance measures and contributions + """ + try: + with open(structure_file, 'r') as model_file: + structure = json.load(model_file) + except FileNotFoundError: + raise FileNotFoundError(f"Structure file not found: {structure_file}") + except json.JSONDecodeError: + raise ValueError(f"Invalid JSON in structure file: {structure_file}") + + # Compute all importance measures + results = compute_all_importance_measures(structure, availabilities) + + # Extract system information + system_info = results.pop('_system_info') + + # Log results + log.info(f"System Availability: {system_info['system_availability']:.6f}") + log.info(f"System Unavailability: {system_info['system_unavailability']:.6f}") + + # Sort components by Birnbaum importance (most critical first) + sorted_components = sorted(results.items(), + key=lambda x: x[1]['birnbaum_importance'], + reverse=True) + + # print("\n=== COMPONENT IMPORTANCE ANALYSIS ===") + # print(f"System Availability: {system_info['system_availability']:.6f} ({system_info['system_availability']*100:.4f}%)") + # print(f"System Unavailability: {system_info['system_unavailability']:.6f}") + # print("\nComponent Rankings (by Birnbaum Importance):") + # print(f"{'Component':<20} {'Availability':<12} {'Birnbaum':<12} {'Criticality':<12} {'F-V':<12} {'Contribution%':<12}") + # print("-" * 92) + + for component, measures in sorted_components: + print(f"{component:<20} {measures['component_availability']:<12.6f} " + f"{measures['birnbaum_importance']:<12.6f} {measures['criticality_importance']:<12.6f} " + f"{measures['fussell_vesely_importance']:<12.6f} {measures['contribution_percentage']*100:<12.4f}") + + # Return results with system info included + # results['_system_info'] = system_info + + return results + + +# Legacy function for backwards compatibility +def calculate_contribution(availabilities): + """Legacy function - redirects to improved version.""" + try: + return calculate_contribution_accurate(availabilities) + except Exception as e: + log.error(f"Error in contribution calculation: {e}") + raise + + + + + +async def update_contribution_bulk_mappings(*, db_session, simulation_id): + """Update contribution mappings with precise calculations.""" + calc_results = await get_simulation_with_calc_result( + db_session=db_session, + simulation_id=simulation_id, + node_type="RegularNode" + ) + + # Ensure availability values are properly normalized + availabilities = {} + for calc in calc_results: + availability = calc.availability + availabilities[calc.aeros_node.node_name] = availability + + importance = calculate_contribution(availabilities) + + # Prepare bulk update data with rounded contributions to avoid precision issues in DB + for calc in calc_results: + # Round to reasonable precision for database storage + eq_importance = importance.get(calc.aeros_node.node_name, {}) + + + if not eq_importance: + continue + + calc.contribution = eq_importance.get('birnbaum_importance', 0) + calc.criticality = eq_importance.get('criticality_importance', 0) + calc.contribution_factor = eq_importance.get('fussell_vesely_importance', 0) + + await db_session.commit() + + + return importance + + diff --git a/src/aeros_equipment/__init__.py b/src/aeros_equipment/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/aeros_equipment/model.py b/src/aeros_equipment/model.py new file mode 100644 index 0000000..cbda42d --- /dev/null +++ b/src/aeros_equipment/model.py @@ -0,0 +1,128 @@ +from sqlalchemy import ( + JSON, + UUID, + Column, + DateTime, + Float, + ForeignKey, + Integer, + Numeric, + String, +) +from sqlalchemy.orm import relationship + +from src.database.core import Base +from src.models import DefaultMixin +from sqlalchemy.dialects.postgresql import ARRAY + + +class AerosEquipment(Base, DefaultMixin): + __tablename__ = "rbd_ms_aeros_equipment" + + # Basic equipment information + node_name = Column(String, nullable=True) + location_tag = Column(String, nullable=True) + # max_flowrate = Column(Numeric, nullable=True) + # design_flowrate = Column(Numeric, nullable=True) + # flowrate_unit = Column(String, nullable=True) + + # # Release discharge parameters + # rel_dis_type = Column(String, nullable=True) + # rel_dis_p1 = Column(Numeric, nullable=True) + # rel_dis_p2 = Column(Numeric, nullable=True) + # rel_dis_p3 = Column(Numeric, nullable=True) + # rel_dis_unit_code = Column(String, nullable=True) + + # # CM discharge parameters + # cm_dis_type = Column(String, nullable=True) + # cm_dis_p1 = Column(Numeric, nullable=True) + # cm_dis_p2 = Column(Numeric, nullable=True) + # cm_dis_p3 = Column(Numeric, nullable=True) + # cm_dis_unit_code = Column(String, nullable=True) + + # # IP discharge parameters + # ip_dis_type = Column(String, nullable=True) + # ip_dis_p1 = Column(Numeric, nullable=True) + # ip_dis_p2 = Column(Numeric, nullable=True) + # ip_dis_p3 = Column(Numeric, nullable=True) + # ip_dis_unit_code = Column(String, nullable=True) + + # # PM discharge parameters + # pm_dis_type = Column(String, nullable=True) + # pm_dis_p1 = Column(Numeric, nullable=True) + # pm_dis_p2 = Column(Numeric, nullable=True) + # pm_dis_p3 = Column(Numeric, nullable=True) + # pm_dis_unit_code = Column(String, nullable=True) + + # # OH discharge parameters + # oh_dis_type = Column(String, nullable=True) + # oh_dis_p1 = Column(Numeric, nullable=True) + # oh_dis_p2 = Column(Numeric, nullable=True) + # oh_dis_p3 = Column(Numeric, nullable=True) + # oh_dis_unit_code = Column(String, nullable=True) + + aeros_equipment_details = relationship( + "AerosEquipmentDetail", back_populates="aeros_equipment", lazy="raise" + ) + + master_equipment = relationship( + "MasterEquipment", + lazy="raise", + primaryjoin="and_(AerosEquipment.location_tag == foreign(MasterEquipment.location_tag))", + uselist=False, # Add this if it's a one-to-one relationship + ) + + aeros_node = relationship( + "AerosNode", + lazy="joined", + primaryjoin="and_(AerosEquipment.node_name == foreign(AerosNode.node_name))", + uselist=False, + ) + + custom_parameters = relationship( + "AerosEquipmentCustomParameterData", + lazy="raise", + primaryjoin="and_(AerosEquipment.node_name == foreign(AerosEquipmentCustomParameterData.location_tag))", + uselist=True, + ) + + +class AerosEquipmentDetail(Base, DefaultMixin): + + __tablename__ = "rbd_ms_aeros_equipment_detail" + + aeros_equipment_id = Column( + UUID(as_uuid=True), ForeignKey("rbd_ms_aeros_equipment.id"), nullable=False + ) + location_tag = Column(String, nullable=True) + + aeros_equipment = relationship( + "AerosEquipment", back_populates="aeros_equipment_details", lazy="raise" + ) + + +class MasterEquipment(Base, DefaultMixin): + __tablename__ = "ms_equipment_master" + + location_tag = Column(String, nullable=True) + name = Column(String, nullable=True) + + +class AerosEquipmentCustomParameterData(Base, DefaultMixin): + __tablename__ = 'rbd_ms_equipment_custom_input' + + location_tag = Column(String(100), nullable=False) + level = Column(String(20), nullable=False) + failure_rates = Column(ARRAY(Numeric), nullable=True) + mttr = Column(Numeric, nullable=True) + + +class AerosEquipmentGroup(Base, DefaultMixin): + __tablename__ = "rbd_ms_aeros_group_equipment" + + group_name = Column(String(100), nullable=False) + +class ReliabilityPredictNonRepairable(Base, DefaultMixin): + __tablename__ = "rp_non_repairable_results" + + location_tag = Column(String(100), nullable=False) diff --git a/src/aeros_equipment/router.py b/src/aeros_equipment/router.py new file mode 100644 index 0000000..6a31b00 --- /dev/null +++ b/src/aeros_equipment/router.py @@ -0,0 +1,76 @@ + +from src.aeros_equipment.service import get_asset_batch +from typing import List + +from fastapi import APIRouter, HTTPException, status +from pydantic import BaseModel +from sqlalchemy import select + +from src.aeros_equipment.model import AerosEquipmentCustomParameterData +from src.auth.service import CurrentUser +from src.database.core import DbSession +from src.database.service import CommonParameters +from src.models import StandardResponse +from .schema import CustomParameter, EquipmentPagination +from .service import save_default_equipment, get_all + +# from .schema import (OverhaulScheduleCreate, OverhaulSchedulePagination, OverhaulScheduleUpdate) + +router = APIRouter() + + +@router.get("", response_model=StandardResponse[EquipmentPagination]) +async def get_all_simulation(db_session: DbSession, common: CommonParameters): + """Get all simulation.""" + + results = await get_all(common = common) + + + return {"data": results, "status": "success", "message": "Success"} + + + +@router.get("/save_default", response_model=StandardResponse[None]) +async def save_default_equipments( + db_session: DbSession, project_name: str = "trialapi" +): + await save_default_equipment(db_session=db_session, project_name=project_name) + + return {"data": None, "status": "success", "message": "Success"} + + +@router.get("/parameter-oreda/{location_tag}", response_model=StandardResponse[CustomParameter]) +async def get_parameter_oreda( + db_session: DbSession, location_tag:str +): + query = select(AerosEquipmentCustomParameterData).where(AerosEquipmentCustomParameterData.location_tag == location_tag).where(AerosEquipmentCustomParameterData.level == "Critical") + result = await db_session.execute(query) + + res = result.scalars().first() + + if not res: + raise HTTPException(status_code=404, detail="Data not found") + + + return { + "data" : res, + "status": "success", + "message": "Success" + } + +class AssetBatchRequest(BaseModel): + repairable_tags: List[str] + non_repairable_tags: List[str] + + +@router.post("/test-asset-batch", response_model=StandardResponse[dict]) +async def test_asset_batch( + db_session: DbSession, payload: AssetBatchRequest +): + equipments = await get_asset_batch( + payload.repairable_tags, + payload.non_repairable_tags, + db_session, + ) + + return {"data": equipments, "status": "success", "message": "Success"} \ No newline at end of file diff --git a/src/aeros_equipment/schema.py b/src/aeros_equipment/schema.py new file mode 100644 index 0000000..7459c8b --- /dev/null +++ b/src/aeros_equipment/schema.py @@ -0,0 +1,206 @@ +from datetime import datetime +from enum import Enum +from typing import List, Optional +from uuid import UUID + +from pydantic import Field + +from src.models import DefultBase, Pagination + +# from src.overhaul_scope.schema import ScopeRead +# from src.scope_equipment_job.schema import ScopeEquipmentJobRead +# from src.job.schema import ActivityMasterRead + + +class EquipmentBase(DefultBase): + pass + + +# class OverhaulScheduleCreate(OverhaulScheduleBase): +# year: int +# plan_duration: Optional[int] = Field(None) +# planned_outage: Optional[int] = Field(None) +# actual_shutdown: Optional[int] = Field(None) +# start: datetime +# finish: datetime +# remark: Optional[str] = Field(None) + + +# class OverhaulScheduleUpdate(OverhaulScheduleBase): +# start: datetime +# finish: datetime + + +# class OverhaulScheduleRead(OverhaulScheduleBase): +# id: UUID +# year: int +# plan_duration: Optional[int] +# planned_outage: Optional[int] +# actual_shutdown: Optional[int] +# start: datetime +# finish: datetime +# remark: Optional[str] + +class MasterEquipment(DefultBase): + name: str = Field(..., max_length=100) + +class CustomParameter(DefultBase): + level: str = Field(..., max_length=50) + failure_rates: List[float] + mttr: float + +class Equipment(EquipmentBase): + location_tag: str = Field(..., max_length=50) + master_equipment: MasterEquipment + +class EquipmentWithCustomParameters(Equipment): + custom_parameters: List[CustomParameter] = [] + +class EquipmentRead(EquipmentBase): + AerosData: dict + MasterData: Equipment + +class EquipmentPagination(Pagination): + items: List[EquipmentRead] = [] +class FlowrateUnit(str, Enum): + PER_DAY = "PerDay" + PER_HOUR = "PerHour" + PER_MINUTE = "PerMinute" + + +# class DistributionType(str, Enum): +# LOGNORMAL = "Lognormal" +# NORMAL = "Normal" +# FIXED = "Fixed" +# UNIFORM = "Uniform" +# EXPONENTIAL = "Exponential" + + +class UnitCode(str, Enum): + U_DAY = "UDay" + U_HOUR = "UHour" + U_MINUTE = "UMinute" + + +class EquipmentConfiguration(EquipmentBase): + """ + Schema for equipment configuration with flow rates and distribution parameters + """ + + equipment_name: str = Field( + ..., alias="equipmentName", description="Name of the equipment", max_length=100 + ) + max_flowrate: float = Field( + ..., alias="maxFlowrate", ge=0, description="Maximum flow rate" + ) + design_flowrate: float = Field( + ..., alias="designFlowrate", ge=0, description="Design flow rate" + ) + flowrate_unit: FlowrateUnit = Field( + ..., alias="flowrateUnit", description="Unit for flow rate" + ) + + # Reliability Distribution Parameters + rel_dis_type: str = Field( + ..., alias="relDisType", description="Reliability distribution type", max_length=50 + ) + rel_dis_p1: float = Field( + ..., alias="relDisP1", description="Reliability distribution parameter 1" + ) + rel_dis_p2: float = Field( + ..., alias="relDisP2", description="Reliability distribution parameter 2" + ) + rel_dis_p3: float = Field( + ..., alias="relDisP3", description="Reliability distribution parameter 3" + ) + rel_dis_unit_code: UnitCode = Field( + ..., alias="relDisUnitCode", description="Reliability distribution unit code" + ) + + # Corrective Maintenance Distribution Parameters + cm_dis_type: str = Field( + ..., alias="cmDisType", description="Corrective maintenance distribution type", max_length=50 + ) + cm_dis_p1: float = Field( + ..., + alias="cmDisP1", + description="Corrective maintenance distribution parameter 1", + ) + cm_dis_p2: float = Field( + ..., + alias="cmDisP2", + description="Corrective maintenance distribution parameter 2", + ) + cm_dis_p3: float = Field( + ..., + alias="cmDisP3", + description="Corrective maintenance distribution parameter 3", + ) + cm_dis_unit_code: UnitCode = Field( + ..., + alias="cmDisUnitCode", + description="Corrective maintenance distribution unit code", + ) + + # Inspection Distribution Parameters + ip_dis_type: str = Field( + ..., alias="ipDisType", description="Inspection distribution type", max_length=50 + ) + ip_dis_p1: float = Field( + ..., alias="ipDisP1", description="Inspection distribution parameter 1" + ) + ip_dis_p2: float = Field( + ..., alias="ipDisP2", description="Inspection distribution parameter 2" + ) + ip_dis_p3: float = Field( + ..., alias="ipDisP3", description="Inspection distribution parameter 3" + ) + ip_dis_unit_code: UnitCode = Field( + ..., alias="ipDisUnitCode", description="Inspection distribution unit code" + ) + + # Preventive Maintenance Distribution Parameters + pm_dis_type: str = Field( + ..., alias="pmDisType", description="Preventive maintenance distribution type", max_length=50 + ) + pm_dis_p1: float = Field( + ..., + alias="pmDisP1", + description="Preventive maintenance distribution parameter 1", + ) + pm_dis_p2: float = Field( + ..., + alias="pmDisP2", + description="Preventive maintenance distribution parameter 2", + ) + pm_dis_p3: float = Field( + ..., + alias="pmDisP3", + description="Preventive maintenance distribution parameter 3", + ) + pm_dis_unit_code: UnitCode = Field( + ..., + alias="pmDisUnitCode", + description="Preventive maintenance distribution unit code", + ) + + # Overhaul Distribution Parameters + oh_dis_type: str = Field( + ..., alias="ohDisType", description="Overhaul distribution type", max_length=50 + ) + oh_dis_p1: float = Field( + ..., alias="ohDisP1", description="Overhaul distribution parameter 1" + ) + oh_dis_p2: float = Field( + ..., alias="ohDisP2", description="Overhaul distribution parameter 2" + ) + oh_dis_p3: float = Field( + ..., alias="ohDisP3", description="Overhaul distribution parameter 3" + ) + oh_dis_unit_code: UnitCode = Field( + ..., alias="ohDisUnitCode", description="Overhaul distribution unit code" + ) + + +class EquipmentSimulation(EquipmentBase): + location_tags: list \ No newline at end of file diff --git a/src/aeros_equipment/service.py b/src/aeros_equipment/service.py new file mode 100644 index 0000000..f64661f --- /dev/null +++ b/src/aeros_equipment/service.py @@ -0,0 +1,681 @@ +from typing import defaultdict, List, Optional, Union +from uuid import UUID +import logging +import httpx +from fastapi import HTTPException, status +from sqlalchemy import Delete, Select, func, desc, and_, text +from sqlalchemy.orm import selectinload + +from src.auth.service import CurrentUser +from src.config import DEFAULT_PROJECT_NAME, RELIABILITY_SERVICE_API +from src.aeros_utils import aeros_post +from src.database.core import CollectorDbSession, DbSession +from src.database.service import search_filter_sort_paginate +from .model import AerosEquipment, AerosEquipmentDetail, MasterEquipment, AerosEquipmentGroup, ReliabilityPredictNonRepairable +from .schema import EquipmentConfiguration +from src.aeros_project.model import AerosProject +from src.aeros_simulation.model import AerosNode +import asyncio +import re +import requests +import json +import pandas as pd +from src.aeros_simulation.service import get_aeros_schematic_by_name + +# Aeros session is managed in src.aeros_utils +log = logging.getLogger() + +async def get_project(*, db_session: DbSession): + stmt = Select(AerosProject).order_by(desc(AerosProject.updated_at)).limit(1) + result = await db_session.execute(stmt) + found_record = result.scalar_one_or_none() + + return found_record + +async def get_all(*, common): + """Returns all documents.""" + query = Select(AerosEquipment).options( + selectinload(AerosEquipment.master_equipment) + ) + results = await search_filter_sort_paginate(model=query, **common) + reg_nodes = [node.node_name for node in results["items"]] + equipment_data = { + node.node_name: node for node in results["items"] + } + + project = await get_project(db_session=common["db_session"]) + + updateNodeReq = {"projectName": project.project_name , "equipmentNames": reg_nodes} + + try: + response = await aeros_post( + "/api/UpdateDisParams/GetUpdatedNodeDistributions", + json=updateNodeReq, + headers={"Content-Type": "application/json"}, + ) + + response.raise_for_status() + res = response.json() + # if not res.get("status"): + # raise HTTPException( + # status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=res.get("message") + # ) + + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e) + ) + + results["items"] = [ + {"AerosData": data, "MasterData": equipment_data.get(data["equipmentName"]) } for data in res + ] + + return results + +async def get_equipment_by_location_tag(*, db_session: DbSession, location_tag: str): + query = ( + Select(AerosEquipment) + .where(AerosEquipment.location_tag == location_tag) + .options(selectinload(AerosEquipment.aeros_equipment_details)) + ) + + + +async def get_by_id(*, db_session: DbSession, id: UUID): + query = ( + Select(AerosEquipment) + .where(AerosEquipment.id == id) + .options(selectinload(AerosEquipment.aeros_equipment_details)) + ) + result = await db_session.execute(query) + aerosEquipmentResult = result.scalar() + + if not aerosEquipmentResult: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, detail="AerosEquipment not found" + ) + + aerosNodeReq = { + "projectName": "ParallelNode", + "equipmentName": [aerosEquipmentResult.node_name], + } + + try: + response = await aeros_post( + "/api/UpdateDisParams/GetUpdatedNodeDistributions", + json=aerosNodeReq, + headers={"Content-Type": "application/json"}, + ) + response.raise_for_status() + aerosEquipmentData = response.json() + + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e) + ) + + return aerosEquipmentResult, aerosEquipmentData + + +async def get_aeros_equipment_by_location_tag(*, location_tag: Union[str, List[str]], project_name): + if isinstance(location_tag, str): + location_tag = [location_tag] + else: + location_tag = location_tag + + aerosNodeReq = { + "projectName": project_name, + "equipmentNames": location_tag, + } + + try: + response = await aeros_post( + "/api/UpdateDisParams/GetUpdatedNodeDistributions", + json=aerosNodeReq, + headers={"Content-Type": "application/json"}, + ) + response.raise_for_status() + aerosEquipmentData = response.json() + + + if not aerosEquipmentData: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, detail="AerosEquipment not found" + ) + + response.raise_for_status() + + df = pd.DataFrame(aerosEquipmentData) + + return df.drop_duplicates().to_dict('records') + + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e) + ) + + +async def update_node( + *, db_session: DbSession, equipment_nodes: List[dict], project_name: str +): + updateNodeReq = {"projectName": project_name, "regNodeInputs": equipment_nodes} + log.info("Aeros UpdateEquipmentDistributions request: %s", updateNodeReq) + + try: + response = await aeros_post( + "/api/UpdateDisParams/UpdateEquipmentDistributions", + json=updateNodeReq, + headers={"Content-Type": "application/json"}, + ) + response.raise_for_status() + result = response.json() + log.info("Aeros UpdateEquipmentDistributions response: %s", result) + return result + + except Exception as e: + log.error("Failed to update equipment nodes in Aeros: %s", str(e)) + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Aeros update failed: {str(e)}" + ) + + +async def save_default_equipment(*, db_session: DbSession, project_name: str): + equipmments = Select(MasterEquipment).where( + MasterEquipment.location_tag.isnot(None) + ) + equipment_nodes = await db_session.execute(equipmments) + + reg_nodes = [node.location_tag for node in equipment_nodes.scalars().all()] + + updateNodeReq = {"projectName": project_name, "equipmentNames": reg_nodes} + + # Delete old data + query = Delete(AerosEquipment) + await db_session.execute(query) + + try: + response = await aeros_post( + "/api/UpdateDisParams/GetUpdatedNodeDistributions", + json=updateNodeReq, + headers={"Content-Type": "application/json"}, + ) + response.raise_for_status() + + results = response.json() + + nodes = [] + + # raise Exception(results) + + # save to db + for equipment in results: + node = AerosEquipment( + node_name=equipment["equipmentName"], + location_tag=equipment["equipmentName"], + ) + + nodes.append(node) + + db_session.add_all(nodes) + await db_session.commit() + + return results + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e) + ) + + +async def get_asset_batch(location_tags: List[str], nr_location_tags: List[str], + db_session: DbSession, + base_url: str = RELIABILITY_SERVICE_API, + timeout: int = 600)-> dict: + """ + Get asset batch data from database tables. + + Args: + location_tags: List of location tag strings for repairable equipment + nr_location_tags: List of location tag strings for non-repairable equipment + db_session: Database session + base_url: Base URL for the API (kept for compatibility) + timeout: Request timeout in seconds (kept for compatibility) + + Returns: + Dictionary with response data + """ + from sqlalchemy import text + import json + + results = defaultdict(dict) + + # Query repairable equipment data + if location_tags: + repairable_query = text(""" + SELECT location_tag, parameters + FROM rp_repairable_results + WHERE location_tag = ANY(:location_tags) + """) + + repairable_result = await db_session.execute(repairable_query, {"location_tags": location_tags}) + + for row in repairable_result: + location_tag = row[0] + if not location_tag: + continue + + # Normalize key + tag_key = location_tag.strip().upper() + raw_parameters = row[1] + parameters = raw_parameters if isinstance(raw_parameters, dict) else json.loads(raw_parameters) if raw_parameters else {} + + try: + distribution, reldisp1, reldisp2 = get_distribution_from_db(parameters, is_repairable=True) + + results[tag_key]["cmDisType"] = "Normal" + results[tag_key]["cmDisP1"] = 6 + results[tag_key]["cmDisP2"] = 3 + results[tag_key]["relDisType"] = distribution + results[tag_key]["relDisP1"] = reldisp1 + results[tag_key]["relDisP2"] = reldisp2 + results[tag_key]["parameters"] = parameters + except Exception as e: + log.error(f"Error processing repairable item {location_tag}: {e}") + + # Query non-repairable equipment data + if nr_location_tags: + non_repairable_query = text(""" + SELECT location_tag, parameters, best_distribution + FROM rp_non_repairable_results + WHERE location_tag = ANY(:nr_location_tags) + """) + + non_repairable_result = await db_session.execute(non_repairable_query, {"nr_location_tags": nr_location_tags}) + + for row in non_repairable_result: + location_tag = row[0] + if not location_tag: + continue + + # Normalize key + tag_key = location_tag.strip().upper() + raw_parameters = row[1] + parameters = raw_parameters if isinstance(raw_parameters, dict) else json.loads(raw_parameters) if raw_parameters else {} + best_distribution = row[2] + + try: + distribution, reldisp1, reldisp2 = get_distribution_from_db(parameters, is_repairable=False, best_distribution=best_distribution) + + results[tag_key]["cmDisType"] = "Normal" + results[tag_key]["cmDisP1"] = 6 + results[tag_key]["cmDisP2"] = 3 + results[tag_key]["relDisType"] = distribution + results[tag_key]["relDisP1"] = reldisp1 + results[tag_key]["relDisP2"] = reldisp2 + results[tag_key]["parameters"] = parameters + except Exception as e: + log.error(f"Error processing non-repairable item {location_tag}: {e}") + + return results + + +def get_distribution_from_db(parameters: dict, is_repairable: bool = True, best_distribution: str = None): + """ + Map distribution parameters from database to the expected format. + + Args: + parameters: Parameters JSON from database + is_repairable: Whether this is repairable equipment + best_distribution: Best distribution name for non-repairable + + Returns: + tuple: (distribution_name, param1, param2) + """ + if is_repairable: + # For repairable equipment, method is in parameters["method"] + method = parameters.get("method", "NHPP") + + if method == "NHPP": + beta = parameters.get("beta", 1.0) + eta = parameters.get("eta", 100000) + + if eta < 100: + eta = 15000 + + return "NHPPTTFF", beta, eta + elif method == "Weibull-2P": + beta = parameters.get("beta", 1.0) + eta = parameters.get("eta", 100000) + return "Weibull2", beta, eta + elif method == "Weibull-3P": + beta = parameters.get("beta", 1.0) + eta = parameters.get("eta", 100000) + return "Weibull3", beta, eta + elif method == "Exponential-2P": + lambda_val = parameters.get("lambda_value", 0.00001) + gamma = parameters.get("gamma", 0) + return "Exponential2", lambda_val, gamma + else: + # Default to NHPP + return "NHPPTTFF", 1.0, 100000 + else: + # For non-repairable equipment, use best_distribution column + distribution = best_distribution or "Normal" + + if distribution == "Lognormal": + mu = parameters.get("mu", 0) + sigma = parameters.get("sigma", 1) + return "Lognormal", mu, sigma + elif distribution == "Normal": + mu = parameters.get("mu", 100000) + sigma = parameters.get("sigma", 1) + if sigma > 1000 or sigma < 0: + sigma = 999 + return "Normal", mu, sigma + elif distribution == "Weibull": + # Assuming Weibull parameters are available + beta = parameters.get("beta", 1.0) + eta = parameters.get("eta", 100000) + return "Weibull2", beta, eta + elif distribution == "Exponential-2P": + lambda_val = parameters.get("Lambda", 0.00001) + gamma = parameters.get("gamma", 0) + return "Exponential2", lambda_val, gamma + else: + # Default to Normal + mu = parameters.get("mu", 100000) + sigma = parameters.get("sigma", 1) + if sigma > 1000 or sigma < 0: + sigma = 999 + if mu <=0 : + mu = 19000 + return "Normal", mu, sigma + +async def update_oh_interval_offset(*, aeros_db_session, overhaul_offset, overhaul_interval, project_name): + stmt = text(""" + UPDATE public."RegularNodes" rn + SET "OHInterval" = :new_oh_interval, + "OHOffset" = :new_oh_offset + FROM public."Schematics" s + JOIN public."Projects" p + ON s."ProjectId" = p."ProjectId" + WHERE rn."SchematicId" = s."SchematicId" + AND p."ProjectName" = :project_name + """) + + result = await aeros_db_session.execute(stmt, { + "new_oh_interval": overhaul_interval, + "new_oh_offset": overhaul_offset, + "project_name": project_name + }) + + await aeros_db_session.commit() + log.info("Updated OH Interval/Offset for project %s. Rows affected: %s", project_name, result.rowcount) + + +async def update_equipment_for_simulation( + *, + db_session: DbSession, + aeros_db_session: CollectorDbSession, + project_name: str, + simulation_duration: int, + overhaul_duration, + overhaul_interval, + offset, + schematic_name: str, + custom_input: Optional[dict] = None +): + log.info("Updating equipment for simulation") + + aeros_schematic = await get_aeros_schematic_by_name( + db_session=db_session, + schematic_name=schematic_name + ) + + equipments = ( + Select(AerosEquipment) + .where(AerosEquipment.location_tag.isnot(None)) + .join(AerosEquipment.aeros_node) + .filter( + AerosNode.aeros_schematic_id == aeros_schematic.id, + AerosNode.node_type == "RegularNode" + ) + ) + + rbd_group = Select(AerosEquipmentGroup) + + equipment_nodes = await db_session.execute(equipments) + rbd_group_nodes = await db_session.execute(rbd_group) + + group_nodes = [g.group_name for g in rbd_group_nodes.scalars().all()] + reg_nodes = [n.location_tag for n in equipment_nodes.scalars().all()] + + reg_nodes.extend(group_nodes) + + nodes_data = await get_aeros_equipment_by_location_tag( + location_tag=reg_nodes, + project_name=project_name + ) + + def load_json_file(filename: str): + with open(filename, "r", encoding="utf-8") as f: + return json.load(f) + + non_repairable = await db_session.execute( + Select(ReliabilityPredictNonRepairable) + ) + non_repairable_location_tags = [ + t.location_tag for t in non_repairable.scalars().all() + ] + + reliability_data = await get_asset_batch( + reg_nodes, + non_repairable_location_tags, + db_session + ) + + # Normalize custom input keys once + custom_map = {} + if custom_input: + custom_map = { + k.strip().upper(): v + for k, v in custom_input.items() + } + log.info("Custom input provided for: %s", list(custom_map.keys())) + + reqNodeInputs = [] + results = {} + + await update_oh_interval_offset( + aeros_db_session=aeros_db_session, + project_name=project_name, + overhaul_interval=overhaul_interval, + overhaul_offset=offset + ) + + for eq in nodes_data: + try: + eq_name_raw = eq["equipmentName"] + eq_name = eq_name_raw.strip().upper() + + log.debug("Processing equipment: %s", eq_name_raw) + + # ---- CUSTOM INPUT HAS PRIORITY ---- + if eq_name in custom_map: + custom_param = custom_map[eq_name] + level = custom_param.get("level") + + mttr = custom_param.get("mttr") + failure_rate = custom_param.get("failure_rate") + + # Hard-coded states for specific levels + if level == "NoFailure": + log.info("Applying NoFailure state for %s", eq_name_raw) + mttr = 0 + eq["relDisType"] = "Fixed" + eq["relDisP1"] = 1000000000.0 # Effectively never fails + eq["relDisP2"] = 0 + eq["cmDisP1"] = 0 + eq["cmDisType"] = "Fixed" + elif level == "Out of Service": + log.info("Applying Out of Service (Always Fail) state for %s", eq_name_raw) + mttr = 1000000000.0 + eq["relDisType"] = "Fixed" + eq["relDisP1"] = 0.0001 # Fails immediately + eq["relDisP2"] = 0 + eq["cmDisP1"] = mttr + eq["cmDisType"] = "Fixed" + else: + if mttr is None or failure_rate is None: + log.warning( + "Custom input incomplete for %s, skipping", + eq_name_raw + ) + continue + + # Handle failure_rate being an array (Numeric array in DB) + if isinstance(failure_rate, list): + rate_val = float(failure_rate[0]) if failure_rate else 1.0 + else: + rate_val = float(failure_rate) + + if rate_val <= 0: + MTBF = 1000000000.0 + else: + MTBF = 1e6 / rate_val + + eq["cmDisP1"] = mttr + eq["relDisType"] = custom_param.get("distribution", "Fixed") + + if eq["relDisType"] == "Fixed": + eq["relDisP1"] = MTBF + eq["relDisP2"] = 0 + else: + # For Weibull, use P1 as beta (1.0 default) and P2 as eta (MTBF) + eq["relDisP1"] = 1.0 + eq["relDisP2"] = MTBF + + eq["relDisP3"] = 0 + eq["relDisUnitCode"] = "UHour" + eq["cmDisP2"] = 0 + eq["cmDisP3"] = 0 + eq["cmDisUnitCode"] = "UHour" + eq["ohDisType"] = "Fixed" + eq["ohDisP1"] = overhaul_duration + eq["ohDisP2"] = 0 + eq["ohDisP3"] = 0 + eq["ohDisUnitCode"] = "UHour" + + reqNodeInputs.append(eq) + results[eq_name_raw] = { + "mttr": mttr, + "distribution": eq["relDisType"], + "beta": eq["relDisP1"], + "eta": eq["relDisP2"], + "parameters": {}, + "oh_duration": overhaul_duration + } + + continue # skip default logic + + # ---- PREVENT DUPLICATE DEFAULT INSERT ---- + if eq_name_raw in results: + continue + + # Lookup reliability with normalized key + reliability = reliability_data.get(eq_name, {}) + + if reliability: + log.info("Found reliability data for %s", eq_name_raw) + eq["cmDisType"] = reliability.get("cmDisType", "Fixed") + eq["cmDisP1"] = reliability.get("cmDisP1", 0) + eq["cmDisP2"] = reliability.get("cmDisP2", 0) + eq["cmDisP3"] = 0 + eq["cmDisUnitCode"] = "UHour" + eq["relDisType"] = reliability.get("relDisType", "Fixed") + eq["relDisP1"] = reliability.get("relDisP1", 0) + eq["relDisP2"] = reliability.get("relDisP2", 0) + eq["relDisP3"] = 0 + eq["relDisUnitCode"] = "UHour" + else: + log.debug("No reliability data for %s, keeping existing or using defaults", eq_name_raw) + # Ensure existing unit codes and types are at least present if not already + eq.setdefault("cmDisType", "Fixed") + eq.setdefault("cmDisUnitCode", "UHour") + eq.setdefault("relDisType", "Fixed") + eq.setdefault("relDisUnitCode", "UHour") + eq.setdefault("cmDisP1", 0) + eq.setdefault("cmDisP2", 0) + eq.setdefault("cmDisP3", 0) + eq.setdefault("relDisP1", 0) + eq.setdefault("relDisP2", 0) + if eq.get("relDisType") == "Normal": + sigma = eq.get("relDisP2", 0) + if sigma > 1000 or sigma < 0: + eq["relDisP2"] = 999 + + eq["ohDisType"] = "Fixed" + eq["ohDisP1"] = overhaul_duration + eq["ohDisP2"] = 0 + eq["ohDisP3"] = 0 + eq["ohDisUnitCode"] = "UHour" + + reqNodeInputs.append(eq) + results[eq_name_raw] = { + "mttr": eq.get("cmDisP1", 0), + "distribution": eq.get("relDisType", "Fixed"), + "beta": eq.get("relDisP1", 0), + "eta": eq.get("relDisP2", 0), + "parameters": reliability.get("parameters", {}), + "oh_duration": overhaul_duration + } + + except Exception as e: + log.exception( + "Error processing equipment %s", eq.get("equipmentName") + ) + reqNodeInputs.append(eq) + + return { + "equipment_nodes": reqNodeInputs, + "reliability": results + } + +# Optimized individual fetch functions +async def get_equipment_mttr(*, location_tag: str, client: httpx.AsyncClient) -> float: + """ + Get MTTR for a single equipment using provided client + """ + mttr_url = f"{RELIABILITY_SERVICE_API}/asset/mttr/{location_tag}" + try: + response = await client.get(mttr_url) + if response.status_code == 200: + mttr_data = response.json() + return mttr_data.get("data", {}).get("hours", 0) + else: + log.warning(f"MTTR API returned status {response.status_code} for {location_tag}") + return 0 + except Exception as e: + log.error(f"Error getting MTTR for {location_tag}: {str(e)}") + return 0 + +async def get_equipment_reliability_parameter(*, location_tag: str, client: httpx.AsyncClient): + """ + Get reliability parameters for a single equipment using provided client + """ + reliability_url = f"{RELIABILITY_SERVICE_API}/reliability/{location_tag}/current" + try: + response = await client.get(reliability_url) + if response.status_code == 200: + reliability_data = response.json() + data = reliability_data.get("data", {}) + return { + "distribution": data.get("distribution", ""), + "beta": data.get("parameters", 0).get("beta", 0), + "eta": data.get("parameters", 0).get("eta", 0) + } + else: + log.warning(f"Reliability API returned status {response.status_code} for {location_tag}") + return {"distribution": "", "beta": 0, "eta": 0} + except Exception as e: + log.error(f"Error getting reliability parameters for {location_tag}: {str(e)}") + return {"distribution": "", "beta": 0, "eta": 0} diff --git a/src/aeros_equipment/trip_eq.json b/src/aeros_equipment/trip_eq.json new file mode 100644 index 0000000..7b75e93 --- /dev/null +++ b/src/aeros_equipment/trip_eq.json @@ -0,0 +1,129 @@ +[ + "00UWTS-P101D", + "00UWTS-P101A", + "3AI-Y502B", + "00WWT-SRP141B", + "3ESP-XR804", + "00FAD-C811A", + "00WWT-P112B", + "3ESP-XR801", + "3BAD-P521A", + "00AGS-HG001", + "00RO-SD252A", + "00RP-Z856A", + "3ABS-P910B", + "00SW-P012A", + "00PRW-P856A", + "3ABS-PIX910", + "00RP-P991A", + "00RP-P972A", + "00DS-P902A", + "00DS-P978A", + "00RO-M130A", + "00AC-F501A", + "3GG-F875A", + "00WWT-AG350C", + "3AI-Y510C", + "3AI-Y507C", + "3DP-FDR711C", + "00IA-A001A", + "00FAD-C811C", + "00CHB-SKR805B", + "00CHB-SKR805A", + "00CHD-TPR810B", + "00CHD-TPR810A", + "00CHD-PAN861", + "3AI-Y504L", + "00CHD-PAN860", + "00FAD-C811B", + "00CHD-CV810A", + "3AI-Y505R", + "00AC-HS807", + "00FAD-H802A", + "3DP-FDR711E", + "00WWT-SD330A", + "00RP-P972B", + "00RO-P170B", + "00FAD-A812A", + "00RO-P110D", + "00PW-P010A", + "3ABS-P888A", + "00WWT-AG371A", + "00WWT-AG371C", + "00FAD-DC801", + "3ABS-AG879B", + "00WWT-AG131", + "3ESP-RD801", + "00RP-Z856B", + "3ESP-RD803", + "00RO-P170C", + "00WWT-P262A", + "3AI-Y502L", + "4GG-F854B", + "3SCR-P003A", + "00AC-F081F", + "00AC-F081D", + "00RO-P170D", + "3ABS-W874", + "00RO-P140B", + "00RO-P234A", + "00FAD-H816A", + "3APE-MV852", + "00RO-M170B", + "00FMU-P801B", + "00ACR-C001A", + "00LSH-PAN865", + "00RP-P952B", + "00LSH-CR853", + "00RO-AG122B", + "00PRW-M856A", + "3ESP-XR802", + "3GG-F853B", + "3DP-M741F", + "00FAD-Z811B", + "3ESP-XR803", + "00LGT-PD923", + "00DS-P978B", + "00RP-P995B", + "3AI-Y512B", + "00WWT-AG151", + "3AI-Y508B", + "3AI-Y504R", + "3AI-Y505B", + "3AI-Y516C", + "3AI-Y501B", + "3AI-Y502A", + "3TR-F302", + "00DMW-P370A", + "00RP-AG885", + "00RO-P195B", + "3CW-P020A", + "3WD-P020A", + "3ABS-W871", + "00FAD-A812C", + "00RO-SRP120C", + "3APC-LV851", + "3APC-PD508", + "00DS-PD863", + "00SW-V830", + "3ESP-XR805", + "00DMW-C375B", + "00RP-M911A", + "3AH-P531B", + "00WWT-P380A", + "00H2-CS002", + "00WD-P409B", + "00ACR-C001B", + "00FAD-A812B", + "00DS-VF900", + "3AI-Y517A", + "00DMW-M375A", + "00FAD-DC802", + "00RO-P130C", + "4GG-F853C", + "3GSS-F011A", + "3GG-F853A", + "00CCCW-V006", + "3GG-F854A", + "00FAD-CT801A" +] \ No newline at end of file diff --git a/src/aeros_project/__init__.py b/src/aeros_project/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/aeros_project/model.py b/src/aeros_project/model.py new file mode 100644 index 0000000..d600c5d --- /dev/null +++ b/src/aeros_project/model.py @@ -0,0 +1,12 @@ +from sqlalchemy import JSON, UUID, Column, DateTime, Float, ForeignKey, Integer, String +from sqlalchemy.orm import relationship + +from src.database.core import Base +from src.models import DefaultMixin + + +class AerosProject(Base, DefaultMixin): + __tablename__ = "rbd_ms_aeros_project" + + project_name = Column(String, nullable=False) + aro_file_path = Column(String, nullable=False) diff --git a/src/aeros_project/router.py b/src/aeros_project/router.py new file mode 100644 index 0000000..cbd9d5b --- /dev/null +++ b/src/aeros_project/router.py @@ -0,0 +1,159 @@ +import os +from typing import List, Optional + +from fastapi import APIRouter, HTTPException, Response, status, File, UploadFile, Form +from fastapi.responses import StreamingResponse +import httpx +from sqlalchemy import select + +from src.aeros_project.model import AerosProject +from src.auth.service import CurrentUser +from src.config import WINDOWS_AEROS_BASE_URL +from src.database.core import DbSession +from src.database.service import CommonParameters +from src.models import StandardResponse +from src.aeros_utils import aeros_post +from .schema import AerosProjectInput, AerosMetadata, OverhaulScheduleCreate, OverhaulScheduleUpdate +from .service import import_aro_project, fetch_aro_record, reset_project, create, update, delete + +router = APIRouter() + +@router.post("", response_model=StandardResponse[str]) +async def import_aro( + db_session: DbSession, + current_user: CurrentUser, + schematic_name: str = Form(...), + aro_file: UploadFile = File(..., description="ARO file"), + project_name: str = "trialapi" +): + + if current_user.role.lower() != "admin": + raise HTTPException( + status_code=status.HTTP_403_FORBIDDEN, + detail="Admin access required to modify Aeros files." + ) + + # Create the input object manually + aeros_project_input = AerosProjectInput(schematic_name=schematic_name, aro_file=aro_file) + + result = await import_aro_project(db_session=db_session, aeros_project_in=aeros_project_input) + + return {"data": result, "status": "success", "message": "Success"} + + +@router.get("/download") +async def forward_download(db_session: DbSession): + query = select(AerosProject) + data = await db_session.execute(query) + + project = data.scalar_one_or_none() + filename = f"{project.project_name}.aro" + + try: + # Download entire file (no streaming) + response = await aeros_post( + "/download", + json={ + "filename": filename + }, + ) + + if response.status_code != 200: + raise HTTPException( + status_code=response.status_code, + detail="Failed to download from upstream service" + ) + + file_bytes = response.content # full file in memory + + # Extract headers + # Force a secure/default filename for the client + content_disposition = f'attachment; filename="{filename}"' + media_type = response.headers.get( + "content-type", + "application/octet-stream" + ) + + # Return as ordinary file response + return Response( + content=file_bytes, + media_type=media_type, + headers={"Content-Disposition": content_disposition} + ) + + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + + +@router.get("/metadata", response_model=StandardResponse[AerosMetadata]) +async def getAerosMetadata(db_session: DbSession): + result = await fetch_aro_record(db_session=db_session) + + return {"data": result, "status": "success", "message": "Success"} + + +@router.get("/reset", response_model=StandardResponse[str]) +async def reset_aeros_project(db_session: DbSession): + # Logic to reset the ARO project + reset_path = await reset_project(db_session=db_session) + + return { + "data": reset_path, + "message": "Success" + } + +# @router.post("", response_model=StandardResponse[None]) +# async def import_aro_old(db_session: DbSession, aeros_project_in: AerosProjectInput, project_name: str = "trialapi"): +# # TEST ONLY +# # return {'file': 'ok'} + +# await import_aro_project(db_session=db_session, aeros_project_in=aeros_project_in) + +# return {"data": None, "status": "success", "message": "Success"} + + +# @router.post("/import") +# async def upload_with_validation(aeros_project_in: AerosProjectInput): +# # Check file extension + + +# return { +# "message": "File uploaded successfully", +# "filename": file.filename, +# "size": len(content) +# } + + +@router.post("/overhaul_job", response_model=StandardResponse[None]) +async def create_overhaul_equipment_jobs( + db_session: DbSession, overhaul_job_in: OverhaulScheduleCreate +): + await create( + db_session=db_session, + overhaul_job_in=overhaul_job_in, + ) + + return StandardResponse( + data=None, + message="Data created successfully", + ) + +@router.post("/update/{overhaul_job_id}", response_model=StandardResponse[None]) +async def update_overhaul_schedule( + db_session: DbSession, overhaul_job_id: str, overhaul_job_in: OverhaulScheduleUpdate +): + await update(db_session=db_session, overhaul_schedule_id=overhaul_job_id, overhaul_job_in=overhaul_job_in) + + return StandardResponse( + data=None, + message="Data updated successfully", + ) + +@router.post("/delete/{overhaul_job_id}", response_model=StandardResponse[None]) +async def delete_overhaul_equipment_job(db_session: DbSession, overhaul_job_id: str): + await delete(db_session=db_session, overhaul_schedule_id=overhaul_job_id) + + return StandardResponse( + data=None, + message="Data deleted successfully", + ) diff --git a/src/aeros_project/schema.py b/src/aeros_project/schema.py new file mode 100644 index 0000000..94509d7 --- /dev/null +++ b/src/aeros_project/schema.py @@ -0,0 +1,54 @@ +from datetime import datetime +from typing import List, Optional +from uuid import UUID + +from fastapi import File, UploadFile +from pydantic import Field + +from src.models import DefultBase, Pagination + +class OverhaulScheduleBase(DefultBase): + pass + + +class AerosProjectBase(DefultBase): + pass + + +class AerosProjectInput(AerosProjectBase): + schematic_name: str = Field(..., max_length=100) + aro_file: UploadFile = File(..., description="ARO file") + +class AerosMetadata(AerosProjectBase): + project_name: str = Field(..., max_length=100) + aro_file_path: str = Field(..., max_length=255) + updated_at: datetime + + +class OverhaulScheduleCreate(OverhaulScheduleBase): + year: int + plan_duration: Optional[int] = Field(None) + planned_outage: Optional[int] = Field(None) + actual_shutdown: Optional[int] = Field(None) + start: datetime + finish: datetime + remark: Optional[str] = Field(None) + + +class OverhaulScheduleUpdate(OverhaulScheduleBase): + start: datetime + finish: datetime + + +class OverhaulScheduleRead(OverhaulScheduleBase): + id: UUID + year: int + plan_duration: Optional[int] + planned_outage: Optional[int] + actual_shutdown: Optional[int] + start: datetime + finish: datetime + remark: Optional[str] + +class OverhaulSchedulePagination(Pagination): + items: List[OverhaulScheduleRead] = [] diff --git a/src/aeros_project/service.py b/src/aeros_project/service.py new file mode 100644 index 0000000..d347931 --- /dev/null +++ b/src/aeros_project/service.py @@ -0,0 +1,278 @@ +import os +from typing import Optional +import json +import httpx +from fastapi import HTTPException, status +from sqlalchemy import Delete, desc, Select, select, func +from sqlalchemy.orm import selectinload + +from src.aeros_equipment.service import save_default_equipment +from src.aeros_simulation.service import save_default_simulation_node +from src.auth.service import CurrentUser +from src.config import WINDOWS_AEROS_BASE_URL, CLAMAV_HOST, CLAMAV_PORT +from src.aeros_utils import aeros_post, aeros_file_upload +from src.database.core import DbSession +from src.database.service import search_filter_sort_paginate +from src.utils import sanitize_filename +import clamd +import io + +from .model import AerosProject +from .schema import AerosProjectInput, OverhaulScheduleCreate, OverhaulScheduleUpdate +import asyncio +ALLOWED_EXTENSIONS = {".aro"} +MAX_FILE_SIZE = 100 * 1024 * 1024 # 100MB +# client = httpx.AsyncClient(timeout=300.0) # Managed in src.aeros_utils +# We still use a local client for WINDOWS_AEROS_BASE_URL if it's not managed by aeros_utils +client = httpx.AsyncClient(timeout=300.0) + + +async def import_aro_project(*, db_session: DbSession, aeros_project_in: AerosProjectInput): + # windows_aeros_base_url = WINDOWS_AEROS_BASE_URL + + + file = aeros_project_in.aro_file + + # Sanitize and validate filename + try: + clean_filename = sanitize_filename(file.filename) + except ValueError as e: + raise HTTPException( + status_code=400, + detail=f"Invalid filename: {str(e)}" + ) + + # Check if mime type is application/octet-stream + if file.content_type != "application/octet-stream": + raise HTTPException( + status_code=400, + detail="Invalid file type. Allowed: application/octet-stream" + ) + + + # Get filename + filename_without_ext = os.path.splitext(clean_filename)[0] + + # Get file extension + file_ext = os.path.splitext(clean_filename)[1].lower() + + # Validate file extension + if file_ext not in ALLOWED_EXTENSIONS: + raise HTTPException( + status_code=400, + detail=f"File type not allowed. Allowed: {ALLOWED_EXTENSIONS}" + ) + + print("read file") + + + # Read and check file size + content = await file.read() + if len(content) > MAX_FILE_SIZE: + raise HTTPException( + status_code=400, + detail="File too large. Max size: 100Mb" + ) + + # ClamAV Scan + try: + cd = clamd.ClamdNetworkSocket(CLAMAV_HOST, CLAMAV_PORT) + scan_result = cd.instream(io.BytesIO(content)) + # Result format: {'stream': ('FOUND', 'Eicar-Test-Signature')} or {'stream': ('OK', None)} + if scan_result and scan_result.get('stream') and scan_result['stream'][0] == 'FOUND': + raise HTTPException( + status_code=400, + detail=f"Virus detected: {scan_result['stream'][1]}" + ) + except clamd.ConnectionError: + pass + # except HTTPException: + # raise + # except Exception as e: + # print(f"ClamAV error: {e}") + # raise HTTPException( + # status_code=500, + # detail=f"Antivirus check failed: {str(e)}" + # ) + + + # Project name hardcode + # project_name = "trialapi" + + # Project name + project_name = filename_without_ext + + + ## save File to windows app + # Output is string of file path, examole + # # Example response "C/dsad/dsad.aro" + try: + # Reset file position since we already read it for size check + # await file.seek(0) + + # Prepare file for upload + # files = { + # "file": (clean_filename, content, file.content_type or "application/octet-stream") + # } + + response = await aeros_file_upload( + "/upload", + content, + "file", + clean_filename, + base_url=WINDOWS_AEROS_BASE_URL, + ) + + response.raise_for_status() + + # print("fetch") + # response = await client.post( + # f"{WINDOWS_AEROS_BASE_URL}/upload-file", + # files=files + # ) + # response.raise_for_status() + + # Get the file path from the response + upload_result = response.json() + aro_path = upload_result.get("full_path") + filename = upload_result.get("stored_filename").replace(".aro", "") + + if not aro_path: + raise HTTPException( + status_code=500, + detail="Failed to get file path from upload response" + ) + + except httpx.HTTPStatusError as e: + raise HTTPException( + status_code=e.response.status_code, + detail=f"Upload failed: {e.response.text}" + ) + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e) + ) + + await asyncio.sleep(2) + + # aro_path = r"C:/Users/user/Documents/Aeros/sample_project.aro" + + aeros_project = AerosProject(project_name=filename, aro_file_path=aro_path) + + # find aeros record first, if not found, then create a new one + stmt = select(AerosProject).order_by(desc(AerosProject.created_at)).limit(1) + result = await db_session.execute(stmt) + latest_project = result.scalar_one_or_none() + + # If aeros record found, then update it + if latest_project: + latest_project.project_name = filename + latest_project.aro_file_path = aro_path + else: # else create new aeros record + db_session.add(aeros_project) + + await db_session.commit() + + # aro_json = json.dumps(aro_path) + + # Update path to AEROS APP + # Example BODy "C/dsad/dsad.aro" + try: + response = await aeros_post( + "/api/Project/ImportAROFile", + json=aro_path, + headers={"Content-Type": "application/json"}, + ) + + response.raise_for_status() + response_json = response.json() + + + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e) + ) + + await _initialize_default_project_data( + db_session=db_session, + project_name=filename + ) + +async def fetch_aro_record(*, db_session: DbSession): + stmt = select(AerosProject).order_by(desc(AerosProject.updated_at)).limit(1) + result = await db_session.execute(stmt) + found_record = result.scalar_one_or_none() + + return found_record + +async def get_project(*, db_session: DbSession): + stmt = select(AerosProject).order_by(desc(AerosProject.updated_at)).limit(1) + result = await db_session.execute(stmt) + found_record = result.scalar_one_or_none() + + return found_record + +async def _initialize_default_project_data( + *, + db_session: DbSession, + project_name: str +) -> None: + """ + Initialize default equipment and simulation nodes for a project. + + Args: + db_session: Database session + project_name: Name of the project to initialize + """ + try: + # Save default equipment + await save_default_equipment( + db_session=db_session, + project_name=project_name + ) + + # # Save default simulation node + # await save_default_simulation_node( + # db_session=db_session, + # project_name=project_name + # ) + + await db_session.commit() + + except Exception as e: + await db_session.rollback() + raise e + + +async def reset_project(*, db_session: DbSession): + project = await fetch_aro_record(db_session=db_session) + + try: + response = await aeros_post( + "/api/Project/ImportAROFile", + data=f'"{project.aro_file_path}"', + headers={"Content-Type": "application/json"}, + ) + response.raise_for_status() + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e) + ) + + return project.aro_file_path + + +async def create(*, db_session: DbSession, overhaul_job_in: OverhaulScheduleCreate): + # Placeholder for creation logic + print(f"create overhaul job called: {overhaul_job_in}") + pass + +async def update(*, db_session: DbSession, overhaul_schedule_id: str, overhaul_job_in: OverhaulScheduleUpdate): + # Placeholder for update logic + print(f"update overhaul job called for id {overhaul_schedule_id}: {overhaul_job_in}") + pass + +async def delete(*, db_session: DbSession, overhaul_schedule_id: str): + # Placeholder for delete logic + print(f"delete overhaul job called for id {overhaul_schedule_id}") + pass diff --git a/src/aeros_simulation/__init__.py b/src/aeros_simulation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/aeros_simulation/model.py b/src/aeros_simulation/model.py new file mode 100644 index 0000000..bf23a8b --- /dev/null +++ b/src/aeros_simulation/model.py @@ -0,0 +1,194 @@ +from sqlalchemy import JSON, UUID, Boolean, Column, DateTime, Float, ForeignKey, Integer, Numeric, String +from sqlalchemy.orm import relationship + +from src.database.core import Base +from src.models import DefaultMixin +import uuid + +class AerosSimulation(Base, DefaultMixin): + __tablename__ = "rbd_tr_aeros_simulation" + + status = Column(String, nullable=False) + started_at = Column(DateTime, nullable=True) + completed_at = Column(DateTime, nullable=True) + input = Column(JSON, nullable=True) + error = Column(JSON, nullable=True) + simulation_name = Column(String, nullable=False) + schematic_name = Column(String, nullable=False) + reliability = Column(JSON, nullable=True) + duration = Column(Integer, nullable=True) + offset = Column(Integer, nullable=True) + is_default = Column(Boolean, default=False) + created_by = Column(UUID(as_uuid=True), nullable=True) + + calc_results = relationship( + "AerosSimulationCalcResult", back_populates="aeros_simulation", lazy="raise" + ) + + plot_results = relationship( + "AerosSimulationPlotResult", back_populates="aeros_simulation", lazy="raise" + ) + +class AerosSchematic(Base, DefaultMixin): + __tablename__ = "rbd_ms_aeros_schematic" + + schematic_name = Column(String, nullable=False) + alias = Column(String, nullable=False) + +class AerosNode(Base, DefaultMixin): + __tablename__ = "rbd_ms_aeros_node" + + id = Column( + UUID(as_uuid=True), + primary_key=True, + default=uuid.uuid4, + unique=True, + nullable=False, + ) + node_type = Column(String, nullable=False) + original_node_id = Column(Integer, nullable=False) + node_id = Column(Integer, nullable=False) + node_name = Column(String, nullable=False) + structure_name = Column(String, nullable=False) + schematic_name = Column(String, nullable=False) + schematic_id = Column(UUID(as_uuid=True),ForeignKey("rbd_ms_aeros_node.id"), nullable=False) + original_schematic_id = Column(Integer, nullable=False) + ref_schematic_id = Column(Integer, nullable=False) + orignal_ref_schematic_id = Column(Integer, nullable=False) + aeros_schematic_id = Column(UUID(as_uuid=True),ForeignKey("rbd_ms_aeros_schematic.id") ,nullable=False) + model_image = Column(JSON, nullable=True) + + parent = relationship( + "AerosNode", + remote_side=[id], + back_populates="children", + foreign_keys=[schematic_id], + ) + + equipment = relationship( + "MasterEquipment", + lazy="selectin", + primaryjoin="and_(AerosNode.node_name == foreign(MasterEquipment.location_tag))", + uselist=False, # Add this if it's a one-to-one relationship + ) + + children = relationship( + "AerosNode", back_populates="parent", foreign_keys=[schematic_id] + ) + + calc_results = relationship( + "AerosSimulationCalcResult", back_populates="aeros_node" + ) + + plot_results = relationship( + "AerosSimulationPlotResult", back_populates="aeros_node" + ) + + aeros_equipment = relationship( + "AerosEquipment", lazy="selectin", primaryjoin="and_(AerosNode.node_name == foreign(AerosEquipment.node_name))", uselist=False + ) + + +class AerosSimulationCalcResult(Base, DefaultMixin): + __tablename__ = "rbd_tr_aeros_simulation_calc_result" + + total_downtime = Column(Float, nullable=False) + total_uptime = Column(Float, nullable=False) + num_events = Column(Integer, nullable=False) + production = Column(Float, nullable=False) + production_std = Column(Float, nullable=False) + ideal_production = Column(Float, nullable=False) + availability = Column(Float, nullable=False) + efficiency = Column(Float, nullable=False) + effective_loss = Column(Float, nullable=False) + num_cm = Column(Integer, nullable=False) + cm_waiting_time = Column(Float, nullable=False) + total_cm_downtime = Column(Float, nullable=False) + num_pm = Column(Integer, nullable=False) + total_pm_downtime = Column(Float, nullable=False) + num_ip = Column(Integer, nullable=False) + total_ip_downtime = Column(Float, nullable=False) + num_oh = Column(Integer, nullable=False) + total_oh_downtime = Column(Float, nullable=False) + t_wait_for_crew = Column(Float, nullable=False) + t_wait_for_spare = Column(Float, nullable=False) + duration_at_full = Column(Float, nullable=False) + duration_above_hh = Column(Float, nullable=False) + duration_above_h = Column(Float, nullable=False) + duration_below_l = Column(Float, nullable=False) + duration_below_ll = Column(Float, nullable=False) + duration_at_empty = Column(Float, nullable=False) + stg_input = Column(Float, nullable=True) + stg_output = Column(Float, nullable=True) + average_level = Column(Float, nullable=True) + potential_production = Column(Float, nullable=True) + eaf = Column(Float, nullable=True) + eaf_konkin = Column(Float, nullable=True, default=0) + efor = Column(Float, nullable=True) + derating_hours = Column(Float, nullable=True) + eta = Column(Float, nullable=True) + beta = Column(Float, nullable=True) + mttr = Column(Integer, nullable=True) + parameters = Column(JSON, nullable=True) + contribution = Column(Float, nullable=True) + criticality = Column(Float, nullable=True) + contribution_factor = Column(Float, nullable=True) + total_mo_downtime = Column(Float, nullable=True) + total_po_downtime = Column(Float, nullable=True) + sof = Column(Float, nullable=True) + + aeros_simulation_id = Column( + UUID(as_uuid=True), ForeignKey("rbd_tr_aeros_simulation.id"), nullable=False + ) + aeros_node_id = Column( + UUID(as_uuid=True), ForeignKey("rbd_ms_aeros_node.id"), nullable=False + ) + + aeros_node = relationship("AerosNode", back_populates="calc_results", lazy="raise") + + aeros_simulation = relationship( + "AerosSimulation", back_populates="calc_results", lazy="raise" + ) + + +class AerosSimulationPlotResult(Base, DefaultMixin): + __tablename__ = "rbd_tr_aeros_simulation_plot_result" + + max_flow_rate = Column(Numeric, nullable=False) + storage_capacity = Column(Numeric, nullable=False) + point_availabilities = Column(JSON, nullable=False) + point_flowrates = Column(JSON, nullable=False) + timestamp_outs = Column(JSON, nullable=False) + + aeros_simulation_id = Column( + UUID(as_uuid=True), ForeignKey("rbd_tr_aeros_simulation.id"), nullable=False + ) + aeros_node_id = Column( + UUID(as_uuid=True), ForeignKey("rbd_ms_aeros_node.id"), nullable=False + ) + + aeros_node = relationship("AerosNode", back_populates="plot_results", lazy="raise") + + aeros_simulation = relationship( + "AerosSimulation", back_populates="plot_results", lazy="raise" + ) + + +class EafContribution(Base, DefaultMixin): + __tablename__ = "rbd_ms_eaf_contribution" + + location_tag = Column(String, nullable=False) + eaf_contribution = Column(Float, nullable=False) + efficiency_uptime = Column(Float, nullable=False) + edh = Column(Float, nullable=False) + + + +# models.py +class AerosSimulationProgress(Base): + __tablename__ = "simulation_progress" + simulation_id = Column(Integer, primary_key=True) + status = Column(String, default="pending") # pending, running, failed, completed + step = Column(String, nullable=True) + progress = Column(Integer, default=0) # 0-100 + error_message = Column(String, nullable=True) diff --git a/src/aeros_simulation/router.py b/src/aeros_simulation/router.py new file mode 100644 index 0000000..d027849 --- /dev/null +++ b/src/aeros_simulation/router.py @@ -0,0 +1,762 @@ +from datetime import timedelta +from collections import defaultdict +from datetime import datetime +import io +from typing import Annotated, List, Optional +from uuid import UUID +import pandas as pd +from sqlalchemy.orm import selectinload +from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, background, status, Query +from fastapi.responses import StreamingResponse +from sqlalchemy import select, text +from temporalio.client import Client +from src.aeros_contribution.service import update_contribution_bulk_mappings +from src.aeros_equipment.model import AerosEquipment +from src.aeros_simulation.model import AerosSimulationCalcResult, EafContribution, AerosNode +from src.aeros_simulation.utils import date_to_utc, hours_between, year_window_utc +from src.auth.service import CurrentUser +from src.config import TEMPORAL_URL +from src.database.core import CollectorDbSession, DbSession +from src.database.service import CommonParameters, get_params_factory +from src.models import StandardResponse +from src.aeros_equipment.service import update_equipment_for_simulation +from src.aeros_project.service import get_project +from temporal.workflow import SimulationWorkflow +from .schema import ( + AhmMetricInput, + SimulationCalcResult, + SimulationCalcResultQuery, + SimulationInput, + SimulationPagination, + SimulationPlot, + SimulationPlotResult, + SimulationCalc, + SimulationData, + SimulationQueryModel, + SimulationRankingParameters, + YearlySimulationInput +) +from .service import ( + create_simulation, + # execute_simulation, + get_all, + get_custom_parameters, + get_default_simulation, + get_simulation_by_id, + get_simulation_with_calc_result, + get_simulation_with_plot_result, + update_simulation, + get_result_ranking, + get_plant_calc_result +) + +from .simulation_save_service import calculate_plant_eaf, execute_simulation + +from src.aeros_equipment.schema import EquipmentWithCustomParameters + +router = APIRouter() +active_simulations = {} + + +@router.get("", response_model=StandardResponse[SimulationPagination]) +async def get_all_simulation(db_session: DbSession, current_user:CurrentUser, common:Annotated[dict, Depends(get_params_factory(SimulationQueryModel))]): + """Get all simulation.""" + results = await get_all(common, current_user) + + return { + "data": results, + "status": "success", + "message": "Simulations result retrieved successfully", + } + +@router.get("/{simulation_id}", response_model=StandardResponse[SimulationData]) +async def get_simulation(db_session: DbSession, simulation_id): + """Get simulation.""" + result = await get_simulation_by_id(db_session=db_session, simulation_id=simulation_id) + + return { + "data": result, + "status": "success", + "message": "Simulation result retrieved successfully", + } + +@router.post("/run", response_model=StandardResponse[str]) +async def run_simulations( + db_session: DbSession, + simulation_in: SimulationInput, + current_user:CurrentUser +): + """RUN Simulation""" + + temporal_client = await Client.connect(TEMPORAL_URL) + + simulation = await create_simulation( + db_session=db_session, simulation_in=simulation_in, current_user=current_user + ) + simulation_id = simulation.id + + project = await get_project(db_session=db_session) + + sim_data = simulation_in.model_dump() + sim_data["HubCnnId"] = str(simulation_id) + sim_data["projectName"] = project.project_name + + + handle = await temporal_client.start_workflow( + SimulationWorkflow.run, + sim_data, + id=f"simulation-{simulation_id}", + task_queue="simulation-task-queue", + ) + + return { + "data": str(simulation_id), + "status": "success", + "message": "Simulation started successfully", + } + + +@router.post("/run/yearly", response_model=StandardResponse[str]) +async def run_yearly_simulation( + db_session: DbSession, + yearly_in: YearlySimulationInput, + current_user: CurrentUser +): + year = yearly_in.year + + sim_start, sim_end = year_window_utc(year) + sim_duration_hours = hours_between(sim_start, sim_end) + + # Fetch last overhaul data + last_oh_query = text(""" + SELECT start_date, end_date, duration_oh + FROM public.oh_ms_overhaul + WHERE end_date <= :sim_start + ORDER BY end_date DESC + LIMIT 1; + """) + + next_oh_query = text(""" + SELECT start_date, end_date, duration_oh + FROM public.oh_ms_overhaul + WHERE start_date >= :sim_start + ORDER BY start_date ASC + LIMIT 1; + """) + + last_overhaul = (await db_session.execute( + last_oh_query, + {"sim_start": sim_start.date()} + )).mappings().first() + + next_overhaul = (await db_session.execute( + next_oh_query, + {"sim_start": sim_start.date()} + )).mappings().first() + + offset_hours = (365 * 24) // 2 if year % 2 == 0 else ((365 * 24) // 2) + 8760; + + if last_overhaul: + last_oh_dt = date_to_utc(last_overhaul["end_date"]) + offset_hours = max( + int((sim_start - last_oh_dt).total_seconds() // 3600), + 0 + ) + + if offset_hours > 17520: + offset_hours -= 17520 + + + overhaul_interval = 8760 * 2 + overhaul_duration = 1200 + + + if next_overhaul: + next_oh_start = date_to_utc(next_overhaul["start_date"]) + next_oh_duration_hours = next_overhaul["duration_oh"] * 24 + + + overhaul_interval = int( + (next_oh_start - last_oh_dt).total_seconds() // 3600 + ) + overhaul_duration = next_oh_duration_hours + + simulation_input = SimulationInput( + SimDuration=sim_duration_hours, + DurationUnit="UHour", + OffSet=offset_hours, + OverhaulInterval=overhaul_interval, + MaintenanceOutages=0, + SimulationName=f"Simulation {year} LCCA", + IsDefault=False, + OverhaulDuration=overhaul_duration, + AhmJobId=None + ) + + temporal_client = await Client.connect(TEMPORAL_URL) + + simulation = await create_simulation( + db_session=db_session, + simulation_in=simulation_input, + current_user=current_user + ) + + project = await get_project(db_session=db_session) + + sim_data = simulation_input.model_dump() + sim_data["HubCnnId"] = str(simulation.id) + sim_data["SimulationStart"] = sim_start.isoformat() + sim_data["SimulationEnd"] = sim_end.isoformat() + sim_data["HubCnnId"] = str(simulation.id) + sim_data["projectName"] = project.project_name + + await temporal_client.start_workflow( + SimulationWorkflow.run, + sim_data, + id=f"simulation-{simulation.id}", + task_queue="simulation-task-queue", + ) + + return { + "data": str(simulation.id), + "status": "success", + "message": f"Yearly simulation {year} started (UHour mode)", + } + + +@router.get( + "/result/calc/{simulation_id}", + response_model=StandardResponse[List[SimulationCalc]], +) +async def get_simulation_result(db_session: DbSession, simulation_id, params:Annotated[SimulationCalcResultQuery, Query()]): + """Get simulation result.""" + schematic_name = params.schematic_name + node_type = params.node_type + if simulation_id == 'default': + simulation = await get_default_simulation(db_session=db_session) + simulation_id = simulation.id + + simulation_result = await get_simulation_with_calc_result( + db_session=db_session, simulation_id=simulation_id, schematic_name=schematic_name, node_type=node_type + ) + + return { + "data": simulation_result, + "status": "success", + "message": "Simulation result retrieved successfully", + } + +@router.get( + "/result/calc/{simulation_id}/plant", + response_model=StandardResponse[SimulationCalc], +) +async def get_simulation_result_plant(db_session: DbSession, simulation_id): + """Get simulation result.""" + if simulation_id == 'default': + simulation = await get_default_simulation(db_session=db_session) + simulation_id = simulation.id + + + simulation_result = await get_plant_calc_result( + db_session=db_session, simulation_id=simulation_id + ) + + return { + "data": simulation_result, + "status": "success", + "message": "Simulation result retrieved successfully", + } + + + +@router.get( + "/result/plot/{simulation_id}", + response_model=StandardResponse[List[SimulationPlot]], +) +async def get_simulation_result_plot(db_session: DbSession, simulation_id): + """Get simulation result.""" + if simulation_id == 'default': + simulation = await get_default_simulation(db_session=db_session) + simulation_id = simulation.id + + simulation_result = await get_simulation_with_plot_result( + db_session=db_session, simulation_id=simulation_id + ) + + return { + "data": simulation_result, + "status": "success", + "message": "Simulation result retrieved successfully", + } + + +@router.get( + "/result/plot/{simulation_id}/{node_id}", + response_model=StandardResponse[SimulationPlot], +) +async def get_simulation_result_plot_per_node(db_session: DbSession, simulation_id, node_id, use_location_tag: Optional[int] = Query(0)): + """Get simulation result.""" + if simulation_id == 'default': + simulation = await get_default_simulation(db_session=db_session) + simulation_id = simulation.id + + + simulation_result = await get_simulation_with_plot_result( + db_session=db_session, simulation_id=simulation_id, node_id=node_id, use_location_tag=use_location_tag + ) + + + return { + "data": simulation_result, + "status": "success", + "message": "Simulation result retrieved successfully", + } + +@router.get("/result/ranking/{simulation_id}", response_model=StandardResponse[List[SimulationRankingParameters]]) +async def get_simulation_result_ranking(db_session: DbSession, simulation_id, limit:int = Query(None, le=50)): + """Get simulation result.""" + if simulation_id == 'default': + simulation = await get_default_simulation(db_session=db_session) + simulation_id = simulation.id + + + simulation_result = await get_result_ranking(db_session=db_session, simulation_id=simulation_id, limit=limit) + + return { + "data": simulation_result, + "status": "success", + "message": "Simulation result retrieved successfully", + } + + + +@router.get("/result/critical/{simulation_id}", response_model=StandardResponse[List[SimulationCalc]]) +async def get_critical_equipment(db_session:DbSession, simulation_id: str): + # Step 1: Get all failure events for this simulation + if simulation_id == 'default': + simulation = await get_default_simulation(db_session=db_session) + simulation_id = simulation.id + + + failure_query = text(""" + SELECT DISTINCT + (elem ->> 'currentEvent') AS jenis, + (elem ->> 'cumulativeTime')::numeric AS cumulative_time + FROM rbd_tr_aeros_simulation_plot_result AS a + JOIN public.rbd_ms_aeros_node AS b + ON a.aeros_node_id = b.id + JOIN LATERAL jsonb_array_elements(a.timestamp_outs) AS elem ON TRUE + WHERE a.aeros_simulation_id = :simulation_id + AND b.node_name = '- TJB - Unit 3 -' + AND (elem ->> 'currentEQStatus') = 'OoS' + AND (elem ->> 'currentEvent') != 'ON_OH' + ORDER BY cumulative_time; + """) + + query = await db_session.execute(failure_query, { + "simulation_id": simulation_id, + }) + + failures = query.fetchall() + + results = [] + + # Step 2: For each failure, find which equipment caused it + for fail in failures: + cumulative_time = fail.cumulative_time + jenis = fail.jenis + + equipment_query = text(""" + SELECT b.id + FROM rbd_tr_aeros_simulation_plot_result AS a + JOIN public.rbd_ms_aeros_node AS b ON a.aeros_node_id = b.id + WHERE EXISTS ( + SELECT 1 + FROM jsonb_array_elements(a.timestamp_outs) AS elem + WHERE + (elem ->> 'currentEQStatus') = 'OoS' + AND ABS((elem ->> 'cumulativeTime')::numeric - :cumulative_time) <= 2 + ) + AND a.aeros_simulation_id = :simulation_id + AND b.node_type = 'RegularNode'; + """) + + equipment = (await db_session.execute(equipment_query, { + "simulation_id": simulation_id, + "cumulative_time": cumulative_time + })).fetchall() + + equipment_list = [eq.id for eq in equipment] + + results.extend(equipment_list) + + query = (select(AerosSimulationCalcResult).filter( + AerosSimulationCalcResult.aeros_simulation_id == simulation_id)).filter(AerosSimulationCalcResult.aeros_node_id.in_(results)) + + query = query.options( + selectinload(AerosSimulationCalcResult.aeros_node).options( + selectinload(AerosNode.equipment) + )) + + data = await db_session.execute(query) + + equipments = data.scalars().all() + + return { + "data": equipments, + "status": "success", + "message": "Success", + } + + +@router.get("/report/{simulation_id}", response_class=StreamingResponse) +async def get_simulation_report(db_session: DbSession, simulation_id: str): + """ + Generate Excel report for the simulation. + Sheet 1: Summary result (ead, efor, etc for system) + Sheet 2: Asset/equipment data (equip name, location tag, sub system, downtime, uptime, failure) + """ + if simulation_id == 'default': + simulation = await get_default_simulation(db_session=db_session) + if not simulation: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Default simulation not found") + simulation_id = simulation.id + else: + simulation = await get_simulation_by_id(db_session=db_session, simulation_id=simulation_id) + if not simulation: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Simulation not found") + + # 1. Get system results (Sheet 1) + # The system result usually has node_name == "- TJB - Unit 3 -" + system_result = await get_plant_calc_result(db_session=db_session, simulation_id=simulation_id) + if not system_result: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="System result not found") + + # 2. Get asset results (Sheet 2) + asset_results = await get_simulation_with_calc_result( + db_session=db_session, + simulation_id=simulation_id, + node_type="RegularNode" + ) + + # 3. Prepare DataFrames + # Sheet 1: Summary + summary_data = [{ + "Simulation Name": simulation.simulation_name, + "System Name": system_result.aeros_node.node_name, + "EAF (%)": system_result.eaf, + "EFOR (%)": system_result.efor, + "EAD (Hours)": system_result.derating_hours, + "SOF (Hours)": system_result.sof, + "Total Uptime (Hours)": system_result.total_uptime, + "Total Downtime (Hours)": system_result.total_downtime, + }] + df_summary = pd.DataFrame(summary_data) + + # Sheet 2: Equipment Data + equipment_data = [] + for res in asset_results: + node = res.aeros_node + equip_name = node.node_name + # node.equipment is a relationship to MasterEquipment + if hasattr(node, "equipment") and node.equipment: + equip_name = node.equipment.name or node.node_name + + equipment_data.append({ + "Equipment Name": equip_name, + "Location Tag": node.node_name, + "Sub System": node.structure_name, + "Uptime (Hours)": res.total_uptime, + "Downtime (Hours)": res.total_downtime, + "Failure (Events)": res.num_cm # num_cm is Corrective Maintenance / Failure + }) + df_equipment = pd.DataFrame(equipment_data) + + # 4. Create Excel in memory + output = io.BytesIO() + # Use xlsxwriter if available, fallback to default + try: + with pd.ExcelWriter(output, engine="xlsxwriter") as writer: + df_summary.to_excel(writer, sheet_name="Summary Result", index=False) + df_equipment.to_excel(writer, sheet_name="Asset Equipment Data", index=False) + except Exception: + with pd.ExcelWriter(output) as writer: + df_summary.to_excel(writer, sheet_name="Summary Result", index=False) + df_equipment.to_excel(writer, sheet_name="Asset Equipment Data", index=False) + + output.seek(0) + + filename = f"RBD_MONTHLY_REPORT_{datetime.now().strftime('%Y%m%d')}.xlsx" + headers = { + "Content-Disposition": f'attachment; filename="{filename}"' + } + return StreamingResponse( + output, + headers=headers, + media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + ) + + +@router.get("/forecast/eaf", response_model=StandardResponse[str]) +async def get_forecast_eaf( + db_session: DbSession, + time_range: str = Query(..., alias="range", regex="^(weekly|monthly)$"), +): + """ + Trigger a forecasted EAF simulation for the next week or month using Temporal. + Calculates offset from 'Last Overhaul Date' in master data. + """ + from src.dashboard_model.service import _get_or_create_master_data + from .schema import SimulationInput + + # 1. Get current time + now = datetime.now().replace(tzinfo=None) + + # 2. Determine Last Overhaul Date from Master Data + oh_record = await _get_or_create_master_data(db_session, "Last Overhaul Date", 0) + next_oh = await _get_or_create_master_data(db_session, "Next Overhaul Date", 0) + + # If not set, use a fallback (e.g., start of current year) + if not oh_record.value_string: + oh_date_str = f"{now.year}-01-01T00:00:00" + else: + oh_date_str = oh_record.value_string + + try: + # Ensure oh_date is naive + oh_date = datetime.fromisoformat(oh_date_str).replace(tzinfo=None) + next_oh_date = datetime.fromisoformat(next_oh.value_string).replace(tzinfo=None) + except Exception: + oh_date = datetime(now.year, 1, 1).replace(tzinfo=None) + + oh_interval = hours_between(oh_date, next_oh_date) + duration = 168 if time_range == "weekly" else 720 + end_date = now + timedelta(hours=duration) + duration_simulation = hours_between(oh_date, end_date) + project = await get_project(db_session=db_session) + + # 5. Create Simulation Request + sim_in = SimulationInput( + SchematicName="- TJB - Unit 3 -", + SimulationName=f"Simulation_{time_range}_{now.strftime('%Y%m%d')}", + SimDuration=duration_simulation, + DurationUnit="UHour", + OffSet=0, + SimSeed=99, + SimNumRun=1, + IsDefault=False, + OverhaulInterval=oh_interval + ) + + # 6. Initialize Simulation in DB + simulation = await create_simulation( + db_session=db_session, + simulation_in=sim_in, + current_user=None + ) + simulation_id = simulation.id + + # 7. Start Temporal Workflow + temporal_client = await Client.connect(TEMPORAL_URL) + + sim_data = sim_in.model_dump() + sim_data["HubCnnId"] = str(simulation_id) + sim_data["projectName"] = project.project_name + + await temporal_client.start_workflow( + SimulationWorkflow.run, + sim_data, + id=f"simulation-{simulation_id}", + task_queue="simulation-task-queue", + ) + + forecast_msg = ( + f"Forecast simulation started via Temporal. " + f"Period: {oh_date.strftime('%Y-%m-%d')} to {end_date.strftime('%Y-%m-%d')}" + ) + + return StandardResponse( + data=str(simulation_id), + message=forecast_msg + ) + + + + +@router.get("/custom_parameters", response_model=StandardResponse[list]) +async def get_custom_parameters_controller(db_session: DbSession): + """Get simulation result.""" + latest_simulation = await get_simulation_by_id( + db_session=db_session, simulation_id=None, is_completed=True + ) + custom_parameters = await get_custom_parameters( + db_session=db_session, simulation_id=latest_simulation.id + ) + + results = [{node.aeros_node.node_name: node.eaf} for node in custom_parameters] + + return { + "data": results, + "status": "success", + "message": "Simulation result retrieved successfully", + } + + +@router.get("/metrics/{simulation_id}", response_model=StandardResponse[list]) +async def get_metric_controller(db_session: DbSession, simulation_id:UUID): + """Get simulation result.""" + results = await calculate_plant_eaf(db_session, simulation_id, 0, 1200, 15000, 0) + + + return { + "data": results, + "status": "success", + "message": "Simulation result retrieved successfully", + } + +@router.post("/ahm_metrics", response_model=StandardResponse[dict]) +async def get_ahm_metrics_controller(db_session: DbSession, metrics_in:AhmMetricInput): + simulation_result = await get_plant_calc_result( + db_session=db_session, simulation_id=metrics_in.target_simulation_id + ) + + default_simulation_id = metrics_in.baseline_simulation_id if metrics_in.baseline_simulation_id else (await get_default_simulation(db_session=db_session)).id + + default_simulation_result = await get_plant_calc_result( + db_session=db_session, simulation_id=default_simulation_id + ) + + result = { + "eaf_before": default_simulation_result.eaf, + "eaf_after": simulation_result.eaf, + "efor_before": default_simulation_result.efor, + "efor_after": simulation_result.efor, + "eaf_delta": simulation_result.eaf - default_simulation_result.eaf, + "efor_delta": simulation_result.efor - default_simulation_result.efor, + } + + + return { + "data": result, + "status": "success", + "message": "Simulation result retrieved successfully", + } + + +airflow_router = APIRouter() + +@airflow_router.post("/calculate_eaf_contribution", response_model=StandardResponse[dict]) +async def calculate_contribution( + db_session: DbSession, + aeros_db_session: CollectorDbSession, + simulation_in: SimulationInput, + batch_num: int = Query(0, ge=0) +): + """RUN Simulation""" + + #simulation_id = "2e0755bf-8cce-4743-9659-8d9920d556e7" + project = await get_project(db_session=db_session) + main_edh = 1.5000000000000966 + main_efficiency_uptime = 697.5303030303029 - 1.5000000000000966 + + try: + contribution_results = defaultdict() + simulations_eq = select(AerosEquipment) + eaf_contributions_data = [] + + eqs = (await db_session.execute(simulations_eq)).scalars().all() + + batch_size = 20 + start_index = batch_num * batch_size + end_index = start_index + batch_size + + + if start_index >= len(eqs): + return { + "data": contribution_results, + "status": "success", + "message": "No more equipment to process", + } + + if end_index > len(eqs): + end_index = len(eqs) + + + + eqs = eqs[start_index:end_index] + for eq in eqs: + simulation = await create_simulation( + db_session=db_session, simulation_in=simulation_in + ) + + sim_data = simulation_in.model_dump(exclude={"SimulationName"}) + sim_data["HubCnnId"] = str(simulation.id) + sim_data["projectName"] = project.project_name + + custom_input = { + eq.node_name: { + "mttr": 721, + "failure_rate": 0.01, + } + } + + results = await update_equipment_for_simulation( + db_session=db_session, + aeros_db_session=aeros_db_session, + project_name=project.project_name, + simulation_duration=simulation_in.SimDuration, + overhaul_duration=simulation_in.OverhaulDuration, + overhaul_interval=simulation_in.OverhaulInterval, + offset=simulation_in.OffSet, + schematic_name=simulation_in.SchematicName, + custom_input=custom_input + ) + + # await update_simulation( + # db_session=db_session, simulation_id=simulation_id, data={"reliability": results} + # ) + + await execute_simulation( + db_session=db_session, + simulation_id=simulation.id, + sim_data=sim_data, + is_saved=True, + eq_update=results['reliability'] + ) + + eaf, edh, efficiency_uptime = await calculate_plant_eaf(db_session=db_session, simulation_id=simulation.id) + + eaf_contribution = (main_efficiency_uptime - efficiency_uptime)/main_efficiency_uptime if main_efficiency_uptime else 0 + + contribution_results[eq.node_name] = { + "eaf": eaf, + "edh": edh, + "efficiency_uptime": efficiency_uptime, + "eaf_contribution": eaf_contribution + } + + eaf_conf = EafContribution( + location_tag=eq.node_name, + eaf_contribution=eaf_contribution, + efficiency_uptime=efficiency_uptime, + edh=edh, + ) + + eaf_contributions_data.append(eaf_conf) + + await db_session.delete(simulation) + await db_session.commit() + + db_session.add_all(eaf_contributions_data) + await db_session.commit() + return { + "data": contribution_results, + "status": "success", + "message": "Simulation created successfully", + } + + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e) + ) + diff --git a/src/aeros_simulation/schema.py b/src/aeros_simulation/schema.py new file mode 100644 index 0000000..f29e605 --- /dev/null +++ b/src/aeros_simulation/schema.py @@ -0,0 +1,139 @@ +from datetime import datetime +from typing import List, Optional +from uuid import UUID + +from pydantic import Field + +from src.database.schema import CommonParams +from src.database.service import CommonParameters +from src.models import DefultBase, Pagination +from src.aeros_equipment.schema import MasterEquipment, EquipmentWithCustomParameters + +# Pydantic models for request/response validation +class SimulationInput(DefultBase): + SchematicName: str = Field("- TJB - Unit 3 -", max_length=100) + SimSeed: int = 1 + SimDuration: int = 3 + DurationUnit: str = Field("UYear", max_length=20) + SimNumRun: int = 1 + SimulationName: str = Field("DefaultSimulation", max_length=100, pattern=r"^[a-zA-Z0-9_\-\s]+$") + CustomInput: dict = {} + IsDefault:bool = False + Konkin_offset: Optional[int] = 0 + OffSet: Optional[int] = 0 + MaintenanceOutages: Optional[int] = 0 + PlannedOutages: Optional[int] = 0 + OverhaulInterval: Optional[int] = Field(0) + OverhaulDuration: Optional[int] = Field(1200) + AhmJobId: Optional[str] = Field(None, max_length=50) + deratings: Optional[List[dict]] = [] + maintenance_outages: Optional[List[dict]] = [] + CallbackWorkflowId: Optional[str] = Field(None, max_length=100) + +class SimulationNode(DefultBase): + id: UUID + node_type: Optional[str] = Field(None, max_length=50) + node_id: Optional[int] + node_name: Optional[str] = Field(None, max_length=100) + structure_name: Optional[str] = Field(None, max_length=100) + schematic_name: Optional[str] = Field(None, max_length=100) + schematic_id: Optional[UUID] + model_image: Optional[list] = Field(None) + equipment:Optional[MasterEquipment] = None + +class SimulationCalc(DefultBase): + id: UUID + total_downtime: float + total_uptime: float + num_events: float + production: float + production_std: float + ideal_production: float + availability: float + efficiency: float + effective_loss: float + num_cm: float + cm_waiting_time: float + total_cm_downtime: float + num_pm: float + total_pm_downtime: float + num_ip: float + total_ip_downtime: float + num_oh: float + total_oh_downtime: float + t_wait_for_crew: float + t_wait_for_spare: float + duration_at_full: float + duration_above_hh: float + duration_above_h: float + duration_below_l: float + duration_below_ll: float + duration_at_empty: float + stg_input: float + eaf: float + eaf_konkin: Optional[float] + efor: Optional[float] + derating_hours: Optional[float] + aeros_node: SimulationNode + contribution: Optional[float] = 0 + criticality: Optional[float] + contribution_factor: Optional[float] + sof: Optional[float] + +class SimulationPlot(DefultBase): + id: UUID + max_flow_rate: float + storage_capacity: float + point_availabilities: list + point_flowrates: list + timestamp_outs: list + aeros_node: SimulationNode + + + +class SimulationNodeWithResult(SimulationNode): + calc_results: List[SimulationCalc] + + +class SimulationCalcResult(DefultBase): + id: UUID + calc_results: List[SimulationCalc] + + +class SimulationPlotResult(DefultBase): + id: UUID + plot_results: List[SimulationPlot] + +class SimulationData(DefultBase): + id: UUID + simulation_name: str = Field(..., max_length=100) + status: str = Field(..., max_length=20) + schematic_name: str = Field(..., max_length=100) + created_at: datetime + started_at: datetime + duration: Optional[int]= 0 + offset:Optional[int] = 0 + +class SimulationRankingParameters(EquipmentWithCustomParameters): + availability:float + + +class SimulationPagination(Pagination): + items: List[SimulationData] = [] + + +class AhmMetricInput(DefultBase): + target_simulation_id: str = Field(..., max_length=50) + baseline_simulation_id: Optional[str] = Field(None, max_length=50) + +class YearlySimulationInput(DefultBase): + year: int + + +class SimulationQueryModel(CommonParams): + status: Optional[str] = Field(None, max_length=20) + + +class SimulationCalcResultQuery(DefultBase): + schematic_name: Optional[str] = Field(None, max_length=100) + node_type: Optional[str] = Field(None, alias="nodetype", max_length=50) \ No newline at end of file diff --git a/src/aeros_simulation/service.py b/src/aeros_simulation/service.py new file mode 100644 index 0000000..7f467d4 --- /dev/null +++ b/src/aeros_simulation/service.py @@ -0,0 +1,1047 @@ +from datetime import datetime +import json +import os +import tempfile +from typing import Optional +from uuid import uuid4, uuid4, UUID +import logging +import httpx +from fastapi import HTTPException, status +import ijson +from sqlalchemy import delete, desc, select, update, and_ +from sqlalchemy.orm import selectinload + +from src.config import DEFAULT_PROJECT_NAME +from src.aeros_utils import aeros_post +from src.database.core import DbSession +from src.database.service import CommonParameters, search_filter_sort_paginate +from src.utils import save_to_pastebin +import aiohttp +import asyncio +log = logging.getLogger(__name__) + +from .model import ( + AerosNode, + AerosSimulation, + AerosSimulationCalcResult, + AerosSimulationPlotResult, + AerosSchematic +) +from src.aeros_equipment.model import AerosEquipment, AerosEquipmentCustomParameterData +from src.aeros_equipment.schema import EquipmentWithCustomParameters +from .schema import SimulationInput, SimulationPlotResult, SimulationRankingParameters +from .utils import calculate_eaf, stream_large_array + +# client = httpx.AsyncClient(timeout=300.0) # Managed in src.aeros_utils +active_simulations = {} + +async def call_ahm_callback_service(simulation_id: str, job_id: str): + from src.config import AHM_BASE_URL, AHM_SIMULATION_CALLBACK_URL + url = f"{AHM_BASE_URL.rstrip('/')}/{AHM_SIMULATION_CALLBACK_URL.lstrip('/')}" + payload = { + "simulation_id": simulation_id, + "job_id": job_id, + "status": "completed" + } + + async with httpx.AsyncClient() as client: + resp = await client.post(url, json=payload, timeout=10.0) + resp.raise_for_status() + return True + + +# Get Data Service +async def get_all(common, current_user): + query = select(AerosSimulation).order_by(desc(AerosSimulation.created_at)) + # query = query.where(AerosSimulation.status == "completed") + if current_user.role.lower() != "admin": + query = query.where(AerosSimulation.created_by == current_user.user_id) + + results = await search_filter_sort_paginate(model=query, **common) + + return results + +async def get_all_aeros_node(*, db_session: DbSession, schematic_name: Optional[str] = None): + query = select(AerosNode) + + if schematic_name: + aeros_schematic = await get_aeros_schematic_by_name(db_session=db_session, schematic_name=schematic_name) + + if not aeros_schematic: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Schematic not found") + + query = query.where(AerosNode.aeros_schematic_id == aeros_schematic.id) + + results = await db_session.execute(query) + return results.scalars().all() + +async def get_simulation_by_id( + *, + db_session: DbSession, + simulation_id: Optional[UUID] = None, + is_completed: bool = False, + for_update: bool = False, +): + """Get a simulation by id.""" + query = select(AerosSimulation) + + if is_completed: + query = query.where(AerosSimulation.status == "completed") + + if simulation_id: + query = query.where(AerosSimulation.id == simulation_id) + else: + query = query.order_by(AerosSimulation.created_at.desc()).limit(1) + + if for_update: + query = query.with_for_update() + + results = await db_session.execute(query) + return results.scalar() + +async def get_default_simulation( + *, + db_session:DbSession +): + query = select(AerosSimulation) + query = query.where(AerosSimulation.status == "completed").where(AerosSimulation.is_default == True) + query = query.order_by(AerosSimulation.created_at.desc()).limit(1) + + results = await db_session.execute(query) + return results.scalar() + + +async def get_simulation_node_by(*, db_session: DbSession, for_update: bool = False, **kwargs): + """Get a simulation node by column.""" + # Build WHERE conditions from kwargs + conditions = [] + for key, value in kwargs.items(): + if key in AerosNode.__table__.columns: + conditions.append(AerosNode.__table__.columns[key] == value) + + if not conditions: + raise ValueError("No valid column conditions provided") + + query = select(AerosNode).where(*conditions) + if for_update: + query = query.with_for_update() + + result = await db_session.execute(query) + return result.scalar() + +async def get_or_save_node(*, db_session: DbSession, node_data: dict, type: str = "calc"): + """Get a simulation node by column.""" + node = await get_simulation_node_by( + db_session=db_session, node_name=node_data["nodeName"], for_update=True + ) + + + if not node: + print("Creating new node") + if type == "calc": + print("Creating calc node") + node = AerosNode( + node_name=node_data["nodeName"], + node_type=node_data["nodeType"], + node_id=convert_id_to_none_if_negative(node_data["nodeId"]), + original_node_id=convert_id_to_none_if_negative(node_data["originalNodeId"]), + structure_name=node_data["structureName"], + schematic_name=node_data["schematicName"], + schematic_id=None, + original_schematic_id=convert_id_to_none_if_negative( + node_data["originalSchematicId"] + ), + ref_schematic_id=convert_id_to_none_if_negative(node_data["refSchematicId"]), + orignal_ref_schematic_id=convert_id_to_none_if_negative( + node_data["orinalRefSchematic"] + ), + ) + else: + print("Creating plot node") + nodeId = convert_id_to_none_if_negative(node_data["nodeId"]) + nodeName = node_data["nodeName"] + node = AerosNode( + node_name=nodeName, + node_type=node_data["nodeType"], + node_id=nodeId, + original_node_id=convert_id_to_none_if_negative(node_data["originalNodeId"]), + schematic_name=node_data["schematicName"], + schematic_id=None, + original_schematic_id=convert_id_to_none_if_negative( + node_data["originalParentSchematicId"] + ), + ref_schematic_id=convert_id_to_none_if_negative(node_data["targetSchematicId"]), + orignal_ref_schematic_id=convert_id_to_none_if_negative( + node_data["originalTargetSchematicId"] + ), + ) + + + db_session.add(node) + await db_session.commit() + + return node + +async def get_aeros_schematic_by_name(*, db_session: DbSession, schematic_name: str): + query = select(AerosSchematic).where(AerosSchematic.schematic_name == schematic_name) + results = await db_session.execute(query) + return results.scalar_one_or_none() + +async def get_simulation_with_calc_result( + *, db_session: DbSession, simulation_id: UUID, aeros_node_id: Optional[UUID] = None, schematic_name: Optional[str] = None, node_type: Optional[str] = None +): + """Get a simulation by id.""" + query = (select(AerosSimulationCalcResult).filter( + AerosSimulationCalcResult.aeros_simulation_id == simulation_id)) + + if schematic_name: + if schematic_name == "WTP": + query = query.join( + AerosNode, AerosNode.id == AerosSimulationCalcResult.aeros_node_id + ).filter(AerosNode.node_name.contains("WTP")) + else: + query = query.join( + AerosNode, AerosNode.id == AerosSimulationCalcResult.aeros_node_id + ).filter(AerosNode.structure_name.contains(schematic_name)) + + if node_type: + query = query.join( + AerosNode, AerosNode.id == AerosSimulationCalcResult.aeros_node_id + ).filter(AerosNode.node_type == node_type) + + query = query.options( + selectinload(AerosSimulationCalcResult.aeros_node).options( + selectinload(AerosNode.equipment) + )) + + simulation = await db_session.execute(query) + + return simulation.scalars().all() + +async def get_plant_calc_result( + *, db_session, simulation_id: UUID +): + query = (select(AerosSimulationCalcResult).filter( + AerosSimulationCalcResult.aeros_simulation_id == simulation_id, + ).join(AerosNode, AerosNode.id == AerosSimulationCalcResult.aeros_node_id) + .filter(AerosNode.node_name == "- TJB - Unit 3 -")) + + query = query.options( + selectinload(AerosSimulationCalcResult.aeros_node).options( + selectinload(AerosNode.equipment) + )) + + calc = await db_session.execute(query) + + return calc.scalar_one_or_none() + +async def get_result_ranking(*, db_session: DbSession, simulation_id: UUID, limit: Optional[int]): + + query = select(AerosEquipment, AerosSimulationCalcResult.availability).join(AerosNode, AerosNode.node_name == AerosEquipment.node_name).join(AerosSimulationCalcResult, AerosSimulationCalcResult.aeros_node_id == AerosNode.id) + + query = query.filter( + and_( + AerosSimulationCalcResult.aeros_simulation_id == simulation_id, + AerosNode.node_type == "RegularNode", + # AerosEquipment.custom_parameters.any() + ) + ) + + query = query.order_by(AerosSimulationCalcResult.availability.asc()) + + if limit: + query = query.limit(limit) + + + query = query.options( + selectinload(AerosEquipment.custom_parameters)).options( + selectinload(AerosEquipment.master_equipment) + ) + + result = await db_session.execute(query) + + data = [ + SimulationRankingParameters( + location_tag=equipment.location_tag, + master_equipment=equipment.master_equipment, + custom_parameters=equipment.custom_parameters, + availability=availability + ) + for equipment, availability in result + ] + + return data + + +async def get_simulation_with_plot_result( + *, db_session: DbSession, simulation_id: UUID, node_type: Optional[str] = None, node_id: Optional[str] = None, use_location_tag:Optional[int] = 0 +): + """Get a simulation by id.""" + # query = ( + # select(AerosSimulation) + # .where(AerosSimulation.id == simulation_id) + # .options( + # selectinload(AerosSimulation.plot_results).options( + # selectinload(AerosSimulationPlotResult.aeros_node) + # ) + # ) + # ) + + # if node_type: + # query = query.join( + # AerosNode, AerosNode.id == AerosSimulation.plot_results.aeros_node_id + # ).filter(AerosNode.node_type == node_type) + + # if node_id: + # if node_id == 'plant': + # query = query.join( + # AerosNode, AerosNode.id == AerosSimulation.plot_results.aeros_node_id + # ).filter(AerosNode.node_name == '- TJB - Unit 3 -') + # else: + # query = query.join( + # AerosNode, AerosNode.id == AerosSimulation.plot_results.aeros_node_id + # ).filter(AerosNode.id == node_id) + + # simulation = await db_session.execute(query) + # return simulation.scalar() + + query = select(AerosSimulationPlotResult).where( + AerosSimulationPlotResult.aeros_simulation_id == simulation_id + ).options(selectinload(AerosSimulationPlotResult.aeros_node)) + + if node_id: + if node_id == 'plant': + query = query.join( + AerosNode, AerosNode.id == AerosSimulationPlotResult.aeros_node_id + ).filter(AerosNode.node_name == '- TJB - Unit 3 -') + elif use_location_tag: + query = query.join( + AerosNode, AerosNode.id == AerosSimulationPlotResult.aeros_node_id + ).filter(AerosNode.node_name == node_id).filter(AerosNode.node_type == "RegularNode") + else: + query = query.join( + AerosNode, AerosNode.id == AerosSimulationPlotResult.aeros_node_id + ).filter(AerosNode.id == node_id) + + res = await db_session.execute(query) + return res.scalar_one_or_none() + + simulation_plots = await db_session.execute(query) + return simulation_plots.scalars().all() + +async def get_calc_result_by( + *, db_session: DbSession, simulation_id: UUID, node_name: Optional[str] = None +): + """Get a simulation node by column.""" + # Build WHERE conditions from kwargs + query = select(AerosSimulationCalcResult).where( + AerosSimulationCalcResult.aeros_simulation_id == simulation_id + ) + + if node_name: + query = query.join(AerosSimulationCalcResult.aeros_node).filter(AerosNode.node_name == node_name) + + result = await db_session.execute(query) + return result.scalar() + + +async def get_custom_parameters(*, db_session: DbSession, simulation_id: UUID): + """Get a simulation node by column.""" + # Build WHERE conditions from kwargs + query = select(AerosSimulationCalcResult).where( + AerosSimulationCalcResult.aeros_simulation_id == simulation_id + ) + query = query.join( + AerosNode, AerosNode.id == AerosSimulationCalcResult.aeros_node_id + ) + query = query.where(AerosNode.node_type == "RegularNode") + query = ( + query.order_by(AerosSimulationCalcResult.eaf.desc()) + .limit(20) + .options(selectinload(AerosSimulationCalcResult.aeros_node)) + ) + result = await db_session.execute(query) + return result.scalars().all() + +async def get_regular_nodes_by_schematic(*, db_session: DbSession, schematic_name: str) -> set[UUID]: + """ + Get all regular node IDs that are descendants of a given schematic (system or subsystem). + Uses recursive CTE to traverse the hierarchy. + """ + + # Using recursive CTE to find all descendants + # First, find the root node(s) with the given schematic name + root_cte = ( + select(AerosNode.id, AerosNode.schematic_id, AerosNode.ref_schematic_id,AerosNode.node_type, AerosNode.node_name) + .where(AerosNode.node_name == schematic_name) + .cte(name="hierarchy", recursive=True) + ) + + # Recursive part: find all children + children_cte = ( + select(AerosNode.id, AerosNode.schematic_id,AerosNode.ref_schematic_id ,AerosNode.node_type, AerosNode.node_name) + .select_from( + AerosNode.join(root_cte, AerosNode.schematic_id == root_cte.c.ref_schematic_id) + ) + ) + + # Union the base case and recursive case + hierarchy_cte = root_cte.union_all(children_cte) + + # Final query to get only regular nodes from the hierarchy + query = ( + select(hierarchy_cte.c.id) + .where(hierarchy_cte.c.node_type == "RegularNode") # Adjust this condition based on your node_type values + ) + + result = await db_session.execute(query) + return set(result.scalars().all()) + + +async def get_all_schematic_aeros(*, db_session: DbSession): + query = select(AerosSchematic) + results = await db_session.execute(query) + return results.scalars().all() + + + + +# Aeros Simulation Execution Service + +async def execute_simulation(*, db_session: DbSession, simulation_id: Optional[UUID] = None, sim_data: dict, is_saved: bool = False, eq_update: dict = None): + """Execute the actual simulation call""" + if eq_update is None: + eq_update = {} + print("Executing simulation with id: %s", simulation_id, sim_data["SchematicName"]) + tmpfile = os.path.join(tempfile.gettempdir(), "simulation.json") + + if os.path.exists(tmpfile): + os.remove(tmpfile) + + try: + if not is_saved: + response = await aeros_post( + "/api/Simulation/RunSimulation", + json=sim_data, + headers={"Content-Type": "application/json"}, + ) + response.raise_for_status() + result = response.json() + + return result + + simulation = await get_simulation_by_id( + db_session=db_session, simulation_id=simulation_id, for_update=True + ) + + if simulation.status in ["processing", "completed"]: + # Prevent TOCTOU concurrent duplicate running + print(f"Simulation {simulation_id} is already {simulation.status}") + return True + + simulation.status = "processing" + await db_session.commit() + + print("Simulation started with id: %s", simulation.id) + + # if not os.path.exists(tmpfile): + # Using aeros_post wrapper which uses LicensedSession + response = await aeros_post( + "/api/Simulation/RunSimulation", + stream=True, + json=sim_data + ) + file_obj = response.raw + + await save_simulation_result( + db_session=db_session, simulation_id=simulation.id, schematic_name=sim_data["SchematicName"], eq_update=eq_update, file_path=file_obj + ) + print("Simulation completed with id: %s", simulation.id) + simulation.status = "completed" + simulation.completed_at = datetime.now() + await db_session.commit() + return True + + except Exception as e: + simulation = await get_simulation_by_id( + db_session=db_session, simulation_id=simulation_id + ) + simulation.status = "failed" + simulation.error = str(e) + await db_session.commit() + + log.error("Simulation failed with error: %s", str(e)) + + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e) + ) from e + + +async def save_simulation_result_streaming( + *, db_session: DbSession, simulation, response_stream, schematic_name: str, eq_update: dict +): + """Save simulation result by streaming and processing in batches.""" + print("Saving simulation result (streaming)") + + # Pre-load available nodes once + available_nodes = { + f"{node.node_type}:{node.node_name}": node + for node in await get_all_aeros_node(db_session=db_session, schematic_name=schematic_name) + } + + batch_size = 100 # Adjust based on your needs + + try: + # Process calc results in batches + await process_calc_results_streaming( + db_session, simulation.id, response_stream, available_nodes, eq_update, batch_size + ) + + # # Process plot results in batches + # await process_plot_results_streaming( + # db_session, simulation_id, response_stream, available_nodes, batch_size + # ) + + # Update simulation status + simulation.status = "completed" + simulation.completed_at = datetime.now() + await db_session.commit() + + except Exception as e: + simulation.status = "failed" + simulation.error = str(e) + await db_session.commit() + + log.error("Simulation failed with error: %s", str(e)) + + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e) + ) from e + +async def process_calc_results_streaming( + db_session, simulation_id, response_stream, available_nodes, eq_update, batch_size +): + """Process calc results in streaming batches.""" + calc_batch = [] + + # Parse nodeResultOuts array incrementally + calc_results = ijson.items(response_stream, 'nodeResultOuts.item') + + raise Exception(calc_results) + + async for result in calc_results: + calc_obj = await create_calc_result_object( + simulation_id, result, available_nodes, eq_update, db_session + ) + if calc_obj: + calc_batch.append(calc_obj) + + # Save batch when it reaches batch_size + if len(calc_batch) >= batch_size: + db_session.add_all(calc_batch) + await db_session.commit() + calc_batch.clear() + + # Save remaining items + if calc_batch: + db_session.add_all(calc_batch) + await db_session.commit() + +async def create_calc_result_object( + simulation_id, result, available_nodes, eq_update, db_session +) : + """Create a single calc result object.""" + node_type = "RegularNode" if result["nodeType"] == "RegularNode" else "SchematicNode" + node = available_nodes.get(f"{node_type}:{result['nodeName']}") + + if not node: + if result["nodeType"] not in ["RegularNode", "Schematic"]: + return None + node = await get_or_save_node(db_session=db_session, node_data=result, type="calc") + # Add to available_nodes for future use + available_nodes[f"{node_type}:{result['nodeName']}"] = node + + eq_reliability = eq_update.get(result["nodeName"], { + "eta": 0, "beta": 0, "mttr": 0, "parameters": {} + }) + + eaf, derating_hours = calculate_eaf( + available_hours=result["totalUpTime"], + period_hours=result["totalUpTime"] + result["totalDowntime"], + actual_production=result["production"], + ideal_production=result["idealProduction"], + downtime_hours=result["totalDowntime"] + ) + + efor = (result["totalDowntime"] / (result["totalDowntime"] + result["totalUpTime"])) * 100 if (result["totalDowntime"] + result["totalUpTime"]) > 0 else 0 + + return AerosSimulationCalcResult( + aeros_simulation_id=simulation_id, + aeros_node_id=node.id, + total_downtime=result["totalDowntime"], + total_uptime=result["totalUpTime"], + num_events=result["numEvents"], + production=result["production"], + production_std=result["productionStd"], + ideal_production=result["idealProduction"], + availability=result["availability"], + efficiency=result["efficiency"], + effective_loss=result["effectiveLoss"], + num_cm=result["numCM"], + cm_waiting_time=result["cmWaitingTime"], + total_cm_downtime=result["totalCMDowntime"], + num_pm=result["numPM"], + total_pm_downtime=result["totalPMDowntime"], + num_ip=result["numIP"], + total_ip_downtime=result["totalIPDowntime"], + num_oh=result["numOH"], + total_oh_downtime=result["totalOHDowntime"], + t_wait_for_crew=result["tWaitForCrew"], + t_wait_for_spare=result["tWaitForSpare"], + duration_at_full=result["durationAtFull"], + duration_above_hh=result["durationAboveHH"], + duration_above_h=result["durationAboveH"], + duration_below_l=result["durationBelowL"], + duration_below_ll=result["durationBelowLL"], + duration_at_empty=result["durationAtEmpty"], + stg_input=result["stgInput"], + stg_output=result["stgOutput"], + average_level=result["averageLevel"], + potential_production=result["potentialProduction"], + eaf=eaf, + efor=efor, + derating_hours=derating_hours, + beta=eq_reliability["beta"] if node_type == "RegularNode" else None, + eta=eq_reliability["eta"] if node_type == "RegularNode" else None, + mttr=eq_reliability["mttr"] if node_type == "RegularNode" else None, + parameters=eq_reliability["parameters"] if node_type == "RegularNode" else None + ) + + +async def save_simulation_result( + *, db_session: DbSession, simulation_id: UUID, schematic_name: str, eq_update: dict, file_path +): + print("Saving simulation result") + """Save the simulation result.""" + # calc_result = result["nodeResultOuts"] + # plot_result = result["plotNodeOuts"] + + """Save the simulation result""" + available_nodes = { + f"{node.node_type}:{node.node_name}": node + for node in await get_all_aeros_node(db_session=db_session, schematic_name=schematic_name) + } + # calc_objects = [] + plot_objects = [] + + + try: + # for result in plot_result: + # node_type = "RegularNode" if result["nodeType"] == "RegularNode" else "SchematicNode" + # node = avaiable_nodes.get(f"{node_type}:{result['nodeName']}", None) + # if not node: + # if result["nodeType"] != "RegularNode" and result["nodeType"] != "Schematic": + # continue + # node = await get_or_save_node( + # db_session=db_session, node_data=result, type="plot" + # ) + + # plot_result = AerosSimulationPlotResult( + # aeros_simulation_id=simulation_id, + # aeros_node_id=node.id, + # max_flow_rate=result["maxFlowrate"], + # storage_capacity=result["storageCapacity"], + # point_availabilities=result["pointAvailabilities"], + # point_flowrates=result["pointFlowrates"], + # timestamp_outs=result["timeStampOuts"], + # ) + + # plot_objects.append(plot_result) + + # for result in calc_result: + # node_type = "RegularNode" if result["nodeType"] == "RegularNode" else "SchematicNode" + # node = avaiable_nodes.get(f"{node_type}:{result['nodeName']}", None) + + # eq_reliability = eq_update.get(result["nodeName"], { + # "eta": 0, + # "beta": 0, + # "mttr": 0, + # "parameters": {} + # }) + + # # plot_data = next(plot for plot in plot_objects if plot.aeros_node_id == node.id) if node else {} + + + # if not node: + # if result["nodeType"] != "RegularNode" and result["nodeType"] != "Schematic": + # continue + # node = await get_or_save_node( + # db_session=db_session, node_data=result, type="calc" + # ) + + # eaf, derating_hours = calculate_eaf( + # available_hours=result["totalUpTime"], + # period_hours=result["totalUpTime"] + result["totalDowntime"], + # actual_production=result["production"], + # ideal_production=result["idealProduction"], + # downtime_hours = result["totalDowntime"], + # ) + + # efor = (result["totalDowntime"] / (result["totalDowntime"] + result["totalUpTime"]))*100 if (result["totalDowntime"] + result["totalUpTime"]) > 0 else 0 + + # calc_result = AerosSimulationCalcResult( + # aeros_simulation_id=simulation_id, + # aeros_node_id=node.id, + # total_downtime=result["totalDowntime"], + # total_uptime=result["totalUpTime"], + # num_events=result["numEvents"], + # production=result["production"], + # production_std=result["productionStd"], + # ideal_production=result["idealProduction"], + # availability=result["availability"], + # efficiency=result["efficiency"], + # effective_loss=result["effectiveLoss"], + # num_cm=result["numCM"], + # cm_waiting_time=result["cmWaitingTime"], + # total_cm_downtime=result["totalCMDowntime"], + # num_pm=result["numPM"], + # total_pm_downtime=result["totalPMDowntime"], + # num_ip=result["numIP"], + # total_ip_downtime=result["totalIPDowntime"], + # num_oh=result["numOH"], + # total_oh_downtime=result["totalOHDowntime"], + # t_wait_for_crew=result["tWaitForCrew"], + # t_wait_for_spare=result["tWaitForSpare"], + # duration_at_full=result["durationAtFull"], + # duration_above_hh=result["durationAboveHH"], + # duration_above_h=result["durationAboveH"], + # duration_below_l=result["durationBelowL"], + # duration_below_ll=result["durationBelowLL"], + # duration_at_empty=result["durationAtEmpty"], + # stg_input=result["stgInput"], + # stg_output=result["stgOutput"], + # average_level=result["averageLevel"], + # potential_production=result["potentialProduction"], + # eaf=eaf, + # efor=efor, + # derating_hours=derating_hours, + # beta=eq_reliability["beta"] if node_type == "RegularNode" else None, + # eta=eq_reliability["eta"] if node_type == "RegularNode" else None, + # mttr=eq_reliability["mttr"] if node_type == "RegularNode" else None, + # parameters=eq_reliability["parameters"] if node_type == "RegularNode" else None + # ) + + # calc_objects.append(calc_result) + + + + + for results in ijson.items(file_path, "plotNodeOuts"): + for result in results: + print("processing data", result["nodeName"]) + node_type = "RegularNode" if result["nodeType"] == "RegularNode" else "SchematicNode" + node = available_nodes.get(f"{node_type}:{result['nodeName']}") + if not node: + if result["nodeType"] not in ["RegularNode", "Schematic"]: + continue + node = await get_or_save_node( + db_session=db_session, node_data=result, type="plot" + ) + + + plot_result = AerosSimulationPlotResult( + aeros_simulation_id=simulation_id, + aeros_node_id=node.id, + max_flow_rate=result["maxFlowrate"], + storage_capacity=result["storageCapacity"], + point_availabilities=result["pointAvailabilities"], + point_flowrates=result["pointFlowrates"], + timestamp_outs=result["timeStampOuts"], + ) + plot_objects.append(plot_result) + + # for result in stream_large_array(file_path, "nodeResultOuts"): + # print("Processing node result steam for node:", result["nodeName"]) + # node_type = "RegularNode" if result["nodeType"] == "RegularNode" else "SchematicNode" + # node = available_nodes.get(f"{node_type}:{result['nodeName']}", None) + + # eq_reliability = eq_update.get(result["nodeName"], { + # "eta": 0, "beta": 0, "mttr": 0, "parameters": {} + # }) + + # if not node: + # if result["nodeType"] != "RegularNode" and result["nodeType"] != "Schematic": + # continue + # node = await get_or_save_node( + # db_session=db_session, node_data=result, type="calc" + # ) + + # eaf, derating_hours = calculate_eaf( + # available_hours=result["totalUpTime"], + # period_hours=result["totalUpTime"] + result["totalDowntime"], + # actual_production=result["production"], + # ideal_production=result["idealProduction"], + # downtime_hours = result["totalDowntime"], + # ) + + # efor = (result["totalDowntime"] / (result["totalDowntime"] + result["totalUpTime"]))*100 if (result["totalDowntime"] + result["totalUpTime"]) > 0 else 0 + + # calc_result = AerosSimulationCalcResult( + # aeros_simulation_id=simulation_id, + # aeros_node_id=node.id, + # total_downtime=result["totalDowntime"], + # total_uptime=result["totalUpTime"], + # num_events=result["numEvents"], + # production=result["production"], + # production_std=result["productionStd"], + # ideal_production=result["idealProduction"], + # availability=result["availability"], + # efficiency=result["efficiency"], + # effective_loss=result["effectiveLoss"], + # num_cm=result["numCM"], + # cm_waiting_time=result["cmWaitingTime"], + # total_cm_downtime=result["totalCMDowntime"], + # num_pm=result["numPM"], + # total_pm_downtime=result["totalPMDowntime"], + # num_ip=result["numIP"], + # total_ip_downtime=result["totalIPDowntime"], + # num_oh=result["numOH"], + # total_oh_downtime=result["totalOHDowntime"], + # t_wait_for_crew=result["tWaitForCrew"], + # t_wait_for_spare=result["tWaitForSpare"], + # duration_at_full=result["durationAtFull"], + # duration_above_hh=result["durationAboveHH"], + # duration_above_h=result["durationAboveH"], + # duration_below_l=result["durationBelowL"], + # duration_below_ll=result["durationBelowLL"], + # duration_at_empty=result["durationAtEmpty"], + # stg_input=result["stgInput"], + # stg_output=result["stgOutput"], + # average_level=result["averageLevel"], + # potential_production=result["potentialProduction"], + # eaf=eaf, + # efor=efor, + # derating_hours=derating_hours, + # beta=eq_reliability["beta"] if node_type == "RegularNode" else None, + # eta=eq_reliability["eta"] if node_type == "RegularNode" else None, + # mttr=eq_reliability["mttr"] if node_type == "RegularNode" else None, + # parameters=eq_reliability["parameters"] if node_type == "RegularNode" else None + # ) + + # db_session.add(calc_result) + + + except Exception as e: + simulation = await get_simulation_by_id( + db_session=db_session, simulation_id=simulation_id + ) + simulation.status = "failed" + simulation.result = str(e) + await db_session.commit() + + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e) + ) + + # db_session.add_all(calc_objects) + # db_session.add_all(plot_objects) + + raise Exception(plot_result) + + simulation = await get_simulation_by_id( + db_session=db_session, simulation_id=simulation_id + ) + simulation.status = "completed" + simulation.completed_at = datetime.now() + + await db_session.commit() + + return + +async def process_single_schematic(*, db_session: DbSession, sim_data: dict, schematic): + """Process a single schematic simulation and return the nodes""" + try: + # Execute simulation for this schematic + results = await execute_simulation(db_session=db_session, sim_data=sim_data) + + # Create main schematic node + mainSchematicId = uuid4() + mainSchematic = AerosNode( + id=mainSchematicId, + node_name=schematic.schematic_name, + schematic_name=schematic.schematic_name, + schematic_id=None, + node_type="SchematicNode", + aeros_schematic_id=schematic.id, + structure_name=schematic.schematic_name + ) + + # Process simulation results recursively + nodes = await save_recusive_simulation_result_node( + db_session=db_session, + data=results, + schematic_name=mainSchematic.node_name, + schematic_id=mainSchematicId, + aeros_schematic_id=schematic.id + ) + nodes.append(mainSchematic) + + return nodes + + except Exception as e: + print(f"Error processing schematic {schematic.schematic_name}: {e}") + raise # Re-raise to be caught by asyncio.gather + +async def save_recusive_simulation_result_node(*, db_session: DbSession, data, schematic_name: str, aeros_schematic_id ,schematic_id: Optional[UUID] = None): + ## Get All schematic + + #doing multiple simulation with all schematic + + #1 Record schmatic ID from master schematic, ex - TJB - Unit 3 - = 1 + #2 Get The highest parent from Plot data using nodeName == schematicName + #3 save the highest parent, add master schematic ID, get highest parent_id, + # continue looping through all plot data, check if it regular node and schemmaticName = highest parent schematic ID, save + # If schematicName = Parent schematic name, but not regular node, that mean that node is schematic and should have children + # search for children schematic and save them + with open("model/structure_name.json", 'r') as structure_file: + structure_data = json.load(structure_file) + + structure_dict = { + result["node_name"]: result["structure_name"] + for result in structure_data + if result["node_name"] is not None + } + + model_image = { + result["node_name"]: result["model_image"] + for result in structure_data + if result["node_name"] is not None and "model_image" in result + } + + plotResult = data["plotNodeOuts"] + results = [] + + for result in plotResult: + + if result["schematicName"] == schematic_name and result["nodeType"] == "RegularNode": + + node = AerosNode( + node_name=result["nodeName"], + schematic_id=schematic_id, + node_type="RegularNode", + schematic_name=schematic_name, + aeros_schematic_id=aeros_schematic_id, + structure_name=structure_dict.get(result["nodeName"]), + ) + + results.append(node) + + elif result["schematicName"] == schematic_name and result["nodeType"] == "SubSchematic": + schematicId = uuid4() + schematic = AerosNode( + id=schematicId, + node_name=result["nodeName"], + schematic_name=schematic_name, + schematic_id=schematic_id, + node_type="SchematicNode", + aeros_schematic_id=aeros_schematic_id, + structure_name=structure_dict.get(result["nodeName"]), + model_image= model_image.get(result["nodeName"], None) + ) + results.append(schematic) + + res = await save_recusive_simulation_result_node(db_session=db_session, data=data, schematic_name=result["nodeName"], schematic_id=schematicId, aeros_schematic_id=aeros_schematic_id) + results.extend(res) + else: + continue + + return results + + + +async def save_default_simulation_node( + *, db_session: DbSession, project_name: str = "trialapi" +): + tasks = [] + all_results = [] + # Get all schematic + schematics = await get_all_schematic_aeros(db_session=db_session) + + for schematic in schematics: + sim_data = { + "projectName": project_name, + "SchematicName": schematic.schematic_name, + "SimSeed": 1, + "SimDuration": 1, + "DurationUnit": "UMinute", + "SimNumRun": 1, + } + + # Create a task for each simulation + results = await process_single_schematic( + db_session=db_session, + sim_data=sim_data, + schematic=schematic + ) + + all_results.extend(results) + + + # all_results_lists = await asyncio.gather(*tasks, return_exceptions=True) + + + # for i, result in enumerate(all_results_lists): + # if isinstance(result, Exception): + # print(f"Simulation failed for schematic {schematics[i].schematic_name}: {result}") + # # You might want to handle this differently based on your requirements + # continue + # all_results.extend(result) + + # # delete old data + await db_session.execute(delete(AerosNode)) + + db_session.add_all(all_results) + await db_session.commit() + + +def convert_id_to_none_if_negative(value): + """Convert ID to None if it's below 0, otherwise return the value.""" + return None if value < 0 else value + + +async def create_simulation(*, db_session: DbSession, simulation_in: SimulationInput, current_user=None): + """Create a new simulation.""" + input = simulation_in.model_dump(exclude={"SimulationName"}) + user_id = current_user.user_id if current_user else None + + # Check if is default + if simulation_in.IsDefault: + prev_simulation = await get_default_simulation(db_session=db_session) + if prev_simulation: + prev_simulation.is_default = False + await db_session.commit() + + active_simulations = { + "status": "running", + "started_at": datetime.now(), + "simulation_name": simulation_in.SimulationName, + "schematic_name": "- TJB - Unit 3 -", + "is_default": simulation_in.IsDefault, + "duration": simulation_in.SimDuration, + "offset": simulation_in.OffSet, + "created_by": user_id + } + + simulation = AerosSimulation(**active_simulations) + db_session.add(simulation) + await db_session.commit() + return simulation + + + + + +async def update_simulation(*, db_session: DbSession, simulation_id: UUID, data: dict): + query = update(AerosSimulation).where(AerosSimulation.id == simulation_id).values(**data) + await db_session.execute(query) + await db_session.commit() diff --git a/src/aeros_simulation/simulation_save_service.py b/src/aeros_simulation/simulation_save_service.py new file mode 100644 index 0000000..8f7934e --- /dev/null +++ b/src/aeros_simulation/simulation_save_service.py @@ -0,0 +1,331 @@ +from collections import defaultdict +import json +import logging + +log = logging.getLogger(__name__) +import os +import tempfile +from datetime import datetime +from decimal import Decimal +from typing import Optional +from uuid import UUID + +import httpx +import ijson +from fastapi import HTTPException, status + +from src.aeros_simulation.model import AerosSimulationCalcResult, AerosSimulationPlotResult +from src.aeros_simulation.service import get_all_aeros_node, get_or_save_node, get_plant_calc_result, get_simulation_by_id, get_simulation_with_plot_result +from src.aeros_simulation.utils import calculate_eaf, calculate_eaf_konkin +from src.aeros_utils import aeros_post +from src.database.core import DbSession + + +async def execute_simulation( + *, db_session: DbSession, simulation_id: Optional[UUID] = None, + sim_data: dict, is_saved: bool = False, eq_update: dict = None +): + """Execute the actual simulation call""" + eq_update = eq_update or {} + log.info("Executing simulation with id=%s, schematic=%s", simulation_id, sim_data.get("SchematicName")) + + tmpfile = os.path.join(tempfile.gettempdir(), f"simulation_{simulation_id}.json") + + try: + response = await aeros_post( + "/api/Simulation/RunSimulation", + json=sim_data, + headers={"Content-Type": "application/json"}, + stream=True + ) + response.raise_for_status() + with open(tmpfile, "wb") as f: + if hasattr(response, "iter_content"): + for chunk in response.iter_content(chunk_size=8192): + f.write(chunk) + else: + for chunk in response.iter_bytes(chunk_size=8192): + f.write(chunk) + + if not is_saved: + # If not saving to DB, just return parsed JSON + with open(tmpfile, "r") as f: + return json.load(f) + + # Update simulation status + simulation = await get_simulation_by_id(db_session=db_session, simulation_id=simulation_id) + simulation.status = "running" + await db_session.commit() + + await process_large_json_streaming( + db_session=db_session, + file_path=tmpfile, + simulation_id=simulation.id, + eq_update=eq_update, + schematic_name=sim_data["SchematicName"], + ) + + simulation.status = "completed" + simulation.completed_at = datetime.now() + await db_session.commit() + log.info("Simulation result saved for simulation id: %s", simulation.id) + return True + + except Exception as e: + if simulation_id: + simulation = await get_simulation_by_id(db_session=db_session, simulation_id=simulation_id) + simulation.status = "failed" + simulation.error = str(e) + await db_session.commit() + log.error("Simulation failed: %s", str(e)) + raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e)) from e + finally: + if os.path.exists(tmpfile): + os.remove(tmpfile) + + +async def process_large_json_streaming( + *, db_session: DbSession, file_path: str, simulation_id, eq_update, schematic_name +): + """Stream JSON parsing from disk with minimal memory usage.""" + batch_size = 200 # increase batch size for efficiency + plot_batch, calc_batch = [], [] + + def convert_item(item): + if isinstance(item, dict): + return {k: convert_item(v) for k, v in item.items()} + if isinstance(item, list): + return [convert_item(i) for i in item] + if isinstance(item, Decimal): + return float(item) + return item + + available_nodes = { + f"{node.node_type}:{node.node_name}": node + for node in await get_all_aeros_node(db_session=db_session, schematic_name=schematic_name) + } + + availabilities = defaultdict(float) + + + try: + with open(file_path, "r") as file: + # Process 'plotNodeOuts' + log.info("Processing plot array...") + for plot_item in ijson.items(file, "plotNodeOuts.item"): + item = convert_item(plot_item) + plot_obj = await create_plot_result_object(simulation_id, item, available_nodes, eq_update, db_session) + if plot_obj: + plot_batch.append(plot_obj) + + if len(plot_batch) >= batch_size: + db_session.add_all(plot_batch) + await db_session.commit() + plot_batch.clear() + + # Reset file pointer + file.seek(0) + + # Process 'nodeResultOuts' + log.info("Processing calculation array...") + for calc_item in ijson.items(file, "nodeResultOuts.item"): + item = convert_item(calc_item) + calc_obj = await create_calc_result_object(simulation_id, item, available_nodes, eq_update, db_session) + if calc_obj: + calc_batch.append(calc_obj) + + if len(calc_batch) >= batch_size: + db_session.add_all(calc_batch) + await db_session.commit() + calc_batch.clear() + + # Final flush + if plot_batch: + db_session.add_all(plot_batch) + await db_session.commit() + if calc_batch: + db_session.add_all(calc_batch) + await db_session.commit() + + except Exception as e: + log.error("Error processing JSON stream: %s", str(e)) + raise + + +async def create_plot_result_object( + simulation_id, result, available_nodes, eq_update, db_session +): + node_type = "RegularNode" if result["nodeType"] == "RegularNode" else "SchematicNode" + node = available_nodes.get(f"{node_type}:{result['nodeName']}") + if not node: + if result["nodeType"] not in ["RegularNode", "Schematic"]: + return None + node = await get_or_save_node( + db_session=db_session, node_data=result, type="plot" + ) + available_nodes[f"{node_type}:{result['nodeName']}"] = node + + + return AerosSimulationPlotResult( + aeros_simulation_id=simulation_id, + aeros_node_id=node.id, + max_flow_rate=float(result["maxFlowrate"]), + storage_capacity=float(result["storageCapacity"]), + point_availabilities=result["pointAvailabilities"], + point_flowrates=result["pointFlowrates"], + timestamp_outs=result["timeStampOuts"], + ) + +async def create_calc_result_object( + simulation_id, result, available_nodes, eq_update, db_session +) : + """Create a single calc result object.""" + node_type = "RegularNode" if result["nodeType"] == "RegularNode" else "SchematicNode" + node = available_nodes.get(f"{node_type}:{result['nodeName']}") + + if not node: + if result["nodeType"] not in ["RegularNode", "Schematic"]: + return None + node = await get_or_save_node(db_session=db_session, node_data=result, type="calc") + # Add to available_nodes for future use + available_nodes[f"{node_type}:{result['nodeName']}"] = node + + eq_reliability = eq_update.get(result["nodeName"], { + "eta": 0, "beta": 0, "mttr": 0, "parameters": {} + }) + + # eaf, derating_hours = calculate_eaf( + # available_hours=result["totalUpTime"], + # period_hours=result["totalUpTime"] + result["totalDowntime"], + # actual_production=result["production"], + # ideal_production=result["idealProduction"], + # downtime_hours=result["totalDowntime"] + # ) + + efor = (result["totalDowntime"] / (result["totalDowntime"] + result["totalUpTime"])) * 100 if (result["totalDowntime"] + result["totalUpTime"]) > 0 else 0 + + return AerosSimulationCalcResult( + aeros_simulation_id=simulation_id, + aeros_node_id=node.id, + total_downtime=result["totalDowntime"], + total_uptime=result["totalUpTime"], + num_events=result["numEvents"], + production=result["production"], + production_std=result["productionStd"], + ideal_production=result["idealProduction"], + availability=result["availability"], + efficiency=result["efficiency"], + effective_loss=result["effectiveLoss"], + num_cm=result["numCM"], + cm_waiting_time=result["cmWaitingTime"], + total_cm_downtime=result["totalCMDowntime"], + num_pm=result["numPM"], + total_pm_downtime=result["totalPMDowntime"], + num_ip=result["numIP"], + total_ip_downtime=result["totalIPDowntime"], + num_oh=result["numOH"], + total_oh_downtime=result["totalOHDowntime"], + t_wait_for_crew=result["tWaitForCrew"], + t_wait_for_spare=result["tWaitForSpare"], + duration_at_full=result["durationAtFull"], + duration_above_hh=result["durationAboveHH"], + duration_above_h=result["durationAboveH"], + duration_below_l=result["durationBelowL"], + duration_below_ll=result["durationBelowLL"], + duration_at_empty=result["durationAtEmpty"], + stg_input=result["stgInput"], + stg_output=result["stgOutput"], + average_level=result["averageLevel"], + potential_production=result["potentialProduction"], + eaf=0, + efor=efor, + derating_hours=0, + beta=eq_reliability["beta"] if node_type == "RegularNode" else None, + eta=eq_reliability["eta"] if node_type == "RegularNode" else None, + mttr=eq_reliability["mttr"] if node_type == "RegularNode" else None, + parameters=eq_reliability["parameters"] if node_type == "RegularNode" else None, + contribution=0, + criticality=0, + contribution_factor=0 + ) + + + +async def calculate_plant_eaf( + db_session: DbSession, simulation_id: UUID, po_downtime:int, oh_interval:int, offset:int, manual_deratings: list = None, manual_mo: list = None +): + """Calculate overall plant EAF from individual node results.""" + plant_calc_data = await get_plant_calc_result( + db_session=db_session, simulation_id=simulation_id + ) + + plant_plot_data = await get_simulation_with_plot_result( + db_session=db_session, simulation_id=simulation_id, node_id="plant" + ) + + is_oh_from_aeros = ( + plant_calc_data.total_uptime + plant_calc_data.total_downtime + offset + ) > oh_interval + + + # Calculate manual MO hours (full outage) and MD hours (derating) + manual_mo_outage_hours = 0.0 + manual_mo_equiv_hours = 0.0 + max_capacity = 660 + + if manual_mo: + for mo in manual_mo: + h = float(mo.get('hours', 0)) + c = float(mo.get('capacity', 0)) + if c <= 0: + manual_mo_outage_hours += h + else: + derating = max_capacity - c + if derating > 0: + manual_mo_equiv_hours += (h * derating / max_capacity) + + # Calculate outages + if is_oh_from_aeros: + seasonal_outage = manual_mo_outage_hours + po_downtime + forced_outage = max(0, plant_calc_data.total_downtime - po_downtime) + else: + seasonal_outage = manual_mo_outage_hours + forced_outage = max(0, plant_calc_data.total_downtime) + + + # Adjust uptime + total_uptime = max(0, plant_calc_data.total_uptime - manual_mo_outage_hours) + + # Total period time + total_period_time = total_uptime + seasonal_outage + forced_outage + + + eaf, efor, sof, edh = calculate_eaf( + available_hours=total_uptime, + period_hours=total_period_time, + forced_outage_hours=forced_outage, + seasonal_outage_hours=seasonal_outage, + plot_data=plant_plot_data.timestamp_outs, + manual_deratings=manual_deratings + ) + + # Adjust EAF and edh for manual MO deratings + if manual_mo_equiv_hours > 0: + # eaf remains reduced by both edh and manual_mo_equiv_hours + eaf = ((total_uptime - (edh + manual_mo_equiv_hours)) / total_period_time) * 100 + # maintenance deratings should contribute to scheduled metrics (SOF/ESOF) + sof = ((seasonal_outage + manual_mo_equiv_hours) / total_period_time) * 100 + edh += manual_mo_equiv_hours + + plant_calc_data.total_mo_downtime = manual_mo_outage_hours + plant_calc_data.total_po_downtime = po_downtime + plant_calc_data.eaf = eaf + plant_calc_data.efor = efor + plant_calc_data.sof = sof + plant_calc_data.derating_hours = edh + await db_session.commit() + return eaf + +# async def calculate_eaf_konkin_pnat( +# db_session +# ) \ No newline at end of file diff --git a/src/aeros_simulation/utils.py b/src/aeros_simulation/utils.py new file mode 100644 index 0000000..4b80977 --- /dev/null +++ b/src/aeros_simulation/utils.py @@ -0,0 +1,223 @@ +from datetime import datetime +import json +import logging + +log = logging.getLogger(__name__) + +def date_to_utc(date_val): + return datetime.combine( + date_val, + datetime.min.time(), + ) + + +def hours_between(start: datetime, end: datetime) -> int: + return int((end - start).total_seconds() // 3600) + + +def year_window_utc(year: int): + start = datetime(year, 1, 1, 0, 0, 0) + end = datetime(year + 1, 1, 1, 0, 0, 0) + return start, end + + +def calculate_eaf( + available_hours: float, + period_hours: float, + forced_outage_hours:float, + seasonal_outage_hours: float, + plot_data = None, + manual_deratings: list = None + ): + """ + Calculate EAF using the time-based method from PLN document + EAF = [AH - (EFDH + EMDH + EPDH + ESEDH)] / PH × 100% + + Args: + available_hours: Available Hours (AH) + period_hours: Period Hours (PH) + max_capacity_mw: Maximum capacity in MW + actual_production: Actual production + ideal_production: Ideal production + + Returns: + Dictionary with EAF result and breakdown + """ + + try: + # Calculate lost production + max_capacity = 660 + # Calculate total equivalent derate and outage hours + edh = calculate_equivalent_derate_hours(plot_data, max_flow_rate=max_capacity) + + # Add manual deratings + if manual_deratings: + for d in manual_deratings: + # expected structure: { hours: float, capacity: float } + hours = float(d.get('hours', 0)) + capacity = float(d.get('capacity', 0)) + derating = max_capacity - capacity + if derating > 0: + edh += (hours * derating / max_capacity) + + # Calculate EAF + eaf = ((available_hours - edh) / period_hours) * 100 + efor = ((forced_outage_hours + edh)/period_hours) * 100 + sof = (seasonal_outage_hours/period_hours)*100 + + + return eaf, efor, sof, edh + except Exception as e: + print("Error calculating EAF:", e) + raise + +def calculate_eaf_konkin( + plot_data, periode_time, konkin_offset +): + maxHours = periode_time + hourly_data = create_time_series_data(plot_data, max_hours=maxHours) + filtered_data = filter_by_month(hourly_data, start_month=konkin_offset, end_month=(12+konkin_offset)) + + if not filtered_data: + return { + 'total_hours': 0, + 'uptime_hours': 0, + 'downtime_hours': 0, + 'uptime_percentage': 0, + 'downtime_percentage': 0 + } + + total_hours = len(filtered_data) + downtime_hours = 0 + uptime_hours = 0 + + for data in filtered_data: + if data['flowrate'] == 0: + downtime_hours += 1 + else: + uptime_hours += 1 + + availability = uptime_hours / total_hours + derating = calculate_equivalent_derate_hours(plot_data) + + eaf = ((uptime_hours - derating)/total_hours) * 100 + + return eaf + +def create_time_series_data(chart_data, max_hours=8760): + # Sort data by cumulative time + sorted_data = sorted(chart_data, key=lambda x: x['cumulativeTime']) + + hourly_data = [] + current_state_index = 0 + current_flow_rate = sorted_data[0]['flowRate'] + + for hour in range(1, max_hours + 1): + # Check if we need to advance to the next state + while (current_state_index < len(sorted_data) - 1 and + hour >= int(sorted_data[current_state_index + 1]['cumulativeTime'])): + current_state_index += 1 + current_flow_rate = sorted_data[current_state_index]['flowRate'] + + # Add hourly data point + hourly_data.append({ + 'hour': hour, + 'flowrate': current_flow_rate + }) + + return hourly_data + +def filter_by_month(hourly_data, start_month, end_month): + """ + Filter hourly data by month range + + Args: + hourly_data: List of dictionaries with 'hour' and 'flowrate' keys + start_month: Starting month (1-based) + end_month: Ending month (1-based) + + Returns: + Filtered list of hourly data + """ + # Convert months to hours (assuming 730 hours per month on average) + hours_per_month = 730 # 24 * 30.4 (average days per month) + total_hours = len(hourly_data) + + start_hour = (start_month - 1) * hours_per_month + 1 + end_hour = end_month * hours_per_month + + if end_hour >= total_hours: + end_hour = total_hours + + filtered_data = [] + for data in hourly_data: + if start_hour <= data['hour'] <= end_hour: + filtered_data.append(data) + + return filtered_data + + +def calculate_equivalent_derate_hours(data_list, max_flow_rate: float = 660) -> float: + """ + Calculate Equivalent Forced Derated Hours (EFDH). + + Each data point represents the start of a period with that flow rate, + valid until the next cumulativeTime. + """ + sorted_data = sorted(data_list, key=lambda x: x['cumulativeTime']) + total_equivalent_derate_hours = 0.0 + + for i in range(len(sorted_data) - 1): + current = sorted_data[i] + next_ = sorted_data[i + 1] + + time_interval = next_['cumulativeTime'] - current['cumulativeTime'] + derating = max_flow_rate - current['flowRate'] + + + if derating > 0 and derating < max_flow_rate: # Only count when capacity is reduced + log.info(f"Time Interval: {time_interval}, Derating: {derating}, Max Flow Rate: {max_flow_rate}") + total_equivalent_derate_hours += (time_interval * derating / max_flow_rate) + + return total_equivalent_derate_hours + + + +def stream_large_array(filepath, key): + with open(filepath, "r") as f: + buffer = "" + depth = 0 + inside_string = False + in_target_array = False + + while True: + chunk = f.read(8192) + if not chunk: + break + + for char in chunk: + buffer += char + + if not in_target_array and f'"{key}": [' in buffer: + in_target_array = True + buffer = "" + continue + + if in_target_array: + if char == '"' and (len(buffer) < 2 or buffer[-2] != '\\'): + inside_string = not inside_string + if not inside_string: + if char == '{': + depth += 1 + elif char == '}': + depth -= 1 + if depth == 0: + try: + obj = json.loads(buffer) + yield obj + except Exception: + pass + buffer = "" + + if char == ']' and depth == 0: + return \ No newline at end of file diff --git a/src/aeros_utils.py b/src/aeros_utils.py new file mode 100644 index 0000000..fd7e5b5 --- /dev/null +++ b/src/aeros_utils.py @@ -0,0 +1,122 @@ +import anyio +import logging +import httpx +from src.config import ( + AEROS_BASE_URL, + WINDOWS_AEROS_BASE_URL, + VAULT_URL, + ROLE_ID, + SECRET_ID, + AEROS_SECRET_PATH, + AEROS_LICENSE_ID, + AEROS_LICENSE_SECRET, + USE_LICENSE_APP +) +from src.utils import get_vault_secrets + +log = logging.getLogger(__name__) + +# Try to import licaeros gracefully +try: + from licaeros import LicensedSession, device_fingerprint_hex + HAS_LICAEROS = True +except ImportError: + HAS_LICAEROS = False + log.warning("licaeros library not found. Falling back to direct httpx calls if enabled.") + +# Initialize a global session if possible, or create on demand +_aeros_session = None + +def get_aeros_session(base_url): + global _aeros_session + + if not USE_LICENSE_APP or not HAS_LICAEROS: + if _aeros_session is None or not isinstance(_aeros_session, httpx.Client) or str(_aeros_session.base_url) != str(base_url): + log.info(f"Using direct httpx.Client for base URL: {base_url}") + _aeros_session = httpx.Client(base_url=base_url, timeout=300.0) + return _aeros_session + + # License App path - only proceed if USE_LICENSE_APP is True + license_id = AEROS_LICENSE_ID + license_secret = AEROS_LICENSE_SECRET + + # If vault is configured, try to get from there + if VAULT_URL and ROLE_ID and SECRET_ID and AEROS_SECRET_PATH: + results = get_vault_secrets( + vault_url=VAULT_URL, + role_id=ROLE_ID, + secret_id=SECRET_ID, + secret_path=AEROS_SECRET_PATH, + secret_keys_to_be_returned=['aeros_license_id', 'aeros_license_secret'] + ) + if results: + license_id = results['aeros_license_id'] + license_secret = results['aeros_license_secret'] + log.info("Aeros license retrieved from Vault") + else: + log.warning("Failed to get Aeros license from Vault, trying local env fallback") + + if not license_id or not license_secret: + log.warning("Aeros license ID or Secret not provided. Falling back to direct httpx.") + if _aeros_session is None or not isinstance(_aeros_session, httpx.Client): + _aeros_session = httpx.Client(base_url=base_url, timeout=300.0) + return _aeros_session + + if _aeros_session is None or isinstance(_aeros_session, httpx.Client): + log.info(f"Initializing LicensedSession with base URL: {base_url}") + log.info(f"Encrypted Device ID: {device_fingerprint_hex()}") + _aeros_session = LicensedSession( + api_base=base_url, + license_id=license_id, + license_secret=license_secret, + timeout=1000 + ) + return _aeros_session + +async def aeros_post(path: str, json=None, data=None, **kwargs): + """ + Asynchronous wrapper for Aeros requests (Licensed or Direct) + """ + # If not using license app, fetch from AEROS_BASE_URL direcly + target_base_url = WINDOWS_AEROS_BASE_URL if USE_LICENSE_APP and HAS_LICAEROS else AEROS_BASE_URL + session = get_aeros_session(target_base_url) + + # Path logic: License app often uses /api/aeros prefix, direct might not. + # However, to maintain compatibility with existing code calling this with path="/api/Project/ImportAROFile" + # we should decide if we need to adjust the path. + # User said: "system still fetch to aeros direcly not to licence app then lincense app forward it to aeros" + # This implies the license app acts as a proxy for /api/aeros/ paths. + + if USE_LICENSE_APP and HAS_LICAEROS: + url = f"/api/aeros{path}" + response = await anyio.to_thread.run_sync( + lambda: session.post(url, json_data=json, data=data, headers=kwargs.get("headers")) + ) + else: + # Direct fetch from Aeros might have different path structure? + # Assuming direct Aeros path is same as what the license app proxies to. + url = path + response = await anyio.to_thread.run_sync( + lambda: session.post(url, json=json, data=data, headers=kwargs.get("headers")) + ) + + return response + + +async def aeros_file_upload(path, file, field_name, filename, base_url=None): + target_base_url = WINDOWS_AEROS_BASE_URL if USE_LICENSE_APP and HAS_LICAEROS else (base_url or AEROS_BASE_URL) + session = get_aeros_session(target_base_url) + + if USE_LICENSE_APP and HAS_LICAEROS: + url = f"/api/aeros{path}" + response = await anyio.to_thread.run_sync( + lambda: session.post_multipart(url, file, field_name, filename) + ) + else: + url = "/upload-file" + files = {field_name: (filename, file)} + response = await anyio.to_thread.run_sync( + lambda: session.post(url, files=files) + ) + + return response \ No newline at end of file diff --git a/src/api.py b/src/api.py new file mode 100644 index 0000000..149c500 --- /dev/null +++ b/src/api.py @@ -0,0 +1,51 @@ +from typing import List, Optional + +from fastapi import APIRouter, Depends +from fastapi.responses import JSONResponse +from pydantic import BaseModel, Field + +from src.aeros_project.router import router as aeros_project_router +from src.aeros_simulation.router import router as aeros_simulation_router, airflow_router +from src.auth.service import JWTBearer +from src.dashboard_model.router import router as dashboard_model_router +from src.aeros_equipment.router import router as aeros_equipment_router +from src.aeros_contribution.router import router as aeros_contribution_router + +class ErrorMessage(BaseModel): + msg: str = Field(..., max_length=255) + + +class ErrorResponse(BaseModel): + detail: Optional[List[ErrorMessage]] + + +api_router = APIRouter( + default_response_class=JSONResponse, +) + + +@api_router.get("/healthcheck", include_in_schema=False) +def healthcheck(): + return {"status": "ok"} + + +authenticated_api_router = APIRouter( + dependencies=[Depends(JWTBearer())], +) + +authenticated_api_router.include_router( + dashboard_model_router, prefix="/dashboard_model" +) + +aeros_routes = APIRouter(prefix="/aeros") + +aeros_routes.include_router(aeros_simulation_router, prefix="/simulation") +aeros_routes.include_router(aeros_project_router, prefix="/project") +aeros_routes.include_router(aeros_equipment_router, prefix="/equipment") +aeros_routes.include_router(aeros_contribution_router, prefix="/contribution") + + +authenticated_api_router.include_router(aeros_routes) + +api_router.include_router(airflow_router, prefix="/airflow") +api_router.include_router(authenticated_api_router) diff --git a/src/auth/__init__.py b/src/auth/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/auth/access_control.py b/src/auth/access_control.py new file mode 100644 index 0000000..8cbe8db --- /dev/null +++ b/src/auth/access_control.py @@ -0,0 +1,120 @@ +from dataclasses import dataclass +from enum import Enum +from typing import Any, List, Union +from fastapi import Request, HTTPException, status + +Allow: str = "allow" +Deny: str = "deny" + +@dataclass(frozen=True) +class Principal: + key: str + value: str + + def __repr__(self) -> str: + return f"{self.key}:{self.value}" + + def __str__(self) -> str: + return self.__repr__() + +@dataclass(frozen=True) +class SystemPrincipal(Principal): + def __init__(self, value: str): + super().__init__(key="system", value=value) + +@dataclass(frozen=True) +class RolePrincipal(Principal): + def __init__(self, value: str): + super().__init__(key="role", value=value) + +Everyone = SystemPrincipal(value="everyone") +Authenticated = SystemPrincipal(value="authenticated") + + +class RBDPermission(Enum): + CREATE = "create" + READ = "read" + EDIT = "edit" + DELETE = "delete" + + +class AccessControl: + def __init__(self, permission_exception: Any = None): + self.permission_exception = permission_exception or HTTPException( + status_code=status.HTTP_403_FORBIDDEN, detail="Permission denied" + ) + + def _acl(self, resource): + acl = getattr(resource, "__acl__", []) + if callable(acl): + return acl() + return acl + + def has_permission( + self, principals: List[Principal], required_permissions: List[RBDPermission], resource: Any + ) -> bool: + if not isinstance(resource, list): + resource = [resource] + + permits = [] + for res in resource: + granted = False + acl = self._acl(res) + + for action, principal, permissions in acl: + # Check if any of the required permissions are in the allowed permissions for this principal + is_permitted = any(p in permissions for p in required_permissions) + + if (action == Allow and is_permitted) and ( + principal in principals or principal == Everyone + ): + granted = True + break + elif (action == Deny and is_permitted) and ( + principal in principals or principal == Everyone + ): + granted = False + break + + permits.append(granted) + + return all(permits) + + def assert_access( + self, principals: List[Principal], required_permissions: List[RBDPermission], resource: Any + ): + if not self.has_permission(principals, required_permissions, resource): + raise self.permission_exception + + +def required_permission(permissions: Union[RBDPermission, List[RBDPermission]], resources: Any): + """ + FastAPI dependency for role-based access control. + """ + if isinstance(permissions, RBDPermission): + permissions = [permissions] + + + + async def dependency(request: Request): + user = getattr(request.state, "user", None) + if not user: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, detail="Not authenticated" + ) + + user_role = getattr(user, "role", None) + + if not user_role: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, detail="No user role found" + ) + + user_principals = [Authenticated, RolePrincipal(user_role)] + + ac = AccessControl() + ac.assert_access(user_principals, permissions, resources) + + return True + + return dependency diff --git a/src/auth/model.py b/src/auth/model.py new file mode 100644 index 0000000..49350c6 --- /dev/null +++ b/src/auth/model.py @@ -0,0 +1,7 @@ +from pydantic import BaseModel, Field + + +class UserBase(BaseModel): + name: str = Field(..., max_length=100) + role: str = Field(..., max_length=50) + user_id: str = Field(..., max_length=50) diff --git a/src/auth/service.py b/src/auth/service.py new file mode 100644 index 0000000..3649975 --- /dev/null +++ b/src/auth/service.py @@ -0,0 +1,82 @@ +# app/auth/auth_bearer.py + +from typing import Annotated, Optional + +import requests +from fastapi import Depends, HTTPException, Request +from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer + +import src.config as config + +from .model import UserBase + + +class JWTBearer(HTTPBearer): + def __init__(self, auto_error: bool = True): + super(JWTBearer, self).__init__(auto_error=auto_error) + + async def __call__(self, request: Request): + credentials: HTTPAuthorizationCredentials = await super( + JWTBearer, self + ).__call__(request) + if credentials: + if not credentials.scheme == "Bearer": + raise HTTPException( + status_code=403, detail="Invalid authentication scheme." + ) + user_info = self.verify_jwt(credentials.credentials) + if not user_info: + raise HTTPException( + status_code=403, detail="Invalid token or expired token." + ) + + request.state.user = user_info + + from src.context import set_user_id, set_username, set_role + if hasattr(user_info, "user_id"): + set_user_id(str(user_info.user_id)) + if hasattr(user_info, "username"): + set_username(user_info.username) + elif hasattr(user_info, "name"): + set_username(user_info.name) + if hasattr(user_info, "role"): + set_role(user_info.role) + + return user_info + else: + raise HTTPException(status_code=403, detail="Invalid authorization code.") + + def verify_jwt(self, jwtoken: str) -> Optional[UserBase]: + try: + response = requests.get( + f"{config.AUTH_SERVICE_API}/verify-token", + headers={"Authorization": f"Bearer {jwtoken}"}, + ) + + if not response.ok: + return None + + user_data = response.json() + return UserBase(**user_data["data"]) + + except Exception as e: + print(f"Token verification error: {str(e)}") + return None + + +# Create dependency to get current user from request state +async def get_current_user(request: Request) -> UserBase: + return request.state.user + + +async def get_token(request: Request): + token = request.headers.get("Authorization") + if token: + return token.replace("Bearer ", "") # Menghapus prefix "Bearer " + else: + return request.cookies.get("access_token") # Fallback ke cookie + + return "" # Mengembalikan token atau None jika tidak ada + +CurrentUser = Annotated[UserBase, Depends(get_current_user)] +Token = Annotated[str, Depends(get_token)] diff --git a/src/config.py b/src/config.py new file mode 100644 index 0000000..6bb946d --- /dev/null +++ b/src/config.py @@ -0,0 +1,112 @@ +import base64 +import logging +import os +from typing import List +from urllib import parse + +from pydantic import BaseModel +from starlette.config import Config +from starlette.datastructures import CommaSeparatedStrings + +log = logging.getLogger(__name__) + + +class BaseConfigurationModel(BaseModel): + """Base configuration model used by all config options.""" + + pass + + +def get_env_tags(tag_list: List[str]) -> dict: + """Create dictionary of available env tags.""" + tags = {} + for t in tag_list: + tag_key, env_key = t.split(":") + + env_value = os.environ.get(env_key) + + if env_value: + tags.update({tag_key: env_value}) + + return tags + + +def get_config(): + try: + # Try to load from .env file first + config = Config(".env") + except FileNotFoundError: + # If .env doesn't exist, use environment variables + config = Config(environ=os.environ) + + return config + + +config = get_config() + + +LOG_LEVEL = config("LOG_LEVEL", default="INFO") +ENV = config("ENV", default="local") +PORT = config("PORT", cast=int, default=8000) +HOST = config("HOST", default="localhost") + + +# database +DATABASE_HOSTNAME = config("DATABASE_HOSTNAME") +_DATABASE_CREDENTIAL_USER = config("DATABASE_CREDENTIAL_USER") +_DATABASE_CREDENTIAL_PASSWORD = config("DATABASE_CREDENTIAL_PASSWORD") +_QUOTED_DATABASE_PASSWORD = parse.quote(str(_DATABASE_CREDENTIAL_PASSWORD)) +DATABASE_NAME = config("DATABASE_NAME", default="digital_twin") +DATABASE_PORT = config("DATABASE_PORT", default="5432") + +DATABASE_ENGINE_POOL_SIZE = config("DATABASE_ENGINE_POOL_SIZE", cast=int, default=20) +DATABASE_ENGINE_MAX_OVERFLOW = config( + "DATABASE_ENGINE_MAX_OVERFLOW", cast=int, default=0 +) + +COLLECTOR_HOSTNAME = config("COLLECTOR_HOSTNAME") +COLLECTOR_PORT = config("COLLECTOR_PORT", default="5432") +COLLECTOR_CREDENTIAL_USER = config("COLLECTOR_CREDENTIAL_USER") +COLLECTOR_CREDENTIAL_PASSWORD = config("COLLECTOR_CREDENTIAL_PASSWORD") +QUOTED_COLLECTOR_CREDENTIAL_PASSWORD = parse.quote(str(COLLECTOR_CREDENTIAL_PASSWORD)) +COLLECTOR_NAME = config("COLLECTOR_NAME") + + + +# Deal with DB disconnects +# https://docs.sqlalchemy.org/en/20/core/pooling.html#pool-disconnects +DATABASE_ENGINE_POOL_PING = config("DATABASE_ENGINE_POOL_PING", default=False) +SQLALCHEMY_DATABASE_URI = f"postgresql+asyncpg://{_DATABASE_CREDENTIAL_USER}:{_QUOTED_DATABASE_PASSWORD}@{DATABASE_HOSTNAME}:{DATABASE_PORT}/{DATABASE_NAME}" +SQLALCHEMY_COLLECTOR_URI = f"postgresql+asyncpg://{COLLECTOR_CREDENTIAL_USER}:{QUOTED_COLLECTOR_CREDENTIAL_PASSWORD}@{COLLECTOR_HOSTNAME}:{COLLECTOR_PORT}/{COLLECTOR_NAME}" + + +TIMEZONE = "Asia/Jakarta" + +MAXIMO_BASE_URL = config("MAXIMO_BASE_URL", default="http://example.com") +MAXIMO_API_KEY = config("MAXIMO_API_KEY", default="keys") + +AUTH_SERVICE_API = config("AUTH_SERVICE_API", default="http://192.168.1.82:8000/auth") +AEROS_BASE_URL = config("AEROS_BASE_URL", default="http://192.168.1.102") +AEROS_BASE_URL_OLD = config("AEROS_BASE_URL_OLD", default="http://192.168.1.87") + +WINDOWS_AEROS_BASE_URL = config("WINDOWS_AEROS_BASE_URL", default="http://192.168.1.102:8800") + +DEFAULT_PROJECT_NAME = config("DEFAULT_PROJECT_NAME", default="RBD TJB") +TEMPORAL_URL = config("TEMPORAL_URL", default="http://192.168.1.86:7233") +RELIABILITY_SERVICE_API = config("RELIABILITY_SERVICE_API", default="http://192.168.1.82:8000/reliability") + +CLAMAV_HOST = config("CLAMAV_HOST", default="192.168.1.82") +CLAMAV_PORT = config("CLAMAV_PORT", cast=int, default=3310) + +AEROS_LICENSE_ID = config("AEROS_LICENSE_ID", default=None) +AEROS_LICENSE_SECRET = config("AEROS_LICENSE_SECRET", default=None) + +VAULT_URL=config('VAULT_URL', default=None) +ROLE_ID=config('ROLE_ID', default=None) +SECRET_ID=config('SECRET_ID', default=None) +AEROS_SECRET_PATH=config('AEROS_SECRET_PATH', default=None) + +USE_LICENSE_APP = config("USE_LICENSE_APP", cast=bool, default=True) + +AHM_BASE_URL = config("AHM_BASE_URL", default="http://192.168.1.82:8000/ahm") +AHM_SIMULATION_CALLBACK_URL = config("AHM_SIMULATION_CALLBACK_URL", default="/api/v1/simulations/rbd/callback") \ No newline at end of file diff --git a/src/context.py b/src/context.py new file mode 100644 index 0000000..779a3e4 --- /dev/null +++ b/src/context.py @@ -0,0 +1,42 @@ +from contextvars import ContextVar +from typing import Optional, Final + +REQUEST_ID_CTX_KEY: Final[str] = "request_id" +USER_ID_CTX_KEY: Final[str] = "user_id" +USERNAME_CTX_KEY: Final[str] = "username" +ROLE_CTX_KEY: Final[str] = "role" + +_request_id_ctx_var: ContextVar[Optional[str]] = ContextVar(REQUEST_ID_CTX_KEY, default=None) +_user_id_ctx_var: ContextVar[Optional[str]] = ContextVar(USER_ID_CTX_KEY, default=None) +_username_ctx_var: ContextVar[Optional[str]] = ContextVar(USERNAME_CTX_KEY, default=None) +_role_ctx_var: ContextVar[Optional[str]] = ContextVar(ROLE_CTX_KEY, default=None) + + +def get_request_id() -> Optional[str]: + return _request_id_ctx_var.get() + + +def set_request_id(request_id: str): + return _request_id_ctx_var.set(request_id) + + +def reset_request_id(token): + _request_id_ctx_var.reset(token) + +def get_user_id() -> Optional[str]: + return _user_id_ctx_var.get() + +def set_user_id(user_id: str): + return _user_id_ctx_var.set(user_id) + +def get_username() -> Optional[str]: + return _username_ctx_var.get() + +def set_username(username: str): + return _username_ctx_var.set(username) + +def get_role() -> Optional[str]: + return _role_ctx_var.get() + +def set_role(role: str): + return _role_ctx_var.set(role) diff --git a/src/dashboard_model/__init__.py b/src/dashboard_model/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/dashboard_model/model.py b/src/dashboard_model/model.py new file mode 100644 index 0000000..6aa984f --- /dev/null +++ b/src/dashboard_model/model.py @@ -0,0 +1,12 @@ +from sqlalchemy import Column, Float, String +from src.database.core import Base +from src.models import DefaultMixin + +class RBDMasterData(Base, DefaultMixin): + __tablename__ = "rbd_ms_master_data" + + name = Column(String(255), unique=True, nullable=False, index=True) + value_float = Column(Float, nullable=True) + value_string = Column(String(255), nullable=True) + month = Column(String(20), nullable=True) + year = Column(String(20), nullable=True) diff --git a/src/dashboard_model/router.py b/src/dashboard_model/router.py new file mode 100644 index 0000000..38404ba --- /dev/null +++ b/src/dashboard_model/router.py @@ -0,0 +1,57 @@ +from typing import Annotated, List, Optional +from uuid import UUID + +from fastapi import APIRouter, Depends, HTTPException, Query, status + +from src.auth.service import CurrentUser +from src.dashboard_model.schema import DashboardModelQuery +from src.database.core import DbSession +from src.database.service import CommonParameters +from src.models import StandardResponse +from src.dashboard_model.schema_masterdata import RBDMasterDataSchema, RBDMasterDataUpdate + +from .service import get_model_data + +router = APIRouter() + + +@router.get("", response_model=StandardResponse[dict]) +async def get_dashboard_model_data( + db_session: DbSession, + query:Annotated[DashboardModelQuery, Query()] +): + simulation_id = query.simulation_id + result = await get_model_data(db_session=db_session, simulation_id=simulation_id) + + return StandardResponse( + data=result, + message="Data retrieved successfully", + ) + + +@router.get("/master-data", response_model=StandardResponse[List[RBDMasterDataSchema]]) +async def get_dashboard_master_data( + db_session: DbSession +): + from src.dashboard_model.service import get_master_data_list + result = await get_master_data_list(db_session=db_session) + + + return StandardResponse( + data=result, + message="Master data retrieved successfully" + ) + + +@router.post("/master-data/{md_id}/update", response_model=StandardResponse[RBDMasterDataSchema]) +async def update_dashboard_master_data( + md_id: UUID, + payload: RBDMasterDataUpdate, + db_session: DbSession +): + from src.dashboard_model.service import update_master_data + result = await update_master_data(db_session=db_session, md_id=md_id, payload=payload) + return StandardResponse( + data=result, + message="Master data updated successfully" + ) diff --git a/src/dashboard_model/schema.py b/src/dashboard_model/schema.py new file mode 100644 index 0000000..0183e06 --- /dev/null +++ b/src/dashboard_model/schema.py @@ -0,0 +1,49 @@ +# from datetime import datetime +# from typing import List, Optional +# from uuid import UUID + +# from pydantic import Field + +from typing import Optional +from uuid import UUID +from src.models import DefultBase +# from src.overhaul_scope.schema import ScopeRead +# from src.scope_equipment_job.schema import ScopeEquipmentJobRead +# from src.job.schema import ActivityMasterRead + +# class OverhaulScheduleBase(DefultBase): +# pass + + +# class OverhaulScheduleCreate(OverhaulScheduleBase): +# year: int +# plan_duration: Optional[int] = Field(None) +# planned_outage: Optional[int] = Field(None) +# actual_shutdown: Optional[int] = Field(None) +# start: datetime +# finish: datetime +# remark: Optional[str] = Field(None) + + +# class OverhaulScheduleUpdate(OverhaulScheduleBase): +# start: datetime +# finish: datetime + + +# class OverhaulScheduleRead(OverhaulScheduleBase): +# id: UUID +# year: int +# plan_duration: Optional[int] +# planned_outage: Optional[int] +# actual_shutdown: Optional[int] +# start: datetime +# finish: datetime +# remark: Optional[str] + + +# class OverhaulSchedulePagination(Pagination): +# items: List[OverhaulScheduleRead] = [] + + +class DashboardModelQuery(DefultBase): + simulation_id : Optional[UUID] = None \ No newline at end of file diff --git a/src/dashboard_model/schema_masterdata.py b/src/dashboard_model/schema_masterdata.py new file mode 100644 index 0000000..b0ba4c7 --- /dev/null +++ b/src/dashboard_model/schema_masterdata.py @@ -0,0 +1,18 @@ +from typing import Optional +from pydantic import BaseModel, ConfigDict +from src.models import DefultBase +from uuid import UUID + +class RBDMasterDataSchema(DefultBase): + id: UUID + name: str + value_float: Optional[float] = None + value_string: Optional[str] = None + month: Optional[str] = None + year: Optional[str] = None + +class RBDMasterDataUpdate(DefultBase): + value_float: Optional[float] = None + value_string: Optional[str] = None + month: Optional[str] = None + year: Optional[str] = None diff --git a/src/dashboard_model/service.py b/src/dashboard_model/service.py new file mode 100644 index 0000000..f4fa6a3 --- /dev/null +++ b/src/dashboard_model/service.py @@ -0,0 +1,205 @@ +from typing import Optional, List +from uuid import UUID + +from fastapi import HTTPException, status +from sqlalchemy import select +from sqlalchemy.orm import selectinload + +from src.aeros_simulation.model import AerosSimulation +from src.aeros_simulation.service import ( + get_calc_result_by, + get_default_simulation, + get_simulation_by_id, + get_simulation_node_by, +) +from src.auth.service import CurrentUser +from src.database.core import DbSession +from src.database.service import search_filter_sort_paginate +from tkinter.constants import E + +from src.dashboard_model.model import RBDMasterData +from src.dashboard_model.schema_masterdata import RBDMasterDataUpdate + + +async def _get_or_create_master_data(db_session: DbSession, name: str, default_float: float): + query = select(RBDMasterData).where(RBDMasterData.name == name) + result = await db_session.execute(query) + record = result.scalars().first() + if not record: + record = RBDMasterData(name=name, value_float=default_float) + db_session.add(record) + await db_session.commit() + await db_session.refresh(record) + return record + + +async def get_master_data_list(db_session: DbSession): + # Ensure Current EAF exists + await _get_or_create_master_data(db_session, "Current EAF Realization", 85.62) + await _get_or_create_master_data(db_session, "Last Overhaul Date", 0) + await _get_or_create_master_data(db_session, "Next Overhaul Date", 0) + query = select(RBDMasterData) + result = await db_session.execute(query) + return result.scalars().all() + + +async def update_master_data(db_session: DbSession, md_id: UUID, payload: RBDMasterDataUpdate): + query = select(RBDMasterData).where(RBDMasterData.id == md_id) + result = await db_session.execute(query) + record = result.scalars().first() + if not record: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, detail="Master Data not found" + ) + if payload.value_float is not None: + record.value_float = payload.value_float + if payload.value_string is not None: + record.value_string = payload.value_string + if payload.month is not None: + record.month = payload.month + if payload.year is not None: + record.year = payload.year + await db_session.commit() + await db_session.refresh(record) + return record + + +async def get_model_data(*, db_session: DbSession, simulation_id: Optional[UUID]): + if simulation_id: + simulation = await get_simulation_by_id(db_session=db_session, simulation_id=simulation_id) + else: + simulation = await get_default_simulation(db_session=db_session) + + if not simulation: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, detail="Simulation not found" + ) + + + main_calc_data = await get_calc_result_by( + db_session=db_session, simulation_id=simulation.id, node_name="- TJB - Unit 3 -" + ) + + + # Total time period + total_time = main_calc_data.total_uptime + main_calc_data.total_downtime + + # Availability Factor (same as your first formula - this one is correct) + availability = (main_calc_data.availability) * 100 + + is_oh = (main_calc_data.sof >= 10) + + # Equivalent Forced Outage Rate (EFOR) + EFOR = main_calc_data.efor + + #Prediction + EAF = main_calc_data.eaf + Derating = main_calc_data.derating_hours + Trip = main_calc_data.num_events + EAF_KONKIN = main_calc_data.eaf_konkin + + SOF = main_calc_data.sof + + #Fetch Master Data EAF realization + eaf_record = await _get_or_create_master_data(db_session, "Current EAF Realization", 85.62) + eaf_real_val = eaf_record.value_float if eaf_record.value_float is not None else 85.62 + + #Realization + EAF_REAL = eaf_real_val + EFOR_REAL = 1.7 + EAF_KONKIN_REAL = eaf_real_val + + powerplant_reliability = { + "Plant Control": 98, + "SPS": 98, + "Turbine": 98, + "Generator": 98, + "Condensate Water": 98, + "Feedwater System": 98, + "Cooling Water": 98, + "SCR": 98, + "Ash Handling": 98, + "Air Flue Gas": 98, + "Boiler": 98, + "SAC-IAC": 98, + "KLH": 98, + "CL": 98, + "DESALINATION (CP)": 98, + "FGD": 98, + "CHS": 98, + "SSB": 98, + "WTP": 98, + } + + # Fetch Forecasts + forecast_weekly = await get_latest_sim_results_by_pattern(db_session, "Simulation_weekly_%") + forecast_monthly = await get_latest_sim_results_by_pattern(db_session, "Simulation_monthly_%") + + return { + "id": str(simulation.id), + "name": simulation.simulation_name, + "availability": availability, + "EFOR": EFOR, + "SOF": SOF, + "EAF": { + "Prediction_EAF": EAF, + "Prediction_EAF_KONKIN": EAF_KONKIN, + "Real_EAF": EAF_REAL, + "Real_EAF_KONKIN": EAF_KONKIN_REAL, + "month": eaf_record.month, + "year": eaf_record.year + }, + "Trip": { + "Prediction_Trip": Trip, + "Real_Trip": Trip + }, + "Derating": { + "Prediction_Derating": Derating, + "Real_Derating": Derating + }, + "powerplant_reliability": powerplant_reliability, + "forecast_weekly": forecast_weekly, + "forecast_monthly": forecast_monthly +} + +async def get_latest_sim_results_by_pattern(db_session: DbSession, pattern: str): + from sqlalchemy import select + from src.aeros_simulation.model import AerosSimulation, AerosSimulationCalcResult, AerosNode + from src.aeros_simulation.service import get_plant_calc_result + + query = select(AerosSimulation).where(AerosSimulation.simulation_name.like(pattern)).order_by(AerosSimulation.created_at.desc()).limit(1) + result = await db_session.execute(query) + simulation = result.scalars().first() + + if not simulation: + return None + + # Get plant node result + plant_res = await get_plant_calc_result(db_session=db_session, simulation_id=simulation.id) + + # Get top 5 equipment causing trips (num_events) + trip_query = select(AerosSimulationCalcResult).join(AerosNode).where( + AerosSimulationCalcResult.aeros_simulation_id == simulation.id, + AerosNode.node_type == 'RegularNode' + ).options(selectinload(AerosSimulationCalcResult.aeros_node)).order_by(AerosSimulationCalcResult.num_events.desc()).limit(5) + + trip_res_exec = await db_session.execute(trip_query) + trip_results = trip_res_exec.scalars().all() + + top_trips = [] + for tr in trip_results: + if tr.num_events > 0: + top_trips.append({ + "name": tr.aeros_node.node_name, + "events": tr.num_events, + "tag": tr.aeros_node.node_name + }) + + return { + "simulation_id": str(simulation.id), + "name": simulation.simulation_name, + "eaf": plant_res.eaf if plant_res else 0, + "efor": plant_res.efor if plant_res else 0, + "trips": int(plant_res.num_events) if plant_res else 0, + "top_trip_equipment": top_trips + } diff --git a/src/database/__init__.py b/src/database/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/database/core.py b/src/database/core.py new file mode 100644 index 0000000..5f7823a --- /dev/null +++ b/src/database/core.py @@ -0,0 +1,118 @@ +# src/database.py +import functools +import operator +import re +from contextlib import asynccontextmanager, contextmanager +from typing import Annotated, Any, AsyncGenerator + +from fastapi import Depends +from pydantic import BaseModel +from sqlalchemy import create_engine, inspect +from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker +from sqlalchemy.ext.declarative import declarative_base, declared_attr +from sqlalchemy.orm import DeclarativeBase, Session, object_session, sessionmaker +from sqlalchemy.sql.expression import true +from sqlalchemy_utils import get_mapper +from starlette.requests import Request + +from src.config import SQLALCHEMY_COLLECTOR_URI, SQLALCHEMY_DATABASE_URI + +engine = create_async_engine(SQLALCHEMY_DATABASE_URI, echo=False, future=True) +collector_engine = create_async_engine(SQLALCHEMY_COLLECTOR_URI, echo=False, future=True) + + + +async_session = async_sessionmaker( + engine, + class_=AsyncSession, + expire_on_commit=False, + autocommit=False, + autoflush=False, +) + +async_aeros_session = async_sessionmaker( + collector_engine, + class_=AsyncSession, + expire_on_commit=False, + autocommit=False, + autoflush=False, +) + + +async def get_aeros_db(request: Request): + return request.state.aeros_db + + +def get_db(request: Request): + return request.state.db + + +DbSession = Annotated[AsyncSession, Depends(get_db)] +CollectorDbSession = Annotated[AsyncSession, Depends(get_aeros_db)] + + +class Base(DeclarativeBase): + @declared_attr.directive + def __tablename__(cls) -> str: + return resolve_table_name(cls.__name__) + + def dict(self): + """Returns a dict representation of a model.""" + if hasattr(self, '__table__'): + return {c.name: operator.attrgetter(c.name)(self) for c in self.__table__.columns} + return {} + +class CollectorBase(DeclarativeBase): + @declared_attr.directive + def __tablename__(cls) -> str: + return resolve_table_name(cls.__name__) + + def dict(self): + """Returns a dict representation of a model.""" + if hasattr(self, '__table__'): + return {c.name: operator.attrgetter(c.name)(self) for c in self.__table__.columns} + return {} + +@asynccontextmanager +async def get_main_session(): + session = async_session() + try: + yield session + await session.commit() + except: + await session.rollback() + raise + finally: + await session.close() + +@asynccontextmanager +async def get_collector_session(): + session = async_aeros_session() + try: + yield session + await session.commit() + except: + await session.rollback() + raise + finally: + await session.close() + +def resolve_table_name(name): + """Resolves table names to their mapped names.""" + names = re.split("(?=[A-Z])", name) # noqa + return "_".join([x.lower() for x in names if x]) + + +def get_class_by_tablename(table_fullname: str) -> Any: + """Return class reference mapped to table.""" + + def _find_class(name): + for c in Base.registry._class_registry.values(): + if hasattr(c, "__table__"): + if c.__table__.fullname.lower() == name.lower(): + return c + + mapped_name = resolve_table_name(table_fullname) + mapped_class = _find_class(mapped_name) + + return mapped_class diff --git a/src/database/schema.py b/src/database/schema.py new file mode 100644 index 0000000..76df22f --- /dev/null +++ b/src/database/schema.py @@ -0,0 +1,22 @@ +from typing import Optional, List + +from pydantic import Field +from src.models import DefultBase + + +class CommonParams(DefultBase): + # This ensures no extra query params are allowed + current_user: Optional[str] = Field(None, alias="currentUser", max_length=50) + page: int = Field(1, gt=0, lt=2147483647) + items_per_page: int = Field(5, gt=0, le=50, multiple_of=5, alias="itemsPerPage") + query_str: Optional[str] = Field(None, alias="q", max_length=100) + filter_spec: Optional[str] = Field(None, alias="filter", max_length=500) + sort_by: List[str] = Field(default_factory=list, alias="sortBy[]") + descending: List[bool] = Field(default_factory=list, alias="descending[]") + exclude: List[str] = Field(default_factory=list, alias="exclude[]") + all_params: int = Field(0, alias="all") + + # Property to mirror your original return dict's bool conversion + @property + def is_all(self) -> bool: + return bool(self.all_params) \ No newline at end of file diff --git a/src/database/service.py b/src/database/service.py new file mode 100644 index 0000000..20d3291 --- /dev/null +++ b/src/database/service.py @@ -0,0 +1,142 @@ +import logging +from typing import Annotated, List, Type, TypeVar + +from fastapi import Depends, Query, Request +from pydantic.types import Json, constr +from sqlalchemy import Select, desc, func, or_ +from sqlalchemy.exc import ProgrammingError +from sqlalchemy_filters import apply_pagination + +from src.database.schema import CommonParams + +from .core import DbSession + +log = logging.getLogger(__name__) + +# allows only printable characters +QueryStr = constr(pattern=r"^[ -~]+$", min_length=1) + + +def common_parameters( + db_session: DbSession, # type: ignore + params: Annotated[CommonParams, Query()] + # role: QueryStr = Depends(get_current_role), +): + return { + "db_session": db_session, + "page": params.page, + "items_per_page": params.items_per_page, + "query_str": params.query_str, + "filter_spec": params.filter_spec, + "sort_by": params.sort_by, + "descending": params.descending, + "current_user": params.current_user, + "all": params.is_all, + # "role": role, + } + + +CommonParameters = Annotated[ + dict[str, int | str | DbSession | QueryStr | Json | List[str] | List[bool]] | bool, + Depends(common_parameters), +] + +T = TypeVar("T", bound=CommonParams) + +def get_params_factory(model_type: Type[T]): + async def wrapper( + db_session: DbSession, + params: Annotated[model_type, Query()] # type: ignore + ): + res = params.model_dump() + return { + "db_session": db_session, + "all": params.is_all, + **res + } + return wrapper + + +def search(*, query_str: str, query: Query, model, sort=False): + """Perform a search based on the query.""" + search_model = model + + if not query_str.strip(): + return query + + search = [] + if hasattr(search_model, "search_vector"): + vector = search_model.search_vector + search.append(vector.op("@@")(func.tsq_parse(query_str))) + + if hasattr(search_model, "name"): + search.append( + search_model.name.ilike(f"%{query_str}%"), + ) + search.append(search_model.name == query_str) + + if not search: + raise Exception(f"Search not supported for model: {model}") + + query = query.filter(or_(*search)) + + if sort: + query = query.order_by(desc(func.ts_rank_cd(vector, func.tsq_parse(query_str)))) + + return query.params(term=query_str) + + +async def search_filter_sort_paginate( + db_session: DbSession, + model, + query_str: str = None, + filter_spec: str | dict | None = None, + page: int = 1, + items_per_page: int = 5, + sort_by: List[str] = None, + descending: List[bool] = None, + current_user: str = None, + exclude: List[str] = None, + all: bool = False, + **extra_params, +): + """Common functionality for searching, filtering, sorting, and pagination.""" + # try: + # Check if model is Select + if not isinstance(model, Select): + query = Select(model) + else: + query = model + + if query_str: + sort = False if sort_by else True + query = search(query_str=query_str, query=query, model=model, sort=sort) + + # Get total count + count_query = Select(func.count()).select_from(query.subquery()) + total = await db_session.scalar(count_query) + + if all: + result = await db_session.execute(query) + items = result.scalars().all() + + return { + "items": items, + "itemsPerPage": total, + "page": 1, + "total": total, + "totalPages": 1, + } + + query = query.offset((page - 1) * items_per_page).limit(items_per_page) + + result = await db_session.execute(query) + items = result.scalars().all() + + return { + "items": items, + "itemsPerPage": items_per_page, + "page": page, + "total": total, + "totalPages": (total + items_per_page - 1) // items_per_page, + } diff --git a/src/enums.py b/src/enums.py new file mode 100644 index 0000000..5291546 --- /dev/null +++ b/src/enums.py @@ -0,0 +1,24 @@ +from enum import StrEnum + + +class RBDEnum(StrEnum): + """ + A custom Enum class that extends StrEnum. + + This class inherits all functionality from StrEnum, including + string representation and automatic value conversion to strings. + + Example: + class Visibility(DispatchEnum): + OPEN = "Open" + RESTRICTED = "Restricted" + + assert str(Visibility.OPEN) == "Open" + """ + + pass # No additional implementation needed + + +class ResponseStatus(RBDEnum): + SUCCESS = "success" + ERROR = "error" diff --git a/src/exceptions.py b/src/exceptions.py new file mode 100644 index 0000000..600cadf --- /dev/null +++ b/src/exceptions.py @@ -0,0 +1,223 @@ +# Define base error model +import logging +from typing import Any, Dict, List, Optional + +from asyncpg.exceptions import DataError as AsyncPGDataError +from asyncpg.exceptions import PostgresError +from fastapi import FastAPI, HTTPException, Request +from starlette.exceptions import HTTPException as StarletteHTTPException +from fastapi.exceptions import RequestValidationError +from fastapi.responses import JSONResponse +from pydantic import BaseModel, Field +from slowapi import _rate_limit_exceeded_handler +from slowapi.errors import RateLimitExceeded +from sqlalchemy.exc import DataError, DBAPIError, IntegrityError, SQLAlchemyError + +from src.enums import ResponseStatus + +log = logging.getLogger(__name__) + +class ErrorDetail(BaseModel): + field: Optional[str] = Field(None, max_length=100) + message: str = Field(...) + code: Optional[str] = Field(None) + params: Optional[Dict[str, Any]] = None + + +class ErrorResponse(BaseModel): + data: Optional[Any] = None + message: str = Field(..., max_length=255) + status: ResponseStatus = ResponseStatus.ERROR + errors: Optional[List[ErrorDetail]] = None + + +# Custom exception handler setup + + +def get_request_context(request: Request): + """ + Get detailed request context for logging. + """ + + def get_client_ip(): + """ + Get the real client IP address from Kong Gateway headers. + Kong sets X-Real-IP and X-Forwarded-For headers by default. + """ + # Kong specific headers + if "X-Real-IP" in request.headers: + return request.headers["X-Real-IP"] + + # Fallback to X-Forwarded-For + if "X-Forwarded-For" in request.headers: + # Get the first IP (original client) + return request.headers["X-Forwarded-For"].split(",")[0].strip() + + # Last resort + return request.client.host + + return { + "endpoint": request.url.path, + "url": str(request.url), + "method": request.method, + "remote_addr": get_client_ip(), + } + + +def handle_sqlalchemy_error(error: SQLAlchemyError): + """ + Handle SQLAlchemy errors and return user-friendly error messages. + """ + try: + original_error = error.orig + except AttributeError: + original_error = None + + if isinstance(error, IntegrityError): + if "unique constraint" in str(error).lower(): + return "This record already exists.", 422 + elif "foreign key constraint" in str(error).lower(): + return "Related record not found.", 422 + else: + return "Data integrity error.", 422 + elif isinstance(error, DataError) or isinstance(original_error, AsyncPGDataError): + return "Invalid data provided.", 422 + elif isinstance(error, DBAPIError): + if "unique constraint" in str(error).lower(): + return "This record already exists.", 422 + elif "foreign key constraint" in str(error).lower(): + return "Related record not found.", 422 + elif "null value in column" in str(error).lower(): + return "Required data missing.", 422 + elif "invalid input for query argument" in str(error).lower(): + return "Invalid data provided.", 422 + else: + return "Database error.", 500 + else: + # Log the full error for debugging purposes + logging.error(f"Unexpected database error: {str(error)}") + return "An unexpected database error occurred.", 500 + + +def handle_exception(request: Request, exc: Exception): + """ + Global exception handler for Fastapi application. + """ + import uuid + error_id = str(uuid.uuid1()) + request_info = get_request_context(request) + + # In FastAPI, we don't have a global 'g', but we can pass info in request.state + request.state.error_id = error_id + + if isinstance(exc, RateLimitExceeded): + log.warning( + f"Rate limit exceeded: {str(exc.description) if hasattr(exc, 'description') else str(exc)} | Error ID: {error_id}", + extra={ + "error_id": error_id, + "error_category": "rate_limit", + "detail": str(exc.description) if hasattr(exc, "description") else str(exc), + "request": request_info, + }, + ) + return JSONResponse( + status_code=429, + content={ + "data": None, + "message": "Rate limit exceeded", + "status": ResponseStatus.ERROR, + "error_id": error_id + } + ) + + if isinstance(exc, RequestValidationError): + log.warning( + f"Validation error: {exc.errors()} | Error ID: {error_id}", + extra={ + "error_id": error_id, + "error_category": "validation", + "errors": exc.errors(), + "request": request_info, + }, + ) + return JSONResponse( + status_code=422, + content={ + "data": exc.errors(), + "message": "Validation Error", + "status": ResponseStatus.ERROR, + "error_id": error_id + }, + ) + + if isinstance(exc, (HTTPException, StarletteHTTPException)): + # Log as warning for 4xx, error for 5xx + status_code = exc.status_code if hasattr(exc, "status_code") else 500 + detail = exc.detail if hasattr(exc, "detail") else str(exc) + + log_level = logging.WARNING if 400 <= status_code < 500 else logging.ERROR + log.log( + log_level, + f"HTTP {status_code}: {detail} | Error ID: {error_id}", + extra={ + "error_id": error_id, + "error_category": "http", + "status_code": status_code, + "request": request_info, + }, + ) + + return JSONResponse( + status_code=status_code, + content={ + "data": None, + "message": str(detail), + "status": ResponseStatus.ERROR, + "error_id": error_id + }, + ) + + if isinstance(exc, SQLAlchemyError): + error_message, status_code = handle_sqlalchemy_error(exc) + # Log integrity errors as warning, others as error + log_level = logging.WARNING if 400 <= status_code < 500 else logging.ERROR + log.log( + log_level, + f"Database error: {error_message} | Error ID: {error_id}", + extra={ + "error_id": error_id, + "error_category": "database", + "violation": str(exc).split('\n')[0], + "request": request_info, + }, + ) + + return JSONResponse( + status_code=status_code, + content={ + "data": None, + "message": error_message, + "status": ResponseStatus.ERROR, + "error_id": error_id + }, + ) + + # Log unexpected errors + log.error( + f"Unexpected error: {str(exc)} | Error ID: {error_id}", + extra={ + "error_id": error_id, + "error_category": "unexpected", + "request": request_info, + }, + ) + + return JSONResponse( + status_code=500, + content={ + "data": None, + "message": "An unexpected error occurred", + "status": ResponseStatus.ERROR, + "error_id": error_id + }, + ) diff --git a/src/logging.py b/src/logging.py new file mode 100644 index 0000000..04adbc0 --- /dev/null +++ b/src/logging.py @@ -0,0 +1,135 @@ +import logging +import json +import datetime +import os +import sys +from typing import Optional + +from src.config import LOG_LEVEL +from src.enums import RBDEnum + + +LOG_FORMAT_DEBUG = "%(levelname)s:%(message)s:%(pathname)s:%(funcName)s:%(lineno)d" + +# ANSI Color Codes +RESET = "\033[0m" +COLORS = { + "DEBUG": "\033[36m", # Cyan + "INFO": "\033[32m", # Green + "WARNING": "\033[33m", # Yellow + "WARN": "\033[33m", # Yellow + "ERROR": "\033[31m", # Red + "CRITICAL": "\033[1;31m", # Bold Red +} + + +class LogLevels(RBDEnum): + info = "INFO" + warn = "WARN" + error = "ERROR" + debug = "DEBUG" + + +class JSONFormatter(logging.Formatter): + """ + Custom formatter to output logs in JSON format. + """ + def format(self, record): + from src.context import get_request_id, get_user_id, get_username, get_role + + request_id = None + user_id = None + username = None + role = None + + try: + request_id = get_request_id() + user_id = get_user_id() + username = get_username() + role = get_role() + except Exception: + pass + + # Standard fields from requirements + log_record = { + "timestamp": datetime.datetime.fromtimestamp(record.created).strftime("%Y-%m-%d %H:%M:%S"), + "level": record.levelname, + "message": record.getMessage(), + } + + # Add Context information if available + if request_id: + log_record["request_id"] = request_id + + # Add Error context if available + if hasattr(record, "error_id"): + log_record["error_id"] = record.error_id + elif "error_id" in record.__dict__: + log_record["error_id"] = record.error_id + + if user_id: + log_record["user_id"] = user_id + + # Add any extra attributes passed to the log call + standard_attrs = { + "args", "asctime", "created", "exc_info", "exc_text", "filename", + "funcName", "levelname", "levelno", "lineno", "module", "msecs", + "message", "msg", "name", "pathname", "process", "processName", + "relativeCreated", "stack_info", "thread", "threadName", "error_id" + } + for key, value in record.__dict__.items(): + if key not in standard_attrs and not key.startswith("_"): + log_record[key] = value + + log_json = json.dumps(log_record) + + # Apply color if the output is a terminal + if sys.stdout.isatty(): + level_color = COLORS.get(record.levelname, "") + return f"{level_color}{log_json}{RESET}" + + return log_json + +def configure_logging(): + log_level = str(LOG_LEVEL).upper() # cast to string + log_levels = list(LogLevels) + + if log_level not in log_levels: + log_level = LogLevels.error + + # Get the root logger + root_logger = logging.getLogger() + root_logger.setLevel(log_level) + + # Clear existing handlers to avoid duplicate logs + if root_logger.hasHandlers(): + root_logger.handlers.clear() + + # Create a stream handler that outputs to stdout + handler = logging.StreamHandler(sys.stdout) + + # Use JSONFormatter for all environments, or could be conditional + # For now, let's assume the user wants JSON everywhere as requested + formatter = JSONFormatter() + + # If debug mode is specifically requested and we want the old format for debug: + # if log_level == LogLevels.debug: + # formatter = logging.Formatter(LOG_FORMAT_DEBUG) + + handler.setFormatter(formatter) + root_logger.addHandler(handler) + + for logger_name in ["uvicorn", "uvicorn.error", "fastapi"]: + logger = logging.getLogger(logger_name) + logger.handlers = [] + logger.propagate = True + + for logger_name in ["uvicorn.access"]: + logger = logging.getLogger(logger_name) + logger.handlers = [] + logger.propagate = False + + # # sometimes the slack client can be too verbose + # logging.getLogger("slack_sdk.web.base_client").setLevel(logging.CRITICAL) + + \ No newline at end of file diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..e2205f1 --- /dev/null +++ b/src/main.py @@ -0,0 +1,168 @@ +import logging +import os +import sys +import time +from os import path +from uuid import uuid1 +from typing import Optional, Final + +from fastapi import FastAPI, HTTPException, status, Path +from fastapi.exceptions import RequestValidationError +from fastapi.responses import JSONResponse +from pydantic import ValidationError + +from slowapi import _rate_limit_exceeded_handler +from slowapi.errors import RateLimitExceeded +from slowapi.middleware import SlowAPIMiddleware +from sqlalchemy import inspect +from sqlalchemy.orm import scoped_session +from sqlalchemy.ext.asyncio import async_scoped_session +from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint +from starlette.requests import Request +from starlette.routing import compile_path +from starlette.middleware.gzip import GZipMiddleware +from fastapi.middleware.cors import CORSMiddleware + +from starlette.responses import Response, StreamingResponse, FileResponse +from starlette.staticfiles import StaticFiles + +from src.enums import ResponseStatus +from src.logging import configure_logging +from src.rate_limiter import limiter +from src.api import api_router +from src.database.core import engine, async_session, async_aeros_session +from src.exceptions import handle_exception +from src.middleware import RequestValidationMiddleware +from src.context import set_request_id, reset_request_id, get_request_id +from sqlalchemy.exc import SQLAlchemyError + +log = logging.getLogger(__name__) + +from starlette.exceptions import HTTPException as StarletteHTTPException + +# we configure the logging level and format +configure_logging() + +# we create the ASGI for the app +from contextlib import asynccontextmanager + +@asynccontextmanager +async def lifespan(app: FastAPI): + from src.database.core import engine, Base + import src.dashboard_model.model + async with engine.begin() as conn: + await conn.run_sync(Base.metadata.create_all) + yield + +app = FastAPI(openapi_url="", title="LCCA API", + description="Welcome to RBD's API documentation!", + version="0.1.0", + lifespan=lifespan) + +# we define the exception handlers +app.add_exception_handler(Exception, handle_exception) +app.add_exception_handler(HTTPException, handle_exception) +app.add_exception_handler(StarletteHTTPException, handle_exception) +app.add_exception_handler(RequestValidationError, handle_exception) +app.add_exception_handler(RateLimitExceeded, handle_exception) +app.add_exception_handler(SQLAlchemyError, handle_exception) + +app.state.limiter = limiter +app.add_middleware(GZipMiddleware, minimum_size=2000) +app.add_middleware(SlowAPIMiddleware) + + +# app.add_middleware(RequestValidationMiddleware) + + +@app.middleware("http") +async def db_session_middleware(request: Request, call_next): + request_id = str(uuid1()) + + # we create a per-request id such that we can ensure that our session is scoped for a particular request. + # see: https://github.com/tiangolo/fastapi/issues/726 + ctx_token = set_request_id(request_id) + + try: + session = async_scoped_session(async_session, scopefunc=get_request_id) + request.state.db = session() + + collector_session = async_scoped_session(async_aeros_session, scopefunc=get_request_id) + request.state.aeros_db = collector_session() + + start_time = time.time() + response = await call_next(request) + process_time = (time.time() - start_time) * 1000 + + # Skip logging in middleware if it's an error (already logged in handle_exception) + if response.status_code >= 400: + return response + + from src.context import get_username, get_role, get_user_id, set_user_id, set_username, set_role + + # Pull from context or fallback to request.state + username = get_username() + role = get_role() + user_id = get_user_id() + + user_obj = getattr(request.state, "user", None) + if user_obj: + if not user_id and hasattr(user_obj, "user_id"): + user_id = str(user_obj.user_id) + set_user_id(user_id) + if not username and hasattr(user_obj, "name"): + username = user_obj.name + set_username(username) + if not role and hasattr(user_obj, "role"): + role = user_obj.role + set_role(role) + + user_info_str = "" + if user_id: + user_info_str = f" | User ID: {user_id}" + + error_id = getattr(request.state, "error_id", None) + log_msg = f"HTTP {request.method} {request.url.path} completed in {round(process_time, 2)}ms{user_info_str}" + if error_id: + log_msg += f" | Error ID: {error_id}" + + log.info( + log_msg, + extra={ + "method": request.method, + "path": request.url.path, + "status_code": response.status_code, + "duration_ms": round(process_time, 2), + "user_id": user_id, + "error_id": error_id, + }, + ) + finally: + await request.state.db.close() + await request.state.aeros_db.close() + + reset_request_id(ctx_token) + return response + + +@app.middleware("http") +async def add_security_headers(request: Request, call_next): + response = await call_next(request) + response.headers["Strict-Transport-Security"] = "max-age=31536000 ; includeSubDomains" + return response + + +app.mount("/model", StaticFiles(directory="model"), name="model") + +@app.get("/images/{image_path:path}") +async def get_image(image_path: str = Path(...)): + # Extract filename from the full path + filename = os.path.basename(image_path) + full_image_path = f"model/RBD Model/Image/{filename}" + + if os.path.exists(full_image_path): + return FileResponse(full_image_path) + else: + raise HTTPException(status_code=404, detail="Image not found") + +app.include_router(api_router) diff --git a/src/metrics.py b/src/metrics.py new file mode 100644 index 0000000..cd3d1d1 --- /dev/null +++ b/src/metrics.py @@ -0,0 +1,46 @@ +# import logging + +# from dispatch.plugins.base import plugins + +# from .config import METRIC_PROVIDERS + +# log = logging.getLogger(__file__) + + +# class Metrics(object): +# _providers = [] + +# def __init__(self): +# if not METRIC_PROVIDERS: +# log.info( +# "No metric providers defined via METRIC_PROVIDERS env var. Metrics will not be sent." +# ) +# else: +# self._providers = METRIC_PROVIDERS + +# def gauge(self, name, value, tags=None): +# for provider in self._providers: +# log.debug( +# f"Sending gauge metric {name} to provider {provider}. Value: {value} Tags: {tags}" +# ) +# p = plugins.get(provider) +# p.gauge(name, value, tags=tags) + +# def counter(self, name, value=None, tags=None): +# for provider in self._providers: +# log.debug( +# f"Sending counter metric {name} to provider {provider}. Value: {value} Tags: {tags}" +# ) +# p = plugins.get(provider) +# p.counter(name, value=value, tags=tags) + +# def timer(self, name, value, tags=None): +# for provider in self._providers: +# log.debug( +# f"Sending timer metric {name} to provider {provider}. Value: {value} Tags: {tags}" +# ) +# p = plugins.get(provider) +# p.timer(name, value, tags=tags) + + +# provider = Metrics() diff --git a/src/middleware.py b/src/middleware.py new file mode 100644 index 0000000..7c428a5 --- /dev/null +++ b/src/middleware.py @@ -0,0 +1,341 @@ +import json +import re +import logging +from collections import Counter +from fastapi import Request, HTTPException +from starlette.middleware.base import BaseHTTPMiddleware + +# ========================= +# Configuration +# ========================= + +ALLOWED_MULTI_PARAMS = { + "sortBy[]", + "descending[]", + "exclude[]", +} + +ALLOWED_DATA_PARAMS = { + "AerosData", "AhmJobId", "CustomInput", "DurationUnit", "IsDefault", "Konkin_offset", + "MaintenanceOutages", "MasterData", "OffSet", "OverhaulDuration", "OverhaulInterval", + "PlannedOutages", "SchematicName", "SecretStr", "SimDuration", "SimNumRun", "SimSeed", + "SimulationName", "actual_shutdown", "aeros_node", "all_params", "aro_file", + "aro_file_path", "availability", "baseline_simulation_id", "calc_results", + "cm_dis_p1", "cm_dis_p2", "cm_dis_p3", "cm_dis_type", "cm_dis_unit_code", + "cm_waiting_time", "contribution", "contribution_factor", "created_at", + "criticality", "current_user", "custom_parameters", "data", "datetime", + "derating_hours", "descending", "design_flowrate", "duration", "duration_above_h", + "duration_above_hh", "duration_at_empty", "duration_at_full", "duration_below_l", + "duration_below_ll", "eaf", "eaf_konkin", "effective_loss", "efficiency", "efor", + "equipment", "equipment_name", "exclude", "failure_rates", "filter_spec", "finish", + "flowrate_unit", "id", "ideal_production", "ip_dis_p1", "ip_dis_p2", "ip_dis_p3", + "ip_dis_type", "ip_dis_unit_code", "items", "itemsPerPage", "items_per_page", + "level", "location_tag", "master_equipment", "max_flow_rate", "max_flowrate", + "message", "model_image", "mttr", "name", "node_id", "node_name", "node_type", + "num_cm", "num_events", "num_ip", "num_oh", "num_pm", "offset", "oh_dis_p1", + "oh_dis_p2", "oh_dis_p3", "oh_dis_type", "oh_dis_unit_code", "page", + "plan_duration", "planned_outage", "plot_results", "pm_dis_p1", "pm_dis_p2", + "pm_dis_p3", "pm_dis_type", "pm_dis_unit_code", "point_availabilities", + "point_flowrates", "production", "production_std", "project_name", "query_str", + "rel_dis_p1", "rel_dis_p2", "rel_dis_p3", "rel_dis_type", "rel_dis_unit_code", + "remark", "schematic_id", "schematic_name", "simulation_id", "simulation_name", + "sof", "sort_by", "sortBy[]", "descending[]", "exclude[]", "start", "started_at", + "status", "stg_input", "storage_capacity", "structure_name", "t_wait_for_crew", + "t_wait_for_spare", "target_simulation_id", "timestamp_outs", "total", + "totalPages", "total_cm_downtime", "total_downtime", "total_ip_downtime", + "total_oh_downtime", "total_pm_downtime", "total_uptime", "updated_at", "year", + "_", "t", "timestamp", "q", "filter", "currentUser", "location_tags" +} + +ALLOWED_HEADERS = { + "host", + "user-agent", + "accept", + "accept-language", + "accept-encoding", + "connection", + "upgrade-insecure-requests", + "if-modified-since", + "if-none-match", + "cache-control", + "authorization", + "content-type", + "content-length", + "origin", + "referer", + "sec-fetch-dest", + "sec-fetch-mode", + "sec-fetch-site", + "sec-fetch-user", + "sec-ch-ua", + "sec-ch-ua-mobile", + "sec-ch-ua-platform", + "pragma", + "dnt", + "priority", + "x-forwarded-for", + "x-forwarded-proto", + "x-forwarded-host", + "x-forwarded-port", + "x-real-ip", + "x-request-id", + "x-correlation-id", + "x-requested-with", + "x-csrf-token", + "x-xsrf-token", + "postman-token", + "x-forwarded-path", + "x-forwarded-prefix", + "cookie", + "x-kong-request-id" +} + +MAX_QUERY_PARAMS = 50 +MAX_QUERY_LENGTH = 2000 +MAX_JSON_BODY_SIZE = 1024 * 500 # 500 KB + +XSS_PATTERN = re.compile( + r"(" + r"<(script|iframe|embed|object|svg|img|video|audio|base|link|meta|form|button|details|animate)\b|" + r"javascript\s*:|vbscript\s*:|data\s*:[^,]*base64[^,]*|data\s*:text/html|" + r"\bon[a-z]+\s*=|" # Catch-all for any 'on' event (onerror, onclick, etc.) + r"style\s*=.*expression\s*\(|" # Old IE specific + r"\b(eval|setTimeout|setInterval|Function)\s*\(" + r")", + re.IGNORECASE, +) + +SQLI_PATTERN = re.compile( + r"(" + # 1. Keywords followed by whitespace and common SQL characters + r"\b(UNION|SELECT|INSERT|UPDATE|DELETE|DROP|ALTER|CREATE|TRUNCATE|EXEC(UTE)?|DECLARE)\b\s+[\w\*\(\']|" + + # 2. Time-based attacks (more specific than just 'SLEEP') + r"\b(WAITFOR\b\s+DELAY|PG_SLEEP|SLEEP\s*\()|" + + # 3. System tables/functions + r"\b(INFORMATION_SCHEMA|SYS\.|SYSOBJECTS|XP_CMDSHELL|LOAD_FILE|INTO\s+OUTFILE)\b|" + + # 4. Logical Tautologies (OR 1=1) - Optimized for boundaries + r"\b(OR|AND)\b\s+['\"]?\d+['\"]?\s*=\s*['\"]?\d+|" + + # 5. Comments + r"(? bool: + return any(ord(c) < 32 and c not in ("\n", "\r", "\t") for c in value) + + +def inspect_value(value: str, source: str): + if not isinstance(value, str) or value == "*/*": + return + + if XSS_PATTERN.search(value): + log.warning(f"Security violation: Potential XSS payload detected in {source}, value: {value}") + raise HTTPException(status_code=422, detail="Invalid request parameters") + + if SQLI_PATTERN.search(value): + log.warning(f"Security violation: Potential SQL injection payload detected in {source}, value: {value}") + raise HTTPException(status_code=422, detail="Invalid request parameters") + + if RCE_PATTERN.search(value): + log.warning(f"Security violation: Potential RCE payload detected in {source}, value: {value}") + raise HTTPException(status_code=422, detail="Invalid request parameters") + + if TRAVERSAL_PATTERN.search(value): + log.warning(f"Security violation: Potential Path Traversal payload detected in {source}, value: {value}") + raise HTTPException(status_code=422, detail="Invalid request parameters") + + if has_control_chars(value): + log.warning(f"Security violation: Invalid control characters detected in {source}") + raise HTTPException(status_code=422, detail="Invalid request parameters") + + +def inspect_json(obj, path="body", check_whitelist=True): + if isinstance(obj, dict): + for key, value in obj.items(): + if key in FORBIDDEN_JSON_KEYS: + log.warning(f"Security violation: Forbidden JSON key detected: {path}.{key}") + raise HTTPException(status_code=422, detail="Invalid request parameters") + + # if check_whitelist and key not in ALLOWED_DATA_PARAMS: + # log.warning(f"Security violation: Unknown JSON key detected: {path}.{key}") + # raise HTTPException(status_code=422, detail="Invalid request parameters") + + # Recurse. If the key is a dynamic container, we stop whitelist checking for children. + should_check_subkeys = check_whitelist and (key not in DYNAMIC_KEYS) + inspect_json(value, f"{path}.{key}", check_whitelist=should_check_subkeys) + elif isinstance(obj, list): + for i, item in enumerate(obj): + inspect_json(item, f"{path}[{i}]", check_whitelist=check_whitelist) + elif isinstance(obj, str): + inspect_value(obj, path) + + +# ========================= +# Middleware +# ========================= + +class RequestValidationMiddleware(BaseHTTPMiddleware): + async def dispatch(self, request: Request, call_next): + # ------------------------- + # 0. Header validation + # ------------------------- + header_keys = [key.lower() for key, _ in request.headers.items()] + + # Check for duplicate headers + header_counter = Counter(header_keys) + duplicate_headers = [key for key, count in header_counter.items() if count > 1] + + ALLOW_DUPLICATE_HEADERS = {'accept', 'accept-encoding', 'accept-language', 'accept-charset', 'cookie'} + real_duplicates = [h for h in duplicate_headers if h not in ALLOW_DUPLICATE_HEADERS] + if real_duplicates: + log.warning(f"Security violation: Duplicate headers detected: {real_duplicates}") + raise HTTPException(status_code=422, detail="Invalid request parameters") + + # Whitelist headers + unknown_headers = [key for key in header_keys if key not in ALLOWED_HEADERS] + if unknown_headers: + filtered_unknown = [h for h in unknown_headers if not h.startswith('sec-')] + if filtered_unknown: + log.warning(f"Security violation: Unknown headers detected: {filtered_unknown}") + raise HTTPException(status_code=422, detail="Invalid request parameters") + + # Inspect header values + for key, value in request.headers.items(): + if value: + inspect_value(value, f"header '{key}'") + + # ------------------------- + # 1. Query string limits + # ------------------------- + if len(request.url.query) > MAX_QUERY_LENGTH: + log.warning(f"Security violation: Query string too long") + raise HTTPException(status_code=422, detail="Invalid request parameters") + + params = request.query_params.multi_items() + + if len(params) > MAX_QUERY_PARAMS: + log.warning(f"Security violation: Too many query parameters") + raise HTTPException(status_code=422, detail="Invalid request parameters") + + # Check for unknown query parameters + # unknown_params = [key for key, _ in params if key not in ALLOWED_DATA_PARAMS] + # if unknown_params: + # log.warning(f"Security violation: Unknown query parameters detected: {unknown_params}") + # raise HTTPException(status_code=422, detail="Invalid request parameters") + + # ------------------------- + # 2. Duplicate parameters + # ------------------------- + counter = Counter(key for key, _ in params) + duplicates = [ + key for key, count in counter.items() + if count > 1 and key not in ALLOWED_MULTI_PARAMS + ] + + if duplicates: + log.warning(f"Security violation: Duplicate query parameters detected: {duplicates}") + raise HTTPException(status_code=422, detail="Invalid request parameters") + + # ------------------------- + # 3. Query param inspection & Pagination + # ------------------------- + pagination_size_keys = {"size", "itemsPerPage", "per_page", "limit", "items_per_page"} + for key, value in params: + if value: + inspect_value(value, f"query param '{key}'") + + if key in pagination_size_keys and value: + try: + size_val = int(value) + if size_val > 50: + log.warning(f"Security violation: Pagination size too large ({size_val})") + raise HTTPException(status_code=422, detail="Invalid request parameters") + if size_val % 5 != 0: + log.warning(f"Security violation: Pagination size not multiple of 5 ({size_val})") + raise HTTPException(status_code=422, detail="Invalid request parameters") + except ValueError: + log.warning(f"Security violation: Pagination size invalid value") + raise HTTPException(status_code=422, detail="Invalid request parameters") + + # ------------------------- + # 4. Content-Type sanity + # ------------------------- + content_type = request.headers.get("content-type", "") + if content_type and not any( + content_type.startswith(t) + for t in ("application/json", "multipart/form-data", "application/x-www-form-urlencoded") + ): + log.warning(f"Security violation: Unsupported Content-Type: {content_type}") + raise HTTPException(status_code=422, detail="Invalid request parameters") + + # ------------------------- + # 5. Single source check (Query vs JSON Body) + # ------------------------- + has_query = len(params) > 0 + has_body = False + + if content_type.startswith("application/json"): + content_length = request.headers.get("content-length") + if content_length and int(content_length) > 0: + has_body = True + + if has_query and has_body: + log.warning(f"Security violation: Mixed parameters (query + JSON body)") + raise HTTPException(status_code=422, detail="Invalid request parameters") + + # ------------------------- + # 6. JSON body inspection + # ------------------------- + if content_type.startswith("application/json"): + body = await request.body() + # if len(body) > MAX_JSON_BODY_SIZE: + # raise HTTPException(status_code=422, detail="JSON body too large") + + if body: + try: + payload = json.loads(body) + except json.JSONDecodeError: + log.warning(f"Security violation: Invalid JSON body") + raise HTTPException(status_code=422, detail="Invalid request parameters") + + inspect_json(payload) + + # Re-inject body for downstream handlers + async def receive(): + return {"type": "http.request", "body": body} + request._receive = receive + + return await call_next(request) diff --git a/src/models.py b/src/models.py new file mode 100644 index 0000000..54f9196 --- /dev/null +++ b/src/models.py @@ -0,0 +1,112 @@ +# src/common/models.py +import uuid +from datetime import datetime +from typing import Generic, Optional, TypeVar + +import pytz +from pydantic import BaseModel, Field, SecretStr,Extra +from sqlalchemy import Column, DateTime, String, event, func +from sqlalchemy.dialects.postgresql import UUID +from sqlalchemy.orm import Mapped, mapped_column + +from src.auth.service import CurrentUser +from src.config import TIMEZONE +from src.enums import ResponseStatus + +# SQLAlchemy Mixins + + +class TimeStampMixin(object): + """Timestamping mixin""" + + created_at = Column( + DateTime(timezone=True), default=datetime.now(pytz.timezone(TIMEZONE)) + ) + created_at._creation_order = 9998 + updated_at = Column( + DateTime(timezone=True), default=datetime.now(pytz.timezone(TIMEZONE)) + ) + updated_at._creation_order = 9998 + + @staticmethod + def _updated_at(mapper, connection, target): + target.updated_at = datetime.now(pytz.timezone(TIMEZONE)) + + @classmethod + def __declare_last__(cls): + event.listen(cls, "before_update", cls._updated_at) + + +class UUIDMixin: + """UUID mixin""" + + id = Column( + UUID(as_uuid=True), + primary_key=True, + default=uuid.uuid4, + unique=True, + nullable=False, + ) + + +class DefaultMixin(TimeStampMixin, UUIDMixin): + """Default mixin""" + + pass + + +class IdentityMixin: + """Identity mixin""" + + created_by = Column(String(100), nullable=True) + updated_by = Column(String(100), nullable=True) + + +# Pydantic Models +class DefultBase(BaseModel): + class Config: + # allow model creation directly from ORM objects or attrs + from_attributes = True + + # re-validate fields when they’re updated after creation + validate_assignment = True + + # disallow arbitrary/untyped objects; only safe, supported types allowed + arbitrary_types_allowed = False + + # automatically strip leading/trailing whitespace from all str fields + str_strip_whitespace = True + + # forbid extra/unexpected fields in input (prevents silent injection/mass assignment) + extra = 'forbid' + + populate_by_name = True + + # secure JSON serialization: custom formatting for sensitive types + json_encoders = { + # always output datetime in strict ISO8601 with Zulu timezone + datetime: lambda v: v.strftime("%Y-%m-%dT%H:%M:%S.%fZ") if v else None, + # unwrap SecretStr safely when serializing (not leaking in repr/debug) + SecretStr: lambda v: v.get_secret_value() if v else None, + } + + +class Pagination(DefultBase): + itemsPerPage: int + totalPages: int + page: int + total: int + + +class PrimaryKeyModel(BaseModel): + id: uuid.UUID + + +# Define data type variable for generic response +T = TypeVar("T") + + +class StandardResponse(BaseModel, Generic[T]): + data: Optional[T] = None + message: str = Field("Success", max_length=255) + status: ResponseStatus = ResponseStatus.SUCCESS diff --git a/src/rate_limiter.py b/src/rate_limiter.py new file mode 100644 index 0000000..555e2ac --- /dev/null +++ b/src/rate_limiter.py @@ -0,0 +1,7 @@ +from slowapi import Limiter +from slowapi.util import get_remote_address + +limiter = Limiter( + key_func=get_remote_address, + default_limits=["20000 per hour", "100000 per day"] +) diff --git a/src/utils.py b/src/utils.py new file mode 100644 index 0000000..8b07835 --- /dev/null +++ b/src/utils.py @@ -0,0 +1,233 @@ +import os +import re +from datetime import datetime, timedelta, timezone +from typing import Optional + +import pytz +from dateutil.relativedelta import relativedelta + +from src.config import RELIABILITY_SERVICE_API, TIMEZONE +import hvac +from typing import Optional, Dict, List + +def parse_relative_expression(date_str: str) -> Optional[datetime]: + """ + Parse relative date expressions using T (days), M (months), and Y (years) + Returns tuple of (datetime, type_description) or None if not a relative date + """ + pattern = r"^([HTMY])([+-]\d+)?$" + match = re.match(pattern, date_str) + + if not match: + return None + + unit, offset = match.groups() + offset = int(offset) if offset else 0 + # Use UTC timezone for consistency + jakarta_tz = pytz.timezone("Asia/Jakarta") + today = datetime.now(jakarta_tz) + if unit == "H": + # For hours, keep minutes and seconds + result_time = today + timedelta(hours=offset) + return result_time + elif unit == "T": + return today + timedelta(days=offset) + elif unit == "M": + return today + relativedelta(months=offset) + elif unit == "Y": + return today + relativedelta(years=offset) + + +def parse_date_string(date_str: str) -> Optional[datetime]: + """ + Parse date strings in various formats including relative expressions + Returns tuple of (datetime, type) + """ + # Try parsing as relative expression first + relative_result = parse_relative_expression(date_str) + if relative_result: + return relative_result + + # Try different date formats + date_formats = [ + ("%Y-%m-%d", "iso"), # 2024-11-08 + ("%Y/%m/%d", "slash"), # 2024/11/08 + ("%d-%m-%Y", "european"), # 08-11-2024 + ("%d/%m/%Y", "european_slash"), # 08/11/2024 + ("%Y.%m.%d", "dot"), # 2024.11.08 + ("%d.%m.%Y", "european_dot"), # 08.11.2024 + ] + + for fmt, type_name in date_formats: + try: + # Parse the date and set it to start of day in UTC + dt = datetime.strptime(date_str, fmt) + dt = dt.replace( + hour=0, + minute=0, + second=0, + microsecond=0, + tzinfo=pytz.timezone("Asia/Jakarta"), + ) + return dt + except ValueError: + continue + + raise ValueError( + "Invalid date format. Supported formats:\n" + "Relative formats:\n" + "- T (days): T, T-n, T+n\n" + "- M (months): M, M-1, M+2\n" + "- Y (years): Y, Y-1, Y+1\n" + "Regular formats:\n" + "- YYYY-MM-DD\n" + "- YYYY/MM/DD\n" + "- DD-MM-YYYY\n" + "- DD/MM/YYYY\n" + "- YYYY.MM.DD\n" + "- DD.MM.YYYY" + ) + + +def time_now(): + return datetime.now(pytz.timezone(TIMEZONE)) + + +import requests + + +def get_latest_numOfFail(location_tag, token) -> float: + today = datetime.today().strftime("%Y-%m-%d") + url_today = f"{RELIABILITY_SERVICE_API}/main/number-of-failures/{location_tag}/2016-01-01/{today}" + + try: + response = requests.get( + url_today, + { + "Content-Type": "application/json", + "Authorization": f"Bearer {token}", + }, + ) + data = response.json() + + raise Exception(data) + + latest_num = data["data"][-1]["num_fail"] + + raise Exception(latest_num) + + if not latest_num: + latest_num = 0 + + return latest_num + except requests.exceptions.RequestException as e: + print(f"Error fetching data: {e}") + return 0 + + + +PASTEBIN_API_KEY = 'G9uCTzoI1CJWCupt5lcZRpijondt5jwA' # Replace this with your actual API key + +def save_to_pastebin(data, title="Result Log", expire_date="1H"): + url = "https://pastebin.com/api/api_post.php" + payload = { + 'api_dev_key': PASTEBIN_API_KEY, + 'api_option': 'paste', + 'api_paste_code': data, + 'api_paste_name': title, + 'api_paste_expire_date': expire_date, # Example: 10M, 1H, 1D, N (never) + } + response = requests.post(url, data=payload) + if response.status_code == 200: + return response.text # This will be the paste URL + else: + return f"Error: {response.status_code} - {response.text}" + + +def sanitize_filename(filename: str) -> str: + """ + Sanitize the filename to ensure it is safe. + - Remove path info. + - Remove unsafe characters. + - Limit length. + """ + if not filename: + raise ValueError("Filename cannot be empty") + + # Get the basename (remove any path) + filename = os.path.basename(filename) + + # Remove control characters and non-printable characters + filename = re.sub(r'[\x00-\x1f\x7f]', '', filename) + + # remove potential $( ) and ${ } + filename = re.sub(r'\$[\(\{].*?[\)\}]', '', filename) + + # remove any remaining $( or ${ + filename = filename.replace('$(', '').replace('${', '') + + # Allow alphanumeric, underscore, hyphen, space, and dots + # Remove other potentially dangerous characters. + filename = re.sub(r'[^a-zA-Z0-9_\-\.\ ]', '', filename) + + # Remove consecutive dots to prevent directory traversal attempts like '..' + filename = re.sub(r'\.{2,}', '.', filename) + + # Ensure filename is not practically empty after sanitization + if not filename.strip() or filename.strip().replace('.', '') == '': + raise ValueError("Filename invalid after sanitization") + + # Limit length (e.g. 200 chars) + if len(filename) > 200: + base, ext = os.path.splitext(filename) + # Preserve extension if possible + if len(ext) < 20: + filename = base[:(200-len(ext))] + ext + else: + filename = filename[:200] + + return filename.strip() + + +def get_vault_secrets( + vault_url: str, + role_id: str, + secret_id: str, + secret_path: str, + secret_keys_to_be_returned: List[str], + mount_point: str = "secret" +) -> Optional[Dict[str, str]]: + + try: + client = hvac.Client(url=vault_url, verify=False) + + # Login using AppRole + client.auth.approle.login( + role_id=role_id, + secret_id=secret_id + ) + + if not client.is_authenticated(): + raise Exception("Vault authentication failed") + + # Read secret + response = client.secrets.kv.v2.read_secret_version( + path=secret_path, + mount_point=mount_point + ) + + secret_data = response["data"]["data"] + + # Filter only requested keys + result = {} + + for key in secret_keys_to_be_returned: + if key not in secret_data: + raise KeyError(f"Key '{key}' not found in secret") + result[key] = secret_data[key] + + return result + + except Exception as e: + print(f"Error retrieving secret from Vault: {str(e)}") + return None \ No newline at end of file diff --git a/sync_db.py b/sync_db.py new file mode 100644 index 0000000..a6d01a1 --- /dev/null +++ b/sync_db.py @@ -0,0 +1,9 @@ +import asyncio +from src.database.core import Base, engine + +async def main(): + async with engine.begin() as conn: + await conn.run_sync(Base.metadata.create_all) + print("Created tables") + +p = asyncio.run(main()) diff --git a/temporal/activity.py b/temporal/activity.py new file mode 100644 index 0000000..6cb36e8 --- /dev/null +++ b/temporal/activity.py @@ -0,0 +1,171 @@ +import asyncio +from temporalio import activity +import os +import redis.asyncio as redis + +REDIS_HOST = os.getenv("REDIS_HOST", "192.168.1.82") +REDIS_PORT = int(os.getenv("REDIS_PORT", 6379)) + + +redis_client = redis.Redis( + host=REDIS_HOST, # or docker service name + port=REDIS_PORT, + db=0, + decode_responses=True +) + + +@activity.defn +async def update_equipment_for_simulation_activity(params: dict): + # ✅ Import inside the activity function + from src.aeros_equipment.service import update_equipment_for_simulation + from src.database.core import async_session, async_aeros_session + + + async with async_session() as db_session, async_aeros_session() as aeros_db_session: + return await update_equipment_for_simulation( + db_session=db_session, + aeros_db_session=aeros_db_session, + project_name=params["projectName"], + overhaul_duration=params["OverhaulDuration"], + overhaul_interval=params["OverhaulInterval"], + offset=params["OffSet"], + schematic_name=params["SchematicName"], + custom_input=params["CustomInput"], + simulation_duration=params["SimDuration"] + ) + + +@activity.defn +async def execute_simulation_activity(params: dict): + from src.database.core import async_session + from src.aeros_simulation.simulation_save_service import execute_simulation + async with async_session() as db_session: + return await execute_simulation( + db_session=db_session, + simulation_id=params["sim_data"]["HubCnnId"], + sim_data=params["sim_data"], + is_saved=True, + eq_update=params["eq_update"] + ) + +@activity.defn +async def execute_update_node(params:dict): + from src.database.core import async_session + from src.aeros_equipment.service import update_node + async with async_session() as db_session: + return await update_node( + db_session=db_session, + project_name=params["projectName"], + equipment_nodes=params["equipment_nodes"] + ) + +@activity.defn +async def calculate_plant_eaf_activity(params: dict): + from src.aeros_simulation.simulation_save_service import calculate_plant_eaf + from src.database.core import async_session + + async with async_session() as db_session: + return await calculate_plant_eaf( + db_session=db_session, + simulation_id=params["HubCnnId"], + po_downtime=params["OverhaulDuration"], + oh_interval=params["OverhaulInterval"], + offset=params["OffSet"], + manual_deratings=params.get("deratings", []), + manual_mo=params.get("maintenance_outages", []) + ) + + +@activity.defn +async def update_contribution_bulk_mappings_activity(sim_id: str): + from src.aeros_contribution.service import update_contribution_bulk_mappings + from src.database.core import async_session + + async with async_session() as db_session: + return await update_contribution_bulk_mappings( + db_session=db_session, + simulation_id=sim_id, + ) + + +@activity.defn +async def call_callback_ahm(params): + from src.aeros_simulation.service import call_ahm_callback_service + sim_id = params["simulation_id"] + job_id = params["job_id"] + + try: + await call_ahm_callback_service(sim_id, job_id) + return True + except Exception as e: + raise e + + +LOCK_KEY = "lock:aeros_process" +LOCK_TIMEOUT = 864000 # seconds + +@activity.defn +async def acquire_lock(job_id: str) -> dict: + try: + while True: + acquired = await redis_client.set( + LOCK_KEY, + job_id, + nx=True, + ex=LOCK_TIMEOUT + ) + + if acquired: + # Lock acquired + redis_client.hset( + f"process:{job_id}", + mapping={ + "job_id": job_id, + "status": "Processing" + } + ) + await redis_client.expire(f"process:{job_id}", LOCK_TIMEOUT) + + return { + "job_id": job_id, + "status": "Ready" + } + + # Someone else holds the lock + redis_client.hset( + f"process:{job_id}", + mapping={ + "job_id": job_id, + "status": "Queue" + } + ) + await redis_client.expire(f"process:{job_id}", 300) + + # Cancellation-friendly wait + await asyncio.sleep(3) + + + except Exception: + redis_client.hset( + f"process:{job_id}", + mapping={ + "job_id": job_id, + "status": "Failed" + } + ) + await redis_client.expire(f"process:{job_id}", 300) + raise + +@activity.defn +async def release_lock(job_id: str): + await redis_client.delete(LOCK_KEY) + + redis_client.hset( + f"process:{job_id}", + mapping={ + "job_id": job_id, + "status": "Done" + } + ) + await redis_client.expire(f"process:{job_id}", 300) \ No newline at end of file diff --git a/temporal/workflow.py b/temporal/workflow.py new file mode 100644 index 0000000..65437f6 --- /dev/null +++ b/temporal/workflow.py @@ -0,0 +1,97 @@ +from datetime import timedelta +from temporalio import workflow +from temporalio.client import Client +import os +with workflow.unsafe.imports_passed_through(): + from temporal.activity import calculate_plant_eaf_activity, execute_simulation_activity, update_contribution_bulk_mappings_activity, update_equipment_for_simulation_activity,call_callback_ahm, acquire_lock, release_lock,execute_update_node + +TEMPORAL_URL = os.environ.get("TEMPORAL_URL", "http://192.168.1.86:7233") + +@workflow.defn +class SimulationWorkflow: + def __init__(self): + self.status = "INITIALIZED" + self.isDone = False + + @workflow.query + def get_status(self) -> str: + return self.status + + @workflow.query + def is_done(self) -> bool: + return self.isDone + + @workflow.run + async def run(self, sim_data: dict) -> str: + self.status = "QUEUE" + + await workflow.execute_activity( + acquire_lock, + sim_data["HubCnnId"], + start_to_close_timeout=timedelta(days=10) + ) + + self.status = "RUNNING" + + # 1. Update equipment for simulation + results = await workflow.execute_activity( + update_equipment_for_simulation_activity, + {**sim_data}, # ✅ one positional argument + start_to_close_timeout=timedelta(days=1) + ) + + await workflow.execute_activity( + execute_update_node, + {"projectName": sim_data['projectName'], "equipment_nodes": results['equipment_nodes']}, + start_to_close_timeout=timedelta(days=1) + ) + + # 2. Execute simulation + await workflow.execute_activity( + execute_simulation_activity, + {"sim_data": sim_data, "eq_update": results['reliability']}, + start_to_close_timeout=timedelta(days=1) + ) + + # 3. Calculate EAF + await workflow.execute_activity( + calculate_plant_eaf_activity, + sim_data, + start_to_close_timeout=timedelta(days=1) + ) + + await workflow.execute_activity( + update_contribution_bulk_mappings_activity, + sim_data["HubCnnId"], + start_to_close_timeout=timedelta(days=1) + ) + + + if sim_data.get("AhmJobId"): + await workflow.execute_activity( + call_callback_ahm, + { + "simulation_id": sim_data["HubCnnId"], + "job_id": sim_data["AhmJobId"] + }, + start_to_close_timeout=timedelta(days=1) + ) + + self.status = "COMPLETED" + # etc… + self.isDone = True + + await workflow.execute_activity( + release_lock, + sim_data["HubCnnId"], + start_to_close_timeout=timedelta(minutes=10), + ) + + if sim_data.get("CallbackWorkflowId"): + handle = workflow.get_external_workflow_handle( + sim_data["CallbackWorkflowId"] + ) + await handle.signal("notify_done") + + + return sim_data["HubCnnId"] # simulation_id diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..6708226 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,68 @@ +# import asyncio +# from typing import AsyncGenerator, Generator + +# import pytest +# from httpx import AsyncClient +# from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine +# from sqlalchemy.orm import sessionmaker +# from sqlalchemy.pool import StaticPool +# from sqlalchemy_utils import database_exists, drop_database +# from starlette.config import environ +# from starlette.testclient import TestClient + +# # from src.database import Base, get_db +# # from src.main import app + +# # Test database URL +# TEST_DATABASE_URL = "sqlite+aiosqlite:///:memory:" + +# engine = create_async_engine( +# TEST_DATABASE_URL, +# connect_args={"check_same_thread": False}, +# poolclass=StaticPool, +# ) + +# async_session = sessionmaker( +# engine, +# class_=AsyncSession, +# expire_on_commit=False, +# autocommit=False, +# autoflush=False, +# ) + + +# async def override_get_db() -> AsyncGenerator[AsyncSession, None]: +# async with async_session() as session: +# try: +# yield session +# await session.commit() +# except Exception: +# await session.rollback() +# raise +# finally: +# await session.close() + + +# app.dependency_overrides[get_db] = override_get_db + + +# @pytest.fixture(scope="session") +# def event_loop() -> Generator: +# loop = asyncio.get_event_loop_policy().new_event_loop() +# yield loop +# loop.close() + + +# @pytest.fixture(autouse=True) +# async def setup_db() -> AsyncGenerator[None, None]: +# async with engine.begin() as conn: +# await conn.run_sync(Base.metadata.create_all) +# yield +# async with engine.begin() as conn: +# await conn.run_sync(Base.metadata.drop_all) + + +# @pytest.fixture +# async def client() -> AsyncGenerator[AsyncClient, None]: +# async with AsyncClient(app=app, base_url="http://test") as client: +# yield client diff --git a/tests/unit/test_aeros_equipment_service.py b/tests/unit/test_aeros_equipment_service.py new file mode 100644 index 0000000..e41dc92 --- /dev/null +++ b/tests/unit/test_aeros_equipment_service.py @@ -0,0 +1,51 @@ +import pytest +from src.aeros_equipment.service import get_distribution + +def test_get_distribution_weibull_2p(): + item = { + "distribution": "Weibull-2P", + "parameters": { + "beta": 2.5, + "alpha": 1000 + } + } + dist_type, p1, p2 = get_distribution(item) + assert dist_type == "Weibull2" + assert p1 == 2.5 + assert p2 == 1000 + +def test_get_distribution_exponential_2p(): + item = { + "distribution": "Exponential-2P", + "parameters": { + "Lambda": 0.01, + "gamma": 100 + } + } + dist_type, p1, p2 = get_distribution(item) + assert dist_type == "Exponential2" + assert p1 == 0.01 + assert p2 == 100 + +def test_get_distribution_nhpp(): + item = { + "distribution": "NHPP", + "parameters": { + "beta": 0.5, + "eta": 5000 + } + } + dist_type, p1, p2 = get_distribution(item) + assert dist_type == "NHPPTTFF" + assert p1 == 0.5 + assert p2 == 5000 + +def test_get_distribution_default(): + item = { + "distribution": "Unknown", + "parameters": {} + } + dist_type, p1, p2 = get_distribution(item) + assert dist_type == "NHPPTTFF" + assert p1 == 1 + assert p2 == 100000 diff --git a/tests/unit/test_context.py b/tests/unit/test_context.py new file mode 100644 index 0000000..639f5af --- /dev/null +++ b/tests/unit/test_context.py @@ -0,0 +1,19 @@ +from src.context import set_request_id, get_request_id, set_user_id, get_user_id + +def test_request_id_context(): + test_id = "test-request-id-123" + token = set_request_id(test_id) + assert get_request_id() == test_id + # Note: ContextVar is thread/task local, so this works within the same thread + +def test_user_id_context(): + test_uid = "user-456" + set_user_id(test_uid) + assert get_user_id() == test_uid + +def test_context_default_none(): + # Since we are in a fresh test, these should be None if not set + # (Actually might depend on if other tests set them, but let's assume isolation) + # In a real pytest setup, isolation is guaranteed if they were set in other tests + # because they are ContextVars. + assert get_request_id() is None or get_request_id() != "" diff --git a/tests/unit/test_exceptions.py b/tests/unit/test_exceptions.py new file mode 100644 index 0000000..cc7a5b3 --- /dev/null +++ b/tests/unit/test_exceptions.py @@ -0,0 +1,35 @@ +import pytest +from sqlalchemy.exc import IntegrityError, DataError, DBAPIError +from src.exceptions import handle_sqlalchemy_error + +def test_handle_sqlalchemy_error_unique_constraint(): + # Mocking IntegrityError is tricky, but we can check the string matching logic + # In a real test we might want to actually raise these, but for unit testing the logic: + err = IntegrityError("Unique constraint", params=None, orig=Exception("unique constraint violation")) + msg, status = handle_sqlalchemy_error(err) + assert status == 409 + assert "already exists" in msg + +def test_handle_sqlalchemy_error_foreign_key(): + err = IntegrityError("Foreign key constraint", params=None, orig=Exception("foreign key constraint violation")) + msg, status = handle_sqlalchemy_error(err) + assert status == 400 + assert "Related record not found" in msg + +def test_handle_sqlalchemy_error_data_error(): + err = DataError("Invalid data", params=None, orig=None) + msg, status = handle_sqlalchemy_error(err) + assert status == 400 + assert "Invalid data" in msg + +def test_handle_sqlalchemy_error_generic_dbapi(): + # DBAPIError needs an 'orig' or it might fail some attribute checks depending on implementation + # But let's test a generic one + class MockError: + def __str__(self): + return "Some generic database error" + + err = DBAPIError("Generic error", params=None, orig=MockError()) + msg, status = handle_sqlalchemy_error(err) + assert status == 500 + assert "Database error" in msg diff --git a/tests/unit/test_middleware_dispatch.py b/tests/unit/test_middleware_dispatch.py new file mode 100644 index 0000000..e965430 --- /dev/null +++ b/tests/unit/test_middleware_dispatch.py @@ -0,0 +1,46 @@ +import pytest +from unittest.mock import AsyncMock, MagicMock +from fastapi import HTTPException +from src.middleware import RequestValidationMiddleware + +@pytest.mark.asyncio +async def test_request_validation_middleware_query_length(): + middleware = RequestValidationMiddleware(app=MagicMock()) + request = MagicMock() + # Mocking request.url.query + request.url.query = "a" * 2001 + + with pytest.raises(HTTPException) as excinfo: + await middleware.dispatch(request, AsyncMock()) + assert excinfo.value.status_code == 414 + +@pytest.mark.asyncio +async def test_request_validation_middleware_too_many_params(): + middleware = RequestValidationMiddleware(app=MagicMock()) + request = MagicMock() + request.url.query = "a=1" + # Mocking request.query_params.multi_items() + request.query_params.multi_items.return_value = [("param", "val")] * 51 + + with pytest.raises(HTTPException) as excinfo: + await middleware.dispatch(request, AsyncMock()) + assert excinfo.value.status_code == 400 + assert "Too many query parameters" in excinfo.value.detail + +@pytest.mark.asyncio +async def test_request_validation_middleware_pagination_logic(): + middleware = RequestValidationMiddleware(app=MagicMock()) + request = MagicMock() + request.url.query = "size=55" + request.query_params.multi_items.return_value = [("size", "55")] + request.headers = {} + + with pytest.raises(HTTPException) as excinfo: + await middleware.dispatch(request, AsyncMock()) + assert excinfo.value.status_code == 400 + assert "cannot exceed 50" in excinfo.value.detail + + request.query_params.multi_items.return_value = [("size", "7")] + with pytest.raises(HTTPException) as excinfo: + await middleware.dispatch(request, AsyncMock()) + assert "must be a multiple of 5" in excinfo.value.detail diff --git a/tests/unit/test_schemas.py b/tests/unit/test_schemas.py new file mode 100644 index 0000000..fbcf666 --- /dev/null +++ b/tests/unit/test_schemas.py @@ -0,0 +1,120 @@ +import pytest +from pydantic import ValidationError +from src.database.schema import CommonParams + +def test_common_params_valid(): + params = CommonParams( + page=1, + itemsPerPage=10, + q="search test", + all=1 + ) + assert params.page == 1 + assert params.items_per_page == 10 + assert params.query_str == "search test" + assert params.is_all is True + +def test_common_params_items_per_page_constraints(): + # Test items_per_page must be multiple of 5 + with pytest.raises(ValidationError): + CommonParams(itemsPerPage=7) + + # Test items_per_page maximum + with pytest.raises(ValidationError): + CommonParams(itemsPerPage=55) + + # Valid multiples of 5 + assert CommonParams(itemsPerPage=50).items_per_page == 50 + assert CommonParams(itemsPerPage=5).items_per_page == 5 + +def test_common_params_page_constraints(): + # Test page must be > 0 + with pytest.raises(ValidationError): + CommonParams(page=0) + + with pytest.raises(ValidationError): + CommonParams(page=-1) + +def test_common_params_query_str_max_length(): + # Test query_str max length (100) + long_str = "a" * 101 + with pytest.raises(ValidationError): + CommonParams(q=long_str) + +def test_common_params_filter_spec_max_length(): + # Test filter_spec max length (500) + long_filter = "a" * 501 + with pytest.raises(ValidationError): + CommonParams(filter=long_filter) + +from src.aeros_equipment.schema import EquipmentConfiguration, FlowrateUnit, UnitCode + +def test_equipment_configuration_valid(): + config = EquipmentConfiguration( + equipmentName="Pump A", + maxFlowrate=100.0, + designFlowrate=80.0, + flowrateUnit=FlowrateUnit.PER_HOUR, + relDisType="Weibull", + relDisP1=1.0, + relDisP2=2.0, + relDisP3=0.0, + relDisUnitCode=UnitCode.U_HOUR, + cmDisType="Normal", + cmDisP1=6.0, + cmDisP2=3.0, + cmDisP3=0.0, + cmDisUnitCode=UnitCode.U_HOUR, + ipDisType="Fixed", + ipDisP1=0.0, + ipDisP2=0.0, + ipDisP3=0.0, + ipDisUnitCode=UnitCode.U_HOUR, + pmDisType="Fixed", + pmDisP1=0.0, + pmDisP2=0.0, + pmDisP3=0.0, + pmDisUnitCode=UnitCode.U_HOUR, + ohDisType="Fixed", + ohDisP1=0.0, + ohDisP2=0.0, + ohDisP3=0.0, + ohDisUnitCode=UnitCode.U_HOUR + ) + assert config.equipment_name == "Pump A" + assert config.max_flowrate == 100.0 + +def test_equipment_configuration_invalid_flowrate(): + # maxFlowrate cannot be negative + with pytest.raises(ValidationError): + EquipmentConfiguration( + equipmentName="Pump A", + maxFlowrate=-1.0, + designFlowrate=80.0, + flowrateUnit=FlowrateUnit.PER_HOUR, + relDisType="Weibull", + relDisP1=1.0, + relDisP2=2.0, + relDisP3=0.0, + relDisUnitCode=UnitCode.U_HOUR, + cmDisType="Normal", + cmDisP1=6.0, + cmDisP2=3.0, + cmDisP3=0.0, + cmDisUnitCode=UnitCode.U_HOUR, + ipDisType="Fixed", + ipDisP1=0.0, + ipDisP2=0.0, + ipDisP3=0.0, + ipDisUnitCode=UnitCode.U_HOUR, + pmDisType="Fixed", + pmDisP1=0.0, + pmDisP2=0.0, + pmDisP3=0.0, + pmDisUnitCode=UnitCode.U_HOUR, + ohDisType="Fixed", + ohDisP1=0.0, + ohDisP2=0.0, + ohDisP3=0.0, + ohDisUnitCode=UnitCode.U_HOUR + ) diff --git a/tests/unit/test_security_middleware.py b/tests/unit/test_security_middleware.py new file mode 100644 index 0000000..f1cbbb8 --- /dev/null +++ b/tests/unit/test_security_middleware.py @@ -0,0 +1,89 @@ +import pytest +from fastapi import HTTPException +from src.middleware import ( + inspect_value, + inspect_json, + has_control_chars, + XSS_PATTERN, + SQLI_PATTERN, + RCE_PATTERN, + TRAVERSAL_PATTERN +) + +def test_xss_patterns(): + # Test common XSS payloads + payloads = [ + "", + "", + "javascript:alert(1)", + "