From 5c753348ffce7b2805d5d018682c291daad5fa35 Mon Sep 17 00:00:00 2001 From: nguu0123 Date: Fri, 30 Aug 2024 17:52:04 +0300 Subject: [PATCH] A new start --- .github/workflows/gh-page-ci.yml | 30 + .github/workflows/python-ci.yml | 55 + .gitignore | 22 + .pre-commit-config.yaml | 54 + .python-version | 1 + CHANGELOG.txt | 34 + LICENSE | 11 + LICENSE.txt | 7 + README.md | 72 + config/rohe_obs_conf.json | 34 + config/template_config/client_config.yaml | 30 + config/template_config/metric_config.yaml | 40 + dev_note.md | 40 + docs/img/class.png | Bin 0 -> 12500 bytes docs/index.md | 221 ++ example/bts/bts_client/client.json | 22 + .../client_v0.0.3/LSTM_Prediction_Client.py | 147 + .../bts/bts_client/client_v0.0.3/client.json | 54 + .../bts_client/client_v0.0.3/lstm_client.py | 23 + example/bts/bts_client/lstm_rest_client.py | 132 + example/bts/bts_server/command.json | 14 + example/bts/bts_server/predictionServerV1.py | 123 + example/bts/bts_server/predictionServerV2.py | 132 + .../powerGrid/LSTM_Prediction.py | 98 + .../predictionService/powerGrid/ML_Loader.py | 31 + .../powerGrid/config/lstm.json | 22 + .../LSTM_single_series/saved_model.pb | Bin 0 -> 1673446 bytes .../variables/variables.data-00000-of-00001 | Bin 0 -> 158985 bytes .../variables/variables.index | Bin 0 -> 2126 bytes .../tflite_model/LSTM_single_series.tflite | Bin 0 -> 34224 bytes example/bts/bts_server/submit_command.sh | 3 + example/bts/data/1161114002_122_norm.csv | 3419 +++++++++++++++++ example/bts/qoa_server/prometheus.yml | 11 + example/bts/qoa_server/qoa_config.json | 68 + example/bts/qoa_server/qoa_server.py | 22 + example/bts/qoa_server/run.sh | 13 + example/bts/readme.md | 2 + example/docker_report/config/client1.yaml | 37 + example/docker_report/docker_probe.py | 27 + example/reports/qoa_report_example.json | 164 + example/simple/collector.py | 21 + example/simple/config/client1.yaml | 15 + example/simple/config/client2.yaml | 15 + example/simple/config/client3.yaml | 15 + example/simple/config/client4.yaml | 15 + example/simple/config/client5.yaml | 15 + example/simple/ensemble_ml.py | 118 + example/simple/general_ml.py | 117 + .../qoa4ml-general-ml-report-schema.json | 312 ++ example/simple/rabbitmq.sh | 3 + example/simple/readme.md | 20 + img/inf_report.png | Bin 0 -> 77944 bytes img/qoa4mlos-overview.png | Bin 0 -> 44385 bytes language/qoa4ml-attributes-v0.2.json | 44 + language/qoa4ml-core-ensemble-v0.2.json | 436 +++ language/qoa4ml-core-ensemble.json | 292 ++ language/qoa4ml-core-v0.2.json | 223 ++ language/qoa4ml-core.json | 260 ++ .../qoa4ml-ensemble-ml-report-schema.json | 470 +++ language/qoa4ml-general-ml-report-schema.json | 295 ++ language/qoa4mlopa/bim-contract-basic.json | 79 + .../bim-policies-basic-embedded.rego | 50 + language/qoa4mlopa/bim-policies-basic.rego | 22 + language/qoa4mlopa/bts-contract-ex1.json | 80 + language/qoa4mlopa/bts-policies-ex1.rego | 26 + mkdocs.yml | 62 + observability/qoa4mlopa/README.md | 106 + observability/qoa4mlopa/bts_example/bts.rego | 59 + .../qoa4mlopa/bts_example/contract.json | 268 ++ observability/qoa4mlopa/bts_example/run.sh | 13 + .../qoa4mlopa/bts_example/submit_contract.sh | 6 + .../qoa4mlopa/bts_example/submit_policies.sh | 5 + observability/rohe_ObService/rohe_Agent.py | 47 + .../rohe_ObService/rohe_ObService.py | 145 + observability/simple_evaluation.py | 30 + pyproject.toml | 122 + requirements-dev.lock | 306 ++ requirements.lock | 195 + src/qoa4ml/__init__.py | 9 + src/qoa4ml/collector/__init__.py | 0 src/qoa4ml/collector/amqp_collector.py | 75 + src/qoa4ml/collector/base_collector.py | 7 + src/qoa4ml/collector/host_object.py | 7 + src/qoa4ml/collector/kafka_collector.py | 47 + src/qoa4ml/collector/socket_collector.py | 34 + src/qoa4ml/config/__init__.py | 0 src/qoa4ml/config/configs.py | 225 ++ src/qoa4ml/connector/__init__.py | 0 src/qoa4ml/connector/amqp_connector.py | 69 + src/qoa4ml/connector/base_connector.py | 7 + src/qoa4ml/connector/debug_connector.py | 15 + src/qoa4ml/connector/kafka_connector.py | 39 + src/qoa4ml/connector/mqtt_connector.py | 67 + src/qoa4ml/connector/prom_connector.py | 62 + src/qoa4ml/connector/socket_connector.py | 29 + src/qoa4ml/lang/__init__.py | 0 src/qoa4ml/lang/common_models.py | 28 + src/qoa4ml/lang/datamodel_enum.py | 188 + src/qoa4ml/lang/ml_contract.py | 101 + src/qoa4ml/metric.py | 147 + src/qoa4ml/observability/__init__.py | 0 src/qoa4ml/observability/odop_obs/__init__.py | 0 .../odop_obs/config/exporter_config.yaml | 28 + .../config/node_aggregator_config.yaml | 24 + .../odop_obs/config/process_probe_conf.yaml | 5 + .../odop_obs/config/system_probe_conf.yaml | 5 + .../odop_obs/config/unit_conversion.yaml | 15 + .../odop_obs/embedded_database.py | 20 + src/qoa4ml/observability/odop_obs/exporter.py | 23 + .../observability/odop_obs/node_aggregator.py | 194 + src/qoa4ml/probes/__init__.py | 0 src/qoa4ml/probes/dataquality.py | 201 + src/qoa4ml/probes/docker_monitoring_probe.py | 45 + src/qoa4ml/probes/mlquality.py | 123 + src/qoa4ml/probes/probe.py | 64 + src/qoa4ml/probes/process_monitoring_probe.py | 101 + src/qoa4ml/probes/system_monitoring_probe.py | 112 + src/qoa4ml/qoa_client.py | 362 ++ src/qoa4ml/reports/__init__.py | 0 src/qoa4ml/reports/abstract_report.py | 37 + .../reports/general_application_report.py | 76 + src/qoa4ml/reports/ml_report_model.py | 83 + src/qoa4ml/reports/ml_reports.py | 132 + src/qoa4ml/reports/resources_report_model.py | 59 + src/qoa4ml/reports/rohe_reports.py | 241 ++ src/qoa4ml/utils/__init__.py | 0 src/qoa4ml/utils/docker_util.py | 85 + src/qoa4ml/utils/gpu_utils.py | 57 + src/qoa4ml/utils/jetson_utils.py | 113 + src/qoa4ml/utils/logger.py | 12 + src/qoa4ml/utils/pynvml_forked.py | 1889 +++++++++ src/qoa4ml/utils/qoa_utils.py | 459 +++ src/qoa4ml/utils/repeated_timer.py | 29 + tests/gpu_test.py | 5 + tests/qoaclient_test/config/client.yaml | 19 + .../config/client_with_probes.yaml | 40 + tests/qoaclient_test/probes_test.py | 12 + tests/qoaclient_test/qoaclient_test.py | 56 + tests/simple_test.py | 9 + tox.ini | 22 + 140 files changed, 15435 insertions(+) create mode 100644 .github/workflows/gh-page-ci.yml create mode 100644 .github/workflows/python-ci.yml create mode 100644 .gitignore create mode 100644 .pre-commit-config.yaml create mode 100644 .python-version create mode 100644 CHANGELOG.txt create mode 100644 LICENSE create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 config/rohe_obs_conf.json create mode 100644 config/template_config/client_config.yaml create mode 100644 config/template_config/metric_config.yaml create mode 100644 dev_note.md create mode 100644 docs/img/class.png create mode 100644 docs/index.md create mode 100644 example/bts/bts_client/client.json create mode 100644 example/bts/bts_client/client_v0.0.3/LSTM_Prediction_Client.py create mode 100644 example/bts/bts_client/client_v0.0.3/client.json create mode 100644 example/bts/bts_client/client_v0.0.3/lstm_client.py create mode 100644 example/bts/bts_client/lstm_rest_client.py create mode 100644 example/bts/bts_server/command.json create mode 100644 example/bts/bts_server/predictionServerV1.py create mode 100644 example/bts/bts_server/predictionServerV2.py create mode 100644 example/bts/bts_server/predictionService/powerGrid/LSTM_Prediction.py create mode 100644 example/bts/bts_server/predictionService/powerGrid/ML_Loader.py create mode 100644 example/bts/bts_server/predictionService/powerGrid/config/lstm.json create mode 100644 example/bts/bts_server/predictionService/powerGrid/exported_models/LSTM_single_series/saved_model.pb create mode 100644 example/bts/bts_server/predictionService/powerGrid/exported_models/LSTM_single_series/variables/variables.data-00000-of-00001 create mode 100644 example/bts/bts_server/predictionService/powerGrid/exported_models/LSTM_single_series/variables/variables.index create mode 100644 example/bts/bts_server/predictionService/powerGrid/exported_models/tflite_model/LSTM_single_series.tflite create mode 100755 example/bts/bts_server/submit_command.sh create mode 100644 example/bts/data/1161114002_122_norm.csv create mode 100644 example/bts/qoa_server/prometheus.yml create mode 100644 example/bts/qoa_server/qoa_config.json create mode 100644 example/bts/qoa_server/qoa_server.py create mode 100755 example/bts/qoa_server/run.sh create mode 100644 example/bts/readme.md create mode 100644 example/docker_report/config/client1.yaml create mode 100644 example/docker_report/docker_probe.py create mode 100644 example/reports/qoa_report_example.json create mode 100644 example/simple/collector.py create mode 100644 example/simple/config/client1.yaml create mode 100644 example/simple/config/client2.yaml create mode 100644 example/simple/config/client3.yaml create mode 100644 example/simple/config/client4.yaml create mode 100644 example/simple/config/client5.yaml create mode 100644 example/simple/ensemble_ml.py create mode 100644 example/simple/general_ml.py create mode 100644 example/simple/qoa4ml-general-ml-report-schema.json create mode 100644 example/simple/rabbitmq.sh create mode 100644 example/simple/readme.md create mode 100644 img/inf_report.png create mode 100644 img/qoa4mlos-overview.png create mode 100644 language/qoa4ml-attributes-v0.2.json create mode 100644 language/qoa4ml-core-ensemble-v0.2.json create mode 100644 language/qoa4ml-core-ensemble.json create mode 100644 language/qoa4ml-core-v0.2.json create mode 100644 language/qoa4ml-core.json create mode 100644 language/qoa4ml-ensemble-ml-report-schema.json create mode 100644 language/qoa4ml-general-ml-report-schema.json create mode 100644 language/qoa4mlopa/bim-contract-basic.json create mode 100644 language/qoa4mlopa/bim-policies-basic-embedded.rego create mode 100644 language/qoa4mlopa/bim-policies-basic.rego create mode 100644 language/qoa4mlopa/bts-contract-ex1.json create mode 100644 language/qoa4mlopa/bts-policies-ex1.rego create mode 100644 mkdocs.yml create mode 100644 observability/qoa4mlopa/README.md create mode 100644 observability/qoa4mlopa/bts_example/bts.rego create mode 100644 observability/qoa4mlopa/bts_example/contract.json create mode 100755 observability/qoa4mlopa/bts_example/run.sh create mode 100644 observability/qoa4mlopa/bts_example/submit_contract.sh create mode 100644 observability/qoa4mlopa/bts_example/submit_policies.sh create mode 100644 observability/rohe_ObService/rohe_Agent.py create mode 100644 observability/rohe_ObService/rohe_ObService.py create mode 100644 observability/simple_evaluation.py create mode 100644 pyproject.toml create mode 100644 requirements-dev.lock create mode 100644 requirements.lock create mode 100644 src/qoa4ml/__init__.py create mode 100644 src/qoa4ml/collector/__init__.py create mode 100644 src/qoa4ml/collector/amqp_collector.py create mode 100644 src/qoa4ml/collector/base_collector.py create mode 100644 src/qoa4ml/collector/host_object.py create mode 100644 src/qoa4ml/collector/kafka_collector.py create mode 100644 src/qoa4ml/collector/socket_collector.py create mode 100644 src/qoa4ml/config/__init__.py create mode 100644 src/qoa4ml/config/configs.py create mode 100644 src/qoa4ml/connector/__init__.py create mode 100644 src/qoa4ml/connector/amqp_connector.py create mode 100644 src/qoa4ml/connector/base_connector.py create mode 100644 src/qoa4ml/connector/debug_connector.py create mode 100644 src/qoa4ml/connector/kafka_connector.py create mode 100644 src/qoa4ml/connector/mqtt_connector.py create mode 100644 src/qoa4ml/connector/prom_connector.py create mode 100644 src/qoa4ml/connector/socket_connector.py create mode 100644 src/qoa4ml/lang/__init__.py create mode 100644 src/qoa4ml/lang/common_models.py create mode 100644 src/qoa4ml/lang/datamodel_enum.py create mode 100644 src/qoa4ml/lang/ml_contract.py create mode 100644 src/qoa4ml/metric.py create mode 100644 src/qoa4ml/observability/__init__.py create mode 100644 src/qoa4ml/observability/odop_obs/__init__.py create mode 100644 src/qoa4ml/observability/odop_obs/config/exporter_config.yaml create mode 100644 src/qoa4ml/observability/odop_obs/config/node_aggregator_config.yaml create mode 100644 src/qoa4ml/observability/odop_obs/config/process_probe_conf.yaml create mode 100644 src/qoa4ml/observability/odop_obs/config/system_probe_conf.yaml create mode 100644 src/qoa4ml/observability/odop_obs/config/unit_conversion.yaml create mode 100644 src/qoa4ml/observability/odop_obs/embedded_database.py create mode 100644 src/qoa4ml/observability/odop_obs/exporter.py create mode 100644 src/qoa4ml/observability/odop_obs/node_aggregator.py create mode 100644 src/qoa4ml/probes/__init__.py create mode 100644 src/qoa4ml/probes/dataquality.py create mode 100644 src/qoa4ml/probes/docker_monitoring_probe.py create mode 100644 src/qoa4ml/probes/mlquality.py create mode 100644 src/qoa4ml/probes/probe.py create mode 100644 src/qoa4ml/probes/process_monitoring_probe.py create mode 100644 src/qoa4ml/probes/system_monitoring_probe.py create mode 100644 src/qoa4ml/qoa_client.py create mode 100644 src/qoa4ml/reports/__init__.py create mode 100644 src/qoa4ml/reports/abstract_report.py create mode 100644 src/qoa4ml/reports/general_application_report.py create mode 100644 src/qoa4ml/reports/ml_report_model.py create mode 100644 src/qoa4ml/reports/ml_reports.py create mode 100644 src/qoa4ml/reports/resources_report_model.py create mode 100644 src/qoa4ml/reports/rohe_reports.py create mode 100644 src/qoa4ml/utils/__init__.py create mode 100644 src/qoa4ml/utils/docker_util.py create mode 100644 src/qoa4ml/utils/gpu_utils.py create mode 100644 src/qoa4ml/utils/jetson_utils.py create mode 100644 src/qoa4ml/utils/logger.py create mode 100644 src/qoa4ml/utils/pynvml_forked.py create mode 100644 src/qoa4ml/utils/qoa_utils.py create mode 100644 src/qoa4ml/utils/repeated_timer.py create mode 100644 tests/gpu_test.py create mode 100644 tests/qoaclient_test/config/client.yaml create mode 100644 tests/qoaclient_test/config/client_with_probes.yaml create mode 100644 tests/qoaclient_test/probes_test.py create mode 100644 tests/qoaclient_test/qoaclient_test.py create mode 100644 tests/simple_test.py create mode 100644 tox.ini diff --git a/.github/workflows/gh-page-ci.yml b/.github/workflows/gh-page-ci.yml new file mode 100644 index 0000000..b8111a1 --- /dev/null +++ b/.github/workflows/gh-page-ci.yml @@ -0,0 +1,30 @@ +name: gh-page-ci +on: + push: + paths: + - "docs/**" + branches: + - main +permissions: + contents: write +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Configure Git Credentials + run: | + git config user.name github-actions[bot] + git config user.email 41898282+github-actions[bot]@users.noreply.github.com + - uses: actions/setup-python@v5 + with: + python-version: 3.x + - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV + - uses: actions/cache@v4 + with: + key: mkdocs-material-${{ env.cache_id }} + path: .cache + restore-keys: | + mkdocs-material- + - run: pip install mkdocs-material[imaging] + - run: mkdocs gh-deploy --force diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml new file mode 100644 index 0000000..8178282 --- /dev/null +++ b/.github/workflows/python-ci.yml @@ -0,0 +1,55 @@ +name: Python CI + +on: [push, pull_request] + +jobs: + tests: + strategy: + matrix: + python-version: ["3.9", "3.10", "3.11", "3.12"] + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install tox tox-gh-actions tox-uv + - name: Test with tox + run: tox + + pre-commit: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.10.14" + + - uses: eifinger/setup-rye@v4 + with: + enable-cache: true + + - name: Set Rye Config + run: | + rye config --set-bool behavior.global-python=true + rye config --set-bool behavior.use-uv=true + shell: bash + + - name: Sync dependencies + run: rye sync + + - name: Rye fmt + run: rye fmt --check + + - name: Rye lint + run: rye lint src + + - name: Rye lint + run: rye sync diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..51c1430 --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +test/ +modules/orchestration/temp/ +.venv +*.DS_Store +*.jpg +*.pt +*.pyc +*.egg-info +*.whl +*.gz +*__pycache__/ +# *.pyc +.pypirc +.cache/ +*.pyo +*.pyd +.ipynb_checkpoints/ +.env +*.pem +observability/odop_obs/logs/*.txt +observability/odop_obs/tinyflux/*.csv +.python-version diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..b969e25 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,54 @@ +fail_fast: true +default_language_version: + python: python3.10 +repos: + - repo: https://github.com/asottile/pyupgrade + rev: v3.17.0 + hooks: + - id: pyupgrade + + - repo: https://github.com/codespell-project/codespell + rev: "v2.3.0" + hooks: + - id: codespell + additional_dependencies: + - tomli + args: ["--write-changes", "--interactive", "3"] + files: ^src/qoa4ml/.*\.py$ + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.6.1 + hooks: + - id: ruff + args: [--fix] + files: ^src/.*\.py$ + - id: ruff-format + + - repo: https://github.com/shellcheck-py/shellcheck-py + rev: "v0.10.0.1" + hooks: + - id: shellcheck + + - repo: https://github.com/gitleaks/gitleaks + rev: v8.18.4 + hooks: + - id: gitleaks + + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.6.0 + hooks: + - id: trailing-whitespace + files: /.*\.(py|yaml|json)$ + - id: end-of-file-fixer + files: /.*\.(py|yaml|json)$ + - id: check-yaml + exclude: ^templates/deployment_templates.yaml + files: /.*\.yaml$ + args: [--allow-multiple-documents] + - id: check-json + files: /.*\.json$ + - id: pretty-format-json + args: [--autofix] + files: /.*\.json$ + - id: check-toml + files: /.*\.toml$ diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..1445aee --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.10.14 diff --git a/CHANGELOG.txt b/CHANGELOG.txt new file mode 100644 index 0000000..2221eec --- /dev/null +++ b/CHANGELOG.txt @@ -0,0 +1,34 @@ +Change Log +====================== + +0.0.13 (18/04/2022) +--------------------- +First Release + +0.0.18 (10/05/2022) +--------------------- +Update system metric + +0.0.19 (31/05/2022) +--------------------- +Update process metric + +0.0.54 (20/09/2022) +--------------------- +Update monitoring system/process/docker + +0.0.62 (20/09/2022) +--------------------- +Add metric and modify format of system/process reports + +0.0.64 (15/03/2022) +--------------------- +Add metric and modify format of system/process reports + +0.0.72 (22/05/2023) +--------------------- +Refactor source code + +0.0.73 (19/04/2024) +--------------------- +Add new ODOP observability module diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..06e2380 --- /dev/null +++ b/LICENSE @@ -0,0 +1,11 @@ +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..c8afb02 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,7 @@ +Copyright 2021 AaltoSea + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..ec62450 --- /dev/null +++ b/README.md @@ -0,0 +1,72 @@ +# QoA4ML - Quality of Analytics for Machine Learning Services + +--- + +[![Documentation](https://img.shields.io/badge/Documentation-gray?logo=materialformkdocs)](https://rdsea.github.io/QoA4ML/) +![PyPI - Status](https://img.shields.io/pypi/status/qoa4ml) +![PyPI - Wheel](https://img.shields.io/pypi/wheel/qoa4ml) +![PyPI - Version](https://img.shields.io/pypi/v/qoa4ml) +![PyPI - Python Version](https://img.shields.io/pypi/pyversions/qoa4ml) +![PyPI - Downloads](https://img.shields.io/pypi/dm/qoa4ml) +[![Code style: Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/format.json)](https://github.com/astral-sh/ruff) +[![GitTutorial](https://img.shields.io/badge/PR-Welcome-%23FF8300.svg?)](https://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project) +![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/rdsea/qoa4ml/python-ci.yml?logo=github&label=Github%20Actions) +[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) + +# Introduction + +QoA4ML consists of a set of utilities and specs for supporting quality of analytics in ML services. Especially, we focus on ML services across edge-cloud continuum, which are built as a composition of services. + +## QoA4ML Specification + +The design of QoA4ML specification is in [language](language/) + +## QoA4ML Utilities + +Developers can call many functions from a QoAClient and QoA4ML's [utilities](qoa4ml_lib/utils.py) to evaluate/report ML-specific attributes (e.g., data quality, inference performance), build the quality reports, and send them to the observation services. +The QoAClient can be initiated with various configurations for specifying observation server and communication protocols (e.g., messaging) in different formats (e.g., json and yaml). + +The detail documents for QoA4ML utilization is presented in [qoa4ml_lib](qoa4ml_lib/) + +> For a local build and use QoA4ML one can do: + +```bash +$python3 -m pip install build +$cd qoa4ml_lib/ +$python -m build +``` + +## QoA4ML Reports + +QoA Reports are implemented in [QoA4ML Utilities](qoa4ml_lib/qoa4ml/), an object supports developers in reporting metrics, computation graphs, and inference graphs of ML services in a concrete format. +![Report schema](img/inf_report.png) + +## Examples + +Examples are in [examples](example/). + +## QoA4ML Observability + +The code is in [observability](observability/) + +![The overal architecture of the Observability Service](img/qoa4mlos-overview.png) + +QoA4ML Monitor is a component monitoring QoA for a ML model which is deployed in a serving platform. + +- Monitoring Service: third party monitoring service used for managing monitoring data. + - We use Prometheus and other services: provide information on how to configure them. +- QoA4MLObservabilityService: a service reads QoA4ML specifications and real time monitoring data and detect if any violation occurs + +### Implementation using OPA + +[OPA engine](https://www.openpolicyagent.org/docs/latest/#running-opa) is used to implement the service for checking violation under [qoa4mlopa](observability/qoa4mlopa/) + +### ROHE Implementation + +Another new engine is currently developed under [rohe_ObService](observability/rohe_ObService/) + +## References + +- Hong-Linh Truong, Minh-Tri Nguyen, ["QoA4ML -A Framework for Supporting Contracts in Machine Learning Services"](https://research.aalto.fi/files/65786264/main.pdf), [The 2021 IEEE International Conference on Web Services (ICWS 2021)](https://conferences.computer.org/icws/2021/), to appear. +- Minh-Tri Nguyen, Hong-Linh Truong [Demonstration Paper: Monitoring Machine Learning Contracts with QoA4ML](https://research.aalto.fi/files/56621517/main.pdf), Companion of the 2021 ACM/SPEC International Conference on Performance Engineering (ICPE'21), Apr. 19-23, 2021 +- https://www.researchgate.net/publication/341762862_R3E_-An_Approach_to_Robustness_Reliability_Resilience_and_Elasticity_Engineering_for_End-to-End_Machine_Learning_Systems diff --git a/config/rohe_obs_conf.json b/config/rohe_obs_conf.json new file mode 100644 index 0000000..8f1b136 --- /dev/null +++ b/config/rohe_obs_conf.json @@ -0,0 +1,34 @@ +{ + "collector": { + "amqp_collector": { + "class": "amqp", + "conf": { + "end_point": "localhost", + "exchange_name": "exchange_name", + "exchange_type": "topic", + "in_queue": "collector_1", + "in_routing_key": "in_routing_key" + } + } + }, + "connector": { + "amqp_connector": { + "class": "amqp", + "conf": { + "end_point": "localhost", + "exchange_name": "exchange_name", + "exchange_type": "topic", + "out_routing_key": "out_routing_key" + } + } + }, + "database": { + "collection": "registration", + "db_name": "rohe_observation", + "url": "mongodb://localhost:27017/" + }, + "false_rate": 3, + "output_folder": "/results/", + "sample_rate": 50, + "timer": 10 +} diff --git a/config/template_config/client_config.yaml b/config/template_config/client_config.yaml new file mode 100644 index 0000000..97dae88 --- /dev/null +++ b/config/template_config/client_config.yaml @@ -0,0 +1,30 @@ +--- +#client configuration +client: + user_id: aaltosea1 + instance_name: data_handling01 + stage_id: Gateway + functionality: REST + application_name: test + role: ml + +# collector configuration +collector: + amqp_collector: + class: amqp + conf: + end_point: localhost + exchange_name: exchange_name + exchange_type: topic + in_routing_key: qoa1.report.# + in_queue: collector_1 + +# connector configuration +connector: + amqp_connector: + class: amqp + conf: + end_point: localhost + exchange_name: qoa4ml + exchange_type: topic + out_routing_key: qoa1.report.ml diff --git a/config/template_config/metric_config.yaml b/config/template_config/metric_config.yaml new file mode 100644 index 0000000..299ad57 --- /dev/null +++ b/config/template_config/metric_config.yaml @@ -0,0 +1,40 @@ +--- +Accuracy: + class: Gauge + description: model training accuracy + default: 0 + category: + - quality + - inference +ResponseTime: + class: Gauge + description: model training response time + default: 0 + category: + - quality + - service +--- +cpu_stat: + cpu: + class: Gauge + description: monitor system cpu percentage + default: -1 + key: percentage +mem_stat: + memory: + class: Gauge + description: monitor system memory used + default: 0 + key: used +proc_cpu: + proc_cpu: + class: Gauge + description: monitor process CPU precentage + default: 0 + key: used +proc_mem: + proc_mem: + class: Gauge + description: monitor process memory precentage + default: 0 + key: used diff --git a/dev_note.md b/dev_note.md new file mode 100644 index 0000000..ab75b7f --- /dev/null +++ b/dev_note.md @@ -0,0 +1,40 @@ +# Ryu package: + +Change + + ``` + from eventlet.wsgi import ALREADY_HANDLED + ``` + +to + + ``` + import eventlet.wsgi + ALREADY_HANDLED = getattr(eventlet.wsgi, "ALREADY_HANDLED", None) + ``` + +Or use two virtual env + +# Pre-commit: + +- If you install QoA4ML from source, install the dev version or all version (editable or not) by: + + ```bash + # editable + pip install -e ".[dev]" + # non-editable + pip install ".[dev]" + ``` + +- Installing dev version will automatically have pre-commit, then, install pre-commit: + + ```bash + pre-commit install + ``` + +- Pre-commit failed: pre-commit can't automatically add new update to staging so you have to manually stage the file update from pre-commit +- Run pre-commit for all files, not just staging: + + ```bash + pre-commit run --all-files + ``` diff --git a/docs/img/class.png b/docs/img/class.png new file mode 100644 index 0000000000000000000000000000000000000000..71700126ed672d5f70a999d23d66d422f263d6c3 GIT binary patch literal 12500 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 literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..7b37072 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,221 @@ +# QoA4ML - Quality of Analytics for ML + +## Source code +[QoA4ML](https://github.com/rdsea/QoA4ML/tree/main/qoa4ml_lib) + + +## Monitoring Client +QoA Client: an object that observes metrics, generates metric reports, and sends them to the Observation service via a list of connectors (e.g., messaging connector: RabbitMQ). + +The developers only need to init a QoAClient at the beginning and use it to observe/evaluate metrics by self-instrumentation (calling its functions) at the right place in the source code. + +- To initiate a QoA Client, developers can specify a configuration file path or refer to a configuration as a dictionary, or give the registration service (URL) where the client can get its configuration. + +The `configuration` contains the information about the client and its configuration in form of dictionary + +Example: +```py +clientConf = { + "client":{ + "user_id": "aaltosea1", + "instance_name": "ML02", + "stage_id": "ML", + "method": "REST", + "application_name": "test", + "role": "ml" + }, + "connector":{ + "amqp_connector":{ + "class": "amqp", + "conf":{ + "end_point": "localhost", + "exchange_name": "qoa4ml", + "exchange_type": "topic", + "out_routing_key": "qoa.report.ml" + } + } + } +} +qoaClient = QoaClient(config_dict=clientConf) +``` +The `connector` is the dictionary containing multiple connector configuration (amqp, mqtt, kafka) +If 'connector' is not define, developer must give 'registration_url' +The 'registration_url' specify the service where the client register for monitoring service. If it's set, the client register with the service and receive connector configuration. +For example: "http://localhost:5001/registration" + +- Via this client, developers can call different monitoring probes to measure desired metrics and categorize them into data quality, service performance or inference quality. + - By using our probes (e.g., `observeErronous`, `observeMissing`, and `observeInferenceMetric`), the metrics are already categorized in the quality report. + - For unsupported metrics or user-defined metrics, the developers can report them by using `observeMetric` providing metric's names and their expected categories. For example `qoaClient.observeMetric(metric_name="image_width", value=200, category=1)`. + +- Category: metrics are categorized into following groups: + - 0 - Quality: Performance (metrics for evaluating service performance e.g., response time, throughput) + - 1 - Quality: Data (metrics for evaluating data quality e.g., missing, duplicate, erroneous) + - 2 - Quality: Inference (metrics for evaluating quality of ML inference, measured from inferences e.g., accuracy, confidence) + - 3 - Resource: metrics for evaluating resource utilization e.g. CPU, Memory +- To send the quality report to the observation service, the developers can call `report` from the QoAClient. For example: `qualityReport = qoaClient.report()`, the function will additionally return the `report` at current stage and save it to `qualityReport` +- To aggregate reports from previous stage (in a pipeline) for building the computation graphs, the client can call `importPReport`. For example `qoaClient.importPReport(previousReport)` + + +## Probes + +* QoA4ML Probes: libraries and lightweight modules capturing metrics. They are integrated into suitable ML serving frameworks and ML code +* Probe properties: + - Can be written in different languages (Python, GoLang) + - Can have different communications to monitoring systems (depending on probes and its ML support) + - Capture metrics with a clear definition/scope + - e.g., Response time for an ML stage (training) or a service call (of ML APIs) + - Thus output of probes must be correlated to objects to be monitored and the tenant + - Support high or low-level metrics/attributes + - depending on probes implementation + - Can be instrumented into source code or standlone + +## Metric +We support some metric classes for collecting different types of metric: Counter, Gauge, Summary, Histogram + +- `Metric`: an original class providing some common functions on an metric object. + - Attribute: + - `metric_name` + - `description` + - `value` + - Function: + - `__init__`: let user define the metric name, description and default value. + - `set`: set its `value` to a specific value + - `get_val`: get current value + - `get_name`: return metric name + - `get_des`: return metric description + - `__str__`: return information about the metric in form of string + - `to_dict`: return information about the metric in form of dictionary +- `Counter` + - Attribute: same as `Metric` & on further developing + - Function: + - `inc`: increase the value of the metric by the given number/by 1 by default. + - `reset`: set the value back to zero. +- `Gauge` + - Attribute: same as `Metric` & on further developing + - Function: + - `inc`: increase the value of the metric by a given number/by 1 by default. + - `dec`: decrease the value of the metric by a given number/by 1 by default. + - `set`: set the value to a given number. +- `Summary` + - Attribute: same as `Metric` & on further developing + - Function: + - `inc`: increase the value of the metric by a given number/by 1 by default. + - `dec`: decrease the value of the metric by a given number/by 1 by default. + - `set`: set the value to a given number. +- `Histogram` + - Attribute: same as `Metric` & on further developing + - Function: + - `inc`: increase the value of the metric by a given number/by 1 by default. + - `dec`: decrease the value of the metric by a given number/by 1 by default. + - `set`: set the value to a given number. + +## [QoA4ML Reports](https://github.com/rdsea/QoA4ML/blob/main/qoa4ml_lib/qoa4ml/reports.py) + +This module defines ``QoA_Report``, an object that provide functions to export monitored metric to the following schema: +```json +{ + "computationGraph":{ + "instances":{ + "@instance_id":{ + "instance_name": "@name_of_instance", + "method": "@method/task/function", + "previous_instance":["@list_of_previous_instance"] + }, + ... + }, + "last_instance": "@name_of_last_instance_in_the_graph" + }, + "quality":{ + "data":{ + "@stage_id":{ + "@metric_name":{ + "@instance_id": "@value" + } + } + }, + "performance":{ + "@stage_id":{ + "@metric_name":{ + "@instance_id": "@value" + } + } + }, + "inference":{ + "@inference_id":{ + "value": "@value", + "confident": "@confidence", + "accuracy": "@accuracy", + "instance_id": "@instance_id", + "source": ["@list_of_inferences_to_infer_this_inference"] + } + } + } +} +``` + +The example is shown in `example/reports/qoa_report/example.txt` + +- Attribute: + - `previous_report_instance` = list previous services + - `report_list`: list of reports from previous services + - `previous_inference`: list previous inferences + - `quality_report`: report all quality (data, service, inference qualtiy) of the service + - `execution_graph`: report the execution graph + - `report`: the final report to be sent + +- Function: + - `__init__`: init as empty report. + - `import_report_from_file`: init QoA Report from `json` file. + - `importPReport`: import reports from previous service to build the execution and inference graph + - `build_execution_graph`: build execution graph from list of previous reports + - `build_quality_report`: build the quality report from metrics collected in runtime + - `generateReport`: return the final report. + - `observeMetric`: observe metrics in runtime with 3 categories: service quality, data quality, inference qualtiy. This can be extended to observe resource metrics. + + +## [Examples](https://github.com/rdsea/QoA4ML/tree/main/example) +https://github.com/rdsea/QoA4ML/tree/main/example + + + + +## Overview +![Class](img/class.png) + +Probes will be integrated to client program or system service to collect metrics at the edge +Probes will generate reports and sent to message broker using different connector. Coresponding collector should be used to acquire the metrics. + +## Collector +The manager/orchestrator have to integrate collector to collect metric using different protocols for further analysis. +- Attribute: +- Function: + - `__init__`: take a configuration as a `dict` containing information about the data source, eg. broker, channel, queue, etc. It can take an `object` as an attribute `host` to return the message for further processing. + + + - If the collector is initiated by an object inherited class, this class must implement `message_processing` function to process the message returned by the collector. Otherwise, the collector will print the message to the console. + + - `on_request`: handle message from data source (message broker,...) + + - `start` & `stop`: start and stop consuming message + + - `get_queue`: return the queue name. + +## Connector +Connectors are implement with different protocols for sending report. Example: sending report to message broker - AMQP/MQTT +- Attribute: +- Function: + - `__init__`: take a configuration as a `dict` containing information about the data sink, eg. broker, channel, queue, etc. It can take a `bool` parameter `log` for logging messages for further processing. + + - `send_data`: a function to send data to specified `routing_key`/`queue` with a corresponding key `corr_id` to trace back message. + + + +## Utilities +A module provide some frequently used functions and some function to directly collect system metrics. + +## Note +- `eva_duplicate`, `eva_erronous`, `eva_missing`, and `detect_outlier` probes are using ydata-quality library, which is only available for Python 3.8 +- For using ML quality probes, you may need to install a few more dependencies, e.g., tensorflow and Pillow. +- QoaClient uses AMQP protocol by default. To use MQTT, you may need to install `paho-mqtt`. +- To monitor Docker stats, you need to install [docker](https://docker-py.readthedocs.io/en/stable/) python client. +- To connect with Prometheus, you need to install [prometheus-client](https://pypi.org/project/prometheus-client/) diff --git a/example/bts/bts_client/client.json b/example/bts/bts_client/client.json new file mode 100644 index 0000000..ac3a4f6 --- /dev/null +++ b/example/bts/bts_client/client.json @@ -0,0 +1,22 @@ +{ + "data_normalize": { + "max": 12.95969626, + "mean": 12.04030374, + "threshold": 15 + }, + "ml_service": { + "file": "../data/1161114002_122_norm.csv", + "url": "http://127.0.0.1:5000" + }, + "qoa_service": { + "client_info": { + "application_name": "bts", + "instance_name": "LSTM Client Raps 01", + "method": "REST", + "roles": "client", + "stage_id": "Client", + "user_id": "aaltosea1" + }, + "registration": "http://127.0.0.1:5001/registration" + } +} diff --git a/example/bts/bts_client/client_v0.0.3/LSTM_Prediction_Client.py b/example/bts/bts_client/client_v0.0.3/LSTM_Prediction_Client.py new file mode 100644 index 0000000..2633da2 --- /dev/null +++ b/example/bts/bts_client/client_v0.0.3/LSTM_Prediction_Client.py @@ -0,0 +1,147 @@ +import sys + +sys.path.append("../") +import json +import random +import threading +import time +import uuid + +import pandas as pd + +####################### Import the Library ########################### +from qoa4ml_lib.qoa4ml.reports import Qoa_Client +from qoa4ml_lib.qoa4ml.util.amqp_client import Amqp_Client + +###################################################################### + + +class LSTM_Prediction_Client: + def __init__(self, configuration): + # Connect to RabbitMQ host + self.broker_info = configuration["broker_service"] + self.ml_service = configuration["ml_service"] + self.qoa_info = configuration["qoa_service"] + self.normalize = configuration["data_normalize"] + + self.amqp_client = Amqp_Client( + self, self.broker_info, self.ml_service, log=True + ) + self.sub_thread = threading.Thread(target=self.amqp_client.start) + + #################### Declare the QoA Object ############################### + self.qoa_client = Qoa_Client(self.qoa_info, self.broker_info) + self.metrices = self.qoa_client.getMetric() + ########################################################################### + + # Check if the response is available + def message_processing(self, ch, method, props, body): + predict_value = json.loads(str(body.decode("utf-8"))) + + pre_val = self.denormalize(predict_value["LSTM"]) + dict_predicted = {"LSTM": pre_val} + # calculate accuracy + accuracy = ( + 1 + - abs( + (predict_value["LSTM"] - float(predict_value["norm_value"])) + / float(predict_value["norm_value"]) + ) + ) * 100 + if accuracy < 0: + accuracy = 0 + # calculate response time + response_time = time.time() - predict_value["start_time"] + # return prediction analysis + self.ml_response = { + "Prediction": dict_predicted, + "ResponseTime": response_time, + "Accuracy": accuracy, + } + self.print_result(self.ml_response) + ####################### SEND THE QOA4ML REPORT ######################### + # Sending QoA report + self.metrices["Accuracy"].set(self.ml_response["Accuracy"]) + self.metrices["ResponseTime"].set(self.ml_response["ResponseTime"]) + metrices = {} + for metric in self.metrices: + metrices = {**metrices, **self.metrices[metric].to_dict()} + self.qoa_client.send_report(metrices) + ######################################################################## + + # Send prediction request + def send_request(self, dict_mess): + self.response = None + # init an uniques id for each request + corr_id = str(uuid.uuid4()) + # set routing key when send data to the Exchange + routing_key = self.ml_service["out_routing_key"] + # load data to json object + # start calculate response time + start_time = time.time() + json_mess = { + "norm_value": float(dict_mess["norm_value"]), + "norm_1": float(dict_mess["norm_1"]), + "norm_2": float(dict_mess["norm_2"]), + "norm_3": float(dict_mess["norm_3"]), + "norm_4": float(dict_mess["norm_4"]), + "norm_5": float(dict_mess["norm_5"]), + "norm_6": float(dict_mess["norm_6"]), + "start_time": start_time, + } + body_mess = json.dumps(json_mess) + + self.amqp_client.send_data(routing_key, body_mess, corr_id) + print("Data sent") + + def publish_message(self, file): + raw_dataset = pd.read_csv(file) + raw_dataset = raw_dataset.astype( + { + "norm_value": "float", + "norm_1": "float", + "norm_2": "float", + "norm_3": "float", + "norm_4": "float", + "norm_5": "float", + "norm_6": "float", + } + ) + + print("Sending request...") + for index, line in raw_dataset.iterrows(): + time.sleep(random.uniform(0.2, 1)) + # Parse data + dict_mess = { + "norm_value": float(line["norm_value"]), + "norm_1": float(line["norm_1"]), + "norm_2": float(line["norm_2"]), + "norm_3": float(line["norm_3"]), + "norm_4": float(line["norm_4"]), + "norm_5": float(line["norm_5"]), + "norm_6": float(line["norm_6"]), + } + # print("Sending request: {}".format(line)) + # Publish data to a specific topic + self.send_request(dict_mess) + + time.sleep(0.2) + + def print_result(self, data): + prediction = "" + for key in data["Prediction"]: + prediction += "\n# {} : {} ".format(key, data["Prediction"][key]) + + prediction_to_str = f"""{'='*80} + # Prediction Client:{prediction} + # ResponseTime: {data["ResponseTime"]} + # Accuracy: {data["Accuracy"]} + {'='*80}""" + print(prediction_to_str.replace(" ", "")) + + def start(self): + self.qoa_client.start() + self.sub_thread.start() + + def denormalize(self, value): + return value * self.normalize["max"] + self.normalize["mean"] diff --git a/example/bts/bts_client/client_v0.0.3/client.json b/example/bts/bts_client/client_v0.0.3/client.json new file mode 100644 index 0000000..ef6dd0b --- /dev/null +++ b/example/bts/bts_client/client_v0.0.3/client.json @@ -0,0 +1,54 @@ +{ + "broker_service": { + "broker": "AMQP", + "url": "localhost" + }, + "data_normalize": { + "max": 12.95969626, + "mean": 12.04030374 + }, + "ml_service": { + "exchange_name": "lstm_bts", + "exchange_type": "topic", + "in_queue": "out_lstm", + "in_routing_key": "lstm.response.user2", + "out_queue": "in_lstm", + "out_routing_key": "lstm.request.user2", + "roles": "client", + "user_id": "user2" + }, + "qoa_service": { + "client_info": { + "id": "user2", + "roles": "ml_user" + }, + "queue_info": { + "exchange_name": "qoa_topic", + "exchange_type": "topic", + "in_queue": "in_qoa_user2", + "in_routing_key": "qoa.response.user2", + "out_queue": "out_qoa_user2", + "out_routing_key": "qoa.report.user2", + "roles": "client", + "user_id": "qoa_user2" + }, + "service_info": { + "machinetypes": "small", + "metric": { + "Accuracy": { + "Default": 100, + "Description": "Accuracy", + "Type": "Gauge" + }, + "ResponseTime": { + "Default": 100, + "Description": "Service ResponseTime", + "Type": "Gauge" + } + }, + "service": "request" + }, + "service_name": "bts", + "url": "http://localhost:8181/v1/data/qoa4ml/bts/alarm/violation" + } +} diff --git a/example/bts/bts_client/client_v0.0.3/lstm_client.py b/example/bts/bts_client/client_v0.0.3/lstm_client.py new file mode 100644 index 0000000..e62e25b --- /dev/null +++ b/example/bts/bts_client/client_v0.0.3/lstm_client.py @@ -0,0 +1,23 @@ +import argparse +import json +import time + +from LSTM_Prediction_Client import LSTM_Prediction_Client + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Sent request to Rabbit broker") + parser.add_argument("--file", default="../data/1161114002_122_norm.csv") + parser.add_argument( + "--clientInfo", help="client information file", default="./client.json" + ) + args = parser.parse_args() + + # prometheus_client.start_http_server(int(args.prometheus)) + # Define a client for publising data + with open(args.clientInfo) as f: + client_conf = json.load(f) + lstm_predition_client = LSTM_Prediction_Client(client_conf) + lstm_predition_client.start() + while 1: + lstm_predition_client.publish_message(args.file) + time.sleep(1) diff --git a/example/bts/bts_client/lstm_rest_client.py b/example/bts/bts_client/lstm_rest_client.py new file mode 100644 index 0000000..3b2fc5d --- /dev/null +++ b/example/bts/bts_client/lstm_rest_client.py @@ -0,0 +1,132 @@ +import argparse +import json +import random +import time + +import pandas as pd +import requests +from qoa4ml import qoaUtils as qoa_utils +from qoa4ml.qoa_client import Qoa_Client + +headers = {"Content-Type": "application/json"} + + +def denormalize(value): + return value * data_normalize["max"] + data_normalize["mean"] + + +if __name__ == "__main__": + # Load configuration + parser = argparse.ArgumentParser(description="simple bts rest client") + parser.add_argument("--config", default="./client.json") + args = parser.parse_args() + client_config = qoa_utils.load_config(args.config) + ml_config = client_config["ml_service"] + data_normalize = client_config["data_normalize"] + + # Load ML service configuration + file = ml_config["file"] + ml_serving_url = ml_config["url"] + "/predict" + + ############################################### INIT QOA CLIENT ################################################################## + qoa_config = client_config["qoa_service"] + qoa_client = Qoa_Client(qoa_config["client_info"], qoa_config["registration"]) + #################################################################################################################################### + + # Read data + raw_dataset = pd.read_csv(file) + raw_dataset = raw_dataset.astype( + { + "norm_value": "float", + "norm_1": "float", + "norm_2": "float", + "norm_3": "float", + "norm_4": "float", + "norm_5": "float", + "norm_6": "float", + } + ) + print("Sending request...") + error = 0 + for index, line in raw_dataset.iterrows(): + time.sleep(random.uniform(0.2, 1)) + # Parse data + dict_mess = { + "norm_value": float(line["norm_value"]), + "norm_1": float(line["norm_1"]), + "norm_2": float(line["norm_2"]), + "norm_3": float(line["norm_3"]), + "norm_4": float(line["norm_4"]), + "norm_5": float(line["norm_5"]), + "norm_6": float(line["norm_6"]), + } + # print("Sending request: {}".format(line)) + # Publish data to a specific topi + start_time = time.time() + json_mess = { + "model": "LSTM", + "data": { + "norm_value": float(dict_mess["norm_value"]), + "norm_1": float(dict_mess["norm_1"]), + "norm_2": float(dict_mess["norm_2"]), + "norm_3": float(dict_mess["norm_3"]), + "norm_4": float(dict_mess["norm_4"]), + "norm_5": float(dict_mess["norm_5"]), + "norm_6": float(dict_mess["norm_6"]), + "start_time": start_time, + }, + } + # Start qoa timer for calculating response time + qoa_client.timer() + + response = requests.request( + "POST", ml_serving_url, headers=headers, data=json.dumps(json_mess) + ) + # Response_time is already report by calling timer 2nd time + response_time = qoa_client.timer() + + dict_response = response.json() + if "result" in dict_response: + predict_value = dict_response["result"] + print(dict_response) + if isinstance(predict_value, dict): + if "LSTM" in predict_value: + pre_val = denormalize(predict_value["LSTM"]) + inference_id = predict_value["inference_id"] + dict_predicted = {"LSTM": pre_val} + # calculate accuracy + accuracy = ( + 1 + - abs( + (predict_value["LSTM"] - float(predict_value["norm_value"])) + / float(predict_value["norm_value"]) + ) + ) * 100 + if accuracy < 0: + accuracy = 0 + # calculate response time + response_time = time.time() - predict_value["start_time"] + # return prediction analysis + ml_response = { + "Prediction": dict_predicted, + "ResponseTime": response_time, + "Accuracy": accuracy, + } + print(ml_response) + print(predict_value) + else: + print(dict_response) + + ####################### SEND THE QOA4ML REPORT ######################### + if "accuracy" in locals(): + print(accuracy) + qoa_client.inference_report( + value=pre_val, accuracy=accuracy, inference_id=inference_id + ) + else: + print("Error: ", error) + error += 1 + qoa_client.observeMetric("service_errors", error, service_quality=True) + qoa_report = qoa_client.get_report(submit=True) + print("--------------\nQoA Report: \n", qoa_report, "\n--------------") + ######################################################################## diff --git a/example/bts/bts_server/command.json b/example/bts/bts_server/command.json new file mode 100644 index 0000000..27a46e3 --- /dev/null +++ b/example/bts/bts_server/command.json @@ -0,0 +1,14 @@ +{ + "client_info": { + "id": "aaltosea1", + "roles": "ml_provider" + }, + "command": "CREATE", + "model": { + "name": "LSTM" + }, + "service": { + "metric": "power_grid", + "name": "PowerGrid Prediction" + } +} diff --git a/example/bts/bts_server/predictionServerV1.py b/example/bts/bts_server/predictionServerV1.py new file mode 100644 index 0000000..976467c --- /dev/null +++ b/example/bts/bts_server/predictionServerV1.py @@ -0,0 +1,123 @@ +import argparse +import time + +import numpy as np +from flask import Flask, request +from predictionService.powerGrid.ML_Loader import ML_Loader + + +class LSTM_Prediction_PlainServer: + def __init__(self, configuration): + # Init the queue for ML request and load the ML model + self.model_info = configuration["model"] + self.normalize = configuration["data_normalize"] + self.model = ML_Loader(self.model_info) + + def predict(self, payload): + # start calculate response time + start_time = time.time() + # load json message + predict_value = payload + norm_1 = float(predict_value["norm_1"]) + norm_2 = float(predict_value["norm_2"]) + norm_3 = float(predict_value["norm_3"]) + norm_4 = float(predict_value["norm_4"]) + norm_5 = float(predict_value["norm_5"]) + norm_6 = float(predict_value["norm_6"]) + pas_series = np.array( + [[norm_1], [norm_2], [norm_3], [norm_4], [norm_5], [norm_6]] + ) + pas_series = np.array(pas_series)[np.newaxis, :, :] + # Making prediciton using loader + result = self.model.prediction(pas_series) + result = result.reshape(result.shape[1], result.shape[2]) + # Load the result into json format + response = {"LSTM": float(result[0])} + self.print_result(response) + predict_value["LSTM"] = response["LSTM"] + return predict_value + + def print_result(self, data): + prediction = "" + for key in data: + prediction += f"\n# {key} : {data[key]} " + + prediction_to_str = f"""{'='*40} + # Prediction Server:{prediction} + {'='*40}""" + print(prediction_to_str.replace(" ", "")) + + +app = Flask(__name__) +# for storing service +service_dict = {} + + +@app.route("/") +def hello(): + return {"msg": "This is BTS Plain Server that you can use to test "} + + +@app.route("/create_service", methods=["POST"]) +def create_service(): + req_data = request.get_json() + if req_data["model"] != None: + model = req_data["model"] + if model["name"] == "LSTM": + new_service = LSTM_Prediction_PlainServer(req_data) + service_dict["LSTM"] = new_service + new_service.start() + pass + return f"the data is {req_data}" + + +@app.route("/command", methods=["POST"]) +def execute_command(): + req_data = request.get_json() + if req_data["command"] != None: + command = req_data["command"] + if command == "START": + if req_data["model"] != None: + model_name = req_data["model"]["name"] + if model_name not in service_dict.keys(): + if req_data["model"]["name"] == "LSTM": + req_service = LSTM_Prediction_PlainServer(req_data) + service_dict["LSTM"] = req_service + status = f"{model_name} was started" + else: + status = f"{model_name} was not found" + else: + status = f"{model_name} has been already started" + else: + status = f"{model_name} was not found" + elif command == "STOP": + model_name = req_data["model"]["name"] + if model_name in service_dict.keys(): + service_dict.pop(model_name) + status = f"{model_name} was stopped" + else: + status = f"{model_name} was not found" + else: + status = f"{command} is not supported" + else: + status = "command is empty" + resp_info = {"status": status, "msg": f"the data is {req_data}"} + return resp_info + + +@app.route("/predict", methods=["POST"]) +def predict(): + req_data = request.get_json() + service = service_dict["LSTM"] + result = service.predict(req_data) + return result + + +if __name__ == "__main__": + # Parse arguments + parser = argparse.ArgumentParser() + parser.add_argument("-p", "--port", help="Port of the service") + + args = parser.parse_args() + port = int(args.port) + app.run(debug=True, port=port) diff --git a/example/bts/bts_server/predictionServerV2.py b/example/bts/bts_server/predictionServerV2.py new file mode 100644 index 0000000..e33218e --- /dev/null +++ b/example/bts/bts_server/predictionServerV2.py @@ -0,0 +1,132 @@ +import argparse +import sys +import traceback + +from flask import Flask, request +from predictionService.powerGrid.LSTM_Prediction import LSTM_Prediction_Service + +app = Flask(__name__) +# for storing service +service_dict = {} + + +@app.route("/") +def hello(): + return {"msg": "This is BTS Plain Server that you can use to test"} + + +# command: creating/removing service +@app.route("/command", methods=["POST"]) +def execute_command(): + """ + Command schema: + { + "client_info": { + "id": "aaltosea1", + "roles": "ml_provider" + }, + "model": { + "name": "LSTM" + }, + "command": "CREATE" + } + """ + try: + req_data = request.get_json() + # TO DO: + # Check client info + + # Command processing + if req_data["command"] != None: + command = req_data["command"] + # Creat new service + if command == "CREATE": + if req_data["model"] != None: + model_name = req_data["model"]["name"] + if model_name not in service_dict.keys(): + if req_data["model"]["name"] == "LSTM": + # Create LSTM prediction service + req_service = LSTM_Prediction_Service() + service_dict["LSTM"] = req_service + status = f"{model_name} was created" + else: + status = f"{model_name} was not found" + else: + status = f"{model_name} has been already created" + else: + status = "model must be specified" + # Remove service + elif command == "REMOVE": + model_name = req_data["model"]["name"] + if model_name in service_dict.keys(): + service_dict.pop(model_name) + status = f"{model_name} was removed" + else: + status = f"{model_name} was not found" + else: + status = f"{command} is not supported" + else: + status = "command is empty" + + # Exception tracing + except Exception as e: + print(f"[ERROR] - Error {type(e)} in execute_command: {e.__traceback__}") + traceback.print_exception(*sys.exc_info()) + status = "error occured" + resp_info = {"status": status, "msg": f"the data is {req_data}"} + return resp_info + + +# command: inference service +@app.route("/predict", methods=["POST"]) +def predict(): + """ + Prediction request schema: + + { + "model": "LSTM", + "data":{ <@request_data> } + } + """ + try: + req_data = request.get_json() + if req_data["model"] != None: + model = req_data["model"] + if model in service_dict: + service = service_dict[model] + print(service) + if req_data["data"] != None: + result = service.predict(req_data["data"]) + status = "predict success" + else: + status = "request data not found" + result = "False" + else: + status = "request model not found" + result = "False" + else: + status = "model name not found" + result = "False" + # Exception tracing + except Exception as e: + print(f"[ERROR] - Error {type(e)} in execute_command: {e.__traceback__}") + traceback.print_exception(*sys.exc_info()) + status = "error occured" + + # Response + resp_info = { + "status": status, + "msg": f"the data is {req_data}", + "result": result, + } + return resp_info + + +if __name__ == "__main__": + # Parse arguments + parser = argparse.ArgumentParser() + parser.add_argument("-p", "--port", help="Port of the service") + + args = parser.parse_args() + port = int(args.port) + app.run(debug=True, port=port) diff --git a/example/bts/bts_server/predictionService/powerGrid/LSTM_Prediction.py b/example/bts/bts_server/predictionService/powerGrid/LSTM_Prediction.py new file mode 100644 index 0000000..a553862 --- /dev/null +++ b/example/bts/bts_server/predictionService/powerGrid/LSTM_Prediction.py @@ -0,0 +1,98 @@ +import os + +import numpy as np +from qoa4ml import probes as qoa_probes +from qoa4ml import qoaUtils as qoa_utils +from qoa4ml.qoa_client import Qoa_Client + +from .ML_Loader import ML_Loader + + +class LSTM_Prediction_Service: + def __init__(self): + # init base directory + self.base_dir = os.environ.get("LSTM_BASE_DIR") + if not self.base_dir: + print("LSTM_BASE_DIR is not defined") + self.base_dir = qoa_utils.get_file_dir(__file__) + print("LSTM_BASE_DIR is set to: ", self.base_dir) + self.base_dir = str(self.base_dir) + + # Read service config by default + self.config = qoa_utils.load_config(self.base_dir + "/config/lstm.json") + print(self.config) + + # Init the queue for ML request and load the ML model + self.model_info = self.config["model"] + + ############################################### INIT QOA CLIENT ################################################################## + self.qoa_config = self.config["qoa_service"] + self.qoa_client = Qoa_Client( + self.qoa_config["client_info"], self.qoa_config["registration"] + ) + #################################################################################################################################### + + # data normalize config + self.normalize = self.config["data_normalize"] + + # Load ML model + self.model = ML_Loader(self.model_info, self.base_dir) + + def ML_prediction(self, pas_series): + # Making prediciton using loader + result = self.model.prediction(pas_series) + result = result.reshape(result.shape[1], result.shape[2]) + # Load the result into json format + data_js = { + "LSTM": float(result[0]), + } + self.print_result(data_js) + return data_js + + def predict(self, payload): + # Start qoa timer for calculating response time + self.qoa_client.timer() + + # Load json message + norm_1 = float(payload["norm_1"]) + norm_2 = float(payload["norm_2"]) + norm_3 = float(payload["norm_3"]) + norm_4 = float(payload["norm_4"]) + norm_5 = float(payload["norm_5"]) + norm_6 = float(payload["norm_6"]) + pas_series = np.array( + [[norm_1], [norm_2], [norm_3], [norm_4], [norm_5], [norm_6]] + ) + pas_series = np.array(pas_series)[np.newaxis, :, :] + + # Call back the ML prediction server for making prediction + response = self.ML_prediction(pas_series) + payload["LSTM"] = response["LSTM"] + + ####################### SEND THE QOA4ML REPORT ######################### + # Response_time is already report by calling timer 2nd time + response_time = self.qoa_client.timer() + # Estimate data accuracy using qoa4ml library + data_accuracy = qoa_probes.eva_none(pas_series) + # Add data accuracy to QoA report + self.qoa_client.observeMetric("data_accuracy", data_accuracy, data_quality=True) + # Report prediction + inference_id = self.qoa_client.inference_report(value=response["LSTM"]) + # Get QoA report - submit=True to submit report to QoA Observability server + qoa_report = self.qoa_client.get_report(submit=True) + print("--------------\nQoA Report: \n", qoa_report, "\n--------------") + ######################################################################## + + payload["inference_id"] = inference_id + self.print_result(response) + return payload + + def print_result(self, data): + prediction = "" + for key in data: + prediction += f"\n# {key} : {data[key]} " + + prediction_to_str = f"""{'='*40} + # Prediction Server:{prediction} + {'='*40}""" + print(prediction_to_str.replace(" ", "")) diff --git a/example/bts/bts_server/predictionService/powerGrid/ML_Loader.py b/example/bts/bts_server/predictionService/powerGrid/ML_Loader.py new file mode 100644 index 0000000..f0945fa --- /dev/null +++ b/example/bts/bts_server/predictionService/powerGrid/ML_Loader.py @@ -0,0 +1,31 @@ +import pathlib + +import numpy as np + +# import tflite_runtime.interpreter as tflite +import tensorflow.lite as tflite + + +def get_current_dir(): + current_dir = pathlib.Path(__file__).parent.resolve() + return str(current_dir) + + +class ML_Loader: + def __init__(self, model_info, base_dir=None): + if not base_dir: + base_dir = get_current_dir() + # Init loader by loading model into the object + self.interpreter = tflite.Interpreter(base_dir + model_info["path"]) + self.interpreter.allocate_tensors() + self.input_details = self.interpreter.get_input_details() + self.output_details = self.interpreter.get_output_details() + print("Load LSTM model success") + + def prediction(self, pas_series): + # return self.LSTM_model.predict(pas_series, batch_size=1, verbose=0) + input_var = np.array(pas_series, dtype="f") + self.interpreter.set_tensor(self.input_details[0]["index"], input_var) + self.interpreter.invoke() + y = self.interpreter.get_tensor(self.output_details[0]["index"]) + return y diff --git a/example/bts/bts_server/predictionService/powerGrid/config/lstm.json b/example/bts/bts_server/predictionService/powerGrid/config/lstm.json new file mode 100644 index 0000000..ce11aca --- /dev/null +++ b/example/bts/bts_server/predictionService/powerGrid/config/lstm.json @@ -0,0 +1,22 @@ +{ + "data_normalize": { + "max": 12.95969626, + "mean": 12.04030374, + "threshold": 15 + }, + "model": { + "name": "LSTM", + "path": "/exported_models/tflite_model/LSTM_single_series.tflite" + }, + "qoa_service": { + "client_info": { + "application_name": "bts", + "instance_name": "LSTM Prediction Raps 01", + "method": "LSTM", + "roles": "server", + "stage_id": "Inference", + "user_id": "aaltosea1" + }, + "registration": "http://127.0.0.1:5001/registration" + } +} diff --git a/example/bts/bts_server/predictionService/powerGrid/exported_models/LSTM_single_series/saved_model.pb b/example/bts/bts_server/predictionService/powerGrid/exported_models/LSTM_single_series/saved_model.pb new file mode 100644 index 0000000000000000000000000000000000000000..5c01b747bc6211f54404f8196dcb9686ed1f74dd GIT binary patch literal 1673446 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

pk=PyfLU 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 Cl5=_h literal 0 HcmV?d00001 diff --git a/example/bts/bts_server/submit_command.sh b/example/bts/bts_server/submit_command.sh new file mode 100755 index 0000000..28bc74f --- /dev/null +++ b/example/bts/bts_server/submit_command.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +curl --location --request POST '127.0.0.1:5000/command' -H 'Content-Type: application/json' -d @command.json diff --git a/example/bts/data/1161114002_122_norm.csv b/example/bts/data/1161114002_122_norm.csv new file mode 100644 index 0000000..2a302d9 --- /dev/null +++ b/example/bts/data/1161114002_122_norm.csv @@ -0,0 +1,3419 @@ +norm_value,norm_1,norm_2,norm_3,norm_4,norm_5,norm_6 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279 +-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.4660837427322306,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +-0.1574345337359715,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363 +-0.2345968359850363,-0.1574345337359715,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.31175913823410106 +-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658 +-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.31175913823410106,-0.3889214404831658 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.31175913823410106 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363 +-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.4660837427322306,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674 +-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715 +-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106 +-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.2345968359850363 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658 +0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.3889214404831658,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.4660837427322306,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041 +-0.31175913823410106,-0.4660837427322306,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365 +-0.3889214404831658,-0.31175913823410106,-0.4660837427322306,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.1574345337359715 +-0.2345968359850363,-0.3889214404831658,-0.31175913823410106,-0.4660837427322306,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363 +-0.1574345337359715,-0.2345968359850363,-0.3889214404831658,-0.31175913823410106,-0.4660837427322306,-0.31175913823410106,-0.3889214404831658 +-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.3889214404831658,-0.31175913823410106,-0.4660837427322306,-0.31175913823410106 +-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.3889214404831658,-0.31175913823410106,-0.4660837427322306 +0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.3889214404831658,-0.31175913823410106 +-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.3889214404831658 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363 +-0.2345968359850363,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715 +-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.003109929237841972 +-0.31175913823410106,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.08027223148690674 +-0.3889214404831658,-0.31175913823410106,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,-0.003109929237841972 +-0.003109929237841972,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674 +-0.08027223148690674,-0.003109929237841972,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.1574345337359715,-0.2345968359850363 +0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.1574345337359715 +-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106 +-0.1574345337359715,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.27317798710956864,-0.3889214404831658 +-0.08027223148690674,-0.1574345337359715,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.27317798710956864 +-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.003109929237841972 +-0.31175913823410106,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,-0.003109929237841972,0.07405237301122279,-0.08027223148690674 +-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,-0.003109929237841972,0.07405237301122279 +-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,-0.003109929237841972 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.08027223148690674 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.4660837427322306,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.3889214404831658,-0.4660837427322306,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674 +-0.1574345337359715,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715 +-0.2345968359850363,-0.1574345337359715,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3503402893586334,-0.27317798710956864 +-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3503402893586334 +-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.31175913823410106,-0.3889214404831658 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.31175913823410106 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.3889214404831658,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.4660837427322306,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.3889214404831658,-0.4660837427322306,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.1574345337359715 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.31175913823410106,-0.3889214404831658 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.31175913823410106 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.3503402893586334,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.27317798710956864,-0.3503402893586334,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.4275025916076982,-0.27317798710956864,-0.3503402893586334,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279 +-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.3503402893586334,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.3503402893586334,-0.19601568486050389,-0.11885338261143913 +-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.3503402893586334,-0.19601568486050389 +-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.3503402893586334 +0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.1574345337359715 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +-0.2345968359850363,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.3503402893586334,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.4275025916076982,-0.3503402893586334,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,0.03547122188669041 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.1574345337359715,-0.2345968359850363 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.1574345337359715 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279 +-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972 +-0.2345968359850363,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389 +-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864 +-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982 +0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3503402893586334 +-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363 +-0.27317798710956864,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715 +-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.003109929237841972 +-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.08027223148690674 +-0.4275025916076982,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.003109929237841972,0.07405237301122279 +-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.003109929237841972 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.19601568486050389 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.2345968359850363,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,0.07405237301122279 +-0.31175913823410106,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.3889214404831658,-0.31175913823410106,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,-0.003109929237841972 +-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.1574345337359715,-0.2345968359850363 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.1574345337359715 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658 +0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +-0.11885338261143913,0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.041691080362374365,-0.11885338261143913,0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.19601568486050389,-0.041691080362374365,-0.11885338261143913,0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.27317798710956864,-0.19601568486050389,-0.041691080362374365,-0.11885338261143913,0.07405237301122279,-0.003109929237841972,0.07405237301122279 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.041691080362374365,-0.11885338261143913,0.07405237301122279,-0.003109929237841972 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.041691080362374365,-0.11885338261143913,0.07405237301122279 +-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.041691080362374365,-0.11885338261143913 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.041691080362374365 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334 +-0.11885338261143913,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,-0.08027223148690674 +-0.2345968359850363,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972 +-0.31175913823410106,-0.2345968359850363,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.1574345337359715,-0.31175913823410106,-0.2345968359850363,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.2345968359850363,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.2345968359850363,-0.4275025916076982,-0.3503402893586334 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.2345968359850363,-0.4275025916076982 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.2345968359850363 +-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106 +-0.27317798710956864,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.4660837427322306,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.003109929237841972,0.07405237301122279 +-0.3889214404831658,-0.4660837427322306,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.003109929237841972 +-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3503402893586334,-0.19601568486050389 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3503402893586334 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +-0.19601568486050389,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +-0.11885338261143913,-0.19601568486050389,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.3503402893586334,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.003109929237841972,0.07405237301122279 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.003109929237841972 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.11885338261143913 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +-0.1574345337359715,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +-0.08027223148690674,-0.1574345337359715,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +-0.31175913823410106,-0.08027223148690674,-0.1574345337359715,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +-0.2345968359850363,-0.31175913823410106,-0.08027223148690674,-0.1574345337359715,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.08027223148690674,-0.1574345337359715,0.03547122188669041,-0.041691080362374365 +-0.27317798710956864,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.08027223148690674,-0.1574345337359715,0.03547122188669041 +-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.08027223148690674,-0.1574345337359715 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.08027223148690674 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.2345968359850363 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658 +0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041 +-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334 +0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674 +-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.1574345337359715 +-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.4660837427322306,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.31175913823410106,-0.4660837427322306,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674 +-0.3889214404831658,-0.31175913823410106,-0.4660837427322306,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715 +-0.2345968359850363,-0.3889214404831658,-0.31175913823410106,-0.4660837427322306,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106 +-0.1574345337359715,-0.2345968359850363,-0.3889214404831658,-0.31175913823410106,-0.4660837427322306,-0.3889214404831658,-0.2345968359850363 +-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.3889214404831658,-0.31175913823410106,-0.4660837427322306,-0.3889214404831658 +-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.3889214404831658,-0.31175913823410106,-0.4660837427322306 +0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.3889214404831658,-0.31175913823410106 +-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.3889214404831658 +-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363 +-0.27317798710956864,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715 +-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.003109929237841972 +-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.08027223148690674 +-0.4275025916076982,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.003109929237841972,0.07405237301122279 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.003109929237841972 +-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913 +-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.19601568486050389 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.27317798710956864,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.3503402893586334,-0.27317798710956864,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.19601568486050389,-0.3503402893586334,-0.27317798710956864,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715 +-0.11885338261143913,-0.19601568486050389,-0.3503402893586334,-0.27317798710956864,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.3503402893586334,-0.27317798710956864,-0.4275025916076982,-0.3503402893586334 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.3503402893586334,-0.27317798710956864,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.3503402893586334,-0.27317798710956864 +0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.3503402893586334 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.4275025916076982,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.31175913823410106 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.27317798710956864,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.4275025916076982,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.041691080362374365,0.03547122188669041 +-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.041691080362374365 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913 +-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864 +-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.19601568486050389 +-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334 +0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674 +-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.1574345337359715 +-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674 +-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715 +-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334 +0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363 +0.3055392797584171,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674 +0.3827015820074819,0.3055392797584171,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715 +0.4598638842565466,0.3827015820074819,0.3055392797584171,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +0.5370261865056114,0.4598638842565466,0.3827015820074819,0.3055392797584171,0.2283769775093523,0.15121467526028756,0.07405237301122279 +0.6141884887546761,0.5370261865056114,0.4598638842565466,0.3827015820074819,0.3055392797584171,0.2283769775093523,0.15121467526028756 +0.5370261865056114,0.6141884887546761,0.5370261865056114,0.4598638842565466,0.3827015820074819,0.3055392797584171,0.2283769775093523 +0.4212827331320143,0.5370261865056114,0.6141884887546761,0.5370261865056114,0.4598638842565466,0.3827015820074819,0.3055392797584171 +0.3441204308829495,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.5370261865056114,0.4598638842565466,0.3827015820074819 +0.18979582638481995,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.5370261865056114,0.4598638842565466 +0.26695812863388474,0.18979582638481995,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.5370261865056114 +0.11263352413575517,0.26695812863388474,0.18979582638481995,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.6141884887546761 +0.03547122188669041,0.11263352413575517,0.26695812863388474,0.18979582638481995,0.3441204308829495,0.4212827331320143,0.5370261865056114 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.26695812863388474,0.18979582638481995,0.3441204308829495,0.4212827331320143 +-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.26695812863388474,0.18979582638481995,0.3441204308829495 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.26695812863388474,0.18979582638481995 +-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.26695812863388474 +-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041 +-0.1574345337359715,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913 +0.11263352413575517,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389 +-0.003109929237841972,0.11263352413575517,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106 +0.2283769775093523,-0.003109929237841972,0.11263352413575517,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.3889214404831658 +0.3055392797584171,0.2283769775093523,-0.003109929237841972,0.11263352413575517,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864 +0.3827015820074819,0.3055392797584171,0.2283769775093523,-0.003109929237841972,0.11263352413575517,-0.08027223148690674,-0.1574345337359715 +0.4598638842565466,0.3827015820074819,0.3055392797584171,0.2283769775093523,-0.003109929237841972,0.11263352413575517,-0.08027223148690674 +0.5370261865056114,0.4598638842565466,0.3827015820074819,0.3055392797584171,0.2283769775093523,-0.003109929237841972,0.11263352413575517 +0.6141884887546761,0.5370261865056114,0.4598638842565466,0.3827015820074819,0.3055392797584171,0.2283769775093523,-0.003109929237841972 +0.5370261865056114,0.6141884887546761,0.5370261865056114,0.4598638842565466,0.3827015820074819,0.3055392797584171,0.2283769775093523 +0.6141884887546761,0.5370261865056114,0.6141884887546761,0.5370261865056114,0.4598638842565466,0.3827015820074819,0.3055392797584171 +0.4212827331320143,0.6141884887546761,0.5370261865056114,0.6141884887546761,0.5370261865056114,0.4598638842565466,0.3827015820074819 +0.498445035381079,0.4212827331320143,0.6141884887546761,0.5370261865056114,0.6141884887546761,0.5370261865056114,0.4598638842565466 +0.3441204308829495,0.498445035381079,0.4212827331320143,0.6141884887546761,0.5370261865056114,0.6141884887546761,0.5370261865056114 +0.26695812863388474,0.3441204308829495,0.498445035381079,0.4212827331320143,0.6141884887546761,0.5370261865056114,0.6141884887546761 +0.18979582638481995,0.26695812863388474,0.3441204308829495,0.498445035381079,0.4212827331320143,0.6141884887546761,0.5370261865056114 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.3441204308829495,0.498445035381079,0.4212827331320143,0.6141884887546761 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.3441204308829495,0.498445035381079,0.4212827331320143 +-0.1574345337359715,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.3441204308829495,0.498445035381079 +-0.041691080362374365,-0.1574345337359715,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.3441204308829495 +-0.2345968359850363,-0.041691080362374365,-0.1574345337359715,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.31175913823410106,-0.2345968359850363,-0.041691080362374365,-0.1574345337359715,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.041691080362374365,-0.1574345337359715,0.03547122188669041,0.11263352413575517 +-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.041691080362374365,-0.1574345337359715,0.03547122188669041 +-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.041691080362374365,-0.1574345337359715 +-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.041691080362374365 +-0.003109929237841972,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363 +0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658 +0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106 +-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.19601568486050389 +-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.11885338261143913 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.3503402893586334,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.27317798710956864,-0.3503402893586334,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756 +-0.27317798710956864,-0.27317798710956864,-0.3503402893586334,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279 +-0.1574345337359715,-0.27317798710956864,-0.27317798710956864,-0.3503402893586334,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.27317798710956864,-0.3503402893586334,-0.19601568486050389,-0.11885338261143913 +0.18979582638481995,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.27317798710956864,-0.3503402893586334,-0.19601568486050389 +0.07405237301122279,0.18979582638481995,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.27317798710956864,-0.3503402893586334 +0.3055392797584171,0.07405237301122279,0.18979582638481995,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.27317798710956864 +0.18979582638481995,0.3055392797584171,0.07405237301122279,0.18979582638481995,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864 +0.07405237301122279,0.18979582638481995,0.3055392797584171,0.07405237301122279,0.18979582638481995,-0.041691080362374365,-0.1574345337359715 +0.15121467526028756,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.07405237301122279,0.18979582638481995,-0.041691080362374365 +0.26695812863388474,0.15121467526028756,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.07405237301122279,0.18979582638481995 +0.11263352413575517,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.07405237301122279 +0.26695812863388474,0.11263352413575517,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.18979582638481995,0.3055392797584171 +0.15121467526028756,0.26695812863388474,0.11263352413575517,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.18979582638481995 +0.07405237301122279,0.15121467526028756,0.26695812863388474,0.11263352413575517,0.26695812863388474,0.15121467526028756,0.07405237301122279 +0.15121467526028756,0.07405237301122279,0.15121467526028756,0.26695812863388474,0.11263352413575517,0.26695812863388474,0.15121467526028756 +0.26695812863388474,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.26695812863388474,0.11263352413575517,0.26695812863388474 +0.18979582638481995,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.26695812863388474,0.11263352413575517 +0.07405237301122279,0.18979582638481995,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.26695812863388474 +0.15121467526028756,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.15121467526028756 +0.26695812863388474,0.15121467526028756,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.15121467526028756,0.07405237301122279 +0.15121467526028756,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.15121467526028756 +0.2283769775093523,0.15121467526028756,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.18979582638481995,0.26695812863388474 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.18979582638481995 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.26695812863388474,0.15121467526028756,0.07405237301122279 +0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.26695812863388474,0.15121467526028756 +0.26695812863388474,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.26695812863388474 +0.15121467526028756,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +0.26695812863388474,0.15121467526028756,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523 +0.15121467526028756,0.26695812863388474,0.15121467526028756,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.15121467526028756 +0.03547122188669041,0.15121467526028756,0.26695812863388474,0.15121467526028756,0.26695812863388474,0.15121467526028756,0.07405237301122279 +0.26695812863388474,0.03547122188669041,0.15121467526028756,0.26695812863388474,0.15121467526028756,0.26695812863388474,0.15121467526028756 +0.15121467526028756,0.26695812863388474,0.03547122188669041,0.15121467526028756,0.26695812863388474,0.15121467526028756,0.26695812863388474 +0.18979582638481995,0.15121467526028756,0.26695812863388474,0.03547122188669041,0.15121467526028756,0.26695812863388474,0.15121467526028756 +0.11263352413575517,0.18979582638481995,0.15121467526028756,0.26695812863388474,0.03547122188669041,0.15121467526028756,0.26695812863388474 +0.26695812863388474,0.11263352413575517,0.18979582638481995,0.15121467526028756,0.26695812863388474,0.03547122188669041,0.15121467526028756 +0.15121467526028756,0.26695812863388474,0.11263352413575517,0.18979582638481995,0.15121467526028756,0.26695812863388474,0.03547122188669041 +0.07405237301122279,0.15121467526028756,0.26695812863388474,0.11263352413575517,0.18979582638481995,0.15121467526028756,0.26695812863388474 +0.18979582638481995,0.07405237301122279,0.15121467526028756,0.26695812863388474,0.11263352413575517,0.18979582638481995,0.15121467526028756 +0.26695812863388474,0.18979582638481995,0.07405237301122279,0.15121467526028756,0.26695812863388474,0.11263352413575517,0.18979582638481995 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.07405237301122279,0.15121467526028756,0.26695812863388474,0.11263352413575517 +0.07405237301122279,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.07405237301122279,0.15121467526028756,0.26695812863388474 +0.18979582638481995,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.07405237301122279,0.15121467526028756 +0.26695812863388474,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.07405237301122279 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.18979582638481995 +0.26695812863388474,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.26695812863388474 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.07405237301122279,0.18979582638481995 +0.07405237301122279,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.07405237301122279 +-0.041691080362374365,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.1574345337359715,-0.041691080362374365,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.26695812863388474 +-0.041691080362374365,-0.1574345337359715,-0.041691080362374365,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.18979582638481995 +0.07405237301122279,-0.041691080362374365,-0.1574345337359715,-0.041691080362374365,0.07405237301122279,0.18979582638481995,0.26695812863388474 +-0.041691080362374365,0.07405237301122279,-0.041691080362374365,-0.1574345337359715,-0.041691080362374365,0.07405237301122279,0.18979582638481995 +-0.1574345337359715,-0.041691080362374365,0.07405237301122279,-0.041691080362374365,-0.1574345337359715,-0.041691080362374365,0.07405237301122279 +-0.041691080362374365,-0.1574345337359715,-0.041691080362374365,0.07405237301122279,-0.041691080362374365,-0.1574345337359715,-0.041691080362374365 +0.07405237301122279,-0.041691080362374365,-0.1574345337359715,-0.041691080362374365,0.07405237301122279,-0.041691080362374365,-0.1574345337359715 +-0.041691080362374365,0.07405237301122279,-0.041691080362374365,-0.1574345337359715,-0.041691080362374365,0.07405237301122279,-0.041691080362374365 +-0.1574345337359715,-0.041691080362374365,0.07405237301122279,-0.041691080362374365,-0.1574345337359715,-0.041691080362374365,0.07405237301122279 +-0.041691080362374365,-0.1574345337359715,-0.041691080362374365,0.07405237301122279,-0.041691080362374365,-0.1574345337359715,-0.041691080362374365 +-0.11885338261143913,-0.041691080362374365,-0.1574345337359715,-0.041691080362374365,0.07405237301122279,-0.041691080362374365,-0.1574345337359715 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,-0.1574345337359715,-0.041691080362374365,0.07405237301122279,-0.041691080362374365 +-0.11885338261143913,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,-0.1574345337359715,-0.041691080362374365,0.07405237301122279 +-0.003109929237841972,-0.11885338261143913,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,-0.1574345337359715,-0.041691080362374365 +-0.11885338261143913,-0.003109929237841972,-0.11885338261143913,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,-0.1574345337359715 +0.07405237301122279,-0.11885338261143913,-0.003109929237841972,-0.11885338261143913,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.003109929237841972,0.07405237301122279,-0.11885338261143913,-0.003109929237841972,-0.11885338261143913,-0.19601568486050389,-0.11885338261143913 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.11885338261143913,-0.003109929237841972,-0.11885338261143913,-0.19601568486050389 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.11885338261143913,-0.003109929237841972,-0.11885338261143913 +-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.11885338261143913,-0.003109929237841972 +-0.1574345337359715,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,-0.11885338261143913 +-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.1574345337359715,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674 +-0.1574345337359715,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,-0.1574345337359715 +-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674 +-0.1574345337359715,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.1574345337359715 +-0.08027223148690674,-0.1574345337359715,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674 +0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.1574345337359715 +-0.08027223148690674,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.041691080362374365,-0.1574345337359715 +-0.041691080362374365,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.041691080362374365 +0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,-0.08027223148690674,-0.1574345337359715 +-0.041691080362374365,0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,-0.08027223148690674 +-0.1574345337359715,-0.041691080362374365,0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.08027223148690674 +-0.11885338261143913,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,-0.041691080362374365,-0.1574345337359715 +-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,-0.041691080362374365 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041 +-0.19601568486050389,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365 +-0.08027223148690674,-0.19601568486050389,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.1574345337359715 +-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363 +-0.041691080362374365,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.1574345337359715,-0.041691080362374365,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.27317798710956864,-0.19601568486050389 +-0.27317798710956864,-0.1574345337359715,-0.041691080362374365,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.27317798710956864 +-0.3889214404831658,-0.27317798710956864,-0.1574345337359715,-0.041691080362374365,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389 +-0.27317798710956864,-0.3889214404831658,-0.27317798710956864,-0.1574345337359715,-0.041691080362374365,-0.19601568486050389,-0.08027223148690674 +-0.1574345337359715,-0.27317798710956864,-0.3889214404831658,-0.27317798710956864,-0.1574345337359715,-0.041691080362374365,-0.19601568486050389 +-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.3889214404831658,-0.27317798710956864,-0.1574345337359715,-0.041691080362374365 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.3889214404831658,-0.27317798710956864,-0.1574345337359715 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.3889214404831658,-0.27317798710956864 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.3889214404831658 +0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864 +-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756 +-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.041691080362374365,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363 +0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106 +0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658 +0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.31175913823410106 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389 +-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.11885338261143913 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041 +-0.2345968359850363,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.31175913823410106,-0.2345968359850363,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.1574345337359715,-0.31175913823410106,-0.2345968359850363,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.2345968359850363,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.2345968359850363,-0.4275025916076982,-0.3503402893586334 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.2345968359850363,-0.4275025916076982 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.2345968359850363 +-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106 +-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.4660837427322306,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279 +-0.3889214404831658,-0.4660837427322306,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972 +-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3503402893586334,-0.27317798710956864 +-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3503402893586334 +-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306 +0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106 +-0.19601568486050389,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363 +-0.11885338261143913,-0.19601568486050389,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674 +-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.1574345337359715 +-0.3889214404831658,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.4660837427322306,-0.3889214404831658,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.003109929237841972,0.07405237301122279 +-0.3503402893586334,-0.4660837427322306,-0.3889214404831658,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.003109929237841972 +-0.27317798710956864,-0.3503402893586334,-0.4660837427322306,-0.3889214404831658,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4660837427322306,-0.3889214404831658,-0.27317798710956864,-0.11885338261143913 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4660837427322306,-0.3889214404831658,-0.27317798710956864 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4660837427322306,-0.3889214404831658 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4660837427322306 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +-0.1574345337359715,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +-0.08027223148690674,-0.1574345337359715,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.31175913823410106,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,0.03547122188669041,0.11263352413575517 +-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,0.03547122188669041 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.08027223148690674 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363 +0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106 +-0.041691080362374365,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +-0.11885338261143913,-0.041691080362374365,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,-0.08027223148690674,-0.1574345337359715 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,-0.08027223148690674 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041 +-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.07405237301122279 +-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972 +-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279 +-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.2345968359850363,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3503402893586334 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.07405237301122279 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972 +-0.4660837427322306,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279 +-0.3889214404831658,-0.4660837427322306,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3503402893586334,-0.27317798710956864 +-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3503402893586334 +-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306 +0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106 +0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363 +-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674 +-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.1574345337359715 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.07405237301122279 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.003109929237841972,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.11885338261143913,-0.003109929237841972,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.07405237301122279,-0.11885338261143913,-0.003109929237841972,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.15121467526028756,0.07405237301122279,-0.11885338261143913,-0.003109929237841972,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.11885338261143913,-0.003109929237841972,-0.19601568486050389,-0.27317798710956864 +-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.11885338261143913,-0.003109929237841972,-0.19601568486050389 +-0.1574345337359715,-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.11885338261143913,-0.003109929237841972 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.11885338261143913 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.07405237301122279,0.15121467526028756 +-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.07405237301122279 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.4660837427322306,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.2345968359850363,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +-0.31175913823410106,-0.2345968359850363,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363 +-0.1574345337359715,-0.31175913823410106,-0.2345968359850363,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.31175913823410106 +-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.2345968359850363,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658 +0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.2345968359850363,-0.3889214404831658,-0.4660837427322306 +0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.2345968359850363,-0.3889214404831658 +0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.2345968359850363 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.08027223148690674 +-0.3889214404831658,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.4660837427322306,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.3503402893586334,-0.4660837427322306,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.19601568486050389,-0.3503402893586334,-0.4660837427322306,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.1574345337359715 +-0.11885338261143913,-0.19601568486050389,-0.3503402893586334,-0.4660837427322306,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363 +0.03547122188669041,-0.11885338261143913,-0.19601568486050389,-0.3503402893586334,-0.4660837427322306,-0.31175913823410106,-0.3889214404831658 +-0.041691080362374365,0.03547122188669041,-0.11885338261143913,-0.19601568486050389,-0.3503402893586334,-0.4660837427322306,-0.31175913823410106 +0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.11885338261143913,-0.19601568486050389,-0.3503402893586334,-0.4660837427322306 +0.03547122188669041,0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.11885338261143913,-0.19601568486050389,-0.3503402893586334 +0.11263352413575517,0.03547122188669041,0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.11885338261143913,-0.19601568486050389 +-0.003109929237841972,0.11263352413575517,0.03547122188669041,0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.11885338261143913 +-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.03547122188669041,0.11263352413575517,-0.041691080362374365,0.03547122188669041 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.03547122188669041,0.11263352413575517,-0.041691080362374365 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.03547122188669041,0.11263352413575517 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.03547122188669041 +-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517 +-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363 +0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106 +0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365 +0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913 +-0.08027223148690674,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.003109929237841972,-0.08027223148690674,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.27317798710956864,-0.003109929237841972,-0.08027223148690674,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.1574345337359715,-0.27317798710956864,-0.003109929237841972,-0.08027223148690674,0.11263352413575517,0.03547122188669041,0.11263352413575517 +-0.3503402893586334,-0.1574345337359715,-0.27317798710956864,-0.003109929237841972,-0.08027223148690674,0.11263352413575517,0.03547122188669041 +-0.4275025916076982,-0.3503402893586334,-0.1574345337359715,-0.27317798710956864,-0.003109929237841972,-0.08027223148690674,0.11263352413575517 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.1574345337359715,-0.27317798710956864,-0.003109929237841972,-0.08027223148690674 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.1574345337359715,-0.27317798710956864,-0.003109929237841972 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.1574345337359715,-0.27317798710956864 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.1574345337359715 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +0.11263352413575517,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.4660837427322306,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041 +-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365 +-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.31175913823410106 +0.03547122188669041,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658 +-0.041691080362374365,0.03547122188669041,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306 +0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +0.18979582638481995,0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.11263352413575517,0.18979582638481995,0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.1574345337359715,-0.2345968359850363 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.1574345337359715 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,-0.041691080362374365,0.03547122188669041 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,-0.041691080362374365 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.4275025916076982,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.2345968359850363,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.041691080362374365,-0.2345968359850363,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.1574345337359715 +-0.11885338261143913,-0.041691080362374365,-0.2345968359850363,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363 +0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.2345968359850363,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.2345968359850363,-0.31175913823410106,-0.3503402893586334 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.2345968359850363,-0.31175913823410106 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.2345968359850363 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365 +0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913 +0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517 +-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.4275025916076982,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.27317798710956864,-0.4275025916076982,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.3503402893586334,-0.27317798710956864,-0.4275025916076982,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674 +-0.11885338261143913,-0.3503402893586334,-0.27317798710956864,-0.4275025916076982,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715 +0.03547122188669041,-0.11885338261143913,-0.3503402893586334,-0.27317798710956864,-0.4275025916076982,-0.2345968359850363,-0.31175913823410106 +-0.041691080362374365,0.03547122188669041,-0.11885338261143913,-0.3503402893586334,-0.27317798710956864,-0.4275025916076982,-0.2345968359850363 +0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.11885338261143913,-0.3503402893586334,-0.27317798710956864,-0.4275025916076982 +0.18979582638481995,0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.11885338261143913,-0.3503402893586334,-0.27317798710956864 +0.11263352413575517,0.18979582638481995,0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.11885338261143913,-0.3503402893586334 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.11885338261143913 +0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,-0.041691080362374365,0.03547122188669041 +0.18979582638481995,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,-0.041691080362374365 +0.07405237301122279,0.18979582638481995,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.03547122188669041,0.11263352413575517 +-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517 +-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.18979582638481995 +-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279 +-0.11885338261143913,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972 +-0.19601568486050389,-0.11885338261143913,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913 +-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389 +0.07405237301122279,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106 +0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.27317798710956864,-0.3889214404831658 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.27317798710956864 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.19601568486050389 +0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365 +0.2283769775093523,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +0.3055392797584171,0.2283769775093523,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +0.3827015820074819,0.3055392797584171,0.2283769775093523,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523 +0.3055392797584171,0.3827015820074819,0.3055392797584171,0.2283769775093523,0.15121467526028756,0.07405237301122279,0.15121467526028756 +0.2283769775093523,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.2283769775093523,0.15121467526028756,0.07405237301122279 +0.15121467526028756,0.2283769775093523,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.2283769775093523,0.15121467526028756 +-0.041691080362374365,0.15121467526028756,0.2283769775093523,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.2283769775093523 +0.07405237301122279,-0.041691080362374365,0.15121467526028756,0.2283769775093523,0.3055392797584171,0.3827015820074819,0.3055392797584171 +-0.11885338261143913,0.07405237301122279,-0.041691080362374365,0.15121467526028756,0.2283769775093523,0.3055392797584171,0.3827015820074819 +-0.19601568486050389,-0.11885338261143913,0.07405237301122279,-0.041691080362374365,0.15121467526028756,0.2283769775093523,0.3055392797584171 +-0.08027223148690674,-0.19601568486050389,-0.11885338261143913,0.07405237301122279,-0.041691080362374365,0.15121467526028756,0.2283769775093523 +0.03547122188669041,-0.08027223148690674,-0.19601568486050389,-0.11885338261143913,0.07405237301122279,-0.041691080362374365,0.15121467526028756 +0.15121467526028756,0.03547122188669041,-0.08027223148690674,-0.19601568486050389,-0.11885338261143913,0.07405237301122279,-0.041691080362374365 +0.2283769775093523,0.15121467526028756,0.03547122188669041,-0.08027223148690674,-0.19601568486050389,-0.11885338261143913,0.07405237301122279 +0.4598638842565466,0.2283769775093523,0.15121467526028756,0.03547122188669041,-0.08027223148690674,-0.19601568486050389,-0.11885338261143913 +0.3441204308829495,0.4598638842565466,0.2283769775093523,0.15121467526028756,0.03547122188669041,-0.08027223148690674,-0.19601568486050389 +0.3055392797584171,0.3441204308829495,0.4598638842565466,0.2283769775093523,0.15121467526028756,0.03547122188669041,-0.08027223148690674 +0.4212827331320143,0.3055392797584171,0.3441204308829495,0.4598638842565466,0.2283769775093523,0.15121467526028756,0.03547122188669041 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.3441204308829495,0.4598638842565466,0.2283769775093523,0.15121467526028756 +0.2283769775093523,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.3441204308829495,0.4598638842565466,0.2283769775093523 +0.3055392797584171,0.2283769775093523,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.3441204308829495,0.4598638842565466 +0.4212827331320143,0.3055392797584171,0.2283769775093523,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.3441204308829495 +0.3441204308829495,0.4212827331320143,0.3055392797584171,0.2283769775093523,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.26695812863388474,0.3441204308829495,0.4212827331320143,0.3055392797584171,0.2283769775093523,0.3055392797584171,0.4212827331320143 +0.4212827331320143,0.26695812863388474,0.3441204308829495,0.4212827331320143,0.3055392797584171,0.2283769775093523,0.3055392797584171 +0.3055392797584171,0.4212827331320143,0.26695812863388474,0.3441204308829495,0.4212827331320143,0.3055392797584171,0.2283769775093523 +0.3827015820074819,0.3055392797584171,0.4212827331320143,0.26695812863388474,0.3441204308829495,0.4212827331320143,0.3055392797584171 +0.2283769775093523,0.3827015820074819,0.3055392797584171,0.4212827331320143,0.26695812863388474,0.3441204308829495,0.4212827331320143 +0.3055392797584171,0.2283769775093523,0.3827015820074819,0.3055392797584171,0.4212827331320143,0.26695812863388474,0.3441204308829495 +0.4212827331320143,0.3055392797584171,0.2283769775093523,0.3827015820074819,0.3055392797584171,0.4212827331320143,0.26695812863388474 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.2283769775093523,0.3827015820074819,0.3055392797584171,0.4212827331320143 +0.3827015820074819,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.2283769775093523,0.3827015820074819,0.3055392797584171 +0.3055392797584171,0.3827015820074819,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.2283769775093523,0.3827015820074819 +0.2283769775093523,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.2283769775093523 +0.3055392797584171,0.2283769775093523,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.3827015820074819,0.3055392797584171,0.2283769775093523,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.4212827331320143 +0.3055392797584171,0.3827015820074819,0.3055392797584171,0.2283769775093523,0.3055392797584171,0.3827015820074819,0.3055392797584171 +0.3827015820074819,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.2283769775093523,0.3055392797584171,0.3827015820074819 +0.3055392797584171,0.3827015820074819,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.2283769775093523,0.3055392797584171 +0.2283769775093523,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.2283769775093523 +0.3055392797584171,0.2283769775093523,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.3827015820074819,0.3055392797584171 +0.3827015820074819,0.3055392797584171,0.2283769775093523,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.3827015820074819 +0.3055392797584171,0.3827015820074819,0.3055392797584171,0.2283769775093523,0.3055392797584171,0.3827015820074819,0.3055392797584171 +0.4212827331320143,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.2283769775093523,0.3055392797584171,0.3827015820074819 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.2283769775093523,0.3055392797584171 +0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.2283769775093523 +0.3055392797584171,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.3827015820074819,0.3055392797584171 +0.4212827331320143,0.3055392797584171,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.3827015820074819 +0.2283769775093523,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.3441204308829495,0.2283769775093523,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.3055392797584171,0.4212827331320143 +0.3055392797584171,0.3441204308829495,0.2283769775093523,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.3055392797584171 +0.4212827331320143,0.3055392797584171,0.3441204308829495,0.2283769775093523,0.4212827331320143,0.3055392797584171,0.18979582638481995 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.3441204308829495,0.2283769775093523,0.4212827331320143,0.3055392797584171 +0.2283769775093523,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.3441204308829495,0.2283769775093523,0.4212827331320143 +0.3441204308829495,0.2283769775093523,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.3441204308829495,0.2283769775093523 +0.4212827331320143,0.3441204308829495,0.2283769775093523,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.3441204308829495 +0.2283769775093523,0.4212827331320143,0.3441204308829495,0.2283769775093523,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.3441204308829495,0.2283769775093523,0.4212827331320143,0.3441204308829495,0.2283769775093523,0.3055392797584171,0.4212827331320143 +0.3055392797584171,0.3441204308829495,0.2283769775093523,0.4212827331320143,0.3441204308829495,0.2283769775093523,0.3055392797584171 +0.4212827331320143,0.3055392797584171,0.3441204308829495,0.2283769775093523,0.4212827331320143,0.3441204308829495,0.2283769775093523 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.3441204308829495,0.2283769775093523,0.4212827331320143,0.3441204308829495 +0.2283769775093523,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.3441204308829495,0.2283769775093523,0.4212827331320143 +-0.003109929237841972,0.2283769775093523,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.3441204308829495,0.2283769775093523 +0.11263352413575517,-0.003109929237841972,0.2283769775093523,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.3441204308829495 +0.11263352413575517,0.11263352413575517,-0.003109929237841972,0.2283769775093523,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.2283769775093523,0.11263352413575517,0.11263352413575517,-0.003109929237841972,0.2283769775093523,0.3055392797584171,0.4212827331320143 +0.11263352413575517,0.2283769775093523,0.11263352413575517,0.11263352413575517,-0.003109929237841972,0.2283769775093523,0.3055392797584171 +0.2283769775093523,0.11263352413575517,0.2283769775093523,0.11263352413575517,0.11263352413575517,-0.003109929237841972,0.2283769775093523 +0.03547122188669041,0.2283769775093523,0.11263352413575517,0.2283769775093523,0.11263352413575517,0.11263352413575517,-0.003109929237841972 +0.11263352413575517,0.03547122188669041,0.2283769775093523,0.11263352413575517,0.2283769775093523,0.11263352413575517,0.11263352413575517 +0.11263352413575517,0.11263352413575517,0.03547122188669041,0.2283769775093523,0.11263352413575517,0.2283769775093523,0.11263352413575517 +0.2283769775093523,0.11263352413575517,0.11263352413575517,0.03547122188669041,0.2283769775093523,0.11263352413575517,0.2283769775093523 +0.07405237301122279,0.2283769775093523,0.11263352413575517,0.11263352413575517,0.03547122188669041,0.2283769775093523,0.11263352413575517 +0.2283769775093523,0.07405237301122279,0.2283769775093523,0.11263352413575517,0.11263352413575517,0.03547122188669041,0.2283769775093523 +0.11263352413575517,0.2283769775093523,0.07405237301122279,0.2283769775093523,0.11263352413575517,0.11263352413575517,0.03547122188669041 +0.03547122188669041,0.11263352413575517,0.2283769775093523,0.07405237301122279,0.2283769775093523,0.11263352413575517,0.11263352413575517 +-0.11885338261143913,0.03547122188669041,0.11263352413575517,0.2283769775093523,0.07405237301122279,0.2283769775093523,0.11263352413575517 +-0.003109929237841972,-0.11885338261143913,0.03547122188669041,0.11263352413575517,0.2283769775093523,0.07405237301122279,0.2283769775093523 +0.11263352413575517,-0.003109929237841972,-0.11885338261143913,0.03547122188669041,0.11263352413575517,0.2283769775093523,0.07405237301122279 +-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.11885338261143913,0.03547122188669041,0.11263352413575517,0.2283769775093523 +0.11263352413575517,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.11885338261143913,0.03547122188669041,0.11263352413575517 +0.03547122188669041,0.11263352413575517,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.11885338261143913,0.03547122188669041 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.11885338261143913 +-0.003109929237841972,-0.08027223148690674,0.03547122188669041,0.11263352413575517,-0.003109929237841972,0.11263352413575517,-0.003109929237841972 +-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,0.03547122188669041,0.11263352413575517,-0.003109929237841972,0.11263352413575517 +0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,0.03547122188669041,0.11263352413575517,-0.003109929237841972 +-0.041691080362374365,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +0.03547122188669041,-0.041691080362374365,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,0.03547122188669041 +-0.08027223148690674,0.03547122188669041,-0.041691080362374365,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674 +-0.19601568486050389,-0.08027223148690674,0.03547122188669041,-0.041691080362374365,0.07405237301122279,-0.08027223148690674,-0.003109929237841972 +0.03547122188669041,-0.19601568486050389,-0.08027223148690674,0.03547122188669041,-0.041691080362374365,0.07405237301122279,-0.08027223148690674 +-0.08027223148690674,0.03547122188669041,-0.19601568486050389,-0.08027223148690674,0.03547122188669041,-0.041691080362374365,0.07405237301122279 +-0.08027223148690674,-0.08027223148690674,0.03547122188669041,-0.19601568486050389,-0.08027223148690674,0.03547122188669041,-0.041691080362374365 +-0.003109929237841972,-0.08027223148690674,-0.08027223148690674,0.03547122188669041,-0.19601568486050389,-0.08027223148690674,0.03547122188669041 +0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.08027223148690674,0.03547122188669041,-0.19601568486050389,-0.08027223148690674 +-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.08027223148690674,0.03547122188669041,-0.19601568486050389 +-0.08027223148690674,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.08027223148690674,0.03547122188669041 +-0.003109929237841972,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.08027223148690674 +-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.08027223148690674 +-0.003109929237841972,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,-0.003109929237841972 +0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.003109929237841972,0.11263352413575517 +-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.003109929237841972 +-0.003109929237841972,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674 +-0.08027223148690674,-0.003109929237841972,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.003109929237841972 +0.11263352413575517,-0.08027223148690674,-0.003109929237841972,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.08027223148690674 +0.03547122188669041,0.11263352413575517,-0.08027223148690674,-0.003109929237841972,-0.003109929237841972,0.11263352413575517,-0.003109929237841972 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,-0.08027223148690674,-0.003109929237841972,-0.003109929237841972,0.11263352413575517 +0.03547122188669041,-0.08027223148690674,0.03547122188669041,0.11263352413575517,-0.08027223148690674,-0.003109929237841972,-0.003109929237841972 +-0.08027223148690674,0.03547122188669041,-0.08027223148690674,0.03547122188669041,0.11263352413575517,-0.08027223148690674,-0.003109929237841972 +-0.19601568486050389,-0.08027223148690674,0.03547122188669041,-0.08027223148690674,0.03547122188669041,0.11263352413575517,-0.08027223148690674 +-0.08027223148690674,-0.19601568486050389,-0.08027223148690674,0.03547122188669041,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.08027223148690674,0.03547122188669041,-0.08027223148690674,0.03547122188669041 +-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.08027223148690674,0.03547122188669041,-0.08027223148690674 +-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.08027223148690674,0.03547122188669041 +-0.08027223148690674,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.08027223148690674 +-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389 +-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674 +-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972 +0.07405237301122279,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.08027223148690674 +-0.041691080362374365,0.07405237301122279,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389 +-0.003109929237841972,-0.041691080362374365,0.07405237301122279,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674 +-0.11885338261143913,-0.003109929237841972,-0.041691080362374365,0.07405237301122279,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972 +-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,-0.041691080362374365,0.07405237301122279,-0.19601568486050389,-0.08027223148690674 +0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,-0.041691080362374365,0.07405237301122279,-0.19601568486050389 +-0.041691080362374365,0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,-0.041691080362374365,0.07405237301122279 +-0.1574345337359715,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,-0.041691080362374365 +-0.08027223148690674,-0.1574345337359715,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,-0.11885338261143913 +0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.041691080362374365,0.07405237301122279,-0.003109929237841972 +-0.08027223148690674,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.041691080362374365,0.07405237301122279 +0.03547122188669041,-0.08027223148690674,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.041691080362374365 +0.03547122188669041,0.03547122188669041,-0.08027223148690674,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.08027223148690674,0.03547122188669041,0.03547122188669041,-0.08027223148690674,0.11263352413575517,-0.003109929237841972,-0.08027223148690674 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.03547122188669041,-0.08027223148690674,0.11263352413575517,-0.003109929237841972 +-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.03547122188669041,-0.08027223148690674,0.11263352413575517 +0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.03547122188669041,-0.08027223148690674 +-0.08027223148690674,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.03547122188669041 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,-0.08027223148690674,-0.1574345337359715 +-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,-0.08027223148690674 +-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +0.03547122188669041,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674 +-0.08027223148690674,0.03547122188669041,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.08027223148690674,-0.08027223148690674,0.03547122188669041,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674 +-0.1574345337359715,-0.08027223148690674,-0.08027223148690674,0.03547122188669041,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972 +-0.1574345337359715,-0.1574345337359715,-0.08027223148690674,-0.08027223148690674,0.03547122188669041,-0.19601568486050389,-0.08027223148690674 +-0.27317798710956864,-0.1574345337359715,-0.1574345337359715,-0.08027223148690674,-0.08027223148690674,0.03547122188669041,-0.19601568486050389 +-0.08027223148690674,-0.27317798710956864,-0.1574345337359715,-0.1574345337359715,-0.08027223148690674,-0.08027223148690674,0.03547122188669041 +0.03547122188669041,-0.08027223148690674,-0.27317798710956864,-0.1574345337359715,-0.1574345337359715,-0.08027223148690674,-0.08027223148690674 +-0.08027223148690674,0.03547122188669041,-0.08027223148690674,-0.27317798710956864,-0.1574345337359715,-0.1574345337359715,-0.08027223148690674 +-0.003109929237841972,-0.08027223148690674,0.03547122188669041,-0.08027223148690674,-0.27317798710956864,-0.1574345337359715,-0.1574345337359715 +0.11263352413575517,-0.003109929237841972,-0.08027223148690674,0.03547122188669041,-0.08027223148690674,-0.27317798710956864,-0.1574345337359715 +-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,0.03547122188669041,-0.08027223148690674,-0.27317798710956864 +-0.08027223148690674,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,0.03547122188669041,-0.08027223148690674 +-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,0.03547122188669041 +-0.08027223148690674,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.08027223148690674 +-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,-0.003109929237841972 +-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,0.11263352413575517 +-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972 +-0.11885338261143913,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.08027223148690674 +-0.003109929237841972,-0.11885338261143913,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389 +0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,-0.08027223148690674 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972 +-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.19601568486050389,-0.08027223148690674 +-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.19601568486050389 +-0.08027223148690674,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.11885338261143913 +-0.003109929237841972,-0.08027223148690674,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.11885338261143913,-0.003109929237841972,-0.08027223148690674,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,0.07405237301122279 +-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,-0.08027223148690674,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972 +0.11263352413575517,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,-0.08027223148690674,-0.003109929237841972,-0.11885338261143913 +-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,-0.08027223148690674,-0.003109929237841972 +-0.11885338261143913,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,-0.08027223148690674 +-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972 +0.11263352413575517,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.11885338261143913 +-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,0.11263352413575517,-0.003109929237841972 +-0.11885338261143913,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,0.11263352413575517 +-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972 +0.11263352413575517,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.11885338261143913 +-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,0.11263352413575517,-0.003109929237841972 +-0.08027223148690674,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972,0.11263352413575517 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.11885338261143913,-0.003109929237841972 +-0.041691080362374365,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,-0.003109929237841972,-0.11885338261143913 +0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,-0.003109929237841972 +-0.041691080362374365,0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517 +-0.1574345337359715,-0.041691080362374365,0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.041691080362374365,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.08027223148690674 +-0.1574345337359715,-0.041691080362374365,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,-0.041691080362374365,-0.1574345337359715 +-0.08027223148690674,-0.1574345337359715,-0.041691080362374365,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,-0.041691080362374365 +0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.041691080362374365,-0.1574345337359715,-0.041691080362374365,0.03547122188669041 +0.15121467526028756,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.041691080362374365,-0.1574345337359715,-0.041691080362374365 +0.26695812863388474,0.15121467526028756,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.041691080362374365,-0.1574345337359715 +0.3441204308829495,0.26695812863388474,0.15121467526028756,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.041691080362374365 +0.4212827331320143,0.3441204308829495,0.26695812863388474,0.15121467526028756,0.03547122188669041,-0.08027223148690674,-0.1574345337359715 +0.498445035381079,0.4212827331320143,0.3441204308829495,0.26695812863388474,0.15121467526028756,0.03547122188669041,-0.08027223148690674 +0.3827015820074819,0.498445035381079,0.4212827331320143,0.3441204308829495,0.26695812863388474,0.15121467526028756,0.03547122188669041 +0.498445035381079,0.3827015820074819,0.498445035381079,0.4212827331320143,0.3441204308829495,0.26695812863388474,0.15121467526028756 +0.5756073376301438,0.498445035381079,0.3827015820074819,0.498445035381079,0.4212827331320143,0.3441204308829495,0.26695812863388474 +0.6527696398792086,0.5756073376301438,0.498445035381079,0.3827015820074819,0.498445035381079,0.4212827331320143,0.3441204308829495 +0.5370261865056114,0.6527696398792086,0.5756073376301438,0.498445035381079,0.3827015820074819,0.498445035381079,0.4212827331320143 +0.4598638842565466,0.5370261865056114,0.6527696398792086,0.5756073376301438,0.498445035381079,0.3827015820074819,0.498445035381079 +0.5756073376301438,0.4598638842565466,0.5370261865056114,0.6527696398792086,0.5756073376301438,0.498445035381079,0.3827015820074819 +0.4212827331320143,0.5756073376301438,0.4598638842565466,0.5370261865056114,0.6527696398792086,0.5756073376301438,0.498445035381079 +0.3441204308829495,0.4212827331320143,0.5756073376301438,0.4598638842565466,0.5370261865056114,0.6527696398792086,0.5756073376301438 +0.4212827331320143,0.3441204308829495,0.4212827331320143,0.5756073376301438,0.4598638842565466,0.5370261865056114,0.6527696398792086 +0.5370261865056114,0.4212827331320143,0.3441204308829495,0.4212827331320143,0.5756073376301438,0.4598638842565466,0.5370261865056114 +0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3441204308829495,0.4212827331320143,0.5756073376301438,0.4598638842565466 +0.498445035381079,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3441204308829495,0.4212827331320143,0.5756073376301438 +0.4212827331320143,0.498445035381079,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3441204308829495,0.4212827331320143 +0.498445035381079,0.4212827331320143,0.498445035381079,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3441204308829495 +0.6141884887546761,0.498445035381079,0.4212827331320143,0.498445035381079,0.6141884887546761,0.5370261865056114,0.4212827331320143 +0.498445035381079,0.6141884887546761,0.498445035381079,0.4212827331320143,0.498445035381079,0.6141884887546761,0.5370261865056114 +0.3827015820074819,0.498445035381079,0.6141884887546761,0.498445035381079,0.4212827331320143,0.498445035381079,0.6141884887546761 +0.4598638842565466,0.3827015820074819,0.498445035381079,0.6141884887546761,0.498445035381079,0.4212827331320143,0.498445035381079 +0.5756073376301438,0.4598638842565466,0.3827015820074819,0.498445035381079,0.6141884887546761,0.498445035381079,0.4212827331320143 +0.4598638842565466,0.5756073376301438,0.4598638842565466,0.3827015820074819,0.498445035381079,0.6141884887546761,0.498445035381079 +0.3441204308829495,0.4598638842565466,0.5756073376301438,0.4598638842565466,0.3827015820074819,0.498445035381079,0.6141884887546761 +0.4598638842565466,0.3441204308829495,0.4598638842565466,0.5756073376301438,0.4598638842565466,0.3827015820074819,0.498445035381079 +0.5370261865056114,0.4598638842565466,0.3441204308829495,0.4598638842565466,0.5756073376301438,0.4598638842565466,0.3827015820074819 +0.3827015820074819,0.5370261865056114,0.4598638842565466,0.3441204308829495,0.4598638842565466,0.5756073376301438,0.4598638842565466 +0.4598638842565466,0.3827015820074819,0.5370261865056114,0.4598638842565466,0.3441204308829495,0.4598638842565466,0.5756073376301438 +0.4598638842565466,0.4598638842565466,0.3827015820074819,0.5370261865056114,0.4598638842565466,0.3441204308829495,0.4598638842565466 +0.3827015820074819,0.4598638842565466,0.4598638842565466,0.3827015820074819,0.5370261865056114,0.4598638842565466,0.3441204308829495 +0.3055392797584171,0.3827015820074819,0.4598638842565466,0.4598638842565466,0.3827015820074819,0.5370261865056114,0.4598638842565466 +0.498445035381079,0.3055392797584171,0.3827015820074819,0.4598638842565466,0.4598638842565466,0.3827015820074819,0.5370261865056114 +0.3827015820074819,0.498445035381079,0.3055392797584171,0.3827015820074819,0.4598638842565466,0.4598638842565466,0.3827015820074819 +0.3827015820074819,0.3827015820074819,0.498445035381079,0.3055392797584171,0.3827015820074819,0.4598638842565466,0.4598638842565466 +0.498445035381079,0.3827015820074819,0.3827015820074819,0.498445035381079,0.3055392797584171,0.3827015820074819,0.4598638842565466 +0.3827015820074819,0.498445035381079,0.3827015820074819,0.3827015820074819,0.498445035381079,0.3055392797584171,0.3827015820074819 +0.498445035381079,0.3827015820074819,0.498445035381079,0.3827015820074819,0.3827015820074819,0.498445035381079,0.3055392797584171 +0.4212827331320143,0.498445035381079,0.3827015820074819,0.498445035381079,0.3827015820074819,0.3827015820074819,0.498445035381079 +0.498445035381079,0.4212827331320143,0.498445035381079,0.3827015820074819,0.498445035381079,0.3827015820074819,0.3827015820074819 +0.4212827331320143,0.498445035381079,0.4212827331320143,0.498445035381079,0.3827015820074819,0.498445035381079,0.3827015820074819 +0.498445035381079,0.4212827331320143,0.498445035381079,0.4212827331320143,0.498445035381079,0.3827015820074819,0.498445035381079 +0.6141884887546761,0.498445035381079,0.4212827331320143,0.498445035381079,0.4212827331320143,0.498445035381079,0.3827015820074819 +0.5370261865056114,0.6141884887546761,0.498445035381079,0.4212827331320143,0.498445035381079,0.4212827331320143,0.498445035381079 +0.4212827331320143,0.5370261865056114,0.6141884887546761,0.498445035381079,0.4212827331320143,0.498445035381079,0.4212827331320143 +0.3441204308829495,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.498445035381079,0.4212827331320143,0.498445035381079 +0.4598638842565466,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.498445035381079,0.4212827331320143 +0.5370261865056114,0.4598638842565466,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.498445035381079 +0.4212827331320143,0.5370261865056114,0.4598638842565466,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.6141884887546761 +0.3441204308829495,0.4212827331320143,0.5370261865056114,0.4598638842565466,0.3441204308829495,0.4212827331320143,0.5370261865056114 +0.4212827331320143,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.4598638842565466,0.3441204308829495,0.4212827331320143 +0.5370261865056114,0.4212827331320143,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.4598638842565466,0.3441204308829495 +0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.4598638842565466 +0.3441204308829495,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3441204308829495,0.4212827331320143,0.5370261865056114 +0.5370261865056114,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3441204308829495,0.4212827331320143 +0.4212827331320143,0.5370261865056114,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3441204308829495 +0.4212827331320143,0.4212827331320143,0.5370261865056114,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.4212827331320143 +0.3441204308829495,0.4212827331320143,0.4212827331320143,0.5370261865056114,0.3441204308829495,0.4212827331320143,0.5370261865056114 +0.4212827331320143,0.3441204308829495,0.4212827331320143,0.4212827331320143,0.5370261865056114,0.3441204308829495,0.4212827331320143 +0.5370261865056114,0.4212827331320143,0.3441204308829495,0.4212827331320143,0.4212827331320143,0.5370261865056114,0.3441204308829495 +0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3441204308829495,0.4212827331320143,0.4212827331320143,0.5370261865056114 +0.498445035381079,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3441204308829495,0.4212827331320143,0.4212827331320143 +0.4212827331320143,0.498445035381079,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3441204308829495,0.4212827331320143 +0.498445035381079,0.4212827331320143,0.498445035381079,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3441204308829495 +0.3441204308829495,0.498445035381079,0.4212827331320143,0.498445035381079,0.4212827331320143,0.5370261865056114,0.4212827331320143 +0.4598638842565466,0.3441204308829495,0.498445035381079,0.4212827331320143,0.498445035381079,0.4212827331320143,0.5370261865056114 +0.5370261865056114,0.4598638842565466,0.3441204308829495,0.498445035381079,0.4212827331320143,0.498445035381079,0.4212827331320143 +0.4212827331320143,0.5370261865056114,0.4598638842565466,0.3441204308829495,0.498445035381079,0.4212827331320143,0.498445035381079 +0.3055392797584171,0.4212827331320143,0.5370261865056114,0.4598638842565466,0.3441204308829495,0.498445035381079,0.4212827331320143 +0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.4598638842565466,0.3441204308829495,0.498445035381079 +0.498445035381079,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.4598638842565466,0.3441204308829495 +0.6141884887546761,0.498445035381079,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.4598638842565466 +0.4598638842565466,0.6141884887546761,0.498445035381079,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114 +0.3827015820074819,0.4598638842565466,0.6141884887546761,0.498445035381079,0.4212827331320143,0.3055392797584171,0.4212827331320143 +0.498445035381079,0.3827015820074819,0.4598638842565466,0.6141884887546761,0.498445035381079,0.4212827331320143,0.3055392797584171 +0.3827015820074819,0.498445035381079,0.3827015820074819,0.4598638842565466,0.6141884887546761,0.498445035381079,0.4212827331320143 +0.3055392797584171,0.3827015820074819,0.498445035381079,0.3827015820074819,0.4598638842565466,0.6141884887546761,0.498445035381079 +0.4212827331320143,0.3055392797584171,0.3827015820074819,0.498445035381079,0.3827015820074819,0.4598638842565466,0.6141884887546761 +0.5370261865056114,0.4212827331320143,0.3055392797584171,0.3827015820074819,0.498445035381079,0.3827015820074819,0.4598638842565466 +0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.3827015820074819,0.498445035381079,0.3827015820074819 +0.5370261865056114,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.3827015820074819,0.498445035381079 +0.6141884887546761,0.5370261865056114,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.3827015820074819 +0.5370261865056114,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3055392797584171 +0.4212827331320143,0.5370261865056114,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.5370261865056114,0.4212827331320143 +0.498445035381079,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.5370261865056114 +0.6141884887546761,0.498445035381079,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.5370261865056114,0.4212827331320143 +0.5370261865056114,0.6141884887546761,0.498445035381079,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.5370261865056114 +0.3441204308829495,0.5370261865056114,0.6141884887546761,0.498445035381079,0.4212827331320143,0.5370261865056114,0.6141884887546761 +0.4598638842565466,0.3441204308829495,0.5370261865056114,0.6141884887546761,0.498445035381079,0.4212827331320143,0.5370261865056114 +0.26695812863388474,0.4598638842565466,0.3441204308829495,0.5370261865056114,0.6141884887546761,0.498445035381079,0.4212827331320143 +0.3441204308829495,0.26695812863388474,0.4598638842565466,0.3441204308829495,0.5370261865056114,0.6141884887546761,0.498445035381079 +0.4212827331320143,0.3441204308829495,0.26695812863388474,0.4598638842565466,0.3441204308829495,0.5370261865056114,0.6141884887546761 +0.5370261865056114,0.4212827331320143,0.3441204308829495,0.26695812863388474,0.4598638842565466,0.3441204308829495,0.5370261865056114 +0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3441204308829495,0.26695812863388474,0.4598638842565466,0.3441204308829495 +0.3441204308829495,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3441204308829495,0.26695812863388474,0.4598638842565466 +0.4212827331320143,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3441204308829495,0.26695812863388474 +0.498445035381079,0.4212827331320143,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3441204308829495 +0.6141884887546761,0.498445035381079,0.4212827331320143,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.4212827331320143 +0.7299319421282733,0.6141884887546761,0.498445035381079,0.4212827331320143,0.3441204308829495,0.4212827331320143,0.5370261865056114 +0.6141884887546761,0.7299319421282733,0.6141884887546761,0.498445035381079,0.4212827331320143,0.3441204308829495,0.4212827331320143 +0.5370261865056114,0.6141884887546761,0.7299319421282733,0.6141884887546761,0.498445035381079,0.4212827331320143,0.3441204308829495 +0.4212827331320143,0.5370261865056114,0.6141884887546761,0.7299319421282733,0.6141884887546761,0.498445035381079,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.7299319421282733,0.6141884887546761,0.498445035381079 +0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.7299319421282733,0.6141884887546761 +0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.7299319421282733 +0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6141884887546761 +0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114 +0.6527696398792086,0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143 +0.5370261865056114,0.6527696398792086,0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171 +0.4212827331320143,0.5370261865056114,0.6527696398792086,0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.7299319421282733,0.6141884887546761,0.5370261865056114 +0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.7299319421282733,0.6141884887546761 +0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.7299319421282733 +0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086 +0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114 +0.5756073376301438,0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143 +0.498445035381079,0.5756073376301438,0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171 +0.3827015820074819,0.498445035381079,0.5756073376301438,0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143 +0.26695812863388474,0.3827015820074819,0.498445035381079,0.5756073376301438,0.7299319421282733,0.6141884887546761,0.5370261865056114 +0.5370261865056114,0.26695812863388474,0.3827015820074819,0.498445035381079,0.5756073376301438,0.7299319421282733,0.6141884887546761 +0.4212827331320143,0.5370261865056114,0.26695812863388474,0.3827015820074819,0.498445035381079,0.5756073376301438,0.7299319421282733 +0.6141884887546761,0.4212827331320143,0.5370261865056114,0.26695812863388474,0.3827015820074819,0.498445035381079,0.5756073376301438 +0.5370261865056114,0.6141884887546761,0.4212827331320143,0.5370261865056114,0.26695812863388474,0.3827015820074819,0.498445035381079 +0.4212827331320143,0.5370261865056114,0.6141884887546761,0.4212827331320143,0.5370261865056114,0.26695812863388474,0.3827015820074819 +0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.4212827331320143,0.5370261865056114,0.26695812863388474 +0.4598638842565466,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.4212827331320143,0.5370261865056114 +0.5756073376301438,0.4598638842565466,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.4212827331320143 +0.6527696398792086,0.5756073376301438,0.4598638842565466,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6141884887546761 +0.7299319421282733,0.6527696398792086,0.5756073376301438,0.4598638842565466,0.3055392797584171,0.4212827331320143,0.5370261865056114 +0.6527696398792086,0.7299319421282733,0.6527696398792086,0.5756073376301438,0.4598638842565466,0.3055392797584171,0.4212827331320143 +0.5370261865056114,0.6527696398792086,0.7299319421282733,0.6527696398792086,0.5756073376301438,0.4598638842565466,0.3055392797584171 +0.4212827331320143,0.5370261865056114,0.6527696398792086,0.7299319421282733,0.6527696398792086,0.5756073376301438,0.4598638842565466 +0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.7299319421282733,0.6527696398792086,0.5756073376301438 +0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.7299319421282733,0.6527696398792086 +0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.7299319421282733 +0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086 +0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114 +0.498445035381079,0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143 +0.6141884887546761,0.498445035381079,0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171 +0.3827015820074819,0.6141884887546761,0.498445035381079,0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143 +0.3055392797584171,0.3827015820074819,0.6141884887546761,0.498445035381079,0.7299319421282733,0.6141884887546761,0.5370261865056114 +0.4212827331320143,0.3055392797584171,0.3827015820074819,0.6141884887546761,0.498445035381079,0.7299319421282733,0.6141884887546761 +0.5370261865056114,0.4212827331320143,0.3055392797584171,0.3827015820074819,0.6141884887546761,0.498445035381079,0.7299319421282733 +0.7299319421282733,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.3827015820074819,0.6141884887546761,0.498445035381079 +0.6141884887546761,0.7299319421282733,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.3827015820074819,0.6141884887546761 +0.6141884887546761,0.6141884887546761,0.7299319421282733,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.3827015820074819 +0.5370261865056114,0.6141884887546761,0.6141884887546761,0.7299319421282733,0.5370261865056114,0.4212827331320143,0.3055392797584171 +0.4212827331320143,0.5370261865056114,0.6141884887546761,0.6141884887546761,0.7299319421282733,0.5370261865056114,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.6141884887546761,0.7299319421282733,0.5370261865056114 +0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.6141884887546761,0.7299319421282733 +0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.6141884887546761 +0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6141884887546761 +0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114 +0.6141884887546761,0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143 +0.5370261865056114,0.6141884887546761,0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171 +0.4212827331320143,0.5370261865056114,0.6141884887546761,0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.7299319421282733,0.6141884887546761,0.5370261865056114 +0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.7299319421282733,0.6141884887546761 +0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6141884887546761,0.7299319421282733 +0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6141884887546761 +0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114 +0.6141884887546761,0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143 +0.4212827331320143,0.6141884887546761,0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171 +0.5370261865056114,0.4212827331320143,0.6141884887546761,0.7299319421282733,0.6141884887546761,0.5370261865056114,0.4212827331320143 +0.3055392797584171,0.5370261865056114,0.4212827331320143,0.6141884887546761,0.7299319421282733,0.6141884887546761,0.5370261865056114 +0.4212827331320143,0.3055392797584171,0.5370261865056114,0.4212827331320143,0.6141884887546761,0.7299319421282733,0.6141884887546761 +0.5370261865056114,0.4212827331320143,0.3055392797584171,0.5370261865056114,0.4212827331320143,0.6141884887546761,0.7299319421282733 +0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.5370261865056114,0.4212827331320143,0.6141884887546761 +0.4598638842565466,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.5370261865056114,0.4212827331320143 +0.2283769775093523,0.4598638842565466,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.5370261865056114 +0.3441204308829495,0.2283769775093523,0.4598638842565466,0.6141884887546761,0.5370261865056114,0.4212827331320143,0.3055392797584171 +0.3055392797584171,0.3441204308829495,0.2283769775093523,0.4598638842565466,0.6141884887546761,0.5370261865056114,0.4212827331320143 +0.5370261865056114,0.3055392797584171,0.3441204308829495,0.2283769775093523,0.4598638842565466,0.6141884887546761,0.5370261865056114 +0.4212827331320143,0.5370261865056114,0.3055392797584171,0.3441204308829495,0.2283769775093523,0.4598638842565466,0.6141884887546761 +0.6527696398792086,0.4212827331320143,0.5370261865056114,0.3055392797584171,0.3441204308829495,0.2283769775093523,0.4598638842565466 +0.5370261865056114,0.6527696398792086,0.4212827331320143,0.5370261865056114,0.3055392797584171,0.3441204308829495,0.2283769775093523 +0.4212827331320143,0.5370261865056114,0.6527696398792086,0.4212827331320143,0.5370261865056114,0.3055392797584171,0.3441204308829495 +0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.4212827331320143,0.5370261865056114,0.3055392797584171 +0.498445035381079,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.4212827331320143,0.5370261865056114 +0.3827015820074819,0.498445035381079,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.4212827331320143 +0.5756073376301438,0.3827015820074819,0.498445035381079,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086 +0.691350791003741,0.5756073376301438,0.3827015820074819,0.498445035381079,0.3055392797584171,0.4212827331320143,0.5370261865056114 +0.5370261865056114,0.691350791003741,0.5756073376301438,0.3827015820074819,0.498445035381079,0.3055392797584171,0.4212827331320143 +0.4212827331320143,0.5370261865056114,0.691350791003741,0.5756073376301438,0.3827015820074819,0.498445035381079,0.3055392797584171 +0.3055392797584171,0.4212827331320143,0.5370261865056114,0.691350791003741,0.5756073376301438,0.3827015820074819,0.498445035381079 +0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.691350791003741,0.5756073376301438,0.3827015820074819 +0.6141884887546761,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.691350791003741,0.5756073376301438 +0.498445035381079,0.6141884887546761,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.691350791003741 +0.7299319421282733,0.498445035381079,0.6141884887546761,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114 +0.6527696398792086,0.7299319421282733,0.498445035381079,0.6141884887546761,0.4212827331320143,0.3055392797584171,0.4212827331320143 +0.5370261865056114,0.6527696398792086,0.7299319421282733,0.498445035381079,0.6141884887546761,0.4212827331320143,0.3055392797584171 +0.4212827331320143,0.5370261865056114,0.6527696398792086,0.7299319421282733,0.498445035381079,0.6141884887546761,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.7299319421282733,0.498445035381079,0.6141884887546761 +0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.7299319421282733,0.498445035381079 +0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.7299319421282733 +0.6527696398792086,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086 +0.5370261865056114,0.6527696398792086,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114 +0.4212827331320143,0.5370261865056114,0.6527696398792086,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.5370261865056114,0.4212827331320143,0.3055392797584171 +0.5370261865056114,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.5370261865056114,0.4212827331320143 +0.4212827331320143,0.5370261865056114,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.5370261865056114 +0.6141884887546761,0.4212827331320143,0.5370261865056114,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086 +0.7299319421282733,0.6141884887546761,0.4212827331320143,0.5370261865056114,0.3055392797584171,0.4212827331320143,0.5370261865056114 +0.6527696398792086,0.7299319421282733,0.6141884887546761,0.4212827331320143,0.5370261865056114,0.3055392797584171,0.4212827331320143 +0.5370261865056114,0.6527696398792086,0.7299319421282733,0.6141884887546761,0.4212827331320143,0.5370261865056114,0.3055392797584171 +0.4212827331320143,0.5370261865056114,0.6527696398792086,0.7299319421282733,0.6141884887546761,0.4212827331320143,0.5370261865056114 +0.26695812863388474,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.7299319421282733,0.6141884887546761,0.4212827331320143 +0.07405237301122279,0.26695812863388474,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.7299319421282733,0.6141884887546761 +-0.11885338261143913,0.07405237301122279,0.26695812863388474,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.7299319421282733 +-0.19601568486050389,-0.11885338261143913,0.07405237301122279,0.26695812863388474,0.4212827331320143,0.5370261865056114,0.6527696398792086 +-0.08027223148690674,-0.19601568486050389,-0.11885338261143913,0.07405237301122279,0.26695812863388474,0.4212827331320143,0.5370261865056114 +-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.11885338261143913,0.07405237301122279,0.26695812863388474,0.4212827331320143 +-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.11885338261143913,0.07405237301122279,0.26695812863388474 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.11885338261143913,0.07405237301122279 +-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.11885338261143913 +-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389 +-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674 +-0.27317798710956864,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.3889214404831658,-0.27317798710956864,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106 +-0.19601568486050389,-0.3889214404831658,-0.27317798710956864,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982 +-0.31175913823410106,-0.19601568486050389,-0.3889214404831658,-0.27317798710956864,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334 +-0.11885338261143913,-0.31175913823410106,-0.19601568486050389,-0.3889214404831658,-0.27317798710956864,-0.11885338261143913,-0.2345968359850363 +-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.19601568486050389,-0.3889214404831658,-0.27317798710956864,-0.11885338261143913 +-0.4275025916076982,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.19601568486050389,-0.3889214404831658,-0.27317798710956864 +-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.19601568486050389,-0.3889214404831658 +-0.31175913823410106,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.19601568486050389 +-0.19601568486050389,-0.31175913823410106,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106 +-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.11885338261143913 +-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389 +-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.31175913823410106,-0.4275025916076982 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.31175913823410106 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106 +-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389 +-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674 +-0.19601568486050389,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982 +-0.27317798710956864,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106 +-0.1574345337359715,-0.27317798710956864,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.19601568486050389 +-0.2345968359850363,-0.1574345337359715,-0.27317798710956864,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913 +-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.27317798710956864,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.27317798710956864,-0.4275025916076982,-0.31175913823410106 +-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.27317798710956864,-0.4275025916076982 +-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.27317798710956864 +-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715 +-0.19601568486050389,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363 +-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334 +-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982 +-0.19601568486050389,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106 +-0.31175913823410106,-0.19601568486050389,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.19601568486050389 +-0.11885338261143913,-0.31175913823410106,-0.19601568486050389,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913 +-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.19601568486050389,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389 +-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.19601568486050389,-0.3889214404831658,-0.31175913823410106 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.19601568486050389,-0.3889214404831658 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.19601568486050389 +-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106 +-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913 +-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.4275025916076982,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982 +-0.31175913823410106,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106 +-0.19601568486050389,-0.31175913823410106,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389 +-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.08027223148690674 +-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389 +-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.31175913823410106,-0.4275025916076982 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.31175913823410106 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106 +-0.11885338261143913,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389 +-0.2345968359850363,-0.11885338261143913,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674 +-0.27317798710956864,-0.2345968359850363,-0.11885338261143913,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.3889214404831658,-0.27317798710956864,-0.2345968359850363,-0.11885338261143913,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.2345968359850363,-0.11885338261143913,-0.31175913823410106,-0.4275025916076982 +-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.2345968359850363,-0.11885338261143913,-0.31175913823410106 +-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.2345968359850363,-0.11885338261143913 +-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.2345968359850363 +-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106 +-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389 +-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674 +-0.31175913823410106,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.19601568486050389,-0.31175913823410106,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982 +-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106 +-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.08027223148690674,-0.19601568486050389 +-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.08027223148690674 +-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106 +-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982 +-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106 +-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389 +-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674 +-0.27317798710956864,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.3889214404831658,-0.27317798710956864,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106 +-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334 +-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.11885338261143913,-0.2345968359850363 +-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.11885338261143913 +-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106 +-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363 +-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913 +-0.19601568486050389,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106 +-0.08027223148690674,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.19601568486050389 +-0.19601568486050389,-0.08027223148690674,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913 +-0.19601568486050389,-0.19601568486050389,-0.08027223148690674,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.31175913823410106,-0.19601568486050389,-0.19601568486050389,-0.08027223148690674,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.19601568486050389,-0.08027223148690674,-0.31175913823410106,-0.4275025916076982 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.19601568486050389,-0.08027223148690674,-0.31175913823410106 +-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.19601568486050389,-0.08027223148690674 +-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.19601568486050389 +-0.31175913823410106,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.19601568486050389,-0.31175913823410106,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982 +-0.2345968359850363,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106 +-0.3503402893586334,-0.2345968359850363,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.08027223148690674,-0.19601568486050389 +-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.08027223148690674 +-0.3889214404831658,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106 +-0.27317798710956864,-0.3889214404831658,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4275025916076982,-0.19601568486050389 +-0.31175913823410106,-0.27317798710956864,-0.3889214404831658,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4275025916076982 +-0.19601568486050389,-0.31175913823410106,-0.27317798710956864,-0.3889214404831658,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363 +-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.27317798710956864,-0.3889214404831658,-0.11885338261143913,-0.3503402893586334 +-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.27317798710956864,-0.3889214404831658,-0.11885338261143913 +-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.27317798710956864,-0.3889214404831658 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.27317798710956864 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106 +-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389 +-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674 +-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106 +-0.08027223148690674,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389 +-0.19601568486050389,-0.08027223148690674,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674 +-0.19601568486050389,-0.19601568486050389,-0.08027223148690674,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.31175913823410106,-0.19601568486050389,-0.19601568486050389,-0.08027223148690674,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.19601568486050389,-0.08027223148690674,-0.31175913823410106,-0.4275025916076982 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.19601568486050389,-0.08027223148690674,-0.31175913823410106 +-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.19601568486050389,-0.08027223148690674 +-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.19601568486050389 +-0.2345968359850363,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.19601568486050389 +-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913 +-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106 +-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363 +-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389 +-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106 +-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389 +-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.08027223148690674 +-0.31175913823410106,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.19601568486050389,-0.31175913823410106,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982 +-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106 +-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.08027223148690674,-0.19601568486050389 +-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.08027223148690674 +-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106 +-0.4275025916076982,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389 +-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982 +-0.3503402893586334,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106 +-0.19601568486050389,-0.3503402893586334,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.08027223148690674,-0.19601568486050389 +-0.003109929237841972,-0.19601568486050389,-0.3503402893586334,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.08027223148690674 +0.15121467526028756,-0.003109929237841972,-0.19601568486050389,-0.3503402893586334,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389 +0.2283769775093523,0.15121467526028756,-0.003109929237841972,-0.19601568486050389,-0.3503402893586334,-0.31175913823410106,-0.4275025916076982 +0.3055392797584171,0.2283769775093523,0.15121467526028756,-0.003109929237841972,-0.19601568486050389,-0.3503402893586334,-0.31175913823410106 +0.15121467526028756,0.3055392797584171,0.2283769775093523,0.15121467526028756,-0.003109929237841972,-0.19601568486050389,-0.3503402893586334 +0.3055392797584171,0.15121467526028756,0.3055392797584171,0.2283769775093523,0.15121467526028756,-0.003109929237841972,-0.19601568486050389 +0.4212827331320143,0.3055392797584171,0.15121467526028756,0.3055392797584171,0.2283769775093523,0.15121467526028756,-0.003109929237841972 +0.5370261865056114,0.4212827331320143,0.3055392797584171,0.15121467526028756,0.3055392797584171,0.2283769775093523,0.15121467526028756 +0.3441204308829495,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.15121467526028756,0.3055392797584171,0.2283769775093523 +0.4598638842565466,0.3441204308829495,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.15121467526028756,0.3055392797584171 +0.2283769775093523,0.4598638842565466,0.3441204308829495,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.15121467526028756 +0.11263352413575517,0.2283769775093523,0.4598638842565466,0.3441204308829495,0.5370261865056114,0.4212827331320143,0.3055392797584171 +0.18979582638481995,0.11263352413575517,0.2283769775093523,0.4598638842565466,0.3441204308829495,0.5370261865056114,0.4212827331320143 +0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.4598638842565466,0.3441204308829495,0.5370261865056114 +0.3827015820074819,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.4598638842565466,0.3441204308829495 +0.26695812863388474,0.3827015820074819,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.4598638842565466 +0.18979582638481995,0.26695812863388474,0.3827015820074819,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523 +0.07405237301122279,0.18979582638481995,0.26695812863388474,0.3827015820074819,0.3055392797584171,0.18979582638481995,0.11263352413575517 +0.15121467526028756,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.3827015820074819,0.3055392797584171,0.18979582638481995 +0.26695812863388474,0.15121467526028756,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.3827015820074819,0.3055392797584171 +0.3827015820074819,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.3827015820074819 +0.26695812863388474,0.3827015820074819,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.18979582638481995,0.26695812863388474 +0.15121467526028756,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.18979582638481995 +0.03547122188669041,0.15121467526028756,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.15121467526028756,0.07405237301122279 +0.15121467526028756,0.03547122188669041,0.15121467526028756,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.15121467526028756 +0.26695812863388474,0.15121467526028756,0.03547122188669041,0.15121467526028756,0.26695812863388474,0.3827015820074819,0.26695812863388474 +0.3441204308829495,0.26695812863388474,0.15121467526028756,0.03547122188669041,0.15121467526028756,0.26695812863388474,0.3827015820074819 +0.26695812863388474,0.3441204308829495,0.26695812863388474,0.15121467526028756,0.03547122188669041,0.15121467526028756,0.26695812863388474 +0.15121467526028756,0.26695812863388474,0.3441204308829495,0.26695812863388474,0.15121467526028756,0.03547122188669041,0.15121467526028756 +0.07405237301122279,0.15121467526028756,0.26695812863388474,0.3441204308829495,0.26695812863388474,0.15121467526028756,0.03547122188669041 +0.15121467526028756,0.07405237301122279,0.15121467526028756,0.26695812863388474,0.3441204308829495,0.26695812863388474,0.15121467526028756 +0.3827015820074819,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.26695812863388474,0.3441204308829495,0.26695812863388474 +0.26695812863388474,0.3827015820074819,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.26695812863388474,0.3441204308829495 +0.3055392797584171,0.26695812863388474,0.3827015820074819,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.26695812863388474 +0.18979582638481995,0.3055392797584171,0.26695812863388474,0.3827015820074819,0.15121467526028756,0.07405237301122279,0.15121467526028756 +0.11263352413575517,0.18979582638481995,0.3055392797584171,0.26695812863388474,0.3827015820074819,0.15121467526028756,0.07405237301122279 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.26695812863388474,0.3827015820074819,0.15121467526028756 +0.3055392797584171,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.26695812863388474,0.3827015820074819 +0.3827015820074819,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.26695812863388474 +0.3055392797584171,0.3827015820074819,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171 +0.18979582638481995,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.18979582638481995 +0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.18979582638481995,0.11263352413575517 +0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.18979582638481995 +0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3827015820074819,0.3055392797584171 +0.3827015820074819,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3827015820074819 +0.3055392797584171,0.3827015820074819,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171 +0.18979582638481995,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995 +0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.18979582638481995,0.07405237301122279 +0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.18979582638481995 +0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3827015820074819,0.3055392797584171 +0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3827015820074819 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171 +0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995 +0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279 +0.2283769775093523,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995 +0.3055392797584171,0.2283769775093523,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.4212827331320143,0.3055392797584171,0.2283769775093523,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.2283769775093523,0.11263352413575517,0.18979582638481995,0.3055392797584171 +0.2283769775093523,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.2283769775093523,0.11263352413575517,0.18979582638481995 +0.11263352413575517,0.2283769775093523,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.2283769775093523,0.11263352413575517 +0.26695812863388474,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.2283769775093523 +0.3827015820074819,0.26695812863388474,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.26695812863388474,0.3827015820074819,0.26695812863388474,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.4212827331320143 +0.15121467526028756,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.11263352413575517,0.2283769775093523,0.3055392797584171 +0.3055392797584171,0.15121467526028756,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.11263352413575517,0.2283769775093523 +0.2283769775093523,0.3055392797584171,0.15121467526028756,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.11263352413575517 +0.4212827331320143,0.2283769775093523,0.3055392797584171,0.15121467526028756,0.26695812863388474,0.3827015820074819,0.26695812863388474 +0.2283769775093523,0.4212827331320143,0.2283769775093523,0.3055392797584171,0.15121467526028756,0.26695812863388474,0.3827015820074819 +0.3441204308829495,0.2283769775093523,0.4212827331320143,0.2283769775093523,0.3055392797584171,0.15121467526028756,0.26695812863388474 +0.11263352413575517,0.3441204308829495,0.2283769775093523,0.4212827331320143,0.2283769775093523,0.3055392797584171,0.15121467526028756 +0.2283769775093523,0.11263352413575517,0.3441204308829495,0.2283769775093523,0.4212827331320143,0.2283769775093523,0.3055392797584171 +0.3055392797584171,0.2283769775093523,0.11263352413575517,0.3441204308829495,0.2283769775093523,0.4212827331320143,0.2283769775093523 +0.4212827331320143,0.3055392797584171,0.2283769775093523,0.11263352413575517,0.3441204308829495,0.2283769775093523,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.2283769775093523,0.11263352413575517,0.3441204308829495,0.2283769775093523 +0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.2283769775093523,0.11263352413575517,0.3441204308829495 +0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.2283769775093523,0.11263352413575517 +0.2283769775093523,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.2283769775093523 +0.3055392797584171,0.2283769775093523,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.4212827331320143,0.3055392797584171,0.2283769775093523,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.2283769775093523,0.11263352413575517,0.18979582638481995,0.3055392797584171 +0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.2283769775093523,0.11263352413575517,0.18979582638481995 +0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.2283769775093523,0.11263352413575517 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.2283769775093523 +0.3055392797584171,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171 +0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.18979582638481995 +0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995 +0.26695812863388474,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.3827015820074819,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143 +0.2283769775093523,0.3827015820074819,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171 +0.11263352413575517,0.2283769775093523,0.3827015820074819,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.18979582638481995 +0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3827015820074819,0.26695812863388474,0.18979582638481995,0.11263352413575517 +0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3827015820074819,0.26695812863388474,0.18979582638481995 +0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3827015820074819,0.26695812863388474 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3827015820074819 +0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523 +0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995 +0.3055392797584171,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143 +0.18979582638481995,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171 +0.3055392797584171,0.18979582638481995,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.18979582638481995 +0.07405237301122279,0.3055392797584171,0.18979582638481995,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517 +0.18979582638481995,0.07405237301122279,0.3055392797584171,0.18979582638481995,0.4212827331320143,0.3055392797584171,0.18979582638481995 +0.3055392797584171,0.18979582638481995,0.07405237301122279,0.3055392797584171,0.18979582638481995,0.4212827331320143,0.3055392797584171 +0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.3055392797584171,0.18979582638481995,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.3055392797584171,0.18979582638481995 +0.11263352413575517,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.3055392797584171 +0.18979582638481995,0.11263352413575517,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279 +0.3441204308829495,0.18979582638481995,0.11263352413575517,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995 +0.2283769775093523,0.3441204308829495,0.18979582638481995,0.11263352413575517,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.4212827331320143,0.2283769775093523,0.3441204308829495,0.18979582638481995,0.11263352413575517,0.3055392797584171,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.2283769775093523,0.3441204308829495,0.18979582638481995,0.11263352413575517,0.3055392797584171 +0.07405237301122279,0.3055392797584171,0.4212827331320143,0.2283769775093523,0.3441204308829495,0.18979582638481995,0.11263352413575517 +0.18979582638481995,0.07405237301122279,0.3055392797584171,0.4212827331320143,0.2283769775093523,0.3441204308829495,0.18979582638481995 +0.18979582638481995,0.18979582638481995,0.07405237301122279,0.3055392797584171,0.4212827331320143,0.2283769775093523,0.3441204308829495 +0.3055392797584171,0.18979582638481995,0.18979582638481995,0.07405237301122279,0.3055392797584171,0.4212827331320143,0.2283769775093523 +0.4212827331320143,0.3055392797584171,0.18979582638481995,0.18979582638481995,0.07405237301122279,0.3055392797584171,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.18979582638481995,0.07405237301122279,0.3055392797584171 +0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.18979582638481995,0.07405237301122279 +0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.18979582638481995 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995 +0.26695812863388474,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.3827015820074819,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143 +0.26695812863388474,0.3827015820074819,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171 +0.18979582638481995,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.18979582638481995 +0.07405237301122279,0.18979582638481995,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.18979582638481995,0.11263352413575517 +-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.18979582638481995 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.3827015820074819,0.26695812863388474 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.3827015820074819 +-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.26695812863388474 +-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.18979582638481995 +-0.3503402893586334,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,-0.08027223148690674 +-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715 +-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.08027223148690674 +-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363 +-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982 +-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334 +-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363 +-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913 +-0.3889214404831658,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363 +-0.27317798710956864,-0.3889214404831658,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334 +-0.4660837427322306,-0.27317798710956864,-0.3889214404831658,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982 +-0.2345968359850363,-0.4660837427322306,-0.27317798710956864,-0.3889214404831658,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106 +-0.3503402893586334,-0.2345968359850363,-0.4660837427322306,-0.27317798710956864,-0.3889214404831658,-0.11885338261143913,-0.19601568486050389 +-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4660837427322306,-0.27317798710956864,-0.3889214404831658,-0.11885338261143913 +-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4660837427322306,-0.27317798710956864,-0.3889214404831658 +-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4660837427322306,-0.27317798710956864 +-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4660837427322306 +-0.2345968359850363,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363 +-0.3503402893586334,-0.2345968359850363,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334 +-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913 +-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363 +-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4275025916076982 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363 +-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334 +-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913 +-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363 +-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334 +-0.11885338261143913,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363 +-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913 +-0.2345968359850363,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363 +-0.3503402893586334,-0.2345968359850363,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +-0.4660837427322306,-0.3503402893586334,-0.2345968359850363,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.4275025916076982 +-0.31175913823410106,-0.4660837427322306,-0.3503402893586334,-0.2345968359850363,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334 +-0.2345968359850363,-0.31175913823410106,-0.4660837427322306,-0.3503402893586334,-0.2345968359850363,-0.2345968359850363,-0.11885338261143913 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4660837427322306,-0.3503402893586334,-0.2345968359850363,-0.2345968359850363 +-0.27317798710956864,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4660837427322306,-0.3503402893586334,-0.2345968359850363 +-0.3889214404831658,-0.27317798710956864,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4660837427322306,-0.3503402893586334 +-0.4660837427322306,-0.3889214404831658,-0.27317798710956864,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4660837427322306 +-0.2345968359850363,-0.4660837427322306,-0.3889214404831658,-0.27317798710956864,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +-0.3503402893586334,-0.2345968359850363,-0.4660837427322306,-0.3889214404831658,-0.27317798710956864,-0.1574345337359715,-0.2345968359850363 +-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4660837427322306,-0.3889214404831658,-0.27317798710956864,-0.1574345337359715 +-0.31175913823410106,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4660837427322306,-0.3889214404831658,-0.27317798710956864 +-0.19601568486050389,-0.31175913823410106,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4660837427322306,-0.3889214404831658 +-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4660837427322306 +-0.2345968359850363,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363 +-0.3503402893586334,-0.2345968359850363,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.11885338261143913,-0.3503402893586334 +-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.11885338261143913 +-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106 +-0.4275025916076982,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4275025916076982,-0.19601568486050389 +-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363,-0.4275025916076982 +-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.2345968359850363 +-0.2345968359850363,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334 +-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.11885338261143913 +-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363 +-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982 +-0.4660837427322306,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.3503402893586334 +-0.3503402893586334,-0.4660837427322306,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334 +-0.2345968359850363,-0.3503402893586334,-0.4660837427322306,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363 +-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4660837427322306,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913 +-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4660837427322306,-0.3503402893586334,-0.2345968359850363 +-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4660837427322306,-0.3503402893586334 +-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4660837427322306 +-0.27317798710956864,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334 +-0.1574345337359715,-0.27317798710956864,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363 +-0.31175913823410106,-0.1574345337359715,-0.27317798710956864,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913 +-0.3889214404831658,-0.31175913823410106,-0.1574345337359715,-0.27317798710956864,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363 +-0.2345968359850363,-0.3889214404831658,-0.31175913823410106,-0.1574345337359715,-0.27317798710956864,-0.4275025916076982,-0.3503402893586334 +-0.11885338261143913,-0.2345968359850363,-0.3889214404831658,-0.31175913823410106,-0.1574345337359715,-0.27317798710956864,-0.4275025916076982 +-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.3889214404831658,-0.31175913823410106,-0.1574345337359715,-0.27317798710956864 +-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.3889214404831658,-0.31175913823410106,-0.1574345337359715 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.3889214404831658,-0.31175913823410106 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.3889214404831658 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363 +-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913 +-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +-0.2345968359850363,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106 +-0.31175913823410106,-0.2345968359850363,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363 +-0.11885338261143913,-0.31175913823410106,-0.2345968359850363,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913 +-0.2345968359850363,-0.11885338261143913,-0.31175913823410106,-0.2345968359850363,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363 +-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.31175913823410106,-0.2345968359850363,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.31175913823410106,-0.2345968359850363,-0.4275025916076982 +-0.27317798710956864,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.31175913823410106,-0.2345968359850363 +-0.1574345337359715,-0.27317798710956864,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913,-0.31175913823410106 +-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.11885338261143913 +-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363 +-0.3503402893586334,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.4275025916076982,-0.3503402893586334 +-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.4275025916076982 +-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864 +-0.11885338261143913,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715 +-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.08027223148690674 +-0.19601568486050389,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363 +-0.31175913823410106,-0.19601568486050389,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.4275025916076982 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.19601568486050389,-0.11885338261143913 +-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.19601568486050389 +-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363 +-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913 +-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363 +-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363 +-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913 +-0.27317798710956864,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363 +-0.3889214404831658,-0.27317798710956864,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106 +-0.11885338261143913,-0.3889214404831658,-0.27317798710956864,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +-0.2345968359850363,-0.11885338261143913,-0.3889214404831658,-0.27317798710956864,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334 +-0.2345968359850363,-0.2345968359850363,-0.11885338261143913,-0.3889214404831658,-0.27317798710956864,-0.1574345337359715,-0.27317798710956864 +-0.31175913823410106,-0.2345968359850363,-0.2345968359850363,-0.11885338261143913,-0.3889214404831658,-0.27317798710956864,-0.1574345337359715 +-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.2345968359850363,-0.11885338261143913,-0.3889214404831658,-0.27317798710956864 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.2345968359850363,-0.11885338261143913,-0.3889214404831658 +-0.11885338261143913,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.2345968359850363,-0.11885338261143913 +-0.2345968359850363,-0.11885338261143913,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.2345968359850363 +-0.2345968359850363,-0.2345968359850363,-0.11885338261143913,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363 +-0.31175913823410106,-0.2345968359850363,-0.2345968359850363,-0.11885338261143913,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.2345968359850363,-0.11885338261143913,-0.31175913823410106,-0.4275025916076982 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.2345968359850363,-0.11885338261143913,-0.31175913823410106 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.2345968359850363,-0.11885338261143913 +-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.2345968359850363 +-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363 +-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363 +-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913 +-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363 +-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106 +-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363 +-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913 +-0.2345968359850363,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.4275025916076982,-0.2345968359850363,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982 +-0.31175913823410106,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106 +-0.2345968359850363,-0.31175913823410106,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.11885338261143913,-0.19601568486050389 +-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.11885338261143913 +-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363 +-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.31175913823410106,-0.4275025916076982 +-0.2345968359850363,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.31175913823410106 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106 +-0.041691080362374365,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363 +0.11263352413575517,-0.041691080362374365,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913 +0.26695812863388474,0.11263352413575517,-0.041691080362374365,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.2345968359850363 +0.3827015820074819,0.26695812863388474,0.11263352413575517,-0.041691080362374365,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.26695812863388474,0.3827015820074819,0.26695812863388474,0.11263352413575517,-0.041691080362374365,-0.1574345337359715,-0.2345968359850363 +0.18979582638481995,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.11263352413575517,-0.041691080362374365,-0.1574345337359715 +0.3441204308829495,0.18979582638481995,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.11263352413575517,-0.041691080362374365 +0.4212827331320143,0.3441204308829495,0.18979582638481995,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.11263352413575517 +0.3055392797584171,0.4212827331320143,0.3441204308829495,0.18979582638481995,0.26695812863388474,0.3827015820074819,0.26695812863388474 +0.07405237301122279,0.3055392797584171,0.4212827331320143,0.3441204308829495,0.18979582638481995,0.26695812863388474,0.3827015820074819 +0.18979582638481995,0.07405237301122279,0.3055392797584171,0.4212827331320143,0.3441204308829495,0.18979582638481995,0.26695812863388474 +0.15121467526028756,0.18979582638481995,0.07405237301122279,0.3055392797584171,0.4212827331320143,0.3441204308829495,0.18979582638481995 +0.26695812863388474,0.15121467526028756,0.18979582638481995,0.07405237301122279,0.3055392797584171,0.4212827331320143,0.3441204308829495 +0.3827015820074819,0.26695812863388474,0.15121467526028756,0.18979582638481995,0.07405237301122279,0.3055392797584171,0.4212827331320143 +0.26695812863388474,0.3827015820074819,0.26695812863388474,0.15121467526028756,0.18979582638481995,0.07405237301122279,0.3055392797584171 +0.15121467526028756,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.15121467526028756,0.18979582638481995,0.07405237301122279 +0.03547122188669041,0.15121467526028756,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.15121467526028756,0.18979582638481995 +0.11263352413575517,0.03547122188669041,0.15121467526028756,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.15121467526028756 +0.2283769775093523,0.11263352413575517,0.03547122188669041,0.15121467526028756,0.26695812863388474,0.3827015820074819,0.26695812863388474 +0.3441204308829495,0.2283769775093523,0.11263352413575517,0.03547122188669041,0.15121467526028756,0.26695812863388474,0.3827015820074819 +0.26695812863388474,0.3441204308829495,0.2283769775093523,0.11263352413575517,0.03547122188669041,0.15121467526028756,0.26695812863388474 +0.15121467526028756,0.26695812863388474,0.3441204308829495,0.2283769775093523,0.11263352413575517,0.03547122188669041,0.15121467526028756 +0.03547122188669041,0.15121467526028756,0.26695812863388474,0.3441204308829495,0.2283769775093523,0.11263352413575517,0.03547122188669041 +0.15121467526028756,0.03547122188669041,0.15121467526028756,0.26695812863388474,0.3441204308829495,0.2283769775093523,0.11263352413575517 +0.26695812863388474,0.15121467526028756,0.03547122188669041,0.15121467526028756,0.26695812863388474,0.3441204308829495,0.2283769775093523 +0.3827015820074819,0.26695812863388474,0.15121467526028756,0.03547122188669041,0.15121467526028756,0.26695812863388474,0.3441204308829495 +0.26695812863388474,0.3827015820074819,0.26695812863388474,0.15121467526028756,0.03547122188669041,0.15121467526028756,0.26695812863388474 +0.15121467526028756,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.15121467526028756,0.03547122188669041,0.15121467526028756 +0.03547122188669041,0.15121467526028756,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.15121467526028756,0.03547122188669041 +0.15121467526028756,0.03547122188669041,0.15121467526028756,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.15121467526028756 +0.26695812863388474,0.15121467526028756,0.03547122188669041,0.15121467526028756,0.26695812863388474,0.3827015820074819,0.26695812863388474 +0.3827015820074819,0.26695812863388474,0.15121467526028756,0.03547122188669041,0.15121467526028756,0.26695812863388474,0.3827015820074819 +0.26695812863388474,0.3827015820074819,0.26695812863388474,0.15121467526028756,0.03547122188669041,0.15121467526028756,0.26695812863388474 +0.18979582638481995,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.15121467526028756,0.03547122188669041,0.15121467526028756 +0.07405237301122279,0.18979582638481995,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.15121467526028756,0.03547122188669041 +0.18979582638481995,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.3827015820074819,0.26695812863388474,0.15121467526028756 +0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.3827015820074819,0.26695812863388474 +0.2283769775093523,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.26695812863388474,0.3827015820074819 +0.11263352413575517,0.2283769775093523,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.26695812863388474 +0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995 +0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.18979582638481995,0.07405237301122279 +0.3827015820074819,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.18979582638481995 +0.3055392797584171,0.3827015820074819,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3055392797584171 +0.18979582638481995,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523 +0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.18979582638481995,0.11263352413575517 +0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.18979582638481995 +0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3827015820074819,0.3055392797584171 +0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3827015820074819 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171 +0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995 +0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995 +0.3055392797584171,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.3055392797584171 +0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.18979582638481995 +0.07405237301122279,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517 +0.3055392797584171,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995 +0.18979582638481995,0.3055392797584171,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.4212827331320143,0.18979582638481995,0.3055392797584171,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.18979582638481995,0.3055392797584171,0.07405237301122279,0.18979582638481995,0.3055392797584171 +0.2283769775093523,0.3055392797584171,0.4212827331320143,0.18979582638481995,0.3055392797584171,0.07405237301122279,0.18979582638481995 +0.11263352413575517,0.2283769775093523,0.3055392797584171,0.4212827331320143,0.18979582638481995,0.3055392797584171,0.07405237301122279 +0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.4212827331320143,0.18979582638481995,0.3055392797584171 +0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.4212827331320143,0.18979582638481995 +0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3055392797584171 +0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523 +0.07405237301122279,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517 +0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995 +0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171 +0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995 +0.07405237301122279,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279 +0.26695812863388474,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995 +0.18979582638481995,0.26695812863388474,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.3827015820074819,0.18979582638481995,0.26695812863388474,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.4212827331320143 +0.3055392797584171,0.3827015820074819,0.18979582638481995,0.26695812863388474,0.07405237301122279,0.18979582638481995,0.3055392797584171 +0.18979582638481995,0.3055392797584171,0.3827015820074819,0.18979582638481995,0.26695812863388474,0.07405237301122279,0.18979582638481995 +0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3827015820074819,0.18979582638481995,0.26695812863388474,0.07405237301122279 +0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3827015820074819,0.18979582638481995,0.26695812863388474 +0.4212827331320143,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3827015820074819,0.18979582638481995 +0.3055392797584171,0.4212827331320143,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3827015820074819 +0.3055392797584171,0.3055392797584171,0.4212827331320143,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171 +0.18979582638481995,0.3055392797584171,0.3055392797584171,0.4212827331320143,0.18979582638481995,0.07405237301122279,0.18979582638481995 +0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3055392797584171,0.4212827331320143,0.18979582638481995,0.07405237301122279 +0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3055392797584171,0.4212827331320143,0.18979582638481995 +0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3055392797584171,0.4212827331320143 +0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.3055392797584171 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171 +0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995 +0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279 +0.26695812863388474,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995 +0.3827015820074819,0.26695812863388474,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.2283769775093523,0.3827015820074819,0.26695812863388474,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143 +0.11263352413575517,0.2283769775093523,0.3827015820074819,0.26695812863388474,0.11263352413575517,0.18979582638481995,0.3055392797584171 +0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3827015820074819,0.26695812863388474,0.11263352413575517,0.18979582638481995 +0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3827015820074819,0.26695812863388474,0.11263352413575517 +0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3827015820074819,0.26695812863388474 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3827015820074819 +0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523 +0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.11263352413575517 +0.3055392797584171,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995 +0.18979582638481995,0.3055392797584171,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.4212827331320143,0.18979582638481995,0.3055392797584171,0.11263352413575517,0.18979582638481995,0.3055392797584171,0.4212827331320143 +0.3055392797584171,0.4212827331320143,0.18979582638481995,0.3055392797584171,0.11263352413575517,0.18979582638481995,0.3055392797584171 +0.07405237301122279,0.3055392797584171,0.4212827331320143,0.18979582638481995,0.3055392797584171,0.11263352413575517,0.18979582638481995 +0.18979582638481995,0.07405237301122279,0.3055392797584171,0.4212827331320143,0.18979582638481995,0.3055392797584171,0.11263352413575517 +0.2283769775093523,0.18979582638481995,0.07405237301122279,0.3055392797584171,0.4212827331320143,0.18979582638481995,0.3055392797584171 +0.3441204308829495,0.2283769775093523,0.18979582638481995,0.07405237301122279,0.3055392797584171,0.4212827331320143,0.18979582638481995 +0.26695812863388474,0.3441204308829495,0.2283769775093523,0.18979582638481995,0.07405237301122279,0.3055392797584171,0.4212827331320143 +0.15121467526028756,0.26695812863388474,0.3441204308829495,0.2283769775093523,0.18979582638481995,0.07405237301122279,0.3055392797584171 +0.07405237301122279,0.15121467526028756,0.26695812863388474,0.3441204308829495,0.2283769775093523,0.18979582638481995,0.07405237301122279 +0.18979582638481995,0.07405237301122279,0.15121467526028756,0.26695812863388474,0.3441204308829495,0.2283769775093523,0.18979582638481995 +0.3055392797584171,0.18979582638481995,0.07405237301122279,0.15121467526028756,0.26695812863388474,0.3441204308829495,0.2283769775093523 +0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.15121467526028756,0.26695812863388474,0.3441204308829495 +0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.15121467526028756,0.26695812863388474 +0.11263352413575517,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.15121467526028756 +0.18979582638481995,0.11263352413575517,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.07405237301122279 +0.18979582638481995,0.18979582638481995,0.11263352413575517,0.3055392797584171,0.4212827331320143,0.3055392797584171,0.18979582638481995 +0.3055392797584171,0.18979582638481995,0.18979582638481995,0.11263352413575517,0.3055392797584171,0.4212827331320143,0.3055392797584171 +0.4212827331320143,0.3055392797584171,0.18979582638481995,0.18979582638481995,0.11263352413575517,0.3055392797584171,0.4212827331320143 +0.2283769775093523,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.18979582638481995,0.11263352413575517,0.3055392797584171 +0.3055392797584171,0.2283769775093523,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.18979582638481995,0.11263352413575517 +0.11263352413575517,0.3055392797584171,0.2283769775093523,0.4212827331320143,0.3055392797584171,0.18979582638481995,0.18979582638481995 +-0.003109929237841972,0.11263352413575517,0.3055392797584171,0.2283769775093523,0.4212827331320143,0.3055392797584171,0.18979582638481995 +0.07405237301122279,-0.003109929237841972,0.11263352413575517,0.3055392797584171,0.2283769775093523,0.4212827331320143,0.3055392797584171 +-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.11263352413575517,0.3055392797584171,0.2283769775093523,0.4212827331320143 +-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.11263352413575517,0.3055392797584171,0.2283769775093523 +-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.11263352413575517,0.3055392797584171 +-0.4275025916076982,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.11263352413575517 +-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972 +-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.07405237301122279 +-0.2345968359850363,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365 +-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.11885338261143913 +-0.31175913823410106,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363 +-0.19601568486050389,-0.31175913823410106,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982 +-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.3503402893586334 +-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.11885338261143913,-0.2345968359850363 +-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106,-0.11885338261143913 +-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.31175913823410106 +-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389 +-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363 +-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913 +-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363 +-0.4275025916076982,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106 +-0.3503402893586334,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.11885338261143913,-0.2345968359850363 +-0.1574345337359715,-0.3503402893586334,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.11885338261143913 +-0.08027223148690674,-0.1574345337359715,-0.3503402893586334,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363 +-0.1574345337359715,-0.08027223148690674,-0.1574345337359715,-0.3503402893586334,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.1574345337359715,-0.3503402893586334,-0.2345968359850363,-0.31175913823410106 +-0.3889214404831658,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.1574345337359715,-0.3503402893586334,-0.2345968359850363 +-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.1574345337359715,-0.3503402893586334 +-0.11885338261143913,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.1574345337359715 +-0.2345968359850363,-0.11885338261143913,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674 +-0.19601568486050389,-0.2345968359850363,-0.11885338261143913,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.1574345337359715 +-0.31175913823410106,-0.19601568486050389,-0.2345968359850363,-0.11885338261143913,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864 +-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.2345968359850363,-0.11885338261143913,-0.31175913823410106,-0.3889214404831658 +-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.2345968359850363,-0.11885338261143913,-0.31175913823410106 +-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.2345968359850363,-0.11885338261143913 +-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389,-0.2345968359850363 +-0.2345968359850363,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106,-0.19601568486050389 +-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982,-0.31175913823410106 +-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.4275025916076982 +-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106 +-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.19601568486050389 +-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913 +-0.3503402893586334,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363 +-0.2345968359850363,-0.3503402893586334,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106 +-0.4660837427322306,-0.2345968359850363,-0.3503402893586334,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982 +-0.3503402893586334,-0.4660837427322306,-0.2345968359850363,-0.3503402893586334,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334 +-0.2345968359850363,-0.3503402893586334,-0.4660837427322306,-0.2345968359850363,-0.3503402893586334,-0.11885338261143913,-0.2345968359850363 +-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4660837427322306,-0.2345968359850363,-0.3503402893586334,-0.11885338261143913 +-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4660837427322306,-0.2345968359850363,-0.3503402893586334 +-0.4275025916076982,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4660837427322306,-0.2345968359850363 +-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4660837427322306 +-0.3503402893586334,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334 +-0.2345968359850363,-0.3503402893586334,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363 +-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.11885338261143913 +-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389 +-0.4275025916076982,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.31175913823410106,-0.4275025916076982 +-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.31175913823410106 +-0.3503402893586334,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334 +-0.11885338261143913,-0.3503402893586334,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.11885338261143913,-0.2345968359850363 +-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389,-0.11885338261143913 +-0.2345968359850363,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.31175913823410106,-0.4275025916076982,-0.19601568486050389 +-0.3503402893586334,-0.2345968359850363,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.31175913823410106,-0.4275025916076982 +-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.31175913823410106 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.2345968359850363,-0.11885338261143913 +-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.2345968359850363 +-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363 +0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.1574345337359715 +0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.003109929237841972,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.03547122188669041,0.11263352413575517 +-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.03547122188669041 +-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.4275025916076982,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.19601568486050389,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.1574345337359715 +-0.003109929237841972,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363 +0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.3503402893586334,-0.4275025916076982 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.3503402893586334 +0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106 +-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.19601568486050389 +-0.003109929237841972,-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.11885338261143913 +-0.19601568486050389,-0.003109929237841972,-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.27317798710956864,-0.19601568486050389,-0.003109929237841972,-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.003109929237841972,-0.08027223148690674,0.07405237301122279,0.15121467526028756 +-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.003109929237841972,-0.08027223148690674,0.07405237301122279 +-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.003109929237841972,-0.08027223148690674 +-0.19601568486050389,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.003109929237841972 +-0.11885338261143913,-0.19601568486050389,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.3503402893586334,-0.3503402893586334 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.3503402893586334 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +0.18979582638481995,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,0.11263352413575517 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995 +-0.2345968359850363,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517 +-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674 +0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715 +0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.27317798710956864 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334 +0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +-0.19601568486050389,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.11885338261143913,-0.19601568486050389,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.31175913823410106,-0.11885338261143913,-0.19601568486050389,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.3889214404831658,-0.31175913823410106,-0.11885338261143913,-0.19601568486050389,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.11885338261143913,-0.19601568486050389,-0.041691080362374365,0.03547122188669041 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.11885338261143913,-0.19601568486050389,-0.041691080362374365 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.11885338261143913,-0.19601568486050389 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.11885338261143913 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106 +0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +0.18979582638481995,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.003109929237841972,-0.08027223148690674 +-0.041691080362374365,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.003109929237841972 +-0.11885338261143913,-0.041691080362374365,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.11263352413575517,0.18979582638481995 +-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.11263352413575517 +-0.1574345337359715,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.3889214404831658 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +0.07405237301122279,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.19601568486050389,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.11885338261143913,-0.19601568486050389,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,0.15121467526028756 +-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.3503402893586334,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.041691080362374365,0.07405237301122279,0.15121467526028756 +-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.041691080362374365,0.07405237301122279 +-0.11885338261143913,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.041691080362374365 +-0.19601568486050389,-0.11885338261143913,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389 +-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.11885338261143913 +0.07405237301122279,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864 +0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.27317798710956864,-0.3503402893586334 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.27317798710956864 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.19601568486050389 +0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365 +0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756 +-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.07405237301122279 +-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.15121467526028756 +-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.03547122188669041 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.041691080362374365,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +0.03547122188669041,-0.041691080362374365,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.11885338261143913,0.03547122188669041,-0.041691080362374365,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.19601568486050389,-0.11885338261143913,0.03547122188669041,-0.041691080362374365,0.15121467526028756,0.07405237301122279,0.15121467526028756 +-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,0.03547122188669041,-0.041691080362374365,0.15121467526028756,0.07405237301122279 +-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,0.03547122188669041,-0.041691080362374365,0.15121467526028756 +-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,0.03547122188669041,-0.041691080362374365 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,0.03547122188669041 +-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913 +-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389 +-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106 +0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674 +-0.041691080362374365,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715 +0.03547122188669041,-0.041691080362374365,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.11885338261143913,0.03547122188669041,-0.041691080362374365,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.19601568486050389,-0.11885338261143913,0.03547122188669041,-0.041691080362374365,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.3889214404831658,-0.19601568486050389,-0.11885338261143913,0.03547122188669041,-0.041691080362374365,0.15121467526028756,0.2283769775093523 +-0.31175913823410106,-0.3889214404831658,-0.19601568486050389,-0.11885338261143913,0.03547122188669041,-0.041691080362374365,0.15121467526028756 +-0.31175913823410106,-0.31175913823410106,-0.3889214404831658,-0.19601568486050389,-0.11885338261143913,0.03547122188669041,-0.041691080362374365 +-0.2345968359850363,-0.31175913823410106,-0.31175913823410106,-0.3889214404831658,-0.19601568486050389,-0.11885338261143913,0.03547122188669041 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.31175913823410106,-0.3889214404831658,-0.19601568486050389,-0.11885338261143913 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.31175913823410106,-0.3889214404831658,-0.19601568486050389 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.31175913823410106,-0.3889214404831658 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.31175913823410106 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.15121467526028756 +-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389 +-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864 +0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +0.15121467526028756,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.08027223148690674,-0.003109929237841972 +0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.08027223148690674 +0.07405237301122279,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,0.15121467526028756 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756 +-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279 +-0.11885338261143913,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.003109929237841972,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389 +0.07405237301122279,-0.003109929237841972,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.3889214404831658 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.19601568486050389,-0.11885338261143913 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.19601568486050389 +0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756 +-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.07405237301122279 +-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.15121467526028756 +-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.03547122188669041 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.003109929237841972,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +0.07405237301122279,-0.003109929237841972,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.08027223148690674,0.07405237301122279,-0.003109929237841972,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.19601568486050389,-0.08027223148690674,0.07405237301122279,-0.003109929237841972,0.15121467526028756,0.07405237301122279,0.15121467526028756 +-0.27317798710956864,-0.19601568486050389,-0.08027223148690674,0.07405237301122279,-0.003109929237841972,0.15121467526028756,0.07405237301122279 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.08027223148690674,0.07405237301122279,-0.003109929237841972,0.15121467526028756 +-0.1574345337359715,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.08027223148690674,0.07405237301122279,-0.003109929237841972 +-0.2345968359850363,-0.1574345337359715,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.08027223148690674,0.07405237301122279 +-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.08027223148690674 +-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.3503402893586334,-0.27317798710956864 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.3503402893586334 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.27317798710956864,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.1574345337359715,-0.27317798710956864,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.3503402893586334,-0.1574345337359715,-0.27317798710956864,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756 +-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.27317798710956864,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.27317798710956864,-0.08027223148690674,-0.003109929237841972 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.27317798710956864,-0.08027223148690674 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.27317798710956864 +0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715 +0.18979582638481995,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334 +0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.003109929237841972,-0.08027223148690674 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.003109929237841972 +0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517 +-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.18979582638481995 +-0.19601568486050389,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279 +-0.27317798710956864,-0.19601568486050389,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972 +-0.11885338261143913,-0.27317798710956864,-0.19601568486050389,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.003109929237841972,-0.11885338261143913,-0.27317798710956864,-0.19601568486050389,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389 +0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.27317798710956864,-0.19601568486050389,-0.3889214404831658,-0.27317798710956864 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.27317798710956864,-0.19601568486050389,-0.3889214404831658 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.27317798710956864,-0.19601568486050389 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.11885338261143913,-0.27317798710956864 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.11885338261143913 +0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +0.07405237301122279,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,0.15121467526028756 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.15121467526028756 +-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389 +0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.27317798710956864 +0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041 +0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.27317798710956864,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995 +-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517 +-0.3889214404831658,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,0.18979582638481995 +-0.31175913823410106,-0.3889214404831658,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.003109929237841972,0.07405237301122279 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,-0.003109929237841972 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.19601568486050389,-0.27317798710956864 +0.07405237301122279,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.19601568486050389 +-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +0.15121467526028756,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.2283769775093523,0.15121467526028756,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +0.15121467526028756,0.2283769775093523,0.15121467526028756,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.1574345337359715 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,-0.003109929237841972,0.07405237301122279,-0.08027223148690674 +-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,-0.003109929237841972,0.07405237301122279 +-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,-0.003109929237841972 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.3889214404831658,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.31175913823410106,-0.3889214404831658,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756 +-0.31175913823410106,-0.31175913823410106,-0.3889214404831658,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279 +-0.2345968359850363,-0.31175913823410106,-0.31175913823410106,-0.3889214404831658,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.31175913823410106,-0.3889214404831658,-0.19601568486050389,-0.11885338261143913 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.31175913823410106,-0.3889214404831658,-0.19601568486050389 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.31175913823410106,-0.3889214404831658 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.31175913823410106 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756 +-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.07405237301122279 +-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.15121467526028756 +-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.03547122188669041 +-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106 +0.07405237301122279,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.11885338261143913 +-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365 +-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756 +-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365,0.07405237301122279 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913,-0.041691080362374365 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.11885338261143913 +-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363 +-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106 +0.07405237301122279,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.15121467526028756,0.07405237301122279,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.11885338261143913,-0.041691080362374365 +0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.11885338261143913 +0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.08027223148690674,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756 +-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.15121467526028756,0.07405237301122279 +-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.15121467526028756 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363 +-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106 +0.07405237301122279,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.15121467526028756,0.07405237301122279,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864 +0.3055392797584171,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389 +0.2283769775093523,0.3055392797584171,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.11885338261143913,-0.041691080362374365 +0.15121467526028756,0.2283769775093523,0.3055392797584171,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.11885338261143913 +0.03547122188669041,0.15121467526028756,0.2283769775093523,0.3055392797584171,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.08027223148690674,0.03547122188669041,0.15121467526028756,0.2283769775093523,0.3055392797584171,0.2283769775093523,0.15121467526028756 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.15121467526028756,0.2283769775093523,0.3055392797584171,0.2283769775093523 +-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.15121467526028756,0.2283769775093523,0.3055392797584171 +-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.15121467526028756,0.2283769775093523 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.15121467526028756 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.19601568486050389,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674 +-0.27317798710956864,-0.19601568486050389,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715 +-0.11885338261143913,-0.27317798710956864,-0.19601568486050389,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.041691080362374365,-0.11885338261143913,-0.27317798710956864,-0.19601568486050389,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.07405237301122279,-0.041691080362374365,-0.11885338261143913,-0.27317798710956864,-0.19601568486050389,-0.3503402893586334,-0.4275025916076982 +0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.11885338261143913,-0.27317798710956864,-0.19601568486050389,-0.3503402893586334 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.11885338261143913,-0.27317798710956864,-0.19601568486050389 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.11885338261143913,-0.27317798710956864 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.11885338261143913 +-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365 +-0.1574345337359715,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.07405237301122279,0.15121467526028756 +-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.07405237301122279 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +-0.003109929237841972,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106,-0.2345968359850363 +-0.11885338261143913,-0.003109929237841972,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.31175913823410106 +0.07405237301122279,-0.11885338261143913,-0.003109929237841972,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.15121467526028756,0.07405237301122279,-0.11885338261143913,-0.003109929237841972,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.11885338261143913,-0.003109929237841972,-0.19601568486050389,-0.27317798710956864 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.11885338261143913,-0.003109929237841972,-0.19601568486050389 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.11885338261143913,-0.003109929237841972 +0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.11885338261143913 +0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756 +-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.07405237301122279 +-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.15121467526028756 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715 +-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363 +-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864 +0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.3503402893586334,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.4275025916076982,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.11885338261143913,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.08027223148690674 +-0.19601568486050389,-0.11885338261143913,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715 +-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.3503402893586334 +0.03547122188669041,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.3503402893586334,-0.4275025916076982 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.3503402893586334 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.19601568486050389 +0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517 +-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674 +-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715 +-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106 +0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.4275025916076982,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.31175913823410106,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041 +-0.2345968359850363,-0.31175913823410106,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365 +-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.1574345337359715 +-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.31175913823410106,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.31175913823410106 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106 +0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.11885338261143913,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.3889214404831658,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.31175913823410106,-0.3889214404831658,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.11263352413575517,0.18979582638481995 +-0.27317798710956864,-0.31175913823410106,-0.3889214404831658,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.11263352413575517 +-0.19601568486050389,-0.27317798710956864,-0.31175913823410106,-0.3889214404831658,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.31175913823410106,-0.3889214404831658,-0.19601568486050389,-0.11885338261143913 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.31175913823410106,-0.3889214404831658,-0.19601568486050389 +0.07405237301122279,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.31175913823410106,-0.3889214404831658 +0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.31175913823410106 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.11885338261143913 +-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365 +-0.1574345337359715,-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.07405237301122279,0.15121467526028756 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.07405237301122279 +-0.11885338261143913,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715 +-0.041691080362374365,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.2345968359850363 +0.03547122188669041,-0.041691080362374365,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334,-0.4275025916076982 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.2345968359850363,-0.11885338261143913,-0.3503402893586334 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.2345968359850363,-0.11885338261143913 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.2345968359850363 +0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517 +-0.4275025916076982,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.19601568486050389,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.11885338261143913,-0.19601568486050389,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363,-0.1574345337359715 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.2345968359850363 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.3503402893586334,-0.3503402893586334 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.3503402893586334 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.003109929237841972,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.3503402893586334,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.03547122188669041,0.11263352413575517 +-0.27317798710956864,-0.3503402893586334,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.03547122188669041 +-0.4275025916076982,-0.27317798710956864,-0.3503402893586334,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517 +-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.3503402893586334,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.3503402893586334,-0.1574345337359715,-0.08027223148690674 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.3503402893586334,-0.1574345337359715 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.3503402893586334 +0.03547122188669041,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864 +-0.041691080362374365,0.03547122188669041,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.18979582638481995,0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +0.11263352413575517,0.18979582638481995,0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.11885338261143913,-0.19601568486050389 +-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.11885338261143913 +-0.11885338261143913,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,-0.041691080362374365,0.03547122188669041 +-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,-0.041691080362374365 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.11263352413575517,0.18979582638481995 +-0.4660837427322306,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.11263352413575517 +-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972 +-0.2345968359850363,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.31175913823410106,-0.2345968359850363,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389 +-0.1574345337359715,-0.31175913823410106,-0.2345968359850363,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.27317798710956864 +-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.2345968359850363,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.2345968359850363,-0.3889214404831658,-0.4660837427322306 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.2345968359850363,-0.3889214404831658 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106,-0.2345968359850363 +0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.31175913823410106 +-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +0.07405237301122279,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.07405237301122279,0.15121467526028756 +-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972,0.07405237301122279 +-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,-0.003109929237841972 +-0.4660837427322306,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279 +-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.1574345337359715,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913 +-0.27317798710956864,-0.1574345337359715,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389 +-0.08027223148690674,-0.27317798710956864,-0.1574345337359715,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.31175913823410106 +-0.003109929237841972,-0.08027223148690674,-0.27317798710956864,-0.1574345337359715,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.27317798710956864,-0.1574345337359715,-0.3889214404831658,-0.4660837427322306 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.27317798710956864,-0.1574345337359715,-0.3889214404831658 +0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.27317798710956864,-0.1574345337359715 +-0.11885338261143913,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.27317798710956864 +-0.041691080362374365,-0.11885338261143913,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.19601568486050389,-0.041691080362374365,-0.11885338261143913,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.27317798710956864,-0.19601568486050389,-0.041691080362374365,-0.11885338261143913,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.041691080362374365,-0.11885338261143913,0.07405237301122279,0.15121467526028756 +-0.4660837427322306,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.041691080362374365,-0.11885338261143913,0.07405237301122279 +-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.041691080362374365,-0.11885338261143913 +-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389,-0.041691080362374365 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.27317798710956864,-0.19601568486050389 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658,-0.27317798710956864 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306,-0.3889214404831658 +0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.4660837427322306 +0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715 +-0.11885338261143913,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674 +-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.11263352413575517,0.18979582638481995 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.11263352413575517 +-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334 +0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.1574345337359715 +0.26695812863388474,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674 +0.3441204308829495,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +0.2283769775093523,0.3441204308829495,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.11263352413575517 +0.07405237301122279,0.2283769775093523,0.3441204308829495,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.18979582638481995 +0.15121467526028756,0.07405237301122279,0.2283769775093523,0.3441204308829495,0.26695812863388474,0.18979582638481995,0.11263352413575517 +-0.041691080362374365,0.15121467526028756,0.07405237301122279,0.2283769775093523,0.3441204308829495,0.26695812863388474,0.18979582638481995 +-0.11885338261143913,-0.041691080362374365,0.15121467526028756,0.07405237301122279,0.2283769775093523,0.3441204308829495,0.26695812863388474 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.15121467526028756,0.07405237301122279,0.2283769775093523,0.3441204308829495 +-0.11885338261143913,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.15121467526028756,0.07405237301122279,0.2283769775093523 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.15121467526028756,0.07405237301122279 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.15121467526028756 +0.18979582638481995,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +0.11263352413575517,0.18979582638481995,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.11885338261143913 +0.3055392797584171,0.11263352413575517,0.18979582638481995,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +0.3827015820074819,0.3055392797584171,0.11263352413575517,0.18979582638481995,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +0.4598638842565466,0.3827015820074819,0.3055392797584171,0.11263352413575517,0.18979582638481995,0.03547122188669041,-0.041691080362374365 +0.3827015820074819,0.4598638842565466,0.3827015820074819,0.3055392797584171,0.11263352413575517,0.18979582638481995,0.03547122188669041 +0.3055392797584171,0.3827015820074819,0.4598638842565466,0.3827015820074819,0.3055392797584171,0.11263352413575517,0.18979582638481995 +0.3827015820074819,0.3055392797584171,0.3827015820074819,0.4598638842565466,0.3827015820074819,0.3055392797584171,0.11263352413575517 +0.3055392797584171,0.3827015820074819,0.3055392797584171,0.3827015820074819,0.4598638842565466,0.3827015820074819,0.3055392797584171 +0.2283769775093523,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.3827015820074819,0.4598638842565466,0.3827015820074819 +0.11263352413575517,0.2283769775093523,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.3827015820074819,0.4598638842565466 +0.03547122188669041,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.3827015820074819,0.3055392797584171,0.3827015820074819 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.3827015820074819,0.3055392797584171 +-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.3827015820074819 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.2283769775093523,0.3055392797584171 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.2283769775093523 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363 +-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.3503402893586334,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995 +-0.4275025916076982,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517 +-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.08027223148690674 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715 +0.03547122188669041,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.3503402893586334 +-0.08027223148690674,0.03547122188669041,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363 +0.11263352413575517,-0.08027223148690674,0.03547122188669041,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +0.18979582638481995,0.11263352413575517,-0.08027223148690674,0.03547122188669041,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.11263352413575517,0.18979582638481995,0.11263352413575517,-0.08027223148690674,0.03547122188669041,-0.1574345337359715,-0.2345968359850363 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,-0.08027223148690674,0.03547122188669041,-0.1574345337359715 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,-0.08027223148690674,0.03547122188669041 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,-0.08027223148690674 +-0.3503402893586334,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.4275025916076982,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.08027223148690674 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363,-0.3503402893586334 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982,-0.2345968359850363 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.4275025916076982 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.27317798710956864,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972 +-0.1574345337359715,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.08027223148690674 +-0.2345968359850363,-0.1574345337359715,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.31175913823410106,-0.4275025916076982,-0.3503402893586334 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.31175913823410106,-0.4275025916076982 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.31175913823410106 +0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715 +-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.27317798710956864,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.11885338261143913,-0.27317798710956864,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674 +0.03547122188669041,-0.11885338261143913,-0.27317798710956864,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715 +0.15121467526028756,0.03547122188669041,-0.11885338261143913,-0.27317798710956864,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +0.3055392797584171,0.15121467526028756,0.03547122188669041,-0.11885338261143913,-0.27317798710956864,-0.4275025916076982,-0.3503402893586334 +0.4212827331320143,0.3055392797584171,0.15121467526028756,0.03547122188669041,-0.11885338261143913,-0.27317798710956864,-0.4275025916076982 +0.3441204308829495,0.4212827331320143,0.3055392797584171,0.15121467526028756,0.03547122188669041,-0.11885338261143913,-0.27317798710956864 +0.4598638842565466,0.3441204308829495,0.4212827331320143,0.3055392797584171,0.15121467526028756,0.03547122188669041,-0.11885338261143913 +0.5370261865056114,0.4598638842565466,0.3441204308829495,0.4212827331320143,0.3055392797584171,0.15121467526028756,0.03547122188669041 +0.6141884887546761,0.5370261865056114,0.4598638842565466,0.3441204308829495,0.4212827331320143,0.3055392797584171,0.15121467526028756 +0.691350791003741,0.6141884887546761,0.5370261865056114,0.4598638842565466,0.3441204308829495,0.4212827331320143,0.3055392797584171 +0.7685130932528057,0.691350791003741,0.6141884887546761,0.5370261865056114,0.4598638842565466,0.3441204308829495,0.4212827331320143 +0.8456753955018704,0.7685130932528057,0.691350791003741,0.6141884887546761,0.5370261865056114,0.4598638842565466,0.3441204308829495 +0.9228376977509352,0.8456753955018704,0.7685130932528057,0.691350791003741,0.6141884887546761,0.5370261865056114,0.4598638842565466 +0.8456753955018704,0.9228376977509352,0.8456753955018704,0.7685130932528057,0.691350791003741,0.6141884887546761,0.5370261865056114 +0.7685130932528057,0.8456753955018704,0.9228376977509352,0.8456753955018704,0.7685130932528057,0.691350791003741,0.6141884887546761 +0.691350791003741,0.7685130932528057,0.8456753955018704,0.9228376977509352,0.8456753955018704,0.7685130932528057,0.691350791003741 +0.6141884887546761,0.691350791003741,0.7685130932528057,0.8456753955018704,0.9228376977509352,0.8456753955018704,0.7685130932528057 +0.5370261865056114,0.6141884887546761,0.691350791003741,0.7685130932528057,0.8456753955018704,0.9228376977509352,0.8456753955018704 +0.4598638842565466,0.5370261865056114,0.6141884887546761,0.691350791003741,0.7685130932528057,0.8456753955018704,0.9228376977509352 +0.3827015820074819,0.4598638842565466,0.5370261865056114,0.6141884887546761,0.691350791003741,0.7685130932528057,0.8456753955018704 +0.18979582638481995,0.3827015820074819,0.4598638842565466,0.5370261865056114,0.6141884887546761,0.691350791003741,0.7685130932528057 +0.26695812863388474,0.18979582638481995,0.3827015820074819,0.4598638842565466,0.5370261865056114,0.6141884887546761,0.691350791003741 +0.11263352413575517,0.26695812863388474,0.18979582638481995,0.3827015820074819,0.4598638842565466,0.5370261865056114,0.6141884887546761 +0.18979582638481995,0.11263352413575517,0.26695812863388474,0.18979582638481995,0.3827015820074819,0.4598638842565466,0.5370261865056114 +0.3441204308829495,0.18979582638481995,0.11263352413575517,0.26695812863388474,0.18979582638481995,0.3827015820074819,0.4598638842565466 +0.4212827331320143,0.3441204308829495,0.18979582638481995,0.11263352413575517,0.26695812863388474,0.18979582638481995,0.3827015820074819 +0.498445035381079,0.4212827331320143,0.3441204308829495,0.18979582638481995,0.11263352413575517,0.26695812863388474,0.18979582638481995 +0.5756073376301438,0.498445035381079,0.4212827331320143,0.3441204308829495,0.18979582638481995,0.11263352413575517,0.26695812863388474 +0.6527696398792086,0.5756073376301438,0.498445035381079,0.4212827331320143,0.3441204308829495,0.18979582638481995,0.11263352413575517 +0.7299319421282733,0.6527696398792086,0.5756073376301438,0.498445035381079,0.4212827331320143,0.3441204308829495,0.18979582638481995 +0.6527696398792086,0.7299319421282733,0.6527696398792086,0.5756073376301438,0.498445035381079,0.4212827331320143,0.3441204308829495 +0.5756073376301438,0.6527696398792086,0.7299319421282733,0.6527696398792086,0.5756073376301438,0.498445035381079,0.4212827331320143 +0.3827015820074819,0.5756073376301438,0.6527696398792086,0.7299319421282733,0.6527696398792086,0.5756073376301438,0.498445035381079 +0.4598638842565466,0.3827015820074819,0.5756073376301438,0.6527696398792086,0.7299319421282733,0.6527696398792086,0.5756073376301438 +0.3055392797584171,0.4598638842565466,0.3827015820074819,0.5756073376301438,0.6527696398792086,0.7299319421282733,0.6527696398792086 +0.2283769775093523,0.3055392797584171,0.4598638842565466,0.3827015820074819,0.5756073376301438,0.6527696398792086,0.7299319421282733 +0.11263352413575517,0.2283769775093523,0.3055392797584171,0.4598638842565466,0.3827015820074819,0.5756073376301438,0.6527696398792086 +0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.4598638842565466,0.3827015820074819,0.5756073376301438 +0.26695812863388474,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.4598638842565466,0.3827015820074819 +0.3441204308829495,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.4598638842565466 +0.4212827331320143,0.3441204308829495,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3055392797584171 +0.498445035381079,0.4212827331320143,0.3441204308829495,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.2283769775093523 +0.6141884887546761,0.498445035381079,0.4212827331320143,0.3441204308829495,0.26695812863388474,0.18979582638481995,0.11263352413575517 +0.691350791003741,0.6141884887546761,0.498445035381079,0.4212827331320143,0.3441204308829495,0.26695812863388474,0.18979582638481995 +0.7685130932528057,0.691350791003741,0.6141884887546761,0.498445035381079,0.4212827331320143,0.3441204308829495,0.26695812863388474 +0.691350791003741,0.7685130932528057,0.691350791003741,0.6141884887546761,0.498445035381079,0.4212827331320143,0.3441204308829495 +0.6141884887546761,0.691350791003741,0.7685130932528057,0.691350791003741,0.6141884887546761,0.498445035381079,0.4212827331320143 +0.691350791003741,0.6141884887546761,0.691350791003741,0.7685130932528057,0.691350791003741,0.6141884887546761,0.498445035381079 +0.5756073376301438,0.691350791003741,0.6141884887546761,0.691350791003741,0.7685130932528057,0.691350791003741,0.6141884887546761 +0.4598638842565466,0.5756073376301438,0.691350791003741,0.6141884887546761,0.691350791003741,0.7685130932528057,0.691350791003741 +0.3827015820074819,0.4598638842565466,0.5756073376301438,0.691350791003741,0.6141884887546761,0.691350791003741,0.7685130932528057 +0.3055392797584171,0.3827015820074819,0.4598638842565466,0.5756073376301438,0.691350791003741,0.6141884887546761,0.691350791003741 +0.11263352413575517,0.3055392797584171,0.3827015820074819,0.4598638842565466,0.5756073376301438,0.691350791003741,0.6141884887546761 +0.2283769775093523,0.11263352413575517,0.3055392797584171,0.3827015820074819,0.4598638842565466,0.5756073376301438,0.691350791003741 +0.18979582638481995,0.2283769775093523,0.11263352413575517,0.3055392797584171,0.3827015820074819,0.4598638842565466,0.5756073376301438 +0.3441204308829495,0.18979582638481995,0.2283769775093523,0.11263352413575517,0.3055392797584171,0.3827015820074819,0.4598638842565466 +0.26695812863388474,0.3441204308829495,0.18979582638481995,0.2283769775093523,0.11263352413575517,0.3055392797584171,0.3827015820074819 +0.4212827331320143,0.26695812863388474,0.3441204308829495,0.18979582638481995,0.2283769775093523,0.11263352413575517,0.3055392797584171 +0.498445035381079,0.4212827331320143,0.26695812863388474,0.3441204308829495,0.18979582638481995,0.2283769775093523,0.11263352413575517 +0.5756073376301438,0.498445035381079,0.4212827331320143,0.26695812863388474,0.3441204308829495,0.18979582638481995,0.2283769775093523 +0.6527696398792086,0.5756073376301438,0.498445035381079,0.4212827331320143,0.26695812863388474,0.3441204308829495,0.18979582638481995 +0.7299319421282733,0.6527696398792086,0.5756073376301438,0.498445035381079,0.4212827331320143,0.26695812863388474,0.3441204308829495 +0.6527696398792086,0.7299319421282733,0.6527696398792086,0.5756073376301438,0.498445035381079,0.4212827331320143,0.26695812863388474 +0.7299319421282733,0.6527696398792086,0.7299319421282733,0.6527696398792086,0.5756073376301438,0.498445035381079,0.4212827331320143 +0.6527696398792086,0.7299319421282733,0.6527696398792086,0.7299319421282733,0.6527696398792086,0.5756073376301438,0.498445035381079 +0.5756073376301438,0.6527696398792086,0.7299319421282733,0.6527696398792086,0.7299319421282733,0.6527696398792086,0.5756073376301438 +0.3827015820074819,0.5756073376301438,0.6527696398792086,0.7299319421282733,0.6527696398792086,0.7299319421282733,0.6527696398792086 +0.4598638842565466,0.3827015820074819,0.5756073376301438,0.6527696398792086,0.7299319421282733,0.6527696398792086,0.7299319421282733 +0.3055392797584171,0.4598638842565466,0.3827015820074819,0.5756073376301438,0.6527696398792086,0.7299319421282733,0.6527696398792086 +0.2283769775093523,0.3055392797584171,0.4598638842565466,0.3827015820074819,0.5756073376301438,0.6527696398792086,0.7299319421282733 +-0.003109929237841972,0.2283769775093523,0.3055392797584171,0.4598638842565466,0.3827015820074819,0.5756073376301438,0.6527696398792086 +0.07405237301122279,-0.003109929237841972,0.2283769775093523,0.3055392797584171,0.4598638842565466,0.3827015820074819,0.5756073376301438 +-0.11885338261143913,0.07405237301122279,-0.003109929237841972,0.2283769775093523,0.3055392797584171,0.4598638842565466,0.3827015820074819 +-0.19601568486050389,-0.11885338261143913,0.07405237301122279,-0.003109929237841972,0.2283769775093523,0.3055392797584171,0.4598638842565466 +-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,0.07405237301122279,-0.003109929237841972,0.2283769775093523,0.3055392797584171 +-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,0.07405237301122279,-0.003109929237841972,0.2283769775093523 +-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,0.07405237301122279,-0.003109929237841972 +-0.11885338261143913,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913,0.07405237301122279 +-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389,-0.11885338261143913 +-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.19601568486050389 +0.07405237301122279,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106 +0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106,-0.3889214404831658 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.31175913823410106 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.19601568486050389 +0.26695812863388474,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.041691080362374365 +0.4212827331320143,0.26695812863388474,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +0.5756073376301438,0.4212827331320143,0.26695812863388474,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +0.7299319421282733,0.5756073376301438,0.4212827331320143,0.26695812863388474,0.07405237301122279,0.15121467526028756,0.2283769775093523 +0.8842565466264029,0.7299319421282733,0.5756073376301438,0.4212827331320143,0.26695812863388474,0.07405237301122279,0.15121467526028756 +1.0,0.8842565466264029,0.7299319421282733,0.5756073376301438,0.4212827331320143,0.26695812863388474,0.07405237301122279 +0.9228376977509352,1.0,0.8842565466264029,0.7299319421282733,0.5756073376301438,0.4212827331320143,0.26695812863388474 +0.8456753955018704,0.9228376977509352,1.0,0.8842565466264029,0.7299319421282733,0.5756073376301438,0.4212827331320143 +0.7685130932528057,0.8456753955018704,0.9228376977509352,1.0,0.8842565466264029,0.7299319421282733,0.5756073376301438 +0.6527696398792086,0.7685130932528057,0.8456753955018704,0.9228376977509352,1.0,0.8842565466264029,0.7299319421282733 +0.5756073376301438,0.6527696398792086,0.7685130932528057,0.8456753955018704,0.9228376977509352,1.0,0.8842565466264029 +0.498445035381079,0.5756073376301438,0.6527696398792086,0.7685130932528057,0.8456753955018704,0.9228376977509352,1.0 +0.3827015820074819,0.498445035381079,0.5756073376301438,0.6527696398792086,0.7685130932528057,0.8456753955018704,0.9228376977509352 +0.3055392797584171,0.3827015820074819,0.498445035381079,0.5756073376301438,0.6527696398792086,0.7685130932528057,0.8456753955018704 +0.3827015820074819,0.3055392797584171,0.3827015820074819,0.498445035381079,0.5756073376301438,0.6527696398792086,0.7685130932528057 +0.5370261865056114,0.3827015820074819,0.3055392797584171,0.3827015820074819,0.498445035381079,0.5756073376301438,0.6527696398792086 +0.4598638842565466,0.5370261865056114,0.3827015820074819,0.3055392797584171,0.3827015820074819,0.498445035381079,0.5756073376301438 +0.6141884887546761,0.4598638842565466,0.5370261865056114,0.3827015820074819,0.3055392797584171,0.3827015820074819,0.498445035381079 +0.691350791003741,0.6141884887546761,0.4598638842565466,0.5370261865056114,0.3827015820074819,0.3055392797584171,0.3827015820074819 +0.8070942443773381,0.691350791003741,0.6141884887546761,0.4598638842565466,0.5370261865056114,0.3827015820074819,0.3055392797584171 +0.8842565466264029,0.8070942443773381,0.691350791003741,0.6141884887546761,0.4598638842565466,0.5370261865056114,0.3827015820074819 +0.9614188488754676,0.8842565466264029,0.8070942443773381,0.691350791003741,0.6141884887546761,0.4598638842565466,0.5370261865056114 +0.8842565466264029,0.9614188488754676,0.8842565466264029,0.8070942443773381,0.691350791003741,0.6141884887546761,0.4598638842565466 +0.8070942443773381,0.8842565466264029,0.9614188488754676,0.8842565466264029,0.8070942443773381,0.691350791003741,0.6141884887546761 +0.7299319421282733,0.8070942443773381,0.8842565466264029,0.9614188488754676,0.8842565466264029,0.8070942443773381,0.691350791003741 +0.6141884887546761,0.7299319421282733,0.8070942443773381,0.8842565466264029,0.9614188488754676,0.8842565466264029,0.8070942443773381 +0.498445035381079,0.6141884887546761,0.7299319421282733,0.8070942443773381,0.8842565466264029,0.9614188488754676,0.8842565466264029 +0.3827015820074819,0.498445035381079,0.6141884887546761,0.7299319421282733,0.8070942443773381,0.8842565466264029,0.9614188488754676 +0.15121467526028756,0.3827015820074819,0.498445035381079,0.6141884887546761,0.7299319421282733,0.8070942443773381,0.8842565466264029 +0.26695812863388474,0.15121467526028756,0.3827015820074819,0.498445035381079,0.6141884887546761,0.7299319421282733,0.8070942443773381 +0.07405237301122279,0.26695812863388474,0.15121467526028756,0.3827015820074819,0.498445035381079,0.6141884887546761,0.7299319421282733 +0.15121467526028756,0.07405237301122279,0.26695812863388474,0.15121467526028756,0.3827015820074819,0.498445035381079,0.6141884887546761 +0.07405237301122279,0.15121467526028756,0.07405237301122279,0.26695812863388474,0.15121467526028756,0.3827015820074819,0.498445035381079 +-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,0.26695812863388474,0.15121467526028756,0.3827015820074819 +-0.19601568486050389,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,0.26695812863388474,0.15121467526028756 +-0.11885338261143913,-0.19601568486050389,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,0.26695812863388474 +-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.3503402893586334,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.041691080362374365,0.07405237301122279,0.15121467526028756 +-0.2345968359850363,-0.3503402893586334,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.041691080362374365,0.07405237301122279 +-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.041691080362374365 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.27317798710956864,-0.11885338261143913 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.27317798710956864 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.08027223148690674,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.2345968359850363,-0.08027223148690674,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,0.03547122188669041,0.15121467526028756,0.07405237301122279,0.15121467526028756 +-0.31175913823410106,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,0.03547122188669041,0.15121467526028756,0.07405237301122279 +-0.3889214404831658,-0.31175913823410106,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,0.03547122188669041,0.15121467526028756 +-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,0.03547122188669041 +-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674 +-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.1574345337359715,-0.2345968359850363 +0.07405237301122279,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.1574345337359715 +-0.041691080362374365,0.07405237301122279,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106 +0.15121467526028756,-0.041691080362374365,0.07405237301122279,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658 +0.2283769775093523,0.15121467526028756,-0.041691080362374365,0.07405237301122279,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106 +0.15121467526028756,0.2283769775093523,0.15121467526028756,-0.041691080362374365,0.07405237301122279,-0.11885338261143913,-0.19601568486050389 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,-0.041691080362374365,0.07405237301122279,-0.11885338261143913 +-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,-0.041691080362374365,0.07405237301122279 +-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,-0.041691080362374365 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756 +-0.1574345337359715,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279 +-0.27317798710956864,-0.1574345337359715,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.041691080362374365,-0.27317798710956864,-0.1574345337359715,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +0.07405237301122279,-0.041691080362374365,-0.27317798710956864,-0.1574345337359715,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +0.18979582638481995,0.07405237301122279,-0.041691080362374365,-0.27317798710956864,-0.1574345337359715,-0.3503402893586334,-0.27317798710956864 +0.3055392797584171,0.18979582638481995,0.07405237301122279,-0.041691080362374365,-0.27317798710956864,-0.1574345337359715,-0.3503402893586334 +0.18979582638481995,0.3055392797584171,0.18979582638481995,0.07405237301122279,-0.041691080362374365,-0.27317798710956864,-0.1574345337359715 +0.07405237301122279,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.07405237301122279,-0.041691080362374365,-0.27317798710956864 +0.15121467526028756,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.07405237301122279,-0.041691080362374365 +0.26695812863388474,0.15121467526028756,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.07405237301122279 +0.15121467526028756,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.18979582638481995 +0.2283769775093523,0.15121467526028756,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.18979582638481995,0.3055392797584171 +0.07405237301122279,0.2283769775093523,0.15121467526028756,0.26695812863388474,0.15121467526028756,0.07405237301122279,0.18979582638481995 +0.18979582638481995,0.07405237301122279,0.2283769775093523,0.15121467526028756,0.26695812863388474,0.15121467526028756,0.07405237301122279 +0.3055392797584171,0.18979582638481995,0.07405237301122279,0.2283769775093523,0.15121467526028756,0.26695812863388474,0.15121467526028756 +0.18979582638481995,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.2283769775093523,0.15121467526028756,0.26695812863388474 +0.3055392797584171,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.2283769775093523,0.15121467526028756 +0.18979582638481995,0.3055392797584171,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.2283769775093523 +0.07405237301122279,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.07405237301122279 +0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.3055392797584171,0.18979582638481995 +0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.3055392797584171 +0.18979582638481995,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.18979582638481995 +0.3055392797584171,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171 +0.18979582638481995,0.3055392797584171,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995 +0.07405237301122279,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.07405237301122279 +0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.3055392797584171,0.18979582638481995 +0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.3055392797584171 +0.15121467526028756,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.18979582638481995 +0.2283769775093523,0.15121467526028756,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171 +0.3055392797584171,0.2283769775093523,0.15121467526028756,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995 +0.18979582638481995,0.3055392797584171,0.2283769775093523,0.15121467526028756,0.3055392797584171,0.18979582638481995,0.07405237301122279 +0.07405237301122279,0.18979582638481995,0.3055392797584171,0.2283769775093523,0.15121467526028756,0.3055392797584171,0.18979582638481995 +0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.2283769775093523,0.15121467526028756,0.3055392797584171 +0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.2283769775093523,0.15121467526028756 +0.2283769775093523,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171,0.2283769775093523 +0.11263352413575517,0.2283769775093523,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995,0.3055392797584171 +0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.18979582638481995,0.07405237301122279,0.18979582638481995 +0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.18979582638481995,0.07405237301122279 +0.18979582638481995,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3055392797584171,0.18979582638481995 +0.26695812863388474,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523,0.3055392797584171 +0.3441204308829495,0.26695812863388474,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.11263352413575517,0.2283769775093523 +0.498445035381079,0.3441204308829495,0.26695812863388474,0.18979582638481995,0.3055392797584171,0.18979582638481995,0.11263352413575517 +0.4212827331320143,0.498445035381079,0.3441204308829495,0.26695812863388474,0.18979582638481995,0.3055392797584171,0.18979582638481995 +0.5756073376301438,0.4212827331320143,0.498445035381079,0.3441204308829495,0.26695812863388474,0.18979582638481995,0.3055392797584171 +0.691350791003741,0.5756073376301438,0.4212827331320143,0.498445035381079,0.3441204308829495,0.26695812863388474,0.18979582638481995 +0.8070942443773381,0.691350791003741,0.5756073376301438,0.4212827331320143,0.498445035381079,0.3441204308829495,0.26695812863388474 +0.8842565466264029,0.8070942443773381,0.691350791003741,0.5756073376301438,0.4212827331320143,0.498445035381079,0.3441204308829495 +0.7685130932528057,0.8842565466264029,0.8070942443773381,0.691350791003741,0.5756073376301438,0.4212827331320143,0.498445035381079 +0.691350791003741,0.7685130932528057,0.8842565466264029,0.8070942443773381,0.691350791003741,0.5756073376301438,0.4212827331320143 +0.8070942443773381,0.691350791003741,0.7685130932528057,0.8842565466264029,0.8070942443773381,0.691350791003741,0.5756073376301438 +0.6527696398792086,0.8070942443773381,0.691350791003741,0.7685130932528057,0.8842565466264029,0.8070942443773381,0.691350791003741 +0.5370261865056114,0.6527696398792086,0.8070942443773381,0.691350791003741,0.7685130932528057,0.8842565466264029,0.8070942443773381 +0.6527696398792086,0.5370261865056114,0.6527696398792086,0.8070942443773381,0.691350791003741,0.7685130932528057,0.8842565466264029 +0.7685130932528057,0.6527696398792086,0.5370261865056114,0.6527696398792086,0.8070942443773381,0.691350791003741,0.7685130932528057 +0.6527696398792086,0.7685130932528057,0.6527696398792086,0.5370261865056114,0.6527696398792086,0.8070942443773381,0.691350791003741 +0.5370261865056114,0.6527696398792086,0.7685130932528057,0.6527696398792086,0.5370261865056114,0.6527696398792086,0.8070942443773381 +0.4598638842565466,0.5370261865056114,0.6527696398792086,0.7685130932528057,0.6527696398792086,0.5370261865056114,0.6527696398792086 +0.3441204308829495,0.4598638842565466,0.5370261865056114,0.6527696398792086,0.7685130932528057,0.6527696398792086,0.5370261865056114 +0.2283769775093523,0.3441204308829495,0.4598638842565466,0.5370261865056114,0.6527696398792086,0.7685130932528057,0.6527696398792086 +0.3441204308829495,0.2283769775093523,0.3441204308829495,0.4598638842565466,0.5370261865056114,0.6527696398792086,0.7685130932528057 +0.4598638842565466,0.3441204308829495,0.2283769775093523,0.3441204308829495,0.4598638842565466,0.5370261865056114,0.6527696398792086 +0.5756073376301438,0.4598638842565466,0.3441204308829495,0.2283769775093523,0.3441204308829495,0.4598638842565466,0.5370261865056114 +0.4598638842565466,0.5756073376301438,0.4598638842565466,0.3441204308829495,0.2283769775093523,0.3441204308829495,0.4598638842565466 +0.5370261865056114,0.4598638842565466,0.5756073376301438,0.4598638842565466,0.3441204308829495,0.2283769775093523,0.3441204308829495 +0.4212827331320143,0.5370261865056114,0.4598638842565466,0.5756073376301438,0.4598638842565466,0.3441204308829495,0.2283769775093523 +0.3441204308829495,0.4212827331320143,0.5370261865056114,0.4598638842565466,0.5756073376301438,0.4598638842565466,0.3441204308829495 +0.2283769775093523,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.4598638842565466,0.5756073376301438,0.4598638842565466 +0.4212827331320143,0.2283769775093523,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.4598638842565466,0.5756073376301438 +0.3441204308829495,0.4212827331320143,0.2283769775093523,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.4598638842565466 +0.5370261865056114,0.3441204308829495,0.4212827331320143,0.2283769775093523,0.3441204308829495,0.4212827331320143,0.5370261865056114 +0.4212827331320143,0.5370261865056114,0.3441204308829495,0.4212827331320143,0.2283769775093523,0.3441204308829495,0.4212827331320143 +0.5370261865056114,0.4212827331320143,0.5370261865056114,0.3441204308829495,0.4212827331320143,0.2283769775093523,0.3441204308829495 +0.4212827331320143,0.5370261865056114,0.4212827331320143,0.5370261865056114,0.3441204308829495,0.4212827331320143,0.2283769775093523 +0.5370261865056114,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.5370261865056114,0.3441204308829495,0.4212827331320143 +0.3827015820074819,0.5370261865056114,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.5370261865056114,0.3441204308829495 +0.6141884887546761,0.3827015820074819,0.5370261865056114,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.5370261865056114 +0.498445035381079,0.6141884887546761,0.3827015820074819,0.5370261865056114,0.4212827331320143,0.5370261865056114,0.4212827331320143 +0.5370261865056114,0.498445035381079,0.6141884887546761,0.3827015820074819,0.5370261865056114,0.4212827331320143,0.5370261865056114 +0.4212827331320143,0.5370261865056114,0.498445035381079,0.6141884887546761,0.3827015820074819,0.5370261865056114,0.4212827331320143 +0.3441204308829495,0.4212827331320143,0.5370261865056114,0.498445035381079,0.6141884887546761,0.3827015820074819,0.5370261865056114 +0.4598638842565466,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.498445035381079,0.6141884887546761,0.3827015820074819 +0.3827015820074819,0.4598638842565466,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.498445035381079,0.6141884887546761 +0.26695812863388474,0.3827015820074819,0.4598638842565466,0.3441204308829495,0.4212827331320143,0.5370261865056114,0.498445035381079 +0.3441204308829495,0.26695812863388474,0.3827015820074819,0.4598638842565466,0.3441204308829495,0.4212827331320143,0.5370261865056114 +0.4598638842565466,0.3441204308829495,0.26695812863388474,0.3827015820074819,0.4598638842565466,0.3441204308829495,0.4212827331320143 +0.5756073376301438,0.4598638842565466,0.3441204308829495,0.26695812863388474,0.3827015820074819,0.4598638842565466,0.3441204308829495 +0.4598638842565466,0.5756073376301438,0.4598638842565466,0.3441204308829495,0.26695812863388474,0.3827015820074819,0.4598638842565466 +0.3441204308829495,0.4598638842565466,0.5756073376301438,0.4598638842565466,0.3441204308829495,0.26695812863388474,0.3827015820074819 +0.4598638842565466,0.3441204308829495,0.4598638842565466,0.5756073376301438,0.4598638842565466,0.3441204308829495,0.26695812863388474 +0.5756073376301438,0.4598638842565466,0.3441204308829495,0.4598638842565466,0.5756073376301438,0.4598638842565466,0.3441204308829495 +0.498445035381079,0.5756073376301438,0.4598638842565466,0.3441204308829495,0.4598638842565466,0.5756073376301438,0.4598638842565466 +0.3827015820074819,0.498445035381079,0.5756073376301438,0.4598638842565466,0.3441204308829495,0.4598638842565466,0.5756073376301438 +0.26695812863388474,0.3827015820074819,0.498445035381079,0.5756073376301438,0.4598638842565466,0.3441204308829495,0.4598638842565466 +0.3827015820074819,0.26695812863388474,0.3827015820074819,0.498445035381079,0.5756073376301438,0.4598638842565466,0.3441204308829495 +0.4598638842565466,0.3827015820074819,0.26695812863388474,0.3827015820074819,0.498445035381079,0.5756073376301438,0.4598638842565466 +0.5756073376301438,0.4598638842565466,0.3827015820074819,0.26695812863388474,0.3827015820074819,0.498445035381079,0.5756073376301438 +0.3827015820074819,0.5756073376301438,0.4598638842565466,0.3827015820074819,0.26695812863388474,0.3827015820074819,0.498445035381079 +0.4598638842565466,0.3827015820074819,0.5756073376301438,0.4598638842565466,0.3827015820074819,0.26695812863388474,0.3827015820074819 +0.4598638842565466,0.4598638842565466,0.3827015820074819,0.5756073376301438,0.4598638842565466,0.3827015820074819,0.26695812863388474 +0.5370261865056114,0.4598638842565466,0.4598638842565466,0.3827015820074819,0.5756073376301438,0.4598638842565466,0.3827015820074819 +0.5370261865056114,0.5370261865056114,0.4598638842565466,0.4598638842565466,0.3827015820074819,0.5756073376301438,0.4598638842565466 +0.6527696398792086,0.5370261865056114,0.5370261865056114,0.4598638842565466,0.4598638842565466,0.3827015820074819,0.5756073376301438 +0.4598638842565466,0.6527696398792086,0.5370261865056114,0.5370261865056114,0.4598638842565466,0.4598638842565466,0.3827015820074819 +0.5370261865056114,0.4598638842565466,0.6527696398792086,0.5370261865056114,0.5370261865056114,0.4598638842565466,0.4598638842565466 +0.6527696398792086,0.5370261865056114,0.4598638842565466,0.6527696398792086,0.5370261865056114,0.5370261865056114,0.4598638842565466 +0.5370261865056114,0.6527696398792086,0.5370261865056114,0.4598638842565466,0.6527696398792086,0.5370261865056114,0.5370261865056114 +0.4212827331320143,0.5370261865056114,0.6527696398792086,0.5370261865056114,0.4598638842565466,0.6527696398792086,0.5370261865056114 +0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.5370261865056114,0.4598638842565466,0.6527696398792086 +0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.5370261865056114,0.4598638842565466 +0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086,0.5370261865056114 +0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114,0.6527696398792086 +0.5370261865056114,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143,0.5370261865056114 +0.3441204308829495,0.5370261865056114,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3055392797584171,0.4212827331320143 +0.4598638842565466,0.3441204308829495,0.5370261865056114,0.4212827331320143,0.5370261865056114,0.4212827331320143,0.3055392797584171 +0.4598638842565466,0.4598638842565466,0.3441204308829495,0.5370261865056114,0.4212827331320143,0.5370261865056114,0.4212827331320143 +0.5370261865056114,0.4598638842565466,0.4598638842565466,0.3441204308829495,0.5370261865056114,0.4212827331320143,0.5370261865056114 +0.4598638842565466,0.5370261865056114,0.4598638842565466,0.4598638842565466,0.3441204308829495,0.5370261865056114,0.4212827331320143 +0.3827015820074819,0.4598638842565466,0.5370261865056114,0.4598638842565466,0.4598638842565466,0.3441204308829495,0.5370261865056114 +0.4598638842565466,0.3827015820074819,0.4598638842565466,0.5370261865056114,0.4598638842565466,0.4598638842565466,0.3441204308829495 +0.3441204308829495,0.4598638842565466,0.3827015820074819,0.4598638842565466,0.5370261865056114,0.4598638842565466,0.4598638842565466 +0.4598638842565466,0.3441204308829495,0.4598638842565466,0.3827015820074819,0.4598638842565466,0.5370261865056114,0.4598638842565466 +0.5370261865056114,0.4598638842565466,0.3441204308829495,0.4598638842565466,0.3827015820074819,0.4598638842565466,0.5370261865056114 +0.4598638842565466,0.5370261865056114,0.4598638842565466,0.3441204308829495,0.4598638842565466,0.3827015820074819,0.4598638842565466 +0.3441204308829495,0.4598638842565466,0.5370261865056114,0.4598638842565466,0.3441204308829495,0.4598638842565466,0.3827015820074819 +0.4598638842565466,0.3441204308829495,0.4598638842565466,0.5370261865056114,0.4598638842565466,0.3441204308829495,0.4598638842565466 +0.5756073376301438,0.4598638842565466,0.3441204308829495,0.4598638842565466,0.5370261865056114,0.4598638842565466,0.3441204308829495 +0.4598638842565466,0.5756073376301438,0.4598638842565466,0.3441204308829495,0.4598638842565466,0.5370261865056114,0.4598638842565466 +0.5756073376301438,0.4598638842565466,0.5756073376301438,0.4598638842565466,0.3441204308829495,0.4598638842565466,0.5370261865056114 +0.5756073376301438,0.5756073376301438,0.4598638842565466,0.5756073376301438,0.4598638842565466,0.3441204308829495,0.4598638842565466 +0.691350791003741,0.5756073376301438,0.5756073376301438,0.4598638842565466,0.5756073376301438,0.4598638842565466,0.3441204308829495 +0.4598638842565466,0.691350791003741,0.5756073376301438,0.5756073376301438,0.4598638842565466,0.5756073376301438,0.4598638842565466 +0.4598638842565466,0.4598638842565466,0.691350791003741,0.5756073376301438,0.5756073376301438,0.4598638842565466,0.5756073376301438 +0.3441204308829495,0.4598638842565466,0.4598638842565466,0.691350791003741,0.5756073376301438,0.5756073376301438,0.4598638842565466 +0.5756073376301438,0.3441204308829495,0.4598638842565466,0.4598638842565466,0.691350791003741,0.5756073376301438,0.5756073376301438 +0.4598638842565466,0.5756073376301438,0.3441204308829495,0.4598638842565466,0.4598638842565466,0.691350791003741,0.5756073376301438 +0.3827015820074819,0.4598638842565466,0.5756073376301438,0.3441204308829495,0.4598638842565466,0.4598638842565466,0.691350791003741 +0.5370261865056114,0.3827015820074819,0.4598638842565466,0.5756073376301438,0.3441204308829495,0.4598638842565466,0.4598638842565466 +0.3441204308829495,0.5370261865056114,0.3827015820074819,0.4598638842565466,0.5756073376301438,0.3441204308829495,0.4598638842565466 +0.4598638842565466,0.3441204308829495,0.5370261865056114,0.3827015820074819,0.4598638842565466,0.5756073376301438,0.3441204308829495 +0.2283769775093523,0.4598638842565466,0.3441204308829495,0.5370261865056114,0.3827015820074819,0.4598638842565466,0.5756073376301438 +0.15121467526028756,0.2283769775093523,0.4598638842565466,0.3441204308829495,0.5370261865056114,0.3827015820074819,0.4598638842565466 +0.26695812863388474,0.15121467526028756,0.2283769775093523,0.4598638842565466,0.3441204308829495,0.5370261865056114,0.3827015820074819 +0.4598638842565466,0.26695812863388474,0.15121467526028756,0.2283769775093523,0.4598638842565466,0.3441204308829495,0.5370261865056114 +0.3827015820074819,0.4598638842565466,0.26695812863388474,0.15121467526028756,0.2283769775093523,0.4598638842565466,0.3441204308829495 +0.5370261865056114,0.3827015820074819,0.4598638842565466,0.26695812863388474,0.15121467526028756,0.2283769775093523,0.4598638842565466 +0.6141884887546761,0.5370261865056114,0.3827015820074819,0.4598638842565466,0.26695812863388474,0.15121467526028756,0.2283769775093523 +0.691350791003741,0.6141884887546761,0.5370261865056114,0.3827015820074819,0.4598638842565466,0.26695812863388474,0.15121467526028756 +0.6141884887546761,0.691350791003741,0.6141884887546761,0.5370261865056114,0.3827015820074819,0.4598638842565466,0.26695812863388474 +0.498445035381079,0.6141884887546761,0.691350791003741,0.6141884887546761,0.5370261865056114,0.3827015820074819,0.4598638842565466 +0.4212827331320143,0.498445035381079,0.6141884887546761,0.691350791003741,0.6141884887546761,0.5370261865056114,0.3827015820074819 +0.3441204308829495,0.4212827331320143,0.498445035381079,0.6141884887546761,0.691350791003741,0.6141884887546761,0.5370261865056114 +0.26695812863388474,0.3441204308829495,0.4212827331320143,0.498445035381079,0.6141884887546761,0.691350791003741,0.6141884887546761 +0.18979582638481995,0.26695812863388474,0.3441204308829495,0.4212827331320143,0.498445035381079,0.6141884887546761,0.691350791003741 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.3441204308829495,0.4212827331320143,0.498445035381079,0.6141884887546761 +-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.3441204308829495,0.4212827331320143,0.498445035381079 +-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.3441204308829495,0.4212827331320143 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.3441204308829495 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995 +-0.27317798710956864,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.08027223148690674,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.2345968359850363,-0.1574345337359715 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.2345968359850363 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.27317798710956864 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.2345968359850363,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.3503402893586334,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756 +-0.27317798710956864,-0.3503402893586334,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,-0.003109929237841972 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.1574345337359715,-0.2345968359850363 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.1574345337359715 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.27317798710956864,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995 +-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972,0.11263352413575517 +-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.08027223148690674,-0.003109929237841972 +-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.08027223148690674 +0.07405237301122279,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864 +0.15121467526028756,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334 +0.2283769775093523,0.15121467526028756,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864 +0.15121467526028756,0.2283769775093523,0.15121467526028756,-0.003109929237841972,0.07405237301122279,-0.08027223148690674,-0.1574345337359715 +0.03547122188669041,0.15121467526028756,0.2283769775093523,0.15121467526028756,-0.003109929237841972,0.07405237301122279,-0.08027223148690674 +-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.2283769775093523,0.15121467526028756,-0.003109929237841972,0.07405237301122279 +-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.2283769775093523,0.15121467526028756,-0.003109929237841972 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.15121467526028756,0.2283769775093523 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.15121467526028756 +-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041 +-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334 +0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.1574345337359715,-0.27317798710956864 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.1574345337359715 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041 +0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995 +-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517 +-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.18979582638481995 +-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.08027223148690674,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.08027223148690674 +-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715 +0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864 +0.18979582638481995,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.27317798710956864 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.003109929237841972,-0.08027223148690674 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.003109929237841972 +0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.27317798710956864,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995 +-0.1574345337359715,-0.27317798710956864,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517 +-0.3503402893586334,-0.1574345337359715,-0.27317798710956864,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.18979582638481995 +-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.27317798710956864,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.27317798710956864,-0.08027223148690674,-0.003109929237841972 +-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.27317798710956864,-0.08027223148690674 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715,-0.27317798710956864 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334,-0.1574345337359715 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.3503402893586334 +0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +0.11263352413575517,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +0.03547122188669041,0.11263352413575517,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363 +0.18979582638481995,0.03547122188669041,0.11263352413575517,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106 +0.26695812863388474,0.18979582638481995,0.03547122188669041,0.11263352413575517,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.03547122188669041,0.11263352413575517,-0.041691080362374365,-0.11885338261143913 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.03547122188669041,0.11263352413575517,-0.041691080362374365 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.03547122188669041,0.11263352413575517 +0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.03547122188669041 +-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.18979582638481995 +-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.041691080362374365,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.31175913823410106 +0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.18979582638481995 +-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365,0.03547122188669041 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.041691080362374365 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106 +0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.041691080362374365,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +0.07405237301122279,-0.041691080362374365,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.11885338261143913,0.07405237301122279,-0.041691080362374365,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.27317798710956864,-0.11885338261143913,0.07405237301122279,-0.041691080362374365,0.18979582638481995,0.11263352413575517,0.18979582638481995 +-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,0.07405237301122279,-0.041691080362374365,0.18979582638481995,0.11263352413575517 +-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,0.07405237301122279,-0.041691080362374365,0.18979582638481995 +-0.27317798710956864,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,0.07405237301122279,-0.041691080362374365 +-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913,0.07405237301122279 +-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864,-0.11885338261143913 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.19601568486050389,-0.27317798710956864 +0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334,-0.19601568486050389 +0.18979582638481995,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864,-0.3503402893586334 +0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.27317798710956864 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.003109929237841972,-0.08027223148690674 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.003109929237841972 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.18979582638481995 +-0.31175913823410106,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.19601568486050389,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.11885338261143913,-0.19601568486050389,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.041691080362374365,0.03547122188669041 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.041691080362374365 +0.11263352413575517,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715 +0.18979582638481995,0.11263352413575517,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.2345968359850363,-0.31175913823410106 +0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.2345968359850363 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.041691080362374365,-0.11885338261143913 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,-0.041691080362374365 +0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +-0.08027223148690674,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.003109929237841972,-0.08027223148690674,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.1574345337359715,-0.003109929237841972,-0.08027223148690674,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995 +-0.2345968359850363,-0.1574345337359715,-0.003109929237841972,-0.08027223148690674,0.07405237301122279,0.18979582638481995,0.11263352413575517 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.003109929237841972,-0.08027223148690674,0.07405237301122279,0.18979582638481995 +-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.003109929237841972,-0.08027223148690674,0.07405237301122279 +-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.003109929237841972,-0.08027223148690674 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.003109929237841972 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.31175913823410106 +0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041 +0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.1574345337359715,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.08027223148690674,-0.1574345337359715,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517,0.18979582638481995 +-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,-0.003109929237841972,0.07405237301122279,0.18979582638481995,0.11263352413575517 +-0.31175913823410106,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,-0.003109929237841972,0.07405237301122279,0.18979582638481995 +-0.2345968359850363,-0.31175913823410106,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,-0.003109929237841972,0.07405237301122279 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,-0.003109929237841972 +-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715 +-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.2345968359850363,-0.08027223148690674 +0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.2345968359850363 +0.15121467526028756,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715,-0.2345968359850363 +0.3055392797584171,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.08027223148690674,-0.003109929237841972,-0.1574345337359715 +0.2283769775093523,0.3055392797584171,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.08027223148690674,-0.003109929237841972 +0.15121467526028756,0.2283769775093523,0.3055392797584171,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.08027223148690674 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.3055392797584171,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.3055392797584171,0.2283769775093523,0.15121467526028756 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.3055392797584171,0.2283769775093523 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.3055392797584171 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756 +-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +0.03547122188669041,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106,-0.2345968359850363 +0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.19601568486050389,-0.31175913823410106 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674,-0.19601568486050389 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.08027223148690674 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.1574345337359715,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +-0.041691080362374365,-0.1574345337359715,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +-0.2345968359850363,-0.041691080362374365,-0.1574345337359715,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.31175913823410106,-0.2345968359850363,-0.041691080362374365,-0.1574345337359715,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.2345968359850363,-0.31175913823410106,-0.2345968359850363,-0.041691080362374365,-0.1574345337359715,0.03547122188669041,0.11263352413575517 +-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.2345968359850363,-0.041691080362374365,-0.1574345337359715,0.03547122188669041 +-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.2345968359850363,-0.041691080362374365,-0.1574345337359715 +-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.2345968359850363,-0.041691080362374365 +0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106,-0.2345968359850363 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.31175913823410106 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715 +-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756 +-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517,0.03547122188669041 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995,0.11263352413575517 +-0.08027223148690674,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474,0.18979582638481995 +0.03547122188669041,-0.08027223148690674,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.18979582638481995,0.26695812863388474 +-0.1574345337359715,0.03547122188669041,-0.08027223148690674,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.18979582638481995 +-0.2345968359850363,-0.1574345337359715,0.03547122188669041,-0.08027223148690674,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,0.03547122188669041,-0.08027223148690674,0.11263352413575517,0.18979582638481995 +-0.2345968359850363,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,0.03547122188669041,-0.08027223148690674,0.11263352413575517 +-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,0.03547122188669041,-0.08027223148690674 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,0.03547122188669041 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +0.15121467526028756,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106,-0.2345968359850363 +0.07405237301122279,0.15121467526028756,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.31175913823410106 +0.2283769775093523,0.07405237301122279,0.15121467526028756,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +0.15121467526028756,0.2283769775093523,0.07405237301122279,0.15121467526028756,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.07405237301122279,0.15121467526028756,-0.003109929237841972,-0.08027223148690674 +-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.07405237301122279,0.15121467526028756,-0.003109929237841972 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.07405237301122279,0.15121467526028756 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.07405237301122279 +-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756 +-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674 +-0.041691080362374365,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715 +-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106 +0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363 +0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.31175913823410106,-0.3889214404831658 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.31175913823410106 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365 +0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913 +0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363 +-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517,0.18979582638481995 +-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972,0.11263352413575517 +-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,-0.003109929237841972 +-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674 +-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715 +-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658,-0.2345968359850363 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106,-0.3889214404831658 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363,-0.31175913823410106 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.2345968359850363 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.1574345337359715,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041 +-0.2345968359850363,-0.1574345337359715,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.3503402893586334,-0.27317798710956864 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.3503402893586334 +0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715 +0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363 +0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756,0.07405237301122279 +-0.27317798710956864,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523,0.15121467526028756 +-0.1574345337359715,-0.27317798710956864,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.2283769775093523 +-0.3503402893586334,-0.1574345337359715,-0.27317798710956864,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756 +-0.4275025916076982,-0.3503402893586334,-0.1574345337359715,-0.27317798710956864,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.1574345337359715,-0.27317798710956864,-0.08027223148690674,-0.003109929237841972 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.1574345337359715,-0.27317798710956864,-0.08027223148690674 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.1574345337359715,-0.27317798710956864 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.1574345337359715 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.27317798710956864,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.08027223148690674,-0.27317798710956864,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715,-0.08027223148690674 +-0.1574345337359715,-0.08027223148690674,-0.27317798710956864,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106,-0.1574345337359715 +-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.27317798710956864,-0.3889214404831658,-0.2345968359850363,-0.31175913823410106 +0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.27317798710956864,-0.3889214404831658,-0.2345968359850363 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.27317798710956864,-0.3889214404831658 +0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.27317798710956864 +-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674 +-0.003109929237841972,-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715 +-0.1574345337359715,-0.003109929237841972,-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.2345968359850363,-0.1574345337359715,-0.003109929237841972,-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.003109929237841972,-0.08027223148690674,0.07405237301122279,0.15121467526028756 +-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.003109929237841972,-0.08027223148690674,0.07405237301122279 +-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.003109929237841972,-0.08027223148690674 +-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.003109929237841972 +-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363 +0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106 +0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658 +0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864 +0.11263352413575517,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389 +0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.11885338261143913 +-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.11885338261143913,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.041691080362374365,-0.11885338261143913,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.19601568486050389,-0.041691080362374365,-0.11885338261143913,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517 +-0.27317798710956864,-0.19601568486050389,-0.041691080362374365,-0.11885338261143913,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.041691080362374365,-0.11885338261143913,0.03547122188669041,0.11263352413575517 +-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.041691080362374365,-0.11885338261143913,0.03547122188669041 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.041691080362374365,-0.11885338261143913 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.041691080362374365 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +0.07405237301122279,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.27317798710956864 +0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +-0.003109929237841972,-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.041691080362374365,-0.11885338261143913 +-0.1574345337359715,-0.003109929237841972,-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.041691080362374365 +-0.27317798710956864,-0.1574345337359715,-0.003109929237841972,-0.08027223148690674,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.003109929237841972,-0.08027223148690674,0.07405237301122279,0.15121467526028756 +-0.19601568486050389,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.003109929237841972,-0.08027223148690674,0.07405237301122279 +-0.27317798710956864,-0.19601568486050389,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.003109929237841972,-0.08027223148690674 +-0.11885338261143913,-0.27317798710956864,-0.19601568486050389,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715,-0.003109929237841972 +-0.041691080362374365,-0.11885338261143913,-0.27317798710956864,-0.19601568486050389,-0.3503402893586334,-0.27317798710956864,-0.1574345337359715 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.27317798710956864,-0.19601568486050389,-0.3503402893586334,-0.27317798710956864 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.27317798710956864,-0.19601568486050389,-0.3503402893586334 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.27317798710956864,-0.19601568486050389 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.27317798710956864 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.1574345337359715,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.08027223148690674,-0.1574345337359715,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.31175913823410106,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,0.03547122188669041,0.11263352413575517 +-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715,0.03547122188669041 +-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.08027223148690674,-0.1574345337359715 +-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.08027223148690674 +-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363 +0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106 +0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365 +0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913 +0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041,0.11263352413575517 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.11885338261143913,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.19601568486050389,-0.11885338261143913,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.03547122188669041,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.27317798710956864,-0.3503402893586334 +0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913,-0.27317798710956864 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.19601568486050389,-0.11885338261143913 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.19601568486050389 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.1574345337359715,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.2345968359850363,-0.1574345337359715,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363 +-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.31175913823410106,-0.3889214404831658,-0.31175913823410106 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.31175913823410106,-0.3889214404831658 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.31175913823410106 +0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715 +-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363 +-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.1574345337359715,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.2345968359850363,-0.1574345337359715,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.3503402893586334,-0.4275025916076982 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715,-0.3503402893586334 +0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363,-0.1574345337359715 +-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.2345968359850363 +-0.19601568486050389,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.11885338261143913,-0.19601568486050389,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.3503402893586334,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.003109929237841972,0.07405237301122279,0.15121467526028756 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.003109929237841972,0.07405237301122279 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389,-0.003109929237841972 +-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.11885338261143913,-0.19601568486050389 +-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.11885338261143913 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334 +-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.3503402893586334,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.27317798710956864,-0.3503402893586334,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.4275025916076982,-0.27317798710956864,-0.3503402893586334,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279 +-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.3503402893586334,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.3503402893586334,-0.19601568486050389,-0.11885338261143913 +-0.08027223148690674,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.3503402893586334,-0.19601568486050389 +-0.1574345337359715,-0.08027223148690674,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.3503402893586334 +-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864 +0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.27317798710956864,-0.3503402893586334 +0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.27317798710956864 +-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674 +0.07405237301122279,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,0.07405237301122279,0.15121467526028756 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,0.07405237301122279 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389,-0.27317798710956864 +0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365,-0.19601568486050389 +0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913,-0.041691080362374365 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041,-0.11885338261143913 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517,0.03547122188669041 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995,0.11263352413575517 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.18979582638481995 +-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.08027223148690674,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658 +0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389,-0.27317798710956864 +-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.19601568486050389 +-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.2345968359850363,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.3503402893586334,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,-0.003109929237841972,0.07405237301122279,0.15121467526028756 +-0.4275025916076982,-0.3503402893586334,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,-0.003109929237841972,0.07405237301122279 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674,-0.003109929237841972 +-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.1574345337359715,-0.2345968359850363,-0.08027223148690674 +-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.1574345337359715,-0.2345968359850363 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.1574345337359715 +-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334,-0.4275025916076982 +0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3503402893586334 +0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913,-0.19601568486050389 +-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365,-0.11885338261143913 +-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041,-0.041691080362374365 +-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517,0.03547122188669041 +-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041,0.11263352413575517 +-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674,0.03547122188669041 +-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715,-0.08027223148690674 +-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363,-0.1574345337359715 +0.03547122188669041,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106,-0.2345968359850363 +-0.041691080362374365,0.03547122188669041,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658,-0.31175913823410106 +0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864,-0.3889214404831658 +0.03547122188669041,0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.11885338261143913,-0.19601568486050389,-0.27317798710956864 +-0.041691080362374365,0.03547122188669041,0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.11885338261143913,-0.19601568486050389 +-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,-0.041691080362374365,0.03547122188669041,-0.11885338261143913 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,-0.041691080362374365,0.03547122188669041 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517,-0.041691080362374365 +-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041,0.11263352413575517 +-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.03547122188669041 +-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.2345968359850363,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.3503402893586334 +-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334 +-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279,-0.003109929237841972 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972,0.07405237301122279 +-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.003109929237841972 +-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389 +-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334,-0.27317798710956864 +-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982,-0.3503402893586334 +0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334,-0.4275025916076982 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363,-0.3503402893586334 +0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715,-0.2345968359850363 +-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674,-0.1574345337359715 +-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.08027223148690674 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756 +-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279 +-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365 +-0.2345968359850363,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913 +-0.08027223148690674,-0.2345968359850363,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864,-0.19601568486050389 +-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982,-0.27317798710956864 +-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.3503402893586334,-0.3503402893586334,-0.4275025916076982 +0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.3503402893586334,-0.3503402893586334 +0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363,-0.3503402893586334 +0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674,-0.2345968359850363 +-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715,-0.08027223148690674 +-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972,-0.1574345337359715 +-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279,-0.003109929237841972 +-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756,0.07405237301122279 +-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279,0.15121467526028756 +-0.4275025916076982,-0.3503402893586334,-0.27317798710956864,-0.19601568486050389,-0.11885338261143913,-0.041691080362374365,0.07405237301122279 diff --git a/example/bts/qoa_server/prometheus.yml b/example/bts/qoa_server/prometheus.yml new file mode 100644 index 0000000..270ab9a --- /dev/null +++ b/example/bts/qoa_server/prometheus.yml @@ -0,0 +1,11 @@ +global: + scrape_interval: 15s + +scrape_configs: + - job_name: prometheus + static_configs: + - targets: ["localhost:9090"] + - job_name: node_exporter + scrape_interval: 1s + static_configs: + - targets: ["localhost:9098"] diff --git a/example/bts/qoa_server/qoa_config.json b/example/bts/qoa_server/qoa_config.json new file mode 100644 index 0000000..9184256 --- /dev/null +++ b/example/bts/qoa_server/qoa_config.json @@ -0,0 +1,68 @@ +{ + "broker_info": { + "broker": "AMQP", + "url": "localhost" + }, + "prom_info": { + "metric": { + "Accuracy": { + "Default": 100, + "Description": "Accuracy", + "Prom_name": "mlservice_accuracy", + "Type": "Gauge" + }, + "DataAccuracy": { + "Default": 100, + "Description": "Data accuracy", + "Prom_name": "mlservice_data_accuracy", + "Type": "Gauge" + }, + "ResponseTime": { + "Default": 0, + "Description": "Service ResponseTime", + "Prom_name": "mlservice_responsetime", + "Type": "Gauge" + } + }, + "port": 9098 + }, + "queue_info": { + "exchange_name": "qoa_topic", + "exchange_type": "topic", + "in_queue": "in_request_qoa", + "in_routing_key": "qoa.report.#", + "out_queue": "out_response_qoa", + "out_routing_key": "qoa.response.#", + "roles": "server", + "user_id": "user3" + }, + "report": { + "client_info": { + "id": "user3", + "roles": "ml_user" + }, + "mandatory": { + "client_info": [ + "id", + "roles" + ], + "service_info": [ + "machinetypes" + ] + }, + "metric": { + "Accuracy": 100, + "DataAccuracy": 100, + "ResponseTime": 0 + }, + "service_info": { + "id": "request", + "machinetypes": "small", + "metric": [ + "Accuracy", + "DataAccuracy", + "ResponseTime" + ] + } + } +} diff --git a/example/bts/qoa_server/qoa_server.py b/example/bts/qoa_server/qoa_server.py new file mode 100644 index 0000000..0dcc536 --- /dev/null +++ b/example/bts/qoa_server/qoa_server.py @@ -0,0 +1,22 @@ +import argparse +import json +import sys + +sys.path.append("../") +from qoa4ml_lib.qoa4ml.handlers import Mess_Handler + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Message Handler") + parser.add_argument( + "--qoaInfo", help="qoa information file", default="./qoa_config.json" + ) + parser.add_argument("--prometheus", help="prometheus port", default=9098) + args = parser.parse_args() + with open(args.qoaInfo) as f: + qoa_info = json.load(f) + print(qoa_info) + OPA_object = Mess_Handler(qoa_info, prom=True) + print( + "============================ OPA is running - Waiting for client ============================" + ) + OPA_object.start() diff --git a/example/bts/qoa_server/run.sh b/example/bts/qoa_server/run.sh new file mode 100755 index 0000000..ed46324 --- /dev/null +++ b/example/bts/qoa_server/run.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# docker_cmd="docker run -p 8181:8181 openpolicyagent/opa:latest run --server --set=decision_logs.console=true" +# $docker_cmd & + +# sleep 10 + +# curl --location --request PUT 'localhost:8181/v1/policies/bts' -H 'Content-Type: text/plain' --data-binary @bts.rego + +# curl --location --request PUT 'localhost:8181/v1/data/bts/contract' -H 'Content-Type: application/json' -d @contract.json + +# docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management + +docker run -p 9090:9090 -v "$(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml" "prom/prometheus" diff --git a/example/bts/readme.md b/example/bts/readme.md new file mode 100644 index 0000000..eae1ed9 --- /dev/null +++ b/example/bts/readme.md @@ -0,0 +1,2 @@ +The current ML services include a prediction model for predicting Power Grid for single based transiver station. +The example BTS service is using trained models from [BTS Prediction Machine Learning Units](https://github.com/rdsea/IoTCloudSamples/tree/master/MLUnits/BTSPrediction) \ No newline at end of file diff --git a/example/docker_report/config/client1.yaml b/example/docker_report/config/client1.yaml new file mode 100644 index 0000000..8607700 --- /dev/null +++ b/example/docker_report/config/client1.yaml @@ -0,0 +1,37 @@ +client: + username: aaltosea1 + instance_name: data_handling01 + stage_id: gateway + functionality: REST + application_name: test + role: ml +connector: + - name: debug_connector + connector_class: Debug + # - name: amqp_connector + # connector_class: AMQP + # config: + # end_point: localhost + # exchange_name: test_qoa4ml + # exchange_type: topic + # out_routing_key: test.client1 +probes: + - probe_type: "docker" + frequency: 9999999 + require_register: false + log_latency_flag: false + environment: Edge + container_list: ["test"] + + - probe_type: "system" + frequency: 1 + require_register: false + log_latency_flag: false + environment: Edge + node_name: "Edge1" + + - probe_type: "process" + frequency: 1 + require_register: false + log_latency_flag: false + environment: Edge diff --git a/example/docker_report/docker_probe.py b/example/docker_report/docker_probe.py new file mode 100644 index 0000000..423374e --- /dev/null +++ b/example/docker_report/docker_probe.py @@ -0,0 +1,27 @@ +from __future__ import annotations + +import random +import signal +import sys +import time + +from qoa4ml.qoa_client import QoaClient +from qoa4ml.reports.ml_reports import MLReport + +client1 = QoaClient(report_cls=MLReport, config_path="./config/client1.yaml") + + +def signal_handler(sig, frame): + client1.stop_all_probes() + sys.exit(0) + + +signal.signal(signal.SIGINT, signal_handler) +if __name__ == "__main__": + # client1.start_all_probes() + # NOTE: here the probe will run in the background so if the script ends fast, the probe will result in error + for _ in range(5): + client1.observe_metric("metric1", random.randint(1, 100), 0) + client1.observe_metric("metric2", random.randint(1, 100), 0) + client1.report(submit=True) + time.sleep(1) diff --git a/example/reports/qoa_report_example.json b/example/reports/qoa_report_example.json new file mode 100644 index 0000000..085b91a --- /dev/null +++ b/example/reports/qoa_report_example.json @@ -0,0 +1,164 @@ +{ + "execution_graph": { + "instances": { + "22e0af69-3fe2-4451-9d63-b3f627e3a676": { + "instance_name": "data processing Raps 02", + "method": "Transformation", + "previous_instance": [ + "40a7fd9b-84cb-4c4f-9531-af91c05b9f77" + ] + }, + "40a7fd9b-84cb-4c4f-9531-af91c05b9f77": { + "instance_name": "data handling01 Raps", + "method": "REST", + "previous_instance": [] + }, + "5e4f82e8-f2ff-45a8-8809-140f98253e4d": { + "instance_name": "Inference Jet 05", + "method": "Max Aggregate", + "previous_instance": [ + "78c2f055-721b-4867-85ff-f90494b5dd7b", + "8ae48ecc-b2f0-482f-9845-a03ab05764cb" + ] + }, + "78c2f055-721b-4867-85ff-f90494b5dd7b": { + "instance_name": "Inference Jet 03", + "method": "TensorFlow", + "previous_instance": [ + "22e0af69-3fe2-4451-9d63-b3f627e3a676" + ] + }, + "8ae48ecc-b2f0-482f-9845-a03ab05764cb": { + "instance_name": "Inference Jet 04", + "method": "TensorFlow", + "previous_instance": [ + "22e0af69-3fe2-4451-9d63-b3f627e3a676" + ] + } + }, + "last_instance": "5e4f82e8-f2ff-45a8-8809-140f98253e4d" + }, + "quality": { + "data": { + "DataProcessing": { + "image_height": { + "22e0af69-3fe2-4451-9d63-b3f627e3a676": 242 + }, + "image_width": { + "22e0af69-3fe2-4451-9d63-b3f627e3a676": 100 + }, + "object_height": { + "22e0af69-3fe2-4451-9d63-b3f627e3a676": 52 + }, + "object_width": { + "22e0af69-3fe2-4451-9d63-b3f627e3a676": 40 + } + }, + "Gateway": { + "image_height": { + "40a7fd9b-84cb-4c4f-9531-af91c05b9f77": 42 + }, + "image_width": { + "40a7fd9b-84cb-4c4f-9531-af91c05b9f77": 20 + } + }, + "MLInference Aggregate": { + "object_height2": { + "5e4f82e8-f2ff-45a8-8809-140f98253e4d": 345 + } + }, + "MLInference Ensemble": { + "object_height": { + "78c2f055-721b-4867-85ff-f90494b5dd7b": 52 + }, + "object_height3": { + "8ae48ecc-b2f0-482f-9845-a03ab05764cb": 654 + } + } + }, + "inference": { + "0b39a5db-b16c-42e6-af8e-f3a0ca022a85": { + "confidence": 0.4, + "instance_id": "8ae48ecc-b2f0-482f-9845-a03ab05764cb", + "source": [], + "value": { + "cat": 841 + } + }, + "51fe4c60-7f30-4cfb-8521-69d4c6b810f2": { + "confidence": 0.8, + "instance_id": "78c2f055-721b-4867-85ff-f90494b5dd7b", + "source": [], + "value": { + "number": 19 + } + }, + "5595ed89-41c5-4a0c-b18e-85a0aab912fa": { + "confidence": 0.5, + "instance_id": "5e4f82e8-f2ff-45a8-8809-140f98253e4d", + "source": [ + "51fe4c60-7f30-4cfb-8521-69d4c6b810f2", + "0b39a5db-b16c-42e6-af8e-f3a0ca022a85" + ], + "value": { + "cat": 345 + } + }, + "last_inference": "5595ed89-41c5-4a0c-b18e-85a0aab912fa" + }, + "service": { + "DataProcessing": { + "Response Time": { + "22e0af69-3fe2-4451-9d63-b3f627e3a676": { + "response_time": 0.2010021209716797, + "start_time": 1684746282.105319 + } + }, + "metric1": { + "22e0af69-3fe2-4451-9d63-b3f627e3a676": 56 + }, + "metric2": { + "22e0af69-3fe2-4451-9d63-b3f627e3a676": 34 + } + }, + "Gateway": { + "Response Time": { + "40a7fd9b-84cb-4c4f-9531-af91c05b9f77": { + "response_time": 0.10008597373962402, + "start_time": 1684746281.902005 + } + }, + "metric1": { + "40a7fd9b-84cb-4c4f-9531-af91c05b9f77": 10 + } + }, + "MLInference Aggregate": { + "Response Time": { + "5e4f82e8-f2ff-45a8-8809-140f98253e4d": { + "response_time": 0.20208120346069336, + "start_time": 1684746282.947917 + } + }, + "metric15": { + "5e4f82e8-f2ff-45a8-8809-140f98253e4d": 4345 + } + }, + "MLInference Ensemble": { + "Response Time": { + "78c2f055-721b-4867-85ff-f90494b5dd7b": { + "response_time": 0.20420598983764648, + "start_time": 1684746282.383123 + }, + "8ae48ecc-b2f0-482f-9845-a03ab05764cb": { + "response_time": 0.20443487167358398, + "start_time": 1684746282.663837 + } + }, + "metric1": { + "78c2f055-721b-4867-85ff-f90494b5dd7b": 56, + "8ae48ecc-b2f0-482f-9845-a03ab05764cb": 342 + } + } + } + } +} diff --git a/example/simple/collector.py b/example/simple/collector.py new file mode 100644 index 0000000..5c1808d --- /dev/null +++ b/example/simple/collector.py @@ -0,0 +1,21 @@ +import argparse + +from qoa4ml.collector.amqp_collector import AmqpCollector +from qoa4ml.config.configs import AMQPCollectorConfig + +conf = { + "end_point": "localhost", + "exchange_name": "test_qoa4ml", + "exchange_type": "topic", + "in_routing_key": "test.#", + "in_queue": "collector_1", +} + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Node Monitoring") + parser.add_argument("--conf", help="configuration file", default="collector.json") + args = parser.parse_args() + ampq_conf = AMQPCollectorConfig(**conf) + collector = AmqpCollector(configuration=ampq_conf) + collector.start_collecting() diff --git a/example/simple/config/client1.yaml b/example/simple/config/client1.yaml new file mode 100644 index 0000000..16ae065 --- /dev/null +++ b/example/simple/config/client1.yaml @@ -0,0 +1,15 @@ +client: + username: aaltosea1 + instance_name: data_handling01 + stage_id: gateway + functionality: REST + application_name: test + role: ml +connector: + - name: amqp_connector + connector_class: AMQP + config: + end_point: localhost + exchange_name: test_qoa4ml + exchange_type: topic + out_routing_key: test.client1 diff --git a/example/simple/config/client2.yaml b/example/simple/config/client2.yaml new file mode 100644 index 0000000..da298fc --- /dev/null +++ b/example/simple/config/client2.yaml @@ -0,0 +1,15 @@ +client: + usename: aaltosea2 + instance_name: data_processing01 + stage_id: data_processing + functionality: transformation + application_name: test + role: ml +connector: + - name: amqp_connector + connector_class: AMQP + config: + end_point: localhost + exchange_name: test_qoa4ml + exchange_type: topic + out_routing_key: test.client2 diff --git a/example/simple/config/client3.yaml b/example/simple/config/client3.yaml new file mode 100644 index 0000000..bc55fad --- /dev/null +++ b/example/simple/config/client3.yaml @@ -0,0 +1,15 @@ +client: + username: aaltosea3 + instance_name: ml_inference1 + stage_id: ml_inference_ensemble + functionality: TensorFlow + application_name: test + role: ml +connector: + - name: amqp_connector + connector_class: AMQP + config: + end_point: localhost + exchange_name: test_qoa4ml + exchange_type: topic + out_routing_key: test.client3 diff --git a/example/simple/config/client4.yaml b/example/simple/config/client4.yaml new file mode 100644 index 0000000..b41c267 --- /dev/null +++ b/example/simple/config/client4.yaml @@ -0,0 +1,15 @@ +client: + username: aaltoseas + instance_name: ml_inference2 + stage_id: ml_inference_ensemble + functionality: TensorFlow + application_name: test + role: ml +connector: + - name: amqp_connector + connector_class: AMQP + config: + end_point: localhost + exchange_name: test_qoa4ml + exchange_type: topic + out_routing_key: test.client4 diff --git a/example/simple/config/client5.yaml b/example/simple/config/client5.yaml new file mode 100644 index 0000000..34ef289 --- /dev/null +++ b/example/simple/config/client5.yaml @@ -0,0 +1,15 @@ +client: + username: aaltosea5 + instance_name: Agg01 + stage_id: Aggregate + functionality: Max Aggregate + application_name: test + role: ml +connector: + - name: amqp_connector + connector_class: AMQP + config: + end_point: localhost + exchange_name: test_qoa4ml + exchange_type: topic + out_routing_key: test.client5 diff --git a/example/simple/ensemble_ml.py b/example/simple/ensemble_ml.py new file mode 100644 index 0000000..34ca0f9 --- /dev/null +++ b/example/simple/ensemble_ml.py @@ -0,0 +1,118 @@ +from __future__ import annotations + +import argparse +import random +import sys +import time +import traceback +from threading import Thread + +from devtools import debug +from qoa4ml.qoa_client import QoaClient +from qoa4ml.reports.ml_report_model import RoheReportModel + +client1 = QoaClient(config_path="./config/client1.yaml") +client2 = QoaClient(config_path="./config/client2.yaml") +client3 = QoaClient(config_path="./config/client3.yaml") +client4 = QoaClient(config_path="./config/client4.yaml") +client5 = QoaClient(config_path="./config/client5.yaml") +# client5.process_monitor_start(1) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Node Monitoring") + parser.add_argument("--th", help="Number of thread", default=1) + parser.add_argument("--sl", help="Sleep time", default=-1) + parser.add_argument("--client", help="Client config file", default="./conf.json") + args = parser.parse_args() + + concurrent = int(args.th) + time_sleep = float(args.sl) + print("checkpoint 0") + + def sender(num_thread): + count = 0 + error = 0 + start_time = time.time() + while time.time() - start_time < 1: + try: + # client1.timer() + print("This is thread: ", num_thread, "Starting request: ", count) + client1.observe_metric("metric1", random.randint(1, 100), 0) + client1.observe_metric("metric2", random.randint(1, 100), 0) + client1.observe_metric("image_width", random.randint(1, 100), 1) + client1.observe_metric("image_height", random.randint(1, 100), 1) + client1.observe_metric("object_width", random.randint(1, 100), 1) + client1.observe_metric("object_height", random.randint(1, 100), 1) + client1.timer() + report_1 = client1.report() + # debug(report_1) + # print((report_1.model_dump_json(exclude_none=True))) + + # client2.import_previous_report(report_1) + # print("Thread - ",num_thread, " Response1:", report_1) + + client2.import_previous_report(report_1) + client2.timer() + # print("This is thread: ",num_thread, "Starting request: ", count) + client2.observe_metric("metric1", random.randint(1, 100), 0) + client2.observe_metric("metric2", random.randint(1, 100), 0) + client2.observe_metric("image_width", random.randint(1, 100), 1) + client2.observe_metric("image_height", random.randint(1, 100), 1) + client2.observe_metric("object_width", random.randint(1, 100), 1) + client2.observe_metric("object_height", random.randint(1, 100), 1) + client2.timer() + report_2 = client2.report() + # # print("Thread - ",num_thread, " Response2:", report_2) + + client3.import_previous_report(report_2) + client3.timer() + # print("This is thread: ", num_thread, "Starting request: ", count) + client3.observe_inference(random.randint(1, 1000)) + client3.observe_inference_metric("confidence", random.randint(1, 100)) + client3.observe_inference_metric("accuracy", random.randint(1, 100)) + client3.timer() + report_3 = client3.report() + # debug(report_3) + # print("Thread - ",num_thread, " Response3:", report_3) + + client4.import_previous_report(report_2) + client4.timer() + # print("This is thread: ", num_thread, "Starting request: ", count) + client4.observe_inference(random.randint(1, 1000)) + client4.observe_inference_metric("confidence", random.randint(1, 100)) + client4.observe_inference_metric("accuracy", random.randint(1, 100)) + client4.timer() + report_4 = client4.report() + # debug(report_4) + # print("Thread - ",num_thread, " Response4:", report_4) + + # debug(report_3.inference_report) + # debug(report_4.inference_report) + client5.import_previous_report([report_3, report_4]) + client5.timer() + # print("This is thread: ", num_thread, "Starting request: ", count) + client5.observe_inference(random.randint(1, 1000)) + client5.observe_inference_metric("confidence", random.randint(1, 100)) + client5.observe_inference_metric("accuracy", random.randint(1, 100)) + client5.timer() + report_5 = client5.report(submit=True) + debug(report_5) + with open( + "qoa4ml-ensemble-ml-report-schema.json", "w", encoding="utf-8" + ) as file: + file.write(RoheReportModel(**report_5).model_dump_json()) + # print("Thread - ",num_thread, " Response5:", report_5) + except Exception: + error += 1 + # qoaLogger.error("Error {} in merge_dict: {}".format(type(e),e.__traceback__)) + traceback.print_exception(*sys.exc_info()) + count += 1 + if time_sleep == -1: + time.sleep(1) + else: + time.sleep(time_sleep) + + for i in range(concurrent): + t = Thread(target=sender, args=[i]) + t.start() diff --git a/example/simple/general_ml.py b/example/simple/general_ml.py new file mode 100644 index 0000000..868865b --- /dev/null +++ b/example/simple/general_ml.py @@ -0,0 +1,117 @@ +from __future__ import annotations + +import argparse +import random +import sys +import time +import traceback +from threading import Thread + +from qoa4ml.qoa_client import QoaClient +from qoa4ml.reports.ml_report_model import GeneralMlInferenceReport +from qoa4ml.reports.ml_reports import MLReport + +client1 = QoaClient(report_cls=MLReport, config_path="./config/client1.yaml") +client2 = QoaClient(report_cls=MLReport, config_path="./config/client2.yaml") +client3 = QoaClient(report_cls=MLReport, config_path="./config/client3.yaml") +client4 = QoaClient(report_cls=MLReport, config_path="./config/client4.yaml") +client5 = QoaClient(report_cls=MLReport, config_path="./config/client5.yaml") +# client5.process_monitor_start(1) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Node Monitoring") + parser.add_argument("--th", help="Number of thread", default=1) + parser.add_argument("--sl", help="Sleep time", default=-1) + parser.add_argument("--client", help="Client config file", default="./conf.json") + args = parser.parse_args() + + concurrent = int(args.th) + time_sleep = float(args.sl) + print("checkpoint 0") + + def sender(num_thread): + count = 0 + error = 0 + start_time = time.time() + while time.time() - start_time < 10: + try: + # client1.timer() + print("This is thread: ", num_thread, "Starting request: ", count) + client1.observe_metric("metric1", random.randint(1, 100), 0) + client1.observe_metric("metric2", random.randint(1, 100), 0) + client1.observe_metric("image_width", random.randint(1, 100), 1) + client1.observe_metric("image_height", random.randint(1, 100), 1) + client1.observe_metric("object_width", random.randint(1, 100), 1) + client1.observe_metric("object_height", random.randint(1, 100), 1) + client1.timer() + report_1 = client1.report() + # print((report_1.model_dump_json(exclude_none=True))) + + # client2.import_previous_report(report_1) + # print("Thread - ",num_thread, " Response1:", report_1) + + client2.import_previous_report(report_1) + client2.timer() + # print("This is thread: ",num_thread, "Starting request: ", count) + client2.observe_metric("metric1", random.randint(1, 100), 0) + client2.observe_metric("metric2", random.randint(1, 100), 0) + client2.observe_metric("image_width", random.randint(1, 100), 1) + client2.observe_metric("image_height", random.randint(1, 100), 1) + client2.observe_metric("object_width", random.randint(1, 100), 1) + client2.observe_metric("object_height", random.randint(1, 100), 1) + client2.timer() + report_2 = client2.report() + # # print("Thread - ",num_thread, " Response2:", report_2) + + client3.import_previous_report(report_2) + client3.timer() + # print("This is thread: ", num_thread, "Starting request: ", count) + client3.observe_inference(random.randint(1, 1000)) + client3.observe_inference_metric("confidence", random.randint(1, 100)) + client3.observe_inference_metric("accuracy", random.randint(1, 100)) + client3.timer() + report_3 = client3.report() + # debug(report_3) + # print("Thread - ",num_thread, " Response3:", report_3) + + client4.import_previous_report(report_2) + client4.timer() + # print("This is thread: ", num_thread, "Starting request: ", count) + client4.observe_inference(random.randint(1, 1000)) + client4.observe_inference_metric("confidence", random.randint(1, 100)) + client4.observe_inference_metric("accuracy", random.randint(1, 100)) + client4.timer() + report_4 = client4.report() + # debug(report_4) + # print("Thread - ",num_thread, " Response4:", report_4) + + # debug(report_3.inference_report) + # debug(report_4.inference_report) + client5.import_previous_report([report_3, report_4]) + client5.timer() + # print("This is thread: ", num_thread, "Starting request: ", count) + client5.observe_inference(random.randint(1, 1000)) + client5.observe_inference_metric("confidence", random.randint(1, 100)) + client5.observe_inference_metric("accuracy", random.randint(1, 100)) + client5.timer() + report_5 = client5.report(submit=True) + # debug(report_5) + with open( + "qoa4ml-general-ml-report-schema.json", "w", encoding="utf-8" + ) as file: + file.write(GeneralMlInferenceReport(**report_5).model_dump_json()) + # print("Thread - ",num_thread, " Response5:", report_5) + except Exception: + error += 1 + # qoaLogger.error("Error {} in merge_dict: {}".format(type(e),e.__traceback__)) + traceback.print_exception(*sys.exc_info()) + count += 1 + if time_sleep == -1: + time.sleep(1) + else: + time.sleep(time_sleep) + + for i in range(concurrent): + t = Thread(target=sender, args=[i]) + t.start() diff --git a/example/simple/qoa4ml-general-ml-report-schema.json b/example/simple/qoa4ml-general-ml-report-schema.json new file mode 100644 index 0000000..48605b1 --- /dev/null +++ b/example/simple/qoa4ml-general-ml-report-schema.json @@ -0,0 +1,312 @@ +{ + "data": { + "data_processing": { + "metrics": { + "image_height": { + "bae6476c-70b4-41aa-ada7-aed491159824": { + "description": "", + "metric_name": "image_height", + "records": [ + 26.0 + ], + "unit": null + } + }, + "image_width": { + "bae6476c-70b4-41aa-ada7-aed491159824": { + "description": "", + "metric_name": "image_width", + "records": [ + 59.0 + ], + "unit": null + } + }, + "object_height": { + "bae6476c-70b4-41aa-ada7-aed491159824": { + "description": "", + "metric_name": "object_height", + "records": [ + 46.0 + ], + "unit": null + } + }, + "object_width": { + "bae6476c-70b4-41aa-ada7-aed491159824": { + "description": "", + "metric_name": "object_width", + "records": [ + 62.0 + ], + "unit": null + } + } + }, + "name": "data_processing" + }, + "gateway": { + "metrics": { + "image_height": { + "070e8661-d078-451b-98c5-dd481ff5ad70": { + "description": "", + "metric_name": "image_height", + "records": [ + 47.0 + ], + "unit": null + } + }, + "image_width": { + "070e8661-d078-451b-98c5-dd481ff5ad70": { + "description": "", + "metric_name": "image_width", + "records": [ + 29.0 + ], + "unit": null + } + }, + "object_height": { + "070e8661-d078-451b-98c5-dd481ff5ad70": { + "description": "", + "metric_name": "object_height", + "records": [ + 41.0 + ], + "unit": null + } + }, + "object_width": { + "070e8661-d078-451b-98c5-dd481ff5ad70": { + "description": "", + "metric_name": "object_width", + "records": [ + 36.0 + ], + "unit": null + } + } + }, + "name": "gateway" + } + }, + "metadata": { + "client_config": { + "application_name": "test", + "custom_info": "", + "environment": "Edge", + "functionality": "Max Aggregate", + "id": "91691ea2-71cd-46e5-a71b-3cdc1a759ab7", + "instance_id": "d3f45252-6751-4b8d-a447-40348af78829", + "instance_name": "Agg01", + "name": "", + "role": "ml", + "run_id": "", + "stage_id": "Aggregate", + "user_id": "", + "username": "aaltosea5" + }, + "runtime": 3.034541130065918, + "timestamp": 1724329473.9458544 + }, + "ml_inference": { + "44423580-1d94-4f48-997a-72ece3d8c27e": { + "functionality": "TensorFlow", + "inference_id": "f0c84e68-f912-4de8-9fd5-efa69d14194d", + "instance_id": "44423580-1d94-4f48-997a-72ece3d8c27e", + "metrics": [ + { + "description": null, + "metric_name": "confidence", + "records": [ + 26.0 + ], + "unit": null + }, + { + "description": null, + "metric_name": "accuracy", + "records": [ + 99.0 + ], + "unit": null + } + ], + "prediction": 873.0 + }, + "4f407cf0-aa93-4d01-9fb2-17d576515ce5": { + "functionality": "TensorFlow", + "inference_id": "e041bb37-9ffd-4d1e-8cff-a72e75e3ad2a", + "instance_id": "4f407cf0-aa93-4d01-9fb2-17d576515ce5", + "metrics": [ + { + "description": null, + "metric_name": "confidence", + "records": [ + 24.0 + ], + "unit": null + }, + { + "description": null, + "metric_name": "accuracy", + "records": [ + 86.0 + ], + "unit": null + } + ], + "prediction": 323.0 + }, + "91691ea2-71cd-46e5-a71b-3cdc1a759ab7": { + "functionality": "Max Aggregate", + "inference_id": "f113bf1b-09de-4645-a63c-a54944900273", + "instance_id": "91691ea2-71cd-46e5-a71b-3cdc1a759ab7", + "metrics": [ + { + "description": null, + "metric_name": "confidence", + "records": [ + 72.0 + ], + "unit": null + }, + { + "description": null, + "metric_name": "accuracy", + "records": [ + 67.0 + ], + "unit": null + } + ], + "prediction": 579.0 + } + }, + "service": { + "Aggregate": { + "metrics": { + "response_time": { + "91691ea2-71cd-46e5-a71b-3cdc1a759ab7": { + "description": "", + "metric_name": "response_time", + "records": [ + { + "responseTime": 7.62939453125e-05, + "startTime": 1724329473.9457033 + } + ], + "unit": null + } + } + }, + "name": "Aggregate" + }, + "data_processing": { + "metrics": { + "metric1": { + "bae6476c-70b4-41aa-ada7-aed491159824": { + "description": "", + "metric_name": "metric1", + "records": [ + 14.0 + ], + "unit": null + } + }, + "metric2": { + "bae6476c-70b4-41aa-ada7-aed491159824": { + "description": "", + "metric_name": "metric2", + "records": [ + 86.0 + ], + "unit": null + } + }, + "response_time": { + "bae6476c-70b4-41aa-ada7-aed491159824": { + "description": "", + "metric_name": "response_time", + "records": [ + { + "responseTime": 0.00013113021850585938, + "startTime": 1724329473.9405596 + } + ], + "unit": null + } + } + }, + "name": "data_processing" + }, + "gateway": { + "metrics": { + "metric1": { + "070e8661-d078-451b-98c5-dd481ff5ad70": { + "description": "", + "metric_name": "metric1", + "records": [ + 18.0 + ], + "unit": null + } + }, + "metric2": { + "070e8661-d078-451b-98c5-dd481ff5ad70": { + "description": "", + "metric_name": "metric2", + "records": [ + 27.0 + ], + "unit": null + } + }, + "response_time": { + "070e8661-d078-451b-98c5-dd481ff5ad70": { + "description": "", + "metric_name": "response_time", + "records": [ + { + "responseTime": 1.0082156658172607, + "startTime": 1724329472.9313204 + } + ], + "unit": null + } + } + }, + "name": "gateway" + }, + "ml_inference_ensemble": { + "metrics": { + "response_time": { + "44423580-1d94-4f48-997a-72ece3d8c27e": { + "description": "", + "metric_name": "response_time", + "records": [ + { + "responseTime": 0.00013828277587890625, + "startTime": 1724329473.943732 + } + ], + "unit": null + }, + "4f407cf0-aa93-4d01-9fb2-17d576515ce5": { + "description": "", + "metric_name": "response_time", + "records": [ + { + "responseTime": 9.179115295410156e-05, + "startTime": 1724329473.9419549 + } + ], + "unit": null + } + } + }, + "name": "ml_inference_ensemble" + } + } +} diff --git a/example/simple/rabbitmq.sh b/example/simple/rabbitmq.sh new file mode 100644 index 0000000..092e902 --- /dev/null +++ b/example/simple/rabbitmq.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 -d rabbitmq:3-management diff --git a/example/simple/readme.md b/example/simple/readme.md new file mode 100644 index 0000000..7c994cc --- /dev/null +++ b/example/simple/readme.md @@ -0,0 +1,20 @@ +# Run Simple Test + +## Prerequisite +- Python > 3.10 +- qoa4ml > 0.2.9 + +## Step run +1. Start docker service on local computer +2. Start RabbitMQ on local docker using `rabbitmq.sh` +3. Start report collector: +```bash +$ python collector.py +``` +3. Start a simple application which is integrated qoa4ml monitoring probes: +```bash +$ python general_ml.py +``` + +## Simple configuration +All configurations are in `./config/` folder \ No newline at end of file diff --git a/img/inf_report.png b/img/inf_report.png new file mode 100644 index 0000000000000000000000000000000000000000..4458a0a35f9f94d80f39f6a48b8aa18a732bda47 GIT binary patch literal 77944 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 BLy!Of literal 0 HcmV?d00001 diff --git a/img/qoa4mlos-overview.png b/img/qoa4mlos-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..128598fcf4e4fee48983d0c2335c69041695f152 GIT binary patch literal 44385 zcmZs?2{=@3{5MX*6GYyB7}(u>bg@3}{*EqgL za6ANRfHW}{lGO&z-CRgS;76b6K=L>qLZI0BNxFCd-DPAYW&VAFwll@U9q6Q|2)vS{ zoRYM%q>P+0(D(maliu+iMW6{`=V(W9`Ckt^UM}+%@xN9A(bvTRc#q>&PkkSP+8Y9ghp7#2>vZip1IourBPd#OXv7Hja!N}ai z6k_5@1BUoh+|6C(fLp!i1i5709=#{t90{%}Kk7XvdtU96oOO~F}5!4T@_ZDj7E4{=eTn48P! z>YC|6;Z(SbD;kT%>ltFvSQ%M)FdnR{43f8}`9OhLJy6Q-UiNT`ojg{_P+kY(3N!Z& z&JwZrCW-`YytEMw z?BL<=gmBR|Q~)XKDuWe0J(R$Peoknly{QsZ8|DaCR`&MRF_lL^lsx2*Nk)TsnA>4! zCKPAjO4h*G594g)55oF^?ZEPeSRWHNM;$u@16_ibo1Ze)nLrLOvWFpP_NFq%B!V3Y z5LO7t1Z<})Z-zGqSPg=Qxy$$%%R+pmu_WB_loTT+0|OZ%Rz_Lc$P^~6qwPRKn(7(@ z>%#fVxe-mAolF&=RD`yI0?o`#8t&vm^2Af!(0*p}GzD3T92k&1Junms!OAOx-B9vK zvWdM6FfByc6GD~6n(JV^%?u4a;J!}so_J3)e|@ltBaw0(W{m^F80eXs_p1^Z_F@{hm*bQtijWNaRIqG=0y2v{F zE1RPfOmzXB0Fl#?hw8~H8Yz>G=QTnCdIbW3IGd16ATB-ueqNqnn2DaJzL`73Oor&< zfiZyTxEndR>G}E@=o%Zlo57^1+ICPE5?R*M$5%%Irg+Q)`be6;If3fu4V)Xe*~yV* z9lT`>e4TyGNC5rxFbax(AUMg_+X?T51^MXfQ+1rcp87a~kH0+<0hN(4vD1Np0TzUK z`Jo_gUQ{H;%-fzyrNEt>Fc4jNA1Kma+TYyC#NHdN?PdVTw2uN!2I-{huHfW%EL9LY zUvF2MsVhz%;p8r-@1YMgkxd-kVJ1c-h_->D3`kqf-qXX8qz%WBWE`XkFse4$+2mO1 z(WG^yX;fDP!Ix-c34non$)CUi?!zejY0Tr%iYzXny z^Rk1vIAgV)^pIeJE798=LP01}>|M;25N7&#J-Yx0B*+xw<%x!4DUN!wItq3)e`j+j zP4;+lf2uTsh*rXpaTEy52W8*^BT0LD%Dd=$=|aF%;B|;j(hjnCf(t=c7K;m@kd76F zv@R87ii8I!Lp+pmN@xdXZzm%i-GBfGGT9NLhw_q^Awa+$j!29#RFNvL>+GrRO_K?5 z#2Y$#+UZL>)BN=i=JHq?Re_?7bp__LQzoO0fL|IB22msfCPhz~23FEX$xs~wla||NpbLmc)98tc$oV`d?*A*ybRRPO;JY9!O7gf2u1S? z@HCWF0wICPWaXW4-ef4j*8vHkNQ2QPNM9c(4;tB@prGV|@qv5#f!)y*e`R@uw;9e; z&rQi0f$;XVS=K*55k;XW zd${3z^%by&9wajq9FD}p%zTUu6mdpMjy}!~?*6(??rx@3q%K8|1d~&MdI!Mm6&z^J z4qoOkyq_}+g+JCS%6Pbv|b`+d2DDw9y7$2s=e$fQPc9(y{qdf|5Pu zNNzGzHfzp4E*_=?8qH77+)LI+-yY-dtp{~?0~@(|`Wxbu5wZ{x zQii6ZqfK&mhZvy!h&O|5AW44pkLFp?Y4N1DLig>D>pO>K*l@MU) zf^Z?|$bz6yAAgV{4J-roGBEbCGuOd`Whq|frjCvzkOv0pEsZiZb+E_d1IQ$_HcAia zBBS7pw)e)k*#o{B1cXF6dLf*RVSXsGo&gf3LzXr-wAXgQdZP_>+!RS3x^AA%x{4%k z19x4TkttdkLIcPNallgvI3=V3Lf*qn$KG8Z<3L4$F$#XZcp0J$(#@NIcXTw`_d2a6zp-8}u3^x@J*_Hd*VhD5gab=Oz&G6RG3 zNbcs)0DUtbZ3NQEOjc1(&fLui8KA8o=O}My=ljZNv>EWD zOvTIDPH9(mecuU*k zbenfqE>3iV!l^ zSK1hG=YWg<>(Tw|-T~MD<5VN%iF(UaaRTZ5xti=xwomjI6(el>)@IDlm#(Dkn4qXbRyWpTo%?w`!&nY?+P}foE2?9^{iU`r>0Pw4GJbw5 zlOVMj;=^GSd#jlD@6O^ayQb&OPlmN#fjoKQh+DH<3m<=NRkJj@OqDjQ*k`4~&vGv8 z!+b#0VvPK0oJx`Mh;v6O(&5>o}l~LO>YM) zPZ$ji2LXr2OB320INwZxam`Tq7XsaU?(+^e3xV$EP%Q;9(M)tvRG}bgq!cv7C(MVe zu-C;^IzCE_K5I4!A~5GD1Sgn)fKhoDvKy%R!0e-;s0b$dK8|&3G5gmk!x7F&q8e%8B6W*__G6z!Aer zu4}<1$fBm=@wMPLcMJX!3~`k{$ft88DEf`-kno4xJGM5be?MD=ecc6LOWQ0E=vHak ztDGolaGkLj*e1`+@n>yLm9jp_Fy)-tZ1Qt&h$@bF?Ri6H0vOiJznD*aWWpilMIWRr z#&+jDezf>vrhpFJg7h&5g+SD01hj^8p{ar%6O98cp`k7#rO)OICaOuP@@`+u&hTlt zEj+bd6+-Y-dn{^oiZubx_ye5ZttV>W7aOSH|{rryQ6E$_PlHxvpvTJp6W=&sW5RKAR2(rj^Z8{@M^Wk$DZ8RPwvn&W3-FJ0DLIPhEmkuIz z?QSm4uFrNa;NM4crfNr@DNxXRd{tyDfk<{Ibv)=t{@S@F`f6FJ4kT3QEs0%(0l`hUd*VRD7(XZKNcX4j6rW+H{+g z`iKffFP;e&TD_?}lM#8;c6s?*lZ~t5ig+D`;H5^O9TOtn>hU$rbKe4?4eY_C`oUTZ zylcd|_07OOsA~tC?RhsJBPIUsp7h5|#7KvLoVsWoR{(fiut|A0YN%EVZ=>v38uA?rdB;7WL z{On1)nHjv5#!e5}|E(`#SzCUhm`?0As&wontWGo)2EUNdjyg?Qn*uBQtvvPRNyirP z(sfLqs|a(dqhY>oPb4GRW_(>9QLV}e4)X&Qb&UfHxY35y@~TC7GfB%val^!0DU3~D zq0iE1t=e10H!g_8Nu>&!Bb+)TV?t@kQfBjXV*UR^k3(M{o2isDleK?ADRyr;}Tg6vfw5;n32?6 zm+Xb`p+dKzVG3azGCRQ3v3@Za?Mr@=C0?-ul~1~>+U$dSbLP5+B!|tfTVIDmB-^@L z&a%^4I5I_JxjQ73=}rlz%NYgK%m&Zk%U|-dA6}BP&`xQW9gdsbYaZ4=`HIoz?Cj#U zX{5M&SB)a!J9q2LnU#9e=W2CVl{~fbOfqh1eHko3SlylSt380{8H;$d9K7D&-{@m| zpv3pW^;>O)yvu;jYq!xG0BhGV(OpMMm+QID`X203cYbBZBKK+q@?n{!);_$zf}Mc{ zKfJ1l;TFe<6>*QJaohH^?#Oz4cfGvl#VN9{BUk6^`V3!WkS1D^6PTI;FGDlWy6y)J z!_(Avm^K@@-S=KSDP`F#e078=*eLuHv?o-6Y_1Il`9ZnkK;6+9^@ulZteWcf1^etxtfJZa4cb*>|2u=t>fqrV|dfzIt>S5wY~2 zeVJ0-DG~^#orCR3=8k&b<@CnQVGGK}Pm@^R2#I6<@UH==9tM7B`@Qvr=Zc#7R2<&5(_THaV}{wk2Dw~20vVW%@R zs_8yY&fU;J4;TH=Wixo}mX>{j?qi%n-7X@F^zg2YP-aKfgOyqKH52GDKYOp(Vx!M_e@GMIiVrP8-r9{vu$>18I z5Y9e7x+z4X8=spMRjUh46EqE4ZHc2=(0>*Q1=jSWV66H0C*3DzRSw|sD-N3_YK?~OFLr3@ekJ|FBHGSB{>+!RlkR+xoXcLc(P+4FUUzN#Yqa0Yb12CfC*ua(^hHdLXnzXSA7&FU}0SD}Lr3MNb_4eiyY8Ccf@+ zd00C8?G-1*Cq`0s`J3~knyj+sg*SdSyaO$qSf*2;ThNU4X=_>E`<)Mp{CMdnntR^| zyo@SV9U8COldc2orYyy|ru?IBm9=p@L3go7?|W@fu>0O_Q@+vDvx&Ny)gm_9=vN+2 zp{vi#wuLR1Ngefw&lWXDw?S7LO9y0TI-VfeP4{b-{YqGFOIAl-|F`T!5pjXLkJm4FM5rk(vDpis zyPVkz8Q$5L6S8>iM)#W56R~crEmEBMkS600)%a%sD*B}iaKBs^6(MyTvTBJj!qkO9 z*KWnQt(Kz$7`}#F@;bIM@xJ%yTOEZ7zLri0KlquV?Hh(<=lE#vWKmR-&|@q3pZf#+ZVs&6B~`7F>bJV1 zj-_uH!fgooTH{f+a&DNCsS#}dHU%-|0H_zya|KdGbv5nJ5Fh5}rpM;K1B$-TfbVP$ z3!t1b*-p~Str`)#Ays0SQsmdJij??hR@)60+@QgG-JQ=c z%}zjDmz}?fF0;0JdzlveCH>6P3ae{zOj8V|>jw;4gCuB%LdgmBT@rz13(=Ox$+^`w zC3n28NJ^E6rsI9AUFXYd-!^!ptdZ^scH?0Z>zLo)ZHHf89(l(RsXKC@qPMrXFofV! zOxixB6W)}1qRvt21V`hns6LXx@M(x)u#g~>xL?qR87I5w&A)bPy*JqZH5S=V_>A3am`6Ycl`hUXZZ z+iU<#_p9(q2A)VqMhS6~D2vbIl(ye1N38VW5{o(d6ZM^$#Pu;!S;5KsRhSoAjCBE< zh2gInX&Xj0WSIt7ilkLxS3ohYQg1U_#r=-PQm};d_9W|`y{9N)Cp+6&*@`*V0JxB4~x~ccjjQM#T zW=HF$q2Do^a>Eus^<6tg-;4EF>Rt2RZ@nzCPVmP4p3R59#Db6A z^gsTgId0$R7O#V@sA`N^WH)OBJUql*TR6Yil$#j;L31ujD5m9Wl}mQQKPMEzm{TOU zV>RO<+wMn8m4ZCNLHAiT?z6=MZnsF$#W@C0*!j_%bK6JL^{qp!4;hX4Lia0-;x1(h z#jrM=`_y;$dil-w@=~m&;AirOeV|A0UVnRWSyQ>acC$(I#*0v|o@CBOZId!0BF~h6ejht?gUQ7+g+VcWPPZ-5uAi`mInhiMucBzD0i`o$^44_=WWuihGy! zdNKd1kBi7%%^gd;d`Za%8T*c}3s={}iBe`3rhM4aQWAFTree-(5s!U=e}l;`S!g=JHJ`MaHCNM@eg*!L=t4e>v!|3OO^qiPv;7VWp)*tXMRgxkZopp~ijMbA_BVXbPIn<8>QgCy=o!Qz`N zetzrcc*hi?;fefddM)Qgp7}vO;oCjG*|nn(a|Yk3=$-Wg&OO4?%np6MC|>5fK$BjF z996XIeI4EC@cbjf`}N=OS6bxR$F1udvkwK<=btDKc&wcqr3cW}lEjLPzJB_fmY*}U zK}GRVxC?LEnDX7o|M)a@C0HYoZ@9g6Dy4W3!pPpK-?YgZV-~amDW>2y)Fnc#zX+=O zE@MVCsJ3Y*6xmGr_U-G$kJdk9>;Ep-T!EJ(9Yib^yj=RLQq;`z%D;skg*L3-Q4qJt zXigIpfeR)^N%?dt&0}Kc~>AS zpWn@<7laRu(jAj_O(x+}V|1E3z!VK3Y7SLB&z-Jfes?C&9p|65HSVbQ>2&!WUFb;7 zYPoi5==Vw-Ge>21Tx5;Mqy~|^Ig+5O>2+$2t83*Q8<%KDnw-| z;<_69mDBb|eemAaCL0dh5puAJ8F|kx{o^WI&yR(h)h9g-)OaKzq5LsQvZWj^&Nk?_ z&}3`{*o6s^u8&nYwnl&sL}X)>KVA#!k?KlKXal6rtz=znz&uV%$M_Mt%ImOxF@|T$*ei ziuq}K$bdF3H|)|$+cc0zWRQAj#O~4NVheO(Df!~JhtH*9DaC(3GRs}iw7CsU@rYxV z(}Yibt|j_$A=>tKKRnVD)P1mryy8CjSBpaE7F3^bU9Q$tu5?o1z*VKS_-pU@f69O# z6v)C`<};2%NuH&;zORunsl>k>X@!}4oYxb(xQsepY^xN)wMxEjCpX5<#F3v_yh4;u z1&Y1)3j8ob7k$7O#Bu^yC|ZxvS^Fs`se z>93)CZb?)3flQN#-{docpFum1Fu^Q8$kn^oxT$fG;r~1)DqctPPtPu`Nd7^pt=(S1Of3MhH+qbDwHr8KGb-e$QA;cc`uIXOjS<$&}+JN9cnvoPn zNgy@D{2K8oGl-s5?yDVSFulXnXv1 z0tl+-GM-g-vFoUO_s7hg^|o+Sq0R@J&~Y@U&Gp8e^%-QvIg8f^w=rc_spEm1q9bpY zI{9w)Tqjog!|*?PV6XMtOKB4XRql9lWQjt=FC8RvjjvH~@7yJ(!>vD#QR*T-1O=~WT=w`Y} zmNgHWsTbEAl*1Mj1EG&sta5%_UJ^xXrIc0dIQ08?bZ<=OV=L?zrt@4r=TW}DV`etP zhH>&~6vJ!IhPFwL&wtJ@N)pd8``sSi`+=u;9OOE<2Fg(i<@=??RFAy`Tc161CYNh0 z)9$%ys9{}StzwMY^FFF5-vO+A2~s6 zx}o=DH;rR~@uZmqwoxzb!?_dMiNxE&m=K&;qLX+6S5Zx^C94?5<2a++O{ZlV+(~#e zGgd%7YCDYzGS^r*ibDFod@@^KT?iHibKhC2{ps~t4z~1<;P81UcLsc6upnEZuYBc} z>C;#1V>=FSKLo?}9ghwVP!Drk&X>f^c3*Sj>9B9E-@Goc!CjhiDswAgK!~k#UXBM< zpAx)xBy7?0?4^c(STVYHv1<)%HS?}Ve*%d_QKFH?Esy4{MtYd$=Y4ms z2GFmAk;bjL!TF8fkl_Q71nAgP)XYL>b%GjAc4+QAm(4}{y7K4W>o<}NKXZ$+f8BSv z%eDVoeC8(Qjeg?H-)5opO~os@tI-z-y$Ld1qHU|6F1y@N6JS?*Pkbd#<|u@I){|)~ z;pq4g!haa^SJE=B);@;oqg2WBvT0Q2;e>aVlC?Jac2(im)Aw1HSa3_O;Ct-0`ezy( zpNm`QgzV3kBSU|Jl&Mps&AmI?!bMnSKRHF4fCj~n2|{8D9UsS8EnDQo(dT*=5KF(!^N%lYg;~;?!piK zmXat=-`VzG_^}!$FN9R9t@OdIceevj!Nyi~yBR*K-{504E`mH#R^}=5>U(F}BBFta zEm3a^T`K3`_kA^VU*t`1zV-wfJnaSMmaG-0xf*OsO61z~VTM48?&A_tua|G$2ht%% z++weG2MZ7O)_1;a=Z-?vrO#v`#)MMJAE>|6eJh~XOJPV*^i2Q+FLeY|EZz^N8@ z)Z-DOn$1l{;0d{*K=XgO6sIRUr6?B&7$H=!GqkDFIK+_`V1yoK2!rmHal(~K4X_R zb{Kx3QWM_ZG9Ko%Ux1?nxo96bL7 zsKYVmDF&lY%1uNPvk9=@(cbly>^*4!nOo8KIpu`A2Q-6C#1jCGw`$eP!x1> z$K^qCsP#m^GBZ(OjY=8oU2%%dyev%HNuQ(q|_=^xUfb1X0$JYJ3!)&i5J*sG(m-AkQJ5mquwl7eqG zQxS85{Z{t}ORpsGjp1H00!2Wj^#ny#?VVz#zrqzl+QO%-yIr!dP1f@luDlfJF6Q3!!ZU3R0hy=0kB?T;qW>*&8tSML;zh34zVru~ zMKtuWy&X4b$Vq!KzBF37mmDk@q!W%#VMNnn3n&=&45EW1v5=9oHZH00B&~)FSM4oZs zxZ9|GSBUeeSb#>6`hB~i-}}R&ir0SOY}!t6{H^?Ir1?t1%%8y|;sX8Qiu<=(bFew! znGcz^0QC{pPu}s}sZvGHLIeevOK)dq3+?lM+9v;{mX=*o;c)I?dq$>qbCZB#avK{5 z*gGEZ%`O4OvV{I@eRh{~YToGhOM_Mhrx(&HAIP6BYu+ssy;LGZxp$B9=Ko>=ju)mp zz9?o<2GC-75m|HT#__!I_7ZLi330^J?>lN&o(CT^@2$in2LlPQ&=#iFj(4R(>&F9k zls~DLn;!4v=UlQ#>v5Akv&E;zYy4uRc25B%j=uI5NaWz9@#8wT0ji5##1Faa836-s zFI-ttm&%WYv{)thCCBltsKl2I7i<1yEuwP={pjjwQ#7#U z8rt=tht9y7HOB_p^^nK26^0;qM&gJ@Cc7{Ef#*P_Vx0#7B0Hz|-sXz|cobF+9QxwN z1A!96id@d#Tr7)a+-#rWF1F;3fy)~=iJA)*dmWE#w)G1$PHok9ex6BO%AJ6fPmeHh zS_2OVAIT!W)!;RY+l(Dm#6;{Jyk+I$Exl>2P@kO zW(KX_pXo}54o!W235tu8U+YzzGyt-iO=oa`u;DrSHPQM&X;DCX=3OMatpD27ugo;* zN760>IqRWE+o6=j;Sy;pa~l>8=cYw!oEaz%NM-{WqP)iKiNJxTz-`q*fS6gO4}V>) z$>xvg`qLiEhY^yhI$6f}XSBi3gBhzHxP=U@im+x%6o#dYSO=OM9`1R#Og1;2zNRAo zhi3@$iMRYdOP=Yo!eRBrOr>s(;N8}62@ae>+U;=;sQlFJ4qlLJ($d!&*pTq&^NlPC z!Z1lfv))S6wzYdNn{{p;{*8(M(ia)3IJd;%GZ_ax#N5K&DwdaECcpVX^h^tnF{!eVss@m>yo-aQ*i6cjn3s^P#2gHEs;}z6q3zUf<*JVi81MM?H1% zq+d+RlziL`UAF4`Z>(18=C1Dm$&+vrHuG8;i|cT)2q1Z})YCGe&=m1_;phGk5{&f5 zi+4@9`hkp+9~Awg^}Yj+{u^fiQalc7w@O{0nwKvtTFU-w$Ch9kt zd2+5#)d%g+*-n@y-g@*@g(^B=H8?WDyJo?32uV4YNZs3V=dotb4H|#EyqsSk3*ZUL-i`u~v>sno9y|x+Mw2D2 z>R&yn8E^0-HAQMMV#LaUgc;R{ybpfVB4Qs$GW~3jurRS)>gdcI5(Jm;$G+X>A1+Hy`A$K;PO zek&+Aq*~D<&gk79_hl2v{I7qH=1W%v^AYc}+!LA~Da)Mbb-AxVy%|3k*0KVz2_6Ex z2kqZS6HDEbOQ@;_X|hS$zZ!ttv40(51C>2K}}eo>ZW|1ue5~nrY_?O#&R0S0~?T zac4v_$V7xDPRERo>5bMzaa=J1Dl-w-A6#PS2=@RGV4Q{=Hs(C|~koS{ZNHKJzHP>2NMH6kUK(lfYe73q1@X zwv7SElCc-mpFNk8>5*Tc#WwzS?*srVokiTZa{4NEda3-t$SUCwqJr5CW)aF;OVyYi>=$0#!-9M{i%&j75CUzTirp!=9RuMsM?eZ*P==bR6oX&M9WKK8?NN`l}giuOtEV6L+5@Ju4`t92~F7U^F@Rj-c8z#=% z+mh{c?Th8NBC-MQ{ax7c@7oFX_B@fvKCAPpjh7?tbYjVetiyWx%Nj?%X0#==CJS`7 ztdt6^#Q(!WXAq^IFn*?jvMSY$;a>kc9Sa3uEwg|xgp~YpjE(?6OGUfA zXH4bdBD;sb?nD*wKvNnT;yBpdjK7rI-7Td51`s}Ci&uhM2Xy(uG%V}?oHC0kAf~YM8vxCq;Fopbr*yMMdhkxhwfxH+ zMhSw3#XrM%e!M7WvopVOQ-h2Zhu3bDV~^1{l%s>~q7BF1bRobELR0VeYH=_7t4>}a zG_Ad3XIq;HSd^fe(AO%J?;JAV2s?@js#7<9Hr<=+$#`wnJ_2seq%lTGz#42YN>| z2$7YGOBT>(DVqztTf8t-BsL;&s`uPPV4vE?!!ZL^!uNNAUp0U19M%50Rvp)78l`#o z_vVbM{L_%^v}H{pe(6{^!_fbFtaAtDojCJ^{_(D0q#ZgRaMC^Bo`W3#dQtQqZTgX7 z((HprCu>*kWv6Qd*BhtF&YtOb=N+m0aJSUI{9dPh%^YCJ8lUrJ3M~RPqhtV=P?!~Z zusPzIdYfB}14k}m%&qK}*03oUZOe}JP67OHWm2<`$8rH(G<2aL|Kh!KpCio~;?{i+0cRL>b`L;@UDUdKXEjNiSIP4QJ%^F> zM^ZVma&hA290||P(8)(jfrC@T~3WPr3n13@4rQNz87snCwa-u`oEmhG)s_;v(jtkr{2GpExQW3&5b-ik(N zxH}UD{O_H#&NmXJPT?DWJ7Z88ses424L`o z`(oX9HCzS+i5jykH4Q*ew0C;`P#MgG)=v369{C$bZ**U7&p7cSK0NH1^GP$rNZelm zzm9cZjZ!&F6xJ6g00{zC3f1==&|b2?gb0BB-GZR8r+clt4ch@Ely6d0eG4 z{$_OI&-br`iC@JPRmzEe{c*(c({_@4Tcf8hYZC8VRS&@r`R^d_9bU1s&-cEud6eWOsyv` zn-MNPddyD$VZ`x9E_KQyyzJbM`0{{rSFfio_Gadij=c&X+V>)L0h*2#7pt~@5C7x? z8d}M&%g0m0;=4SSYyS-pM5jP5mkv7lfeQ7CXg8Xi)c?K#+G)=`JDA44PM$QUOnvg& zu{)3lAcz%xG0S^9_k8AMEE9xGZj7tc#K{Wr#ZW)?X4K^PB%>)mmvnIrZpG|$yx%V| z8egZtr1;fYm5{lW19*d%Q)lu`APmh+=Uidnz#Yx^r8a!BC_YmGnF*5(|9XlZ0$|Ff zs|an$ykS@Y_@&zDCd;M(ROGu$qrFVeh{tjc0H2I(<8-@%27d4Wj@A-yf4lB|Kr(T1 z@xriYiP6`KgjE%cQz6Xu>+kqaKHwG~#n$@(3H_=7^wx^1__7K|5<8C+bRg$GQEPPz zp6^H-`R%d2ufsOeEo7J|7{8g}+wtrBYU{#OAX9t6$%qY}5V4KC;9udz0ypzI-@X?n zY!n(Mh&ZTFO-HP6&iqMZr!2L)02u@0$`N!i5NZ4Id|)=jRt%R~EsFL-z&`-DctoDi ze@k^HOrl6vJ7tL11bF{=6ZoG>3o!H@5S@#Yeg+Qnh!Kucx$Px>+^1I5Z6DGBWi7A8 zmh5_?slHj<mCopQ5*M>O@iR!aV_O1k&^)5(>Rq4%RGp6#iU>|fr#Z_oYC zK2G>L)|ZRj;jsq~zxa-r?LScmB=U?03WDXB?d#Y_Qtt$-bOEIp5J0nDySw5=4WuoN zns@KczY>b6VgiB>c#5!ZZ^gzkP?5|Nh%ug7j=4Lj(8MyGv) z6G$5XZVjW#&cW#0`FWP}4-o53e~Y|Gy{aBiby3P%?MwBmKAw0WO7F_jj<#f0TQ0s> z$!Vh+`}R!m6=iZMkdQ>9C3gF)oc@shA2?O9XtVz(PL=8!^Ew!5jJX?t8ayf*q@e+T+y@Wp9(a&6XL0w6ZZt6nSwwO2l|IjXerI(;_WqRycEcS8pJ2ds7JZ_D zmDyWY47?WlXNeu(YyJ5^Nep3ssQ_fatm{jAe=|>@+hm&9oq|%80dTJuI)diC)#RnU ze;R*x%mh$o%T$N0@1(suI<MCu;CLOwMjM?JSZ~Oq#=Q#!c^~ z)IKg4TH~PQnF`VBbc0=hg4v0Zz?C|SgTt-mmR!otdAjpQ=`G_}665QU zF2cN_d9|qDel|1pj61JkB&97$Xb~t^l=2uB7)j(fjik!c%(51@R;u9dCfSe$3_Wn#c(h{g zSUB>OCIG<_7haV-jT{&J9Q5~lH0rhgj|jt;o!wu@nYo<5zJ2cG)bYT_=rq3=j!rm6 z69XZ_tFA56#|Fn%ywr85aG=COG1<`uy2kq#@Z(V-sVp44CnvG@EPx#9v+%FfU9IM? zjTU*20&UndQ!pV-L8yRDzU--A(VL%>BiYyo8$7C093PQ7O4V6&jGk=)5VI3$>Y=&C zUu)mbipmE>c9&!0_tyg&=Ip71|9_b3n3ePR)j*P=b_z)4x+3{$7t%E7hLjtH1F-PJ z=^ySo3k}2(=aMdIaSKuZURiVizN$c$RsyUv|3uuO_nfW4*goK?uvDDhEHFI=IW9Ur zitgFF`=LAOGV~-A0c3n;Mpcpt1}%z$)P*M${tqkfVp2;D0CdpcY9U%uC|9f|2|%fL zd2wj ze5k(Q`FOdVwrZJo`=3V=9ZS+~01|$A&oU1yIZB^?vbS z%X`naW*_*he8Y8&nJW06s8IzzWASMG z9aV_>(%{$g^Gx{Eohyg@CsBb#tld8)e0$>m89RHkS_^Qg2V?(v)d#p}r?0DFFEK#` zh_c<8s(z+8t9!YRpilq7eK)%Q{S@w3?1@3_z-^Bl0jLhJQ+b6Ritc0bvas8lrCr?p zK|AXO8BAGcZ@*0-V7JAmr}Qf|IEjIx6==)Uj0#|zt^3k6Lz~BxfTbD9<8K1Eg5t{4=cKfB3$AEyEsbVFOl~h3C$rm#u-@M9iP8bUl2wfiofVSTN$?rL^DO-j8EE>0Uq^ikdB%_w{z;u*AHiu{5o#bK9$wj+g`2V zA~1VrjDm!sYGl%aOO+)ri!?BD{)=y_7t9I?K_b`DoN!Cn`e0o1E2K8C8 z?>GY`a~*6!7{8!o$5>Nf4W)(AzVSj3j^2^~2S|MtI!VqkI(gl{+yO_OU!O5wy^RtQ z2n|v8Uwbii;|~jt5ZO-bsQo4oqp?PQ`)D3#|8Zfjmk)}5u{iKiMCSZe!f({ucY&Kj z7>7sC-0BW?H!r;T$AD3Ct@;E^1fFB|6D9tC_<9SdD8uewlunV5knSEp>6Q>FX^Ej@ z=x&ilN}2%%kyg4HL1~drkro7LkZwuwKJ$I&f7ZF@u65TeN0$RL&%Eywd+%RtOOy(O z`W2^EUX|OsR958*@|&h3pkmpkK(;l;+`wsLP6yK>sHsDx{$jo7VsbJD>{my>9dhW2t4k@`b?md6-4=wcl$TugCSZ%@$_EmC@C$;3G7vBsHFBO#wIPm~4~ z-w7C$_?pi&#?6feUHO=Ue*1)UHEc^7~Ng=wPof|&7lqlJ~cVw(z$Up1+D@+yW3Ke}29PhWN8#^11iS^Wj1(c+fs>hEKogU3MKypCjm8{HN8%F$ ziFjBaeQb?`yzJ`Ik3|bTY`@4mIisDw*OvC;x5b#plWi zP7w;H{K@AsQ|b75V#8F5<9pwebc!SJbX3fy@wHN_@7I>q$~1vj9dh;3Ck6eDa`za% zenJxxKx3$K5nXnkST*vakylGJ%F@(*`&9PR>?)|u)rey`|44rQ@n5b;^TvT z(loNnYzZzUte42S7@e@u-O1Z2xdsJFxAuR34@1qF2}MvTFElyfLOCcUN;zUn^pMbI zmdW*KulN0EOg(c4Q+)C(X@)kNd!1`gG;zQP#s;1X? zrCR3VQ^41g_Z!7Svu~teD<$hK4aBf|p(xt>g=2dMr;Q)O%{ZE*9RmTIekj2usIeWK z2433}>=YktdthK%jZ@Zj4lf*#;rlb!#mj~l&`Egpl(SgN)#@s@#ey zmY)?7RWTcJHQ}JAxhUQpv>vV}Ke^LJi=myOM?Mr2@R37zHZ$!S4nm=xL4KJka+GM; zriC_}V*Kc3m#enlNV~C#285D3ThQxAxR)c(2kGOa7Z(9slnm6M-L`LR`6h^G1X65+ z*wFs;ytAzLbtjIEA0DN9BO!Y8DDLSJ*{Vo&G^FxySPqa>GF6;OES9BC6NecqNiK3~ z(=mq)^;R&Fy)Q zf(tkNnu>uCtj$$_w)i#MzR~bB|+;$=>*TUqr(W>1pP%XWw;cKRh$r*|A6yrndvA{DxH0rRKwf6mw~{;%@#yglKtnUdy0R(8 z!0WE~AU z-Q`j>nLk&3g~npiIZZ4U>@fixryu#}f4Bfs=nI|It(F?>Zz*Cikmyh>G#n(T4wiHd zLtxE}F&hMg6b6FJ^!_5t#4t=fBhGL)zY4OL2&HLnvC45ne=%=1b6IeB&(uC#wEj<+ zv$x6*s|r#{dmocL??5Tr5R040JKivTk?lv-*AD;he7-NR5U|%$rv_53;=%8q9&itI z?MF|igc)`(j9stECt;H>qkCMotgF-TvRO>B(VqF(wEkOK%-sv1Bi1qPG?K56B@IRY zZY9#)m~fts3kg5pQ|q{a*eCJMK?Y0iG)S_Cu+&)sDgpuaN;YOi%E!1(<+0p#txpM%-wA(yy|T9FK|`Jj$O6XdU{eQmb}M^4ni+=M8`hptXYyy948-x22tL#3 zrmyvg`t0d;8Ed&!FCk^?r0S60%GUSBeMTKnB!yDBe$*mo<_(vp6cDhEO)&Ef=YJY( zo`3^j*z(oBNA*9=Sn#2Kvx&Jk_8=JeX5*`{1cCvnX2RTpf7%!0J2x7N1{kj)e%Nqo zdhc??vPc+j0`f^GVi8nc7VWv3Vp4^ax7y52K#6oI^J^1ft{Cmig^?oSTr#mz2_Pq? z&nX9=y^()>Vil#FJ03_8QKCvOFW0!(yA#vA*iXy%R|qUi#PNJE-8dE)hi}pK#aQD$ z!i+{8foKx31gQFJh?jPK8t=S+@^7VJl;?qjw>~IO&bC2`ps8L|^Xio?V#b)B06>p%A@ao>EncTgMVMdp}B-OgDQ^ zo0T`j^vYnb1XpVS1&s6L4H;YZn~6ukX`(`7I7j$ z4u;W0vQcRO2z}n|+v8`8LnwKK!c@8+i$o3clvdFJduZT;PgQ!4!_1PSwGRbBt=Y++ zjhi6_fG-uM<^aj`qE|lA71Y!-3)^iXlxY3op`dHQRx>h{5Yr~pqyCC=1QZ;;Wo+LV z1CiRU3S*&&Wd;r%E>v@#$bOnF3Q0eNllmeJ{=|<;Yrts{Fg9;C%oQOEHU(NZuvAU- z0jJ55M72RVV_Y>4?M=*r_xCwyi7r)`ET%zVS8P~oUV(uIy;3DYhgp^L8P??ROs^Be z&_~i23hh{Ib4YY$*whivHx3laB;{5dL!Q-pdU-O-QTh@A@@j!@(L?sgONo?ckG44ZvNZAmJPGPL_OY-kRN5J$eU?3;7M9RvGzQ{mW%gbJLy+cxXoxFH(13?P;T7`6sY(=Ox0y5!Rz z`2AGk0%ZUBeg_Khi4#Fwv=jh4SI#Hi{sSPJK7u8#)_Ts9O7K%!Q`*ROrD3hXhL^_@ z_Pd1XMYvLzwq=|`T?VgV61K@+9J|f!ulB&hx5DOLVI7EBqJe`?kpDnt|ZQbumcifV1i_kHVwW)6As(W|BfcRd093|W=tebfb95p z2hx}^LIYG`6##CyST$YXo0xH<6Al5aw+PTacK#W;)Qvo}*p4o#6HI+cu}i8j`lPdu zU|{vDQVyuU80A0vnLdC{FxMdOl3ogK=CfSPvvI0!*Vrhufv5KOiAshxeAbs z=!XX7AhoSzEL5yApmUa^M6`pDYC!AB-y+N8hXPfew^AK%A!{`0SLmw?Yb|HdQAfW@ z0U%%L&S{<~t_{fqwNV7BK>SA0<3&CIN~Jr?)s^nWBO;5@FEY=8^s*WvJoQ@~HP``MZAxtOJE+hKp<0DOs$Bd-UiAMhpLq{zINUr!EePWwp^m zNAUT$;~-;MSz~f_Alb6u^gIl%VCHSR_FJ94Oj)BIJWcu17-@i+6am2iK4xT)D)yH| zBn=vmL}$oa<8OxFiSsNEgh5twV`<~uFX-3Q^JUu!PH+`SOznaOvp_PdV;avg+QVhF z@>M1PSQ#{OY-hG=uaSKJx`Fe<>Wzrsl_#Cl{rZZPgY~tq^vFw@ls^EzEqhC~@UElJ z-ZXnH4B~go4AL>38U^dVmvt;?6v16lgGq7>ZMO-|D^6I(P^z#pdL}|KwrlltuGF1S zfDos%r^(%2Mv9A9y@?@aL?p{ztNb}!s`c5{K=VuTTv~Lz2<&bT1#pY7$;u(G0R#|Z z4I>HauAZ5ERFEPDU)5UW$DePRU%;s%$82rt+|x2=w!lo-$#O8{L3Q%JcUp-_tUzwT z9B^1N)Jb>$Ln>MJv99yrw$|^O?;6fL!;(YXcvcCR578a+|0ej(84|aqI@no%%dPW1 zGS0Kiur@D(Y=Roi$Yp{_G(i?UqHURbc?77gj2dDBNiUBhtALdX7ZX-kojAHylaeQU z3+|7=Z@HYXLMqdk=*sWnzdTyW6m8`wmvMsxajyL?7X7oMAq!DPS>vyn4WPgZKos|( zTtac}tMi?T9!kn5?yL8qRirbx%R3rB$mP|DFgN!?EMET60vMVdr0uUrl~JF5qX_TW zwLdwGUgp({_D7yq4*2Gn*<$Vnj<{ib|GCwf65ALFo&J7QetSQ3zOo4DK*ZOxS;`*7 z<9c+f(>Oo)I%ia9q>NQzLybMKkc=4_Mr|5=;B~&EzfppfgIAC*?)l!Un%M|zE+dK} zvV)9s=7Tb^ZLb2}9m8Ym$he=@e^--$vJz@7q9Dy2pHD<9`h1kM#%md$kTBTBzewyj z5>k*97KHI{F$&EeV!k&d%oM-mEz{wnIvn=W7>Op}k8V`|vQXJCSdc0@k^t$D{}^5I zH(op)3C>$VNmX3?(MNazeR7JL8N5*49o z$cYi-hhnKGS`~M)Of@>sNZ(LP~HD|GcU~xoefg4tY;TsD7-Iyc$xB@j0Uw=8a?dk z&XMxx7oPuKJ#T=SC*TahM-y`-7#T8gZ!fMQ#szCkA5?dr-o3#<_= z4Lr~ChQHYzU>@k19`pqdeoRTGP+&^fAs?@d8b}z?Nm1g?h+zyd!lrdrHKI8Rf_}vL z;k%^;rC-j$y=NJvj<1e$pjbKtHt1>G{;WyPjgf5&>pR)NYm2v%oc7<$wL^iA5=)j) zN!m!(gz9F3g?<5lPZN>hepLUBn1$$)m zPDG92IIzlK@6WnD*7$?W{ust%KNs`5*C0UbhWz+KY_OR5htY98@Hf}MsxzDl?Xfs& zMj;YG5;e?Q+eQ{-!|W#igxs3E&29fP5_W8egl*5lA1l(>CcX(T{l}#CcWK{V&L9W_ zM%`I_XK+M;X_ZzgpliTbB`!yQ?1px)#z4q=x-9^wqt$};GZO;BG*HK5Ros)C$!GFO zoDbTBmbm7bu^hqiISU=Sr@)RFQyJNDtum6~1;i>*j+AW31mHeR2o==UijbI~wtt3b z6czg0zSTI79p^*&R;<*YW>v4CKZA4f{&1nh5j$A(N+MJv7UzC+-q)$p z_w0p{`i0%RUH$D+)XDdoA+5IrKZ*H%d{I?GrmnJ!InzOWZdMboCnJWTOIN28r6X7a z+tl9yQ`F-T?D&zb{e!Q=;DUyw!CQ^bk@wA=3*D{8@)nV>@gN|6WE6)qRz6{FtmqHZ zKUp7CSVI5I+oXuNiE>|PTEXD&jBg+|YC_{@{UFD=j!6$a;C zx}RR`UB|B+d=VQs*~4{|n|g?VkXmyREn~F!>~|fFz5|^4?fF5&xIbIvxto1D2MXl< z2-gm#E8}Unhp=|ZWj9<@&%9i}G6{(wabANl6R9Tby4EjT?#HoxIW#XfYtO-`bb;C& z`X#K3k18Mn8L6|;O^w&YK>Lz(<1i3(7&gKhGG{0>R11AWsZRS(+pYg@7&1i(y*mM<8)86 z8ech7z&`D3La#)mD-+K1W|e)u0*v_!DOSIKLGm+WOGJoUku7m&ZP6XRM^0hoi7myg z);2`q_mN20;CsLBUc=VWzUxo=vnT*2!mk|D-X9!67k5BuA%oLo;F4Z!5n72+3s`a= zI^)gkSIE^adcvly<-asK86Ooud zg~Ge9+nU~B{&0LgNV}r}C(nSDO+kt@vr|>lgP<@+`^kF>1L#q0W`;bD01)+Ll__%9Ez1wnXIh5Qwm+id3b+FaNOO>;F* z5wia_ob_>Qnj2szUh)tB{Ua{=)^{tbhclQXq4?bHEWwf8yKf3EVZ&p{q78ptqMj{z zBtL)j{A0>=i?6eObnLriaOoqoS8>Eyv{3n@K9M3MZatj!;}gIvGnTuzvIL7QZ4x_* zOi_k-=)-2<-*Ye0vg!ph_DEtb|OB1uMaDF5>k()aVqYHbMjbvgYB~8 zD%Jp55(Q<^s|wa)ioAfKeFDB-?+dU<;&=~;)rkyPEg5+qUX|4mq%utO*>K%K77^z04CwH9(Z0-KP)_ZOb}qsWd#dMSgANpRjIq5tCQ z?hZIk4Bi;ZsAv+V6qzVNducStRi;7o%zSxDrznVYmKF0au)$y^mN`ptS!|h3KQ~uI zWMw?Kd_0c9IWCygX)hRLFL@uybu7PWdl4D4qL>ZXopixdm&~*DI#9$D%j{S z8RfDyWnJw%;!aB|45udlMQmr?8q;Rja%VX5)wvUeB5s`}wIHjI-H5iE+`_Ls1rI@A z9PS`mD%f!$&iZ%v>*Q%<=)b#(T8k&xaZ^f9Jsx11v+=b9LTe79ibLaFndG~iUDv%H z9I~B9z&fwoyuD?95ap*M@#?HhttP=u#fv~ViB?RLUU`W`E}gB+Xd>uMG{l02;NarF zUuD@&NZMZNKJumIX-15*g1QF{)6x%+3Qo;7f|`&4%x>TwOvgI<<`_j~$?ZAmYIz^R zgi%Lw3MOOxTX9qGKHLWg+OPo#;6?8x^+x=c7d^wgJo*5M0{p^s0Ar>I;HyKfcqCrI z1u-xAST$3PswKQP%ZQ~gkwA9N9@TqKu50oBBhtzZ*F7}$8Nm-tGW_a&$-AWVkM7q* zX;;KZhfNi;g@8)c3;VZ%wsB)hfX!DL7a_@HybvYNEuX)aiCRX|WwF6rW-SdCnA5mR z<>9Y!i7S|_bgh4Y5{8mpG?-kdgwd~Dcaj*r445lz5D1qlU}~QN!b3mJQy|jNx3XjH z!2cZpNLCt(lqA?}R`n<3VM)G;v|~a?xtA57(7>%uIg5L;ASP?setmaysISq5@&f}# zeD6))<{==u1!#7t;6Joq><Ppw~Va;=pI98dp8Z@twtU|a?TxQ_d>u3&Wq)afp8TL;6*+qa`lb5!B7yo4P z*^Q?R(RnJvSQ?T*s zC#f&E#yH$#0f zRDJ)&`QII?(2Vn-8qEGnr@lxF;E8qQsA|EziaNxzxF2Cc<2ZVw zz|U*OLGJS^9;lVZjR=G3vW(-<#j}=IHu*f+bDte$l@}*f4NhK#gv{2InXq({u$VM# zrl$!70X|Xe3GXj{VWHXLa(G%4y*gqC6-r00rllARO)!Ach0PW6uwP~R)HShM5%}WNCrG1wuWY8P#Y*e>RT)ajsEq*HBBNvZu`I~O>~ zmz1kgpV<21-ErIz)Uk+B5L=DGMN_F8FDmnZ>JTSS^DhgqhfEPF)fxl~a(!g(qu2Er zXnXJ{!nEnKQVo{PE|h^jF}Rj2%hGzm0DrBlIk3XYxei!n)8B?;ylm4Jh__NkvIJET z5Ms4W@CN~zV?TX8_d@VR_q3V|rJJ_Udp@XL1FY6Y!HWLlES}A)H0{3a@<1?biGbLp zc1W5YFuiiPe3C{o=0) zGm}kpgRGR_!7aPK+49-kTOQ2PF;i^{+^MCVt<3cqi_gWH)ik=LZo%bx7u1<1A{~9e zd+tU1{(Tj$qf{`6mjkbWhBm__q6xzH)e%h$C#!gF#|_YTDYB^5VpG6m^@O%LbO0~b z7l>L@USB6!ZeJ&aVW_=|`?vS7UYFc2N0pE}P%FNB)qdUjtT9fv)Q_)RuQpuzt%!0? zCSZ<5ZMJ_VnJt zQ+a%XP|DZsFKPlG!~$#p`+ei`m?~FFWAM!d^5u#&v<+6C^CWZ}+d#{Zm#U47&&djy z-SRIFr7$mk>73S%qY~I|iHL^8r|%bMX&c!njF&tyX3|XQ47A4i8&K;sAXsV(uKYIb zfV$24`eU)@!ReDgK*}p9^l&t#@#V2KxY+902A~p}DJfECB*U%5kUaRy&3>*qFf<{< z`3grO;9B9H$8@m4e#=bwVPST&Hd^YOsA`-#O>*mDhe`1{6Y(M-t*!DsN{UKYa0T_K z7wiRKms2CR#volL*rikTADqU4={Sbf(M_;^qih%`5Z#n>3 z#}tL21d+|8J0IGd!h)Wy^(PyO75;Z#m+4mDhqKrkm+O`0@qF!R-+EzHnvYT0OSo~} zIP4V~$EI8QOaj{gc-(mJ)UEF|$N$5aeRc&9bKB7g9rOP8{!}<(qX2550d{>vnh~Z< zxQdwBh*jQ4-(K}AC^1M`CQ0V9o!YHEl$cXX=PGpaM#fJA3&+`1&ikD_CZDS26BJ1O z;HMa_fa0Uw8a~(belevj%bB=_J7S(nnRXi%({Vai?r zDtPQYu8A}hn1?7*_eidkp**PdE$t2hSV@+2q&R)`J8%ZSL~beJ|A)RgXA|wWH!l!x z=%QaQUpkg!IJbb#fA>Sly1=PkjWdgVjwdx?(jj{RWk z=_o_!7PNCdZV3vDaL;>WD3e;A_uqVhMeTb_38kN(K^#kl2N3j&Mo&Jbg!kJhB}9uT zd)a_%%&?9k;_%83+;z+dT`KZ7Ghkdzo?ObSShJPURm+=_q zR>V{dJ*Me;072$aDha0kEtJRCNk2nUBtK<-TCIGF!1!(wXquM|6pI$3@`6rBnhZoHosFzJR4^Y9N?Cp^vMXZ>^ zcc$Hj0uy9ASc!8Xaaf;M;S`VEdVyDUD7gb^cLuxqOz1z+yMIedL1uvuOsSvEoJswY z-5#pQ;~F;`A~I@y)#Z!%&Ws*NKAm_D)<%qSZ`&iXM7jBt64kAdTEjanK~( z6Qa>c%{YP8@Z@wvXee&u>TU`F3AG=+Jq9VXnhuGgFz{ME{V=60i4s}oh(ux8((b^KL$2&dv?X>GyaFXxgIFmjGqGD zeGQM_$O)DB*y@eJC2~K!p6QkW-p~<~P1H;$7X)@cVKGdtyH}Slf$U;R%3~}~1}@@k zP>bE?DFkn#ji-=5B-e7EuE^loJUCdLP1!iC%6jq(kOuhiZolV;T$f+z?69s)b%N}n z@JvO=yp=GenEhJVes@m?7{C~aDLy3-?Vi^&(gna z($SuEWtqjMw?5)`1ru5A2R2z&pvNn@{s5pLWBef0NWl?KU0t`R=$iZ^AsQcO=>FukZj;P29*kkzu6h11H6Gb1NYGa-!mxl9*UavcME^ zntlMR`!gcdG5vg~bXy z4^GO)DRb=2#D~6abRZJfLCraF=a#Vp8a#5@fy?`6DR0l#2h(^$*{(i*%af^eqDTVD zbc&ZHA)L*~3WI7MfXNv`*HoiWj{o|m@5p>Df{vqh$QoVBbyR*H?4L5rqC8Lk4PXS7S#24@W@e zxd4&7?RuwjqC|ss4me4uNrUZB=L!f}rw)%W(2dzdit|>!zQ)ye5!!P9Q74}cI zl_8Zf#FMw5rXSK3i9ZkD*opv$j?Q3?de??x6ElR~ zdKUIEW5oIb=l+fNKJNKT04j5-2C4HSf8CFcAOjCiG|Ddq(~Cp|6?Kc~ZO4XVIr+x9 zdxU?&$8!DE24zp*Y{zqH#w}heXKLW^KUf&5u$_`95&+J)nP#ni_!~YbV|aZh+^-nV zf)y8%4}b!OASgf*139n-ER3JOA&N8g+nG`Yw&ox1l0`Ow+>Xc;^ZGezx%8vDE7+8N zOQk0!k5#~izVr*@D!@}uv#R#`!thAHBPal6IqJpxt1UpUU90>|p07ul5!j#_@Bfc^ zqBuYBP6W=w%fr*8DN0NXgUZMBLdQTeg&ew0+6JFn-qke#GQwqJl>+-aV2dFbbm@^< zE*@SXPyF*M_{tm0gWi_2`D8?%0!r3FETCUiis@<@EQUAiWl`+#<}D4rq!26W4TgW3HNu+orqqd zJUh(Ez+6X>ww$KQQt2dpxZYO~oQtzcHofFOcsS5Cn?U^_6v+&n@3mW*8n8;xy^4-( zyZp>i5_gmYfb-is?;97eVL|!+Yyb01R~YuUGFXa}wK(M%C?IR(P+|x{P^W2hR)|Nr z19XAktBRC3Or`Pt&(_nj%lUAC1rjrA*I;$4@iU5$%AlMv;mc%^>YBHjf{bQ9ee8Gi zq=gj76u-Aok&`jnVG3OH_w1g5t(z5) z%=InLL05$S2<`#`&lvvY_@^beHDI6Pxewv5|0(`@JoU+zBmwf_LwWx_QCKPSoFl3> zD0pMd3>XT_Pf=@fwMydin5GZayXikD#iZ8+%1il2Ii7G9AC3kAerNm?F$}|URxqz9W$KB~O1kgvjA|4C zMOT2TiK)6Gg0F=6TC$LNILo^NJe`&V(lZc6VjzECfwv&P4FW1+f=_v`cDU7X8-Q`a zbjTo_UH^ty`Y5b;f48sgKU+9GGs@K`rA%Z!5p>CDjyuPus|wd{B3zu7myx&R@?7m9 zh~}cDO3-$S`NLKCERZ~P26zGhr=8l42P4xcx>Nc@6ogIh$0ooVLs`&=T2kk?i0|VgWVDA;iM*&ukFP|B%2GmcsqwhpK z^J@5@;Z7pREr8Ti-JMVGSBGo260Xt8c$(O$E&P7T8(7Uu1pV_ax$Y0g52kOI-)2)N zX387(tZ9%Cy<#^m0uhouAt3_&_c7~=U~FVZWcYu=S3oxp;~85B7*)%gcx=;Ovt8<3|{F?#NW=x%0q@h5dCxE!fJ09-&z6WVB3`J#GOo+J5yl`nhtjjv`0aQ-)&e{r%n^k%2YFBf-c z#mpk>Af5sjP~sKhTM`|n!_pR`4h$eRAq{}bz^kul@Y~lVoA)w;%i>Ei$H2~%YZ=6( zS?3w?AwPROMY^6n|3GW7@?f}P{|1nMq1=09w_KOTl#A4pSKtswvhA7XsC4ctqbhH= zUv2Egl?`wqdx4>OTN^WgJt$fX-l*KavRmPrJ(lu6%$!e@Qm>(d0{PU`Z7A+ zgOoTof}K`9Gih`q!(eRaS8zer>E1$f!nC1p*Bax7AEI`SVym;BmB8GCpc{At!D0I<1C&;@MZ*^ zl&7&Gf>A6H80)7O6BB{M2atD+K=UI6pi&J2BlL}dRMwNDZsOr=_YQ7A$VnZ|7Tf(% zRbZ&RfLhe4*16wZ>WJ@^_Q6K~cPAF#Z}gK>ft?RgOU*HioM-y!E8k$~JJAY$qv|08 zS3YGwffxKTVGylxd)uvOYOgVw3za)EqK)Mw0W-?F*D=ZJ-Bc}uKmx5^ehGu_)>OkhLshj2MO|I86SdC@cob@JPg~5Hxphu>3QHqTsv?VGO;1Xma%GT< z1(;v_yV9(l{FK{%VH~*M_~+Md!qrvIn1uad^X8h^rt#_LzK7lk3|@oN{zDzPgxEP; zhBHp=i>(dm*S^jV_0}TA?1xNh?>|~P67~RNNpHv$wNLfx5ahOu7 z83WCLwVxlDZcDw)srq}8n-)19*vWO}wyU}Qy`+9&yduWMM2hu;=3-xNu~qxKi4rAD z$NBfI%*LfT@Wr6ev)`c`*Ukc&7fTF0we61;DMLOfmF^GaR}7I+O!vk!S5yvirtILF2yziO>>B~8C=)fKsODz?tJ zp`IINm*IQ}$DJ2Vr7_fh{I059ic$r@XU}taoj#@HB{w3RYpPtHM@fl}!1c67kEsSF zd6b5xGp5yl!EYqbGsilN9COsUzZ_hdooq@>=5UQ1I)97XG%E-vFKwg~hPj7k3^k{$hJ4tyg;fiLjjP zjdjLzy1xR=>#IoQ*5~$#%BA6Gy5RF|whx60nCDMt12?{v_`)`3X^RcoZ#J?s^fs!w z8Hc)hc?F+GQS!gNSNVcpAa_3h?Ke(1hx6KIb;&3%ednqKO!}2QzNd-+{6|+n>put--Kh1t>AmB+)L{mqX)=l;5$Bn=lT@u$lVCUD*+>WeTh^}mwqx&FmH=#|m>$lqKdsIzq;swy*-h>ms5BHv0_1DrDH zKX<3o?XUe1L08`d^%^y)4(`tV2Xm!LuMYZlYg3$NKc~kWxbyo9cWh&+l#CiN{mrB1 z9H!EgUO81^i&t~_cGT;%P%xv)7XQ*1Av)sZ@vlbdQ*2k43xPN;H(I&do}1W*{{$R`!42(-Z}R9&p`Xdd~4OKvZZG(G*xE+IeIm3qK17x zcv$Ar@(51JfwiuHtd z2w&-kr8gpK$O*Fu$q*$uQWbVA3?(F!5^!oHT@87j?I%q?2tI}t)f@%@gA$@tUi36| zD07<{pqP6wKv{%KGza3cB9PT_bkb6fE(IRSpj;=<_J0~8AW&<(N#OMd(a07RF@8i~ zr@RvkYA(^RL_nwoE=@3(Gr;6a2bp{JA-DiG7(KqfzkhX@MDUr|ZJvPJG+18Rm!!hr zTqrSZimjj4+vcIb_;`oDJaAH9(8?#@=sWhGKz3+2MYZO0u!+ILyT|cAkOkU;kTBXK7zoX*uVA2tGMoZoIn@1q0gk>1jxwN=?;CN< z^=Jjs(otVvrsdIYnhtA@e&j*KHAs-7;;VrFv@>yVY_t(SCqi^X2qT;odMRFbUT)l2 zahx5oP%syvEzS-tM2dSXhmFgwJbmK+OZvmt)u(tIPb&8oTW2p{TfJk`_zKc-w+@zh ze(rnULsrC-^9_K1v5*R-tHJ_EUi~62fup&bE_0;h?=)uuGUedUN~#DGtk?eS@T%p( z7xwAmSPRlZi>BF4)DG$)tRyP%-tj5<*Em_y8bzdKX04xW;8E`6rG$^qqYwbYdzi+c zD$1;ffC@HzizQ`EDE9yYb81F!7SfM4zz}P6%b`X=1p1ba+0miu=y)D!8-M(D)myzg z<99FV!H128;3QUMNt_W(cKu-Fi0ahGO52=?VZ{EwqLHXxm`A>*ZmWTa@+0Yg6SPRX z#m|C%PX&}`i=AxQq2)Z(^oBf4%h6oT&7u^WH8!!t;d1aQumMqra#M=j-w-dCnuejA zK_88-gqeQ{3HFwm=f$JE(*-FEJf6R0;L^$p-echeuxiJX%Unf>_$?iYJv5`6)1>po(v0oc~~0Ir6bp=+gyY>INuRcLN4*8Kw?GW z{5AH(_16yM)zYErSB%iDqc}fF^4km;yFZ0fPSyHq{`4zJ59sqZ4qG8-R71w5^*TP)q_P%d^LhGvTVdpl!_0Rt-|Y#d`Ooh8C(a~oroDqh z8HV>6&p0#@#e+x{1okGo;Uaf%o&%>60abb+<8M}q;Y@h$lRL<%eG+_7?}?~qBk(%p zi6Y2j{SbYg;$<603vYzY(SWvq#L&i9Y3Y!V4t!mL09Mtr;9Q)6ntZ=uYWo}xfqMr$ z)3s&k6G%M`1GRW%+)_L)4993WOBI86D-4$_G}D(I8>-oWgnT=lY&##y2KUuzwCjW6 z$+w(D8wk2R6>yv>`xNvgIP*nIMKdJ(i9A0<|HZQ}*LexqkIWF?LPx=h>P`FI95hEZ zQPKV7dBf%7?!ckq*;_ry1~-VSiDN(E~SC$(;{@WYaZ{Lf7l#txw zzG;13gI8)uT?1jsI&!)Hu4?W_zVr$?cwB>V55(Ick{H`^NUu$424@H;6N4shs??Ip zR?Q`^Y@r_yXq(Hel;@g{U%pH#%@5WWb(!a>O}sYjE7B71X#}B1$;jJQmAiH)n?8R; zpVM{rm|CN8bDp&qMOnkZ^(5a!E||Dh5qj2zERbgWR7|gGodmN0c3qCC~FY zKi*9k{Jq+e4~G>N(};Pt1R*_|+y4F0*1Pzig&1PhqML>3SIvw#v`&epuSPOMoqWbSXa&w=RE zXT*VB;$KUhbl@2k@NrLe!tiiRTs6@AQp171GR5z^tO!Y>;K+<7%j z=HfLHy)0NUYhFkqR25;N;{0SgQm#ytmx0efa#X+noe@?#jGa=;bzcDdqj*bK8=jHp zHK`Mr99BFUXBc0+sc>kU9w!6dOQ{^o@;Nw@^2MmrKbG)g&c+7R(O)nqo6F zs-S8x^rmMfj0sBN7SKPnKU1B3RhZ(DoB!fAN6$Rx?tOvna%db?{!fg@;TcWI4O|#; zay!gNp!eC>OhGzqE<%-8LaEdDplcyu;|Sf|i%K$A-JqiOUDXu)lhYGjbp}ZqB{Zy@ zg-kW1&*;ktw0IP-u*xD7*IEL!dOyn|{oSwE;#;Sdq3c_^o`GU>n&>cyc6t<+}lBB{JM zT{IjL6Bb~)IM}_gR_JgV7shf#g&Kwk)eiC)3!NRB*SQn$K@BM#^Fs$$lVLN7W@ac( zu9LJ3`mqFJRL67xHTPfiMTz5{*ZO-|@C?S8V7;;u{?Dzw)`k~vcAc3vOFAhnKgG%+ zDIBSb_iIo4lmXiwI{QD~TrlPb>N_f^{m*w~!$kjlp{c84AQ(0wJ4uBu=81G`-&VT{ zn(I5u4SJW9zjDvO4WBl4G#bntEVW8*40L5C$~ST6ARGx3NGZ@5 zL;WDH1aH^>dS~^~s1S978$GNXW|H`)z1QZd2%)w{KRBsJD-_(cB(%k$(L(rvTOz=deIgV}82ae?FU6!rF&d?29rOg?mrq6D1}Y5|5jR_p;D! z=B;#w;#pG9#YhjZ_;QNDB=TOEHhr6OUe?Zoam-S{#%sQQ))L9Qe9rO$p7BWMY9<8^ zSt|H6o%%Cy%7D{Yl@yN&!|jlM8iwtmb1B1KOI4VCMb2yR9K>Ig{tq;5-uEo(bn?G| zZ`8^?x&F=CeB4LN>bLWU;oM(zKAR;)8Vr>;;D_@VDHsx(7Ww3bf}GpdX7AgHLJctE z)dzXKtpH+#yWlhCOAp+(2k(y1$#NCOP7`@BP>+XN zNjH6RUvd-uqSEV>ET*Og>H|f<_7V7sTLN0aCt#heOC#n+=Z$#_60TyvNH3`cB+8-2 zS#w^{7BUs2!YYLdQE=q4O=_9Z67Cz=3ZWk8%LfGp+`zK z@L>P(Us8{j{D8(U*b%U~xktHhNPI&5F`$#`gHDrt08T>ye0`j9u)^X?hxFa$nl5lO zg0{bET=3{7Iss^f3cxO0tIb7CT76wbxLC@E&i0d*RNIZ-K^inP-U+AvbZZ?20mVBJ zb<6nGQQ{YMA>RkQ{))EKKh3iK!nj0R`6sfD`EnV7+F)LZK7P4yeRWQ_1*U6(D;I zoo!DRgX9JUcPr+Am=hp=C-KaFe{U`_0rg}sj)Hd`0F4>oZ<>e;(A*a0fP8;`3an^` zUK7hY^u57Jq6!D16~ei#H9j@usuF+4E+ii^ldM$p(#@!M{~760*%^-#6Sxk6hh=Lw z7S4dFmrEpM4!7lNROfGg3Lp+vDpL=6oWWJ1kDy{_$13Bu_m)J|68P|-Iup`7=mMQA z-AC|UCQ?2DdBre@m2nV@^MEW`h;I?dQzr`KF=ekl!2gE};0T~P zX8n{^02d4bZtHp%p@6VmkLOz7AQ*yePb?`;sJak-faF$=_dQRf3T3d-yXP~wY!!ez zIMEj14F%m3U(}i}k_gA%WEh$|&b!T2WktRtWIgXTj{NR9sv))r>r+?)3B1|=Q`D8m zL-oI31{uk|??Yo`--RT`HW&&;gA|6QELlpFl%2>jBzp~_g~}jHD%mHahDu1;m86J@ zl77$B=k@z~z5F%H>(2Y$_r1?^&Uwz+?+~O`eVN#W-BCNf5{GoMiJ{Ec*}D3K4h>Od z5jUxiIj}i?M>|g1Q#D#XD3mL=ZTJ>&?^&B*3m5zVKSAdN1rl5J`Rt;Vhxf^QlBigR zbf%4U=cTi2OOu0*Ck_KQn3}6b7z~_YVm^R{(h8229@7&Jyiw2X1ZecH^e=l`6%UAd zw@zn9l*o|30i`HehIrH*{@wsB9;A5Qg38dj)>RC~cJmkev%WBJld2Z!+mQydiDF(_ z3l{=(wiB|HQ;hv_-PW-OYhz%^{Dz*vW$jIWF^N{Kivb?r`%WX`kq?;|)UA`;)9!BT zs+J)5YxgKPh$@IQ{vi3-+^$hZ%*S7NE#dH~aGA}5>JyZ|Oja}Sz+30XgjizCDy^t2 zQP2weyIem)^?u>cmTpO9m{`7P8ezbF%Xc)MsP5UsSl!z^R~SGyEHnr@PPfaaeEc_3qa2w7w*8j|9+05XjVY$Jw*TW(NH_i5)biYZo+4p{YC$_jc3@E0)TL*5Zr=vQ6 ziGG@O`P+Ga^g^2EBP}qdZBrS23eBXX0&kRcWo`)hGGUMOFPjz7kJ6ccc!?T?&%OVh z#NP2QZ{L+~X1JbpVW)0^VxzAutNNf+r3=~5=+U$oN5PX^P8!!MyGf4~$n=(cf6Qzg zth|@A=YhAjB!2@FR-3m?Bk701oHqSZ5zlL5)?_0p=v>1VY8oYv9>*Uf?fE47jb@x7 z9Kf-t^!Po*Y=hGj8TN$a;~n)|MQL%K-p-wFX^8A(BIVN5E+ur|AkqBdfUDD;rm3xU zt{{Vx2kJZ<4AO@&1QMRWS8e_jrkIJ*-TQO=egxw(&p;tGuf1L7xl3<<-BO7Z$%a|;`6rnB!LhOxK|_*&EWjtn;$33cf?i_N4R zVG|1P%I4Z5vsdPfmH5I>SYNAAL0r5b#L;1U>W|pm!&6q@0{ouQr=PV_IIfC3$nc7} z*!el>Sa$W&J!D`EC8NrFJc( zhT_1nc|29E>Qm&9#jQJyk#ke8^oM@;TH|~9@MHNp1BG24xx}ut;+?ORX&wNv#T=uYn4E>g;P# z5mqad?!T&@x+ED!-B+xk*I3kWoa&>A*Snc7x4f=UDOri9zYMTFuks;`{ADJA~T)>3^odrst3%NOhQoPXh%nx~&|Kj(5w-?L$thZ#A) zoNZkp4Xb0>h_C}nd|}J2`ZB@}t|aVx;keh!`^MgtXY9fcaDV!D$QzMHbZi9jHh*tn zbY+%?PK;TnA*+L@X`FnHxq^w6n0yTKN7%2$#v=cef!;pBnSMKL=85+?drgn|Y?{*< zd7>a3TCSOgRvK-t0jdt-e`xuQJ37VyT4~)}V{JuCW zH4eo+H!ob+0deTCn@=4PU3a$V14H}c&ea0=g8IYKEeg?nprhG~ z8?cfh*55;@G?E6|iPG|)(yXX$xjD~BF?`a7D0t@88Xa)>v>OpHoyU?ry(D_p8vM-S zT3-hC_tVZ5DB9+YJ_xGW?sj=Bc*yG~G4U#jXDbbJ3&CTp$e+v67CHdean>FQ7oQB23(>(Q}Ngbw5>I)lw`ckkMbP3|fTMyqX3Z|Vq zcjLs~Poqk&my8`<0lad&m=UbVs`N-?U_A9`H`}G;t>!pw^X%Yc&Q~{_%IR+ufjA%- zUJa*aio18-ExUwM`5n2mv>@3yGkiDH{kNq8;kd@Chv2*KVv@I%ZeMR#*qjD!iNn2s zQv3WxT$f0pY1(S=cAE^n=M@a$L%75at$d-Vi0o^n_pvhLwqFwSwo*mhd)32C}bCPhv$qzRL8!F><_!=XL*Y_VJEi9EN=vsd0Q!&32mEBR_ z!;KOxSQ3;S&i}G}yG)}>nC2P#{J;*{R6$qWLT!(%Zohz*)ML%fs;hv`_tvZ-PCtab zZePg#>fPe+!qZgbL-9*OWRX&K>BR##p6-T&5wrs_k{c8Gu3Uzi%?{!u@d>BHy!dzyiMcr9itMO@2;X)|+wbRc@1-^c?#Lx_>=qG~EQd;`$m})043clt^^&AM8Kx)t z*!WCPpmoxY3JgtGIkcsj>4X4jOV3ep~HLZP;iB@)qXK#-D zJ^C*&Un4HZ*;o5A3|nG)?u_MS(_8EN)y?JMkb?w|fPjLMK-Kb>!$(3Ejh+ z8|#*k&{Hb-xHlOZ-xV6?2K^?zF}}W$ea%RN$(E zgw~M@QTMfzz}QS&t`=D19;Hr}L$k#5eN=QGxpDNtL&7@qtZ%<(0ZC4dThH&avj5nB znwfgk`e*Z(za%@~%$jatHBRN6=3LPYgLo`eFwutkhPkSr);Vj=YdU*#@RXm-&xAA9 zm#x-t`d3}T-`|`IPfzumJ1dXYW6-QU1i30tJz^&%wPLVQ+V)|7;~Rs^#AYk4+Sf|I zOzl1e*6YI;Dc{=MJ~8u%9)`AGe7mWJQ%Yl`2`G|@+K+Iy4{Z^=PnfQ9L`ZN+B89eO z38iH3|LH~F=@hgjk$AIN%Sjdc#ukn6s%W>HS*uq+i!>Y=r%KZh*oM<@JaECsjR*#5GIQVuXFmz##A3#v=CV028hNl4^4>SQc(RdO%ym2>+;__fxhI+ zUHm~=7&divclr0u>wp0rY}{PCjGGMVeW(e^ac^rXzy^sf*@gGb6v?TR7@7R0CuOoJ!?Bbpy_ayg!;JqI3= zMQff5ukT*@G*YMJBNUP3EGFtE98!Eb~bv#bWkkX?uNIJ$S@HY4u9Kn3UlTRKu8X4zCV?=?pi-7zh_|1 zVr=(Ek3uz^7<*c-VZ{W~-9)}PdoZfzV6B1z?F>wQ@i=YYp&WHkzM_+b4nob;)r^~8 zOHRMznk&2L>k9oMi-V@E8X|b-0$AF+Xer2FT2v5`yCHVGf+CkdkUTKuYM(E>6u4wr?l2tu{15*Us_hJXSu^Gnku|Xu?xEXA7k6@U zq1c}@A5b`$6m#|cPDO0^d{jAj@0zWYko$3nQ=xkUqIhLpyk-#i&%o?z%ZhPkv~jIV}}MLwQFVyv3G!)4?Bg1yqV+Xi(4n(&i66-Zdp07U{#pu(ehefLKk`Y-as^ywHIcG(gFyHy4Eo!m}jFv zh{^1@y;*ERe<*38(qJFwL#BGnVN=Y&TsJ+6|FF_Va>yAQ-;Se@KO-dlDpa(m)!_7J z&*`y4;AS@chJ&`XM$Gs%F5`=939N=XoK(y%wCZTIirXDE^zFMYRnKgzxGnZdS=+sD z025(fcg3S%?HlC~cMP8o4Z=+jMrZ|v<5pA^cU~kNM(k(`HDnZ=DFu|68Xod_kfZ3m>BqMcZQIPMVa9 zM0Q_jf=$}2LFwVI153f|uI@4jir^-;ZyXtEO%*0uwQ(UJ`YF`;cS1|2AEBP)H1>KS zaarDMLl&V>Y3~&7-Ga00xrt=wWZjE%4Vf4yVDc3E`1kevxQ26nPeE4j!Qu?sxEebH zxeyY2fvhGrF@GHpett1{VJgl+)0tg3_N0Ybf8snwTjnmanFZG6yu`g)39Pu1YP`Cz^BbOEGt*z^Scr9j$$%^l7@1}K_ zP}+|BGCz`aMNW~>k_BIi3KGDb4wuh<3Q>JA@|`RRw_sLWDN9|EaO{EJsR>r=w!e>= zHg5B(N+i2XEXwc^wD02;k(8PLM_w^}a-o!eoD2$(>Qh9@b|-dWRz86gYii1epxMLI zJKYtaIdVKgUuq2j$+*@{JTvYX-PiH0+(8ww%>0z>%T-Ax<+6)Cu9Aig_bcETAW}x0 z9b8A%?PWsR1on|dLRc48;gBZ`5%Z2zwX4+-lH{Lt8y+ks7Ok)zEg0q^$uS$kk2$lM z_lKuEgUyY7aN9qAM^ESuuN$a2Hm#Y(YNikyi~+hW_dJ@2 z$$DwN1Jh6$!l_Hx^ud$A5fz1R=lk% zKBYbmu5PqA>tP&|6`F+rNf?34!-1-bE<7v^C>RC;naW`CL8;D!jYOo4~CAoHi!Ae-stgQPAx!yfuL8qkBB0nmVfXI^XeTy zu3@Q>H-_#WJ`95{OeK_7II4UD?6DM?ySW>4ESboh8ekBwb*Vr++ZI_Sl5RGKk|}P7 zY3s~=jgS#P=TO|D`EZpikIAYHxcku6D{59`WhZ-9do9TzJN%iEl0^

#R;Y8tNkJ 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 literal 0 HcmV?d00001 diff --git a/language/qoa4ml-attributes-v0.2.json b/language/qoa4ml-attributes-v0.2.json new file mode 100644 index 0000000..f1bba89 --- /dev/null +++ b/language/qoa4ml-attributes-v0.2.json @@ -0,0 +1,44 @@ +{ + "qoa4mlattributes": { + "__comment": "it is like a catalog of attributes. We can load it for APIs", + "quality": { + "data": { + "Accuracy": { + "description": "The ratio between correct and total data the service received (%)" + }, + "Completeness": { + "description": "The ratio between received and expected number of data attributes sent to the service" + } + }, + "mlmodels": { + "AUC": { + "description": "the measure of the ability of a classifier to distinguish between classes and is used as a summary of the ROC curve" + }, + "Accuracy": { + "description": "can be measure in different way such as confidence score in classification models" + }, + "MSE": { + "description": "Mean square error using for regression models" + }, + "Precision": { + "description": "the fraction of true possitive respones over total number of positive responses" + }, + "Recall": { + "description": "the fraction of true possitive respones over total number of correct responses" + }, + "description": "Depend on model development, the model can provide diverse metric such as accuracy, precision, recall, mse. Sometime, the metrics can be infer after prediction, other ways, their measuring requires future data from client." + }, + "services": { + "Availability": { + "description": "The ratio between up time and down time of the service (%)" + }, + "Reliability": { + "description": "The ratio between correct and total service responses (%)" + }, + "ResponseTime": { + "description": "The response time of each microservice, measured by the time period between receving and replying the request (s)" + } + } + } + } +} diff --git a/language/qoa4ml-core-ensemble-v0.2.json b/language/qoa4ml-core-ensemble-v0.2.json new file mode 100644 index 0000000..be4d938 --- /dev/null +++ b/language/qoa4ml-core-ensemble-v0.2.json @@ -0,0 +1,436 @@ +{ + "execution_graph": { + "end_point": { + "functionality": "REST", + "id": "de49f688-096f-4e06-8308-4d24a595dec5", + "name": "", + "stage": "Aggregate" + }, + "linked_list": { + "0f1dfa69-ba94-4aec-9c56-36677414a582": { + "instance": { + "functionality": "REST", + "id": "0f1dfa69-ba94-4aec-9c56-36677414a582", + "name": "", + "stage": "ml_inference_ensemble" + }, + "previous": [ + { + "functionality": "REST", + "id": "9ffc52c1-297c-408f-88b7-8874520e9c57", + "name": "", + "stage": "data_processing" + } + ] + }, + "3d203a15-9c30-4f5f-b9dd-03510ef8631f": { + "instance": { + "functionality": "REST", + "id": "3d203a15-9c30-4f5f-b9dd-03510ef8631f", + "name": "", + "stage": "ml_inference_ensemble" + }, + "previous": [ + { + "functionality": "REST", + "id": "9ffc52c1-297c-408f-88b7-8874520e9c57", + "name": "", + "stage": "data_processing" + } + ] + }, + "95d033ca-8cee-4642-92f5-de8afb00a650": { + "instance": { + "functionality": "REST", + "id": "95d033ca-8cee-4642-92f5-de8afb00a650", + "name": "", + "stage": "gateway" + }, + "previous": [] + }, + "9ffc52c1-297c-408f-88b7-8874520e9c57": { + "instance": { + "functionality": "REST", + "id": "9ffc52c1-297c-408f-88b7-8874520e9c57", + "name": "", + "stage": "data_processing" + }, + "previous": [ + { + "functionality": "REST", + "id": "95d033ca-8cee-4642-92f5-de8afb00a650", + "name": "", + "stage": "gateway" + } + ] + }, + "de49f688-096f-4e06-8308-4d24a595dec5": { + "instance": { + "functionality": "REST", + "id": "de49f688-096f-4e06-8308-4d24a595dec5", + "name": "", + "stage": "Aggregate" + }, + "previous": [ + { + "functionality": "REST", + "id": "0f1dfa69-ba94-4aec-9c56-36677414a582", + "name": "", + "stage": "ml_inference_ensemble" + }, + { + "functionality": "REST", + "id": "3d203a15-9c30-4f5f-b9dd-03510ef8631f", + "name": "", + "stage": "ml_inference_ensemble" + } + ] + } + } + }, + "inference_report": { + "data": { + "data_processing": { + "metrics": { + "image_height": { + "9ffc52c1-297c-408f-88b7-8874520e9c57": { + "metric_name": "image_height", + "records": [ + 78 + ], + "unit": null + } + }, + "image_width": { + "9ffc52c1-297c-408f-88b7-8874520e9c57": { + "metric_name": "image_width", + "records": [ + 31 + ], + "unit": null + } + }, + "object_height": { + "9ffc52c1-297c-408f-88b7-8874520e9c57": { + "metric_name": "object_height", + "records": [ + 12 + ], + "unit": null + } + }, + "object_width": { + "9ffc52c1-297c-408f-88b7-8874520e9c57": { + "metric_name": "object_width", + "records": [ + 26 + ], + "unit": null + } + } + }, + "name": "data_processing" + }, + "gateway": { + "metrics": { + "image_height": { + "95d033ca-8cee-4642-92f5-de8afb00a650": { + "metric_name": "image_height", + "records": [ + 19 + ], + "unit": null + } + }, + "image_width": { + "95d033ca-8cee-4642-92f5-de8afb00a650": { + "metric_name": "image_width", + "records": [ + 46 + ], + "unit": null + } + }, + "object_height": { + "95d033ca-8cee-4642-92f5-de8afb00a650": { + "metric_name": "object_height", + "records": [ + 58 + ], + "unit": null + } + }, + "object_width": { + "95d033ca-8cee-4642-92f5-de8afb00a650": { + "metric_name": "object_width", + "records": [ + 28 + ], + "unit": null + } + } + }, + "name": "gateway" + } + }, + "ml_specific": { + "end_point": { + "execution_instance_id": "de49f688-096f-4e06-8308-4d24a595dec5", + "id": "d56a4e83-a221-44dd-93fc-a5560d412fb0", + "metrics": [ + { + "metric_name": "confidence", + "records": [ + 5 + ], + "unit": null + }, + { + "metric_name": "accuracy", + "records": [ + 61 + ], + "unit": null + } + ], + "prediction": null + }, + "linked_list": { + "072fa88f-e335-41e7-b030-88e3ed22fba8": { + "instance": { + "execution_instance_id": "3d203a15-9c30-4f5f-b9dd-03510ef8631f", + "id": "072fa88f-e335-41e7-b030-88e3ed22fba8", + "metrics": [ + { + "metric_name": "confidence", + "records": [ + 84 + ], + "unit": null + }, + { + "metric_name": "accuracy", + "records": [ + 91 + ], + "unit": null + } + ], + "prediction": null + }, + "previous": [] + }, + "4cd15734-5e59-49fc-ade5-05c6a3df4e71": { + "instance": { + "execution_instance_id": "0f1dfa69-ba94-4aec-9c56-36677414a582", + "id": "4cd15734-5e59-49fc-ade5-05c6a3df4e71", + "metrics": [ + { + "metric_name": "confidence", + "records": [ + 76 + ], + "unit": null + }, + { + "metric_name": "accuracy", + "records": [ + 7 + ], + "unit": null + } + ], + "prediction": null + }, + "previous": [] + }, + "d56a4e83-a221-44dd-93fc-a5560d412fb0": { + "instance": { + "execution_instance_id": "de49f688-096f-4e06-8308-4d24a595dec5", + "id": "d56a4e83-a221-44dd-93fc-a5560d412fb0", + "metrics": [ + { + "metric_name": "confidence", + "records": [ + 5 + ], + "unit": null + }, + { + "metric_name": "accuracy", + "records": [ + 61 + ], + "unit": null + } + ], + "prediction": null + }, + "previous": [ + { + "execution_instance_id": "de49f688-096f-4e06-8308-4d24a595dec5", + "id": "d56a4e83-a221-44dd-93fc-a5560d412fb0", + "metrics": [ + { + "metric_name": "confidence", + "records": [ + 5 + ], + "unit": null + }, + { + "metric_name": "accuracy", + "records": [ + 61 + ], + "unit": null + } + ], + "prediction": null + }, + { + "execution_instance_id": "3d203a15-9c30-4f5f-b9dd-03510ef8631f", + "id": "072fa88f-e335-41e7-b030-88e3ed22fba8", + "metrics": [ + { + "metric_name": "confidence", + "records": [ + 84 + ], + "unit": null + }, + { + "metric_name": "accuracy", + "records": [ + 91 + ], + "unit": null + } + ], + "prediction": null + } + ] + } + } + }, + "service": { + "Aggregate": { + "metrics": { + "response_time": { + "de49f688-096f-4e06-8308-4d24a595dec5": { + "metric_name": "response_time", + "records": [ + { + "responseTime": 1.8835067749023438e-05, + "startTime": 1716535580.7241704 + } + ], + "unit": null + } + } + }, + "name": "Aggregate" + }, + "data_processing": { + "metrics": { + "metric1": { + "9ffc52c1-297c-408f-88b7-8874520e9c57": { + "metric_name": "metric1", + "records": [ + 24 + ], + "unit": null + } + }, + "metric2": { + "9ffc52c1-297c-408f-88b7-8874520e9c57": { + "metric_name": "metric2", + "records": [ + 8 + ], + "unit": null + } + }, + "response_time": { + "9ffc52c1-297c-408f-88b7-8874520e9c57": { + "metric_name": "response_time", + "records": [ + { + "responseTime": 0.00010895729064941406, + "startTime": 1716535580.7217674 + } + ], + "unit": null + } + } + }, + "name": "data_processing" + }, + "gateway": { + "metrics": { + "metric1": { + "95d033ca-8cee-4642-92f5-de8afb00a650": { + "metric_name": "metric1", + "records": [ + 40 + ], + "unit": null + } + }, + "metric2": { + "95d033ca-8cee-4642-92f5-de8afb00a650": { + "metric_name": "metric2", + "records": [ + 95 + ], + "unit": null + } + } + }, + "name": "gateway" + }, + "ml_inference_ensemble": { + "metrics": { + "response_time": { + "0f1dfa69-ba94-4aec-9c56-36677414a582": { + "metric_name": "response_time", + "records": [ + { + "responseTime": 7.271766662597656e-05, + "startTime": 1716535580.7223608 + } + ], + "unit": null + }, + "3d203a15-9c30-4f5f-b9dd-03510ef8631f": { + "metric_name": "response_time", + "records": [ + { + "responseTime": 7.176399230957031e-05, + "startTime": 1716535580.7232397 + } + ], + "unit": null + } + } + }, + "name": "ml_inference_ensemble" + } + } + }, + "metadata": { + "client_config": { + "application_name": "", + "functionality": "REST", + "id": "de49f688-096f-4e06-8308-4d24a595dec5", + "instance_id": "Agg01", + "name": "", + "role": "ml", + "run_id": "", + "stage_id": "Aggregate", + "user_id": "aaltosea5" + }, + "runtime": 0.006242036819458008, + "timestamp": 1716535580.724298 + } +} diff --git a/language/qoa4ml-core-ensemble.json b/language/qoa4ml-core-ensemble.json new file mode 100644 index 0000000..2bf357f --- /dev/null +++ b/language/qoa4ml-core-ensemble.json @@ -0,0 +1,292 @@ +{ + "composition": { + "compositionID": "composition_id", + "computationGraph": { + "microservice": [ + { + "id": "service_id", + "infrastructure": [ + "device_name" + ], + "method": "ML/aggregation", + "processortypes": [ + "CPU", + "GPU", + "TPU" + ], + "serviceapis": [ + "rest", + "mqtt", + "kafka", + "amqp", + "coapp" + ], + "source": "id_of_previous_microservice" + } + ] + }, + "data": [ + { + "datatypes": [ + "video", + "image", + "message" + ], + "formats": [ + "binary", + "csv", + "json", + "avro" + ], + "id": "data_id" + } + ], + "inferenceQuantity": [ + 2, + 3 + ], + "mlmodels": [ + { + "formats": [ + "kerash5", + "onnx" + ], + "id": "mlmodel_id", + "inferencemodes": [ + "static", + "dynamic" + ], + "mlinfrastructures": [ + "tensorflow", + "predictio" + ], + "modelclasses": [ + "SVM", + "DT", + "CNN", + "RNN", + "LR", + "KMeans", + "ANN" + ] + } + ], + "modelTier": "maxTier", + "resourcesTier": "cloud/edge" + }, + "cost": { + "cost": { + "class": "cost", + "operators": [ + "min", + "max", + "range" + ], + "unit": [ + "USD", + "EUR", + "other" + ], + "value": "value" + }, + "pricingmodel": { + "class": "cost", + "id": "the id of the pricing model in the system", + "name": "name" + } + }, + "fairness": { + "predictionbias": { + "class": [ + "Accuracy" + ], + "operators": [ + "min", + "max" + ], + "unit": "percentage", + "value": "value" + } + }, + "interpretability": { + "explainability": { + "modes": [ + "full", + "compact" + ] + } + }, + "privacy": { + "membershipinferencerisk": { + "class": [ + "Privacy" + ], + "operators": [ + "min", + "max" + ], + "range": [ + 0, + 1 + ], + "unit": "float", + "value": "value" + } + }, + "quality": { + "__comment": "when define a contract, we replace @ATTRIBUTE with a real attribute name", + "data": { + "@ATTRIBUTE": { + "attributenames": [ + "Accuracy", + "Completeness" + ], + "class": [ + "qualityofdata" + ], + "condition": [ + { + "class": [ + "performance" + ], + "operators": [ + "min", + "max", + "range" + ], + "unit": [ + "ms", + "second", + "percentage" + ], + "value": "value" + } + ], + "id": "id", + "operators": [ + "min", + "max", + "range" + ], + "trigger": "every_req/hour/minute", + "unit": [ + "percentage" + ], + "value": "value" + } + }, + "mlSpecific": { + "@ATTRIBUTE": { + "attributenames": [ + "Accuracy", + "Precision", + "Recall", + "AUC", + "MSE" + ], + "class": [ + "accuracy" + ], + "condition": [ + { + "class": [ + "performance" + ], + "operators": [ + "min", + "max", + "range" + ], + "unit": [ + "ms", + "second", + "percentage" + ], + "value": "value" + } + ], + "id": "id", + "operators": [ + "min", + "max", + "range" + ], + "trigger": "every_req/hour/minute", + "unit": [ + "percentage" + ], + "value": "value" + } + }, + "services": { + "@ATTRIBUTE": { + "attributenames": [ + "ResponseTime", + "Reliability" + ], + "class": [ + "performance" + ], + "condition": [ + { + "class": [ + "performance" + ], + "operators": [ + "min", + "max", + "range" + ], + "unit": [ + "ms", + "second", + "percentage" + ], + "value": "value" + } + ], + "id": "id", + "operators": [ + "min", + "max", + "range" + ], + "trigger": "every_req/hour/minute", + "unit": [ + "ms", + "second", + "percentage" + ], + "value": "value" + } + } + }, + "security": { + "encryptedinference": { + "mode": [ + true, + false + ] + }, + "encryption": { + "types": [ + "end2end" + ] + } + }, + "stakeholders": [ + { + "id": "name", + "provisioning": [ + "mlservice", + "storage", + "mlmodels" + ], + "roles": [ + "mlconsumer", + "mlprovider", + "mlinfrastructure" + ] + } + ] +} diff --git a/language/qoa4ml-core-v0.2.json b/language/qoa4ml-core-v0.2.json new file mode 100644 index 0000000..7f48506 --- /dev/null +++ b/language/qoa4ml-core-v0.2.json @@ -0,0 +1,223 @@ +{ + "cost": { + "cost": { + "operators": [ + "min", + "max", + "range" + ], + "unit": [ + "USD", + "EUR", + "other" + ], + "value": "value" + }, + "pricingmodel": { + "class": "cost", + "id": "the id of the pricing model in the system", + "name": "name" + } + }, + "fairness": { + "predictionbias": { + "class": [ + "Accuracy" + ], + "operators": [ + "min", + "max" + ], + "unit": "percentage", + "value": "value" + } + }, + "interpretability": { + "explainability": { + "modes": [ + "full", + "compact" + ] + } + }, + "privacy": { + "membershipinferencerisk": { + "class": [ + "Privacy" + ], + "operators": [ + "min", + "max" + ], + "range": [ + 0, + 1 + ], + "unit": "float", + "value": "value" + } + }, + "quality": { + "__comment": "when define a contract, we replace @ATTRIBUTE with a real attribute name", + "data": { + "@ATTRIBUTE": { + "attributenames": [ + "Accuracy", + "Completeness" + ], + "class": [ + "qualityofdata" + ], + "id": "id", + "operators": [ + "min", + "max", + "range" + ], + "unit": [ + "percentage" + ], + "value": "value" + } + }, + "mlmodels": { + "@ATTRIBUTE": { + "attributenames": [ + "Accuracy", + "Precision", + "Recall", + "AUC", + "MSE" + ], + "class": [ + "accuracy" + ], + "id": "id", + "operators": [ + "min", + "max", + "range" + ], + "unit": [ + "percentage" + ], + "value": "value" + } + }, + "services": { + "@ATTRIBUTE": { + "attributenames": [ + "ResponseTime", + "Reliability" + ], + "class": [ + "performance" + ], + "id": "id", + "operators": [ + "min", + "max", + "range" + ], + "unit": [ + "ms", + "second", + "percentage" + ], + "value": "value" + } + } + }, + "resources": { + "data": [ + { + "datatypes": [ + "video", + "image", + "message" + ], + "formats": [ + "binary", + "csv", + "json", + "avro" + ], + "id": "data_id" + } + ], + "mlmodels": [ + { + "developmentenvironment": [ + "kerash5", + "onnx" + ], + "id": "mlmodel_id", + "inferencemodes": [ + "static", + "dynamic" + ], + "modelcategory": [ + "SVM", + "DT", + "CNN", + "RNN", + "LR", + "KMeans", + "ANN" + ], + "servingplatforms": [ + "tensorflow", + "predictio" + ] + } + ], + "services": [ + { + "id": "service_id", + "infrastructure": [ + "device" + ], + "processortypes": [ + "CPU", + "GPU", + "TPU" + ], + "serviceapis": [ + "rest", + "mqtt", + "kafka", + "amqp", + "coapp" + ] + } + ] + }, + "security": { + "encryptedinference": { + "mode": [ + true, + false + ] + }, + "encryption": { + "types": [ + "end2end" + ] + } + }, + "stakeholders": [ + { + "id": "name", + "provisioning": [ + "mlservice", + "storage", + "mlmodels" + ], + "roles": [ + "mlconsumer", + "mlprovider", + "mlinfrastructure" + ] + } + ] +} diff --git a/language/qoa4ml-core.json b/language/qoa4ml-core.json new file mode 100644 index 0000000..beea54d --- /dev/null +++ b/language/qoa4ml-core.json @@ -0,0 +1,260 @@ +{ + "cost": { + "cost": { + "class": "cost", + "operators": [ + "min", + "max" + ], + "unit": [ + "USD", + "EUR", + "other" + ], + "value": "value" + }, + "pricingmodel": { + "class": "cost", + "name": "name" + } + }, + "fairness": { + "Predictionbias": { + "class": [ + "Accuracy" + ], + "operators": [ + "min", + "max" + ], + "unit": "percentage", + "value": "value" + } + }, + "interpretability": { + "explainability": { + "modes": [ + "full", + "compact" + ] + } + }, + "privacy": { + "membershipinferencerisk": { + "class": [ + "Privacy" + ], + "operators": [ + "min", + "max" + ], + "range": [ + 0, + 1 + ], + "unit": "float", + "value": "value" + } + }, + "quality": { + "data": { + "Accuracy": { + "class": [ + "qualityofdata" + ], + "operators": [ + "min", + "max" + ], + "unit": "percentage", + "value": "value" + }, + "Completeness": { + "operators": [ + "min", + "max" + ], + "resourceType": [ + "qualityofdata" + ], + "unit": "percentage", + "value": "value" + } + }, + "mlmodels": { + "AUC": { + "class": [ + "Accuracy" + ], + "operators": [ + "min", + "max" + ], + "unit": "percentage", + "value": "value" + }, + "Accuracy": { + "class": [ + "Accuracy" + ], + "operators": [ + "min", + "max" + ], + "unit": "percentage", + "value": "value" + }, + "MSE": { + "class": [ + "Accuracy" + ], + "operators": [ + "min", + "max" + ], + "unit": "percentage", + "value": "value" + }, + "Precision": { + "class": [ + "Accuracy" + ], + "operators": [ + "min", + "max" + ], + "unit": "percentage", + "value": "value" + }, + "Recall": { + "class": [ + "Accuracy" + ], + "operators": [ + "min", + "max" + ], + "unit": "percentage", + "value": "value" + } + }, + "services": { + "Reliability": { + "class": [ + "performance" + ], + "operators": [ + "min", + "max" + ], + "unit": "percentage", + "value": "value" + }, + "ResponseTime": { + "class": [ + "performance" + ], + "operators": [ + "min", + "max" + ], + "unit": "ms", + "value": "value" + } + } + }, + "resources": { + "data": [ + { + "datatypes": [ + "video", + "image", + "message" + ], + "formats": [ + "binary", + "csv", + "json", + "avro" + ], + "id": "data_id" + } + ], + "mlmodels": [ + { + "formats": [ + "kerash5", + "onnx" + ], + "id": "mlmodel_id", + "inferencemodes": [ + "static", + "dynamic" + ], + "mlinfrastructures": [ + "tensorflow", + "predictio" + ], + "modelclasses": [ + "SVM", + "DT", + "CNN", + "RNN", + "LR", + "KMeans", + "ANN" + ] + } + ], + "services": [ + { + "id": "service_id", + "machinetypes": [ + "micro", + "small", + "normal" + ], + "processortypes": [ + "CPU", + "GPU", + "TPU" + ], + "serviceapis": [ + "rest", + "mqtt", + "kafka", + "amqp", + "coapp" + ] + } + ] + }, + "security": { + "encryptedinference": { + "mode": [ + true, + false + ] + }, + "encryption": { + "types": [ + "end2end" + ] + } + }, + "stakeholders": [ + { + "id": "name", + "provisioning": [ + "mlservice", + "storage", + "mlmodels" + ], + "roles": [ + "mlconsumer", + "mlprovider", + "mlinfrastructure" + ] + } + ] +} diff --git a/language/qoa4ml-ensemble-ml-report-schema.json b/language/qoa4ml-ensemble-ml-report-schema.json new file mode 100644 index 0000000..b720c78 --- /dev/null +++ b/language/qoa4ml-ensemble-ml-report-schema.json @@ -0,0 +1,470 @@ +{ + "execution_graph": { + "end_point": { + "functionality": "Max Aggregate", + "id": "e3babe1d-3411-4b6c-8ba6-4f5466015129", + "name": "", + "stage": "Aggregate" + }, + "linked_list": { + "3fc71830-cd50-4a10-a230-0c15fa794b4d": { + "instance": { + "functionality": "TensorFlow", + "id": "3fc71830-cd50-4a10-a230-0c15fa794b4d", + "name": "", + "stage": "ml_inference_ensemble" + }, + "previous": [ + { + "functionality": "transformation", + "id": "5c517e3f-a8bd-4ca3-b891-4d6bc9f64175", + "name": "", + "stage": "data_processing" + } + ] + }, + "5c517e3f-a8bd-4ca3-b891-4d6bc9f64175": { + "instance": { + "functionality": "transformation", + "id": "5c517e3f-a8bd-4ca3-b891-4d6bc9f64175", + "name": "", + "stage": "data_processing" + }, + "previous": [ + { + "functionality": "REST", + "id": "7448d242-1fb8-4a4d-bad1-a004b144d6a9", + "name": "", + "stage": "gateway" + } + ] + }, + "7448d242-1fb8-4a4d-bad1-a004b144d6a9": { + "instance": { + "functionality": "REST", + "id": "7448d242-1fb8-4a4d-bad1-a004b144d6a9", + "name": "", + "stage": "gateway" + }, + "previous": [] + }, + "e3babe1d-3411-4b6c-8ba6-4f5466015129": { + "instance": { + "functionality": "Max Aggregate", + "id": "e3babe1d-3411-4b6c-8ba6-4f5466015129", + "name": "", + "stage": "Aggregate" + }, + "previous": [ + { + "functionality": "TensorFlow", + "id": "3fc71830-cd50-4a10-a230-0c15fa794b4d", + "name": "", + "stage": "ml_inference_ensemble" + }, + { + "functionality": "TensorFlow", + "id": "fb6ceb5e-f464-4e65-9c3b-7c95c494bac9", + "name": "", + "stage": "ml_inference_ensemble" + } + ] + }, + "fb6ceb5e-f464-4e65-9c3b-7c95c494bac9": { + "instance": { + "functionality": "TensorFlow", + "id": "fb6ceb5e-f464-4e65-9c3b-7c95c494bac9", + "name": "", + "stage": "ml_inference_ensemble" + }, + "previous": [ + { + "functionality": "transformation", + "id": "5c517e3f-a8bd-4ca3-b891-4d6bc9f64175", + "name": "", + "stage": "data_processing" + } + ] + } + } + }, + "inference_report": { + "data": { + "data_processing": { + "metrics": { + "image_height": { + "5c517e3f-a8bd-4ca3-b891-4d6bc9f64175": { + "description": "", + "metric_name": "image_height", + "records": [ + 50.0 + ], + "unit": null + } + }, + "image_width": { + "5c517e3f-a8bd-4ca3-b891-4d6bc9f64175": { + "description": "", + "metric_name": "image_width", + "records": [ + 97.0 + ], + "unit": null + } + }, + "object_height": { + "5c517e3f-a8bd-4ca3-b891-4d6bc9f64175": { + "description": "", + "metric_name": "object_height", + "records": [ + 76.0 + ], + "unit": null + } + }, + "object_width": { + "5c517e3f-a8bd-4ca3-b891-4d6bc9f64175": { + "description": "", + "metric_name": "object_width", + "records": [ + 57.0 + ], + "unit": null + } + } + }, + "name": "data_processing" + }, + "gateway": { + "metrics": { + "image_height": { + "7448d242-1fb8-4a4d-bad1-a004b144d6a9": { + "description": "", + "metric_name": "image_height", + "records": [ + 85.0 + ], + "unit": null + } + }, + "image_width": { + "7448d242-1fb8-4a4d-bad1-a004b144d6a9": { + "description": "", + "metric_name": "image_width", + "records": [ + 54.0 + ], + "unit": null + } + }, + "object_height": { + "7448d242-1fb8-4a4d-bad1-a004b144d6a9": { + "description": "", + "metric_name": "object_height", + "records": [ + 16.0 + ], + "unit": null + } + }, + "object_width": { + "7448d242-1fb8-4a4d-bad1-a004b144d6a9": { + "description": "", + "metric_name": "object_width", + "records": [ + 46.0 + ], + "unit": null + } + } + }, + "name": "gateway" + } + }, + "ml_specific": { + "end_point": { + "functionality": "Max Aggregate", + "inference_id": "c7613f93-3270-4d7d-b275-5c8a64561ae7", + "instance_id": "e3babe1d-3411-4b6c-8ba6-4f5466015129", + "metrics": [ + { + "description": null, + "metric_name": "confidence", + "records": [ + 19.0 + ], + "unit": null + }, + { + "description": null, + "metric_name": "accuracy", + "records": [ + 38.0 + ], + "unit": null + } + ], + "prediction": 447.0 + }, + "linked_list": { + "3fc71830-cd50-4a10-a230-0c15fa794b4d": { + "instance": { + "functionality": "TensorFlow", + "inference_id": "59f33d12-9bbb-43cb-8762-a9f9aa10bc3d", + "instance_id": "3fc71830-cd50-4a10-a230-0c15fa794b4d", + "metrics": [ + { + "description": null, + "metric_name": "confidence", + "records": [ + 43.0 + ], + "unit": null + }, + { + "description": null, + "metric_name": "accuracy", + "records": [ + 80.0 + ], + "unit": null + } + ], + "prediction": 286.0 + }, + "previous": [] + }, + "e3babe1d-3411-4b6c-8ba6-4f5466015129": { + "instance": { + "functionality": "Max Aggregate", + "inference_id": "c7613f93-3270-4d7d-b275-5c8a64561ae7", + "instance_id": "e3babe1d-3411-4b6c-8ba6-4f5466015129", + "metrics": [ + { + "description": null, + "metric_name": "confidence", + "records": [ + 19.0 + ], + "unit": null + }, + { + "description": null, + "metric_name": "accuracy", + "records": [ + 38.0 + ], + "unit": null + } + ], + "prediction": 447.0 + }, + "previous": [ + { + "functionality": "Max Aggregate", + "inference_id": "c7613f93-3270-4d7d-b275-5c8a64561ae7", + "instance_id": "e3babe1d-3411-4b6c-8ba6-4f5466015129", + "metrics": [ + { + "description": null, + "metric_name": "confidence", + "records": [ + 19.0 + ], + "unit": null + }, + { + "description": null, + "metric_name": "accuracy", + "records": [ + 38.0 + ], + "unit": null + } + ], + "prediction": 447.0 + }, + { + "functionality": "TensorFlow", + "inference_id": "558bd7d4-cb5e-47fd-928d-7be1c5f5a2e6", + "instance_id": "fb6ceb5e-f464-4e65-9c3b-7c95c494bac9", + "metrics": [ + { + "description": null, + "metric_name": "confidence", + "records": [ + 48.0 + ], + "unit": null + }, + { + "description": null, + "metric_name": "accuracy", + "records": [ + 98.0 + ], + "unit": null + } + ], + "prediction": 784.0 + } + ] + }, + "fb6ceb5e-f464-4e65-9c3b-7c95c494bac9": { + "instance": { + "functionality": "TensorFlow", + "inference_id": "558bd7d4-cb5e-47fd-928d-7be1c5f5a2e6", + "instance_id": "fb6ceb5e-f464-4e65-9c3b-7c95c494bac9", + "metrics": [ + { + "description": null, + "metric_name": "confidence", + "records": [ + 48.0 + ], + "unit": null + }, + { + "description": null, + "metric_name": "accuracy", + "records": [ + 98.0 + ], + "unit": null + } + ], + "prediction": 784.0 + }, + "previous": [] + } + } + }, + "service": { + "Aggregate": { + "metrics": { + "response_time": { + "e3babe1d-3411-4b6c-8ba6-4f5466015129": { + "description": "", + "metric_name": "response_time", + "records": [ + { + "responseTime": 2.0742416381835938e-05, + "startTime": 1716897586.0072067 + } + ], + "unit": null + } + } + }, + "name": "Aggregate" + }, + "data_processing": { + "metrics": { + "metric1": { + "5c517e3f-a8bd-4ca3-b891-4d6bc9f64175": { + "description": "", + "metric_name": "metric1", + "records": [ + 79.0 + ], + "unit": null + } + }, + "metric2": { + "5c517e3f-a8bd-4ca3-b891-4d6bc9f64175": { + "description": "", + "metric_name": "metric2", + "records": [ + 100.0 + ], + "unit": null + } + }, + "response_time": { + "5c517e3f-a8bd-4ca3-b891-4d6bc9f64175": { + "description": "", + "metric_name": "response_time", + "records": [ + { + "responseTime": 8.559226989746094e-05, + "startTime": 1716897586.00482 + } + ], + "unit": null + } + } + }, + "name": "data_processing" + }, + "gateway": { + "metrics": { + "metric1": { + "7448d242-1fb8-4a4d-bad1-a004b144d6a9": { + "description": "", + "metric_name": "metric1", + "records": [ + 69.0 + ], + "unit": null + } + }, + "metric2": { + "7448d242-1fb8-4a4d-bad1-a004b144d6a9": { + "description": "", + "metric_name": "metric2", + "records": [ + 72.0 + ], + "unit": null + } + } + }, + "name": "gateway" + }, + "ml_inference_ensemble": { + "metrics": { + "response_time": { + "3fc71830-cd50-4a10-a230-0c15fa794b4d": { + "description": "", + "metric_name": "response_time", + "records": [ + { + "responseTime": 7.033348083496094e-05, + "startTime": 1716897586.0054817 + } + ], + "unit": null + }, + "fb6ceb5e-f464-4e65-9c3b-7c95c494bac9": { + "description": "", + "metric_name": "response_time", + "records": [ + { + "responseTime": 6.0558319091796875e-05, + "startTime": 1716897586.0062585 + } + ], + "unit": null + } + } + }, + "name": "ml_inference_ensemble" + } + } + }, + "metadata": { + "client_config": { + "application_name": "test", + "functionality": "Max Aggregate", + "id": "e3babe1d-3411-4b6c-8ba6-4f5466015129", + "instance_id": "Agg01", + "name": "", + "role": "ml", + "run_id": "", + "stage_id": "Aggregate", + "user_id": "aaltosea5" + }, + "runtime": 0.007564067840576172, + "timestamp": 1716897586.0073323 + } +} diff --git a/language/qoa4ml-general-ml-report-schema.json b/language/qoa4ml-general-ml-report-schema.json new file mode 100644 index 0000000..80da9f7 --- /dev/null +++ b/language/qoa4ml-general-ml-report-schema.json @@ -0,0 +1,295 @@ +{ + "data": { + "data_processing": { + "metrics": { + "image_height": { + "2539c525-bdfb-4dac-9fc4-e224e07f964d": { + "description": "", + "metric_name": "image_height", + "records": [ + 41.0 + ], + "unit": null + } + }, + "image_width": { + "2539c525-bdfb-4dac-9fc4-e224e07f964d": { + "description": "", + "metric_name": "image_width", + "records": [ + 22.0 + ], + "unit": null + } + }, + "object_height": { + "2539c525-bdfb-4dac-9fc4-e224e07f964d": { + "description": "", + "metric_name": "object_height", + "records": [ + 48.0 + ], + "unit": null + } + }, + "object_width": { + "2539c525-bdfb-4dac-9fc4-e224e07f964d": { + "description": "", + "metric_name": "object_width", + "records": [ + 2.0 + ], + "unit": null + } + } + }, + "name": "data_processing" + }, + "gateway": { + "metrics": { + "image_height": { + "4282217b-c041-4668-9135-2fd1beca9242": { + "description": "", + "metric_name": "image_height", + "records": [ + 29.0 + ], + "unit": null + } + }, + "image_width": { + "4282217b-c041-4668-9135-2fd1beca9242": { + "description": "", + "metric_name": "image_width", + "records": [ + 13.0 + ], + "unit": null + } + }, + "object_height": { + "4282217b-c041-4668-9135-2fd1beca9242": { + "description": "", + "metric_name": "object_height", + "records": [ + 3.0 + ], + "unit": null + } + }, + "object_width": { + "4282217b-c041-4668-9135-2fd1beca9242": { + "description": "", + "metric_name": "object_width", + "records": [ + 10.0 + ], + "unit": null + } + } + }, + "name": "gateway" + } + }, + "metadata": { + "client_config": { + "application_name": "test", + "functionality": "Max Aggregate", + "id": "7f50266b-6d4f-4039-94d1-83b241c7cf81", + "instance_id": "Agg01", + "name": "", + "role": "ml", + "run_id": "", + "stage_id": "Aggregate", + "user_id": "aaltosea5" + }, + "runtime": 0.007134914398193359, + "timestamp": 1716897583.8924701 + }, + "ml_inference": { + "7f50266b-6d4f-4039-94d1-83b241c7cf81": { + "functionality": "Max Aggregate", + "inference_id": "fe9bf1fd-77fe-460b-b2f3-b521576c1f75", + "instance_id": "7f50266b-6d4f-4039-94d1-83b241c7cf81", + "metrics": [ + { + "description": null, + "metric_name": "confidence", + "records": [ + 89.0 + ], + "unit": null + }, + { + "description": null, + "metric_name": "accuracy", + "records": [ + 88.0 + ], + "unit": null + } + ], + "prediction": 334.0 + }, + "af1fe3f2-1f5a-4725-bae9-ef1f9a1ef06d": { + "functionality": "TensorFlow", + "inference_id": "612213c4-3063-49b5-9c89-61f5c6ca1c7c", + "instance_id": "af1fe3f2-1f5a-4725-bae9-ef1f9a1ef06d", + "metrics": [ + { + "description": null, + "metric_name": "confidence", + "records": [ + 62.0 + ], + "unit": null + }, + { + "description": null, + "metric_name": "accuracy", + "records": [ + 97.0 + ], + "unit": null + } + ], + "prediction": 259.0 + }, + "f7fd7b41-3092-4a43-8a87-d6265a183fb8": { + "functionality": "TensorFlow", + "inference_id": "f62f58e6-293e-412d-8b44-973a97097bb9", + "instance_id": "f7fd7b41-3092-4a43-8a87-d6265a183fb8", + "metrics": [ + { + "description": null, + "metric_name": "confidence", + "records": [ + 88.0 + ], + "unit": null + }, + { + "description": null, + "metric_name": "accuracy", + "records": [ + 5.0 + ], + "unit": null + } + ], + "prediction": 685.0 + } + }, + "service": { + "Aggregate": { + "metrics": { + "response_time": { + "7f50266b-6d4f-4039-94d1-83b241c7cf81": { + "description": "", + "metric_name": "response_time", + "records": [ + { + "responseTime": 2.4557113647460938e-05, + "startTime": 1716897583.8924236 + } + ], + "unit": null + } + } + }, + "name": "Aggregate" + }, + "data_processing": { + "metrics": { + "metric1": { + "2539c525-bdfb-4dac-9fc4-e224e07f964d": { + "description": "", + "metric_name": "metric1", + "records": [ + 70.0 + ], + "unit": null + } + }, + "metric2": { + "2539c525-bdfb-4dac-9fc4-e224e07f964d": { + "description": "", + "metric_name": "metric2", + "records": [ + 31.0 + ], + "unit": null + } + }, + "response_time": { + "2539c525-bdfb-4dac-9fc4-e224e07f964d": { + "description": "", + "metric_name": "response_time", + "records": [ + { + "responseTime": 4.506111145019531e-05, + "startTime": 1716897583.8910482 + } + ], + "unit": null + } + } + }, + "name": "data_processing" + }, + "gateway": { + "metrics": { + "metric1": { + "4282217b-c041-4668-9135-2fd1beca9242": { + "description": "", + "metric_name": "metric1", + "records": [ + 60.0 + ], + "unit": null + } + }, + "metric2": { + "4282217b-c041-4668-9135-2fd1beca9242": { + "description": "", + "metric_name": "metric2", + "records": [ + 98.0 + ], + "unit": null + } + } + }, + "name": "gateway" + }, + "ml_inference_ensemble": { + "metrics": { + "response_time": { + "af1fe3f2-1f5a-4725-bae9-ef1f9a1ef06d": { + "description": "", + "metric_name": "response_time", + "records": [ + { + "responseTime": 4.076957702636719e-05, + "startTime": 1716897583.8914618 + } + ], + "unit": null + }, + "f7fd7b41-3092-4a43-8a87-d6265a183fb8": { + "description": "", + "metric_name": "response_time", + "records": [ + { + "responseTime": 2.3365020751953125e-05, + "startTime": 1716897583.891908 + } + ], + "unit": null + } + } + }, + "name": "ml_inference_ensemble" + } + } +} diff --git a/language/qoa4mlopa/bim-contract-basic.json b/language/qoa4mlopa/bim-contract-basic.json new file mode 100644 index 0000000..6854085 --- /dev/null +++ b/language/qoa4mlopa/bim-contract-basic.json @@ -0,0 +1,79 @@ +{ + "interpretability": { + "explanability": { + "modes": [ + "full" + ] + } + }, + "quality": { + "data": { + "Accuracy": { + "operators": [ + "min" + ], + "value": "0.99" + } + }, + "mlmodels": { + "Accuracy": { + "operators": [ + "min" + ], + "value": "0.99" + } + }, + "services": { + "ResponseTime": { + "operators": [ + "min" + ], + "value": "300" + } + } + }, + "resources": { + "data": [ + { + "datatypes": [ + "files" + ], + "formats": [ + "smc" + ], + "id": "bimdata" + } + ], + "mlmodels": [ + { + "formats": [ + "kerash5" + ], + "id": "model1", + "mlinfrastructures": [ + "tensorflow" + ] + } + ], + "services": [ + { + "id": "bimclassification", + "machinetypes": [ + "small" + ], + "processortypes": [ + "GPU" + ], + "serviceapi": [ + "rest" + ] + } + ] + }, + "stakeholders": { + "id": "solibri", + "roles": [ + "mlprovider" + ] + } +} diff --git a/language/qoa4mlopa/bim-policies-basic-embedded.rego b/language/qoa4mlopa/bim-policies-basic-embedded.rego new file mode 100644 index 0000000..17709f0 --- /dev/null +++ b/language/qoa4mlopa/bim-policies-basic-embedded.rego @@ -0,0 +1,50 @@ +# one example of qoa4ml policies for a contract for bts scenario +package qoa4ml.bim.basic.embedded + +# the contract data is embedded into this policies + +default mlfair_violation = true +default mlaccuracy_violation=false +#load the contract data +qoa4ml_contract :={ + "stakeholders": + { + "id": "solibri", + "roles": ["mlprovider"] + }, + + "resources":{ + "services": [ + {"id": "bimclassification", "serviceapi": ["rest"],"machinetypes":["small"], "processortypes": ["GPU"]} + ], + "data": [ + {"id": "bimdata", "datatypes": ["files"], "formats": ["smc"]} + ], + "mlmodels": [ + {"id": "model1", "formats": ["kerash5"], "mlinfrastructures": ["tensorflow"]} + ] + }, + "quality": { + "services":{ + "ResponseTime":{"operators":["min"],"value":"300"} + }, + "data":{ + "Accuracy": {"operators":["min"],"value":"0.99"} + }, + "mlmodels": { + "Accuracy":{"operators":["min"],"value":"0.99"} + } + }, + "interpretability": { + "explanability":{"modes": ["full"]} + } +} +# The policy checker will receive two inputs: the contract and the runtime information +# input variable: the input of runtime metrics + +mlaccuracy_violation = { + qoa4ml_contract.quality.mlmodels.Accuracy.value > input.quality.mlmodels.Accuracy.value +} +mlfair_violation = { + qoa4ml_contract.interpretability.explainability.modes[_]!=input.interpretability.explainability.modes[0] +} diff --git a/language/qoa4mlopa/bim-policies-basic.rego b/language/qoa4mlopa/bim-policies-basic.rego new file mode 100644 index 0000000..817b09a --- /dev/null +++ b/language/qoa4mlopa/bim-policies-basic.rego @@ -0,0 +1,22 @@ +# one example of qoa4ml policies for a contract for bts scenario +package qoa4ml.bim.basic + +# the contract data is from this location +#/v1/data/qoa4ml/bim/basic/contract (through PUT document) +import data.qoa4ml.bim.basic.contract + +default mlfair_violation = true +default mlaccuracy_violation=false + +#load the contract data +qoa4ml_contract :=contract + +# The policy checker will receive two inputs: the contract and the runtime information +# input variable: the input of runtime metrics + +mlaccuracy_violation = { + qoa4ml_contract.quality.mlmodels.Accuracy.value > input.quality.mlmodels.Accuracy.value +} +mlfair_violation = { + qoa4ml_contract.interpretability.explanability.modes[_]==input.interpretability.explanability.modes[0] +} diff --git a/language/qoa4mlopa/bts-contract-ex1.json b/language/qoa4mlopa/bts-contract-ex1.json new file mode 100644 index 0000000..a00f478 --- /dev/null +++ b/language/qoa4mlopa/bts-contract-ex1.json @@ -0,0 +1,80 @@ +{ + "interpretability": { + "explanability": { + "modes": [ + "full" + ] + } + }, + "quality": { + "data": { + "Accuracy": { + "operators": [ + "min" + ], + "value": "100" + } + }, + "mlmodels": { + "Accuracy": { + "operators": [ + "min" + ], + "value": "100" + } + }, + "services": { + "ResponseTime": { + "operators": [ + "min" + ], + "value": "100" + } + } + }, + "resources": { + "data": [ + { + "datatypes": [ + "files" + ], + "formats": [ + "wrong" + ], + "id": "alarmdata" + } + ], + "mlmodels": [ + { + "formats": [ + "kerash5" + ], + "id": "model1", + "mlinfrastructures": [ + "tensorflow", + "predictio" + ] + } + ], + "services": [ + { + "id": "alarmservice", + "machinetypes": [ + "small" + ], + "processortypes": [ + "GPU" + ], + "serviceapi": [ + "mqtt" + ] + } + ] + }, + "stakeholders": { + "id": "mobifone", + "roles": [ + "mlprovider" + ] + } +} diff --git a/language/qoa4mlopa/bts-policies-ex1.rego b/language/qoa4mlopa/bts-policies-ex1.rego new file mode 100644 index 0000000..ce785d6 --- /dev/null +++ b/language/qoa4mlopa/bts-policies-ex1.rego @@ -0,0 +1,26 @@ +# one example of qoa4ml policies for a contract for bts scenario +package qoa4ml.bts.alarm + +#import bts.contract + +default contract_violation = false + +#qoa4ml_contract =bts + +# Count number of violations to define a contract problem + +contract_violation = true { + count(violation) == 0 +} +# The policy checker will receive two inputs: the contract and the runtime information +# input variable: the input of runtime metrics +violation[service.id] { + some service + get_service[service] + service.processingtype[_]=="GPU" + service.serviceapi[_]=="rest" +} +get_service[service] { + service := input.resources.services[_] + service.processingtype[_] == "GPU" +} diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..6b4db75 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,62 @@ +site_name: QoA4ML Documentation +theme: + name: material + features: + - navigation.tabs + - navigation.sections + - toc.integrate + - navigation.top + - search.suggest + - search.highlight + - content.tabs.link + - content.code.annotation + - content.code.copy + language: en + palette: + - scheme: default + toggle: + icon: material/toggle-switch-off-outline + name: Switch to dark mode + primary: teal + accent: purple + - scheme: slate + toggle: + icon: material/toggle-switch + name: Switch to light mode + primary: teal + accent: lime + +plugins: + - social + - search + +markdown_extensions: + toc: + permalink: true + markdown.extensions.codehilite: + guess_lang: false + admonition: null + codehilite: null + extra: null + pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format '' + pymdownx.tabbed: + alternate_style: true + pymdownx.tilde: null + attr_list: null + md_in_html: null + +extra: + social: + - icon: fontawesome/brands/github-alt + link: https://github.com/rdsea + + - icon: /material/mailbox + name: contact us + link: https://rdsea.github.io/ + +copyright: | + © 2024 Rdsea diff --git a/observability/qoa4mlopa/README.md b/observability/qoa4mlopa/README.md new file mode 100644 index 0000000..e23c7b9 --- /dev/null +++ b/observability/qoa4mlopa/README.md @@ -0,0 +1,106 @@ +# An Implementation of QoA4ML Observability based on OpenPolicyAgent (OPA) + +In this package, we explain one implementation of the QoA4ML Observability using OPA. [OPA](https://www.openpolicyagent.org) is a general policy engine. We use it so that the QoA4ML can also be combined with other types of policies. + +## Current development + +Note that at the moment, the supporting tool is limited. Therefore, mostly the developer has to write [contracts and policies](../../language/). + +### Develop Contracts and Policies + +The contract and policy should be ideally separated into json specification and Rego code. The developer can combine qoa4ml aspects with other types of policies + +### Runtime metrics + +Runtime metrics captured from monitoring system should be sent for checking violation. How to capture is described in the monitoring. To send metrics for checking, metrics must be in the right format and sent to the OPA service for QoA4ML through REST APIs + +## Setup an OPA service for QoA4ML + +Run a simple OPA server: + +``` +$docker pull openpolicyagent/opa:latest +$docker run -p 8181:8181 openpolicyagent/opa:latest run --server --set=decision_logs.console=true +``` +## Samples of contracts and core QoA4ML terms + +You can find [samples of contracts](../../language/qoa4mlopa/), the core QoA4ML terms are in [the languages directory](../../language/). Examples of runtime metrics are in [examples](../../examples/qoa4mlopa/) + +## Add a contract + +Here are few examples for testings. Note that you can look at [the OPA APIs for understanding how to the APIs](https://www.openpolicyagent.org/docs/latest) + +the root path for storing documents (in our case: contracts) is **v1/data**. +Contracts can be stored in sub paths. + +### Contract + +Contracts are documents so we use OPA data APIs to store and manage them. Let us assume that we want to store a contract **bts-ex1** into a path **qoa4ml/bts/alarm**. + +Add a contract + +```bash +curl --location --request PUT 'localhost:8181/v1/data/qoa4ml/bts/alarm/bts-contract-ex1' \ +--header 'Content-Type: application/json' \ +--data-raw '{ DATA}' +``` + +Read a contract + +```bash +curl --location --request GET 'localhost:8181/v1/data/qoa4ml/bts/alarm/bts-contract-ex1' +``` + +### Policies +Policies are used to check if a contract is violated. Policies are Rego code. We use policies APIs to store Policies. Let us assume that we have a **bts-policies-ex1** + +add a policies: + +```bash +curl --location --request PUT 'localhost:8181/v1/policies/bts-policies-ex1' \ +--header 'Content-Type: text/plain' \ +--data-raw ' DATA ' +``` +Get a policy: + +```bash +curl --location --request GET 'localhost:8181/v1/policies' +``` + +**In the current prototype: we also put policies and contracts into a single file to speed up the prototype. but in principle they should be separated** + +### Check if a policy/contract is violated + +To check if a contract is violated, an ML observability service will send an input of runtime metrics according to the pre-defined specification and indicate the policy for such runtime metrics. We use OPA Evaluation API to check it. For example, to check if **INPUT** is valid for policies specified in **bts-policies-ex1** we can have + +```bash +url --location --request POST 'localhost:8181/v1/data/qoa4ml/bts/alarm/contract_violation' \ +--header 'Content-Type: application/json' \ +--data-raw '{"input":INPUT}' +``` + +where as: +* qoa4ml/bts/alarm/contract_violation: is the id of the policy (based on the package name and the decision specification in the code) +* INPUT is the json input of runtime metrics + + +## A fast test + +* install the service +* Put the embedded policy: + +```bash +curl --location --request PUT 'localhost:8181/v1/policies/bim-policies-basic-embedded' \ +--header 'Content-Type: text/plain' \ +--data-raw 'POLICIES' +``` + +where POLICIES is the content of **language/qoa4mlopa/bim-policies-basic-embedded.rego** + +* Run the python code for evaluation: for example, if you put the [bim-policies-basic-embeeded.rego] into the service and play +``` +$python3 simple_evaluation.py --purl http://localhost:8181/v1/data/qoa4ml/bim/basic/embedded/mlaccuracy_violation --input bim-runtimemetrics-ex1.json +b'{"decision_id":"4d4bc408-959e-427b-8031-6f2a0754066d","result":[true]}' +truong@aaltosea:~/myprojects/mygit/aaltosea/qoa4ml/observability/qoa4mlopa/src$ python3 simple_evaluation.py --purl http://localhost:8181/v1/data/qoa4ml/bim/basic/embedded/mlfair_violation --input bim-runtimemetrics-ex1.json +b'{"decision_id":"5d99f18a-f02b-42ec-9a86-4dc3d8856344","result":[false]}' +``` diff --git a/observability/qoa4mlopa/bts_example/bts.rego b/observability/qoa4mlopa/bts_example/bts.rego new file mode 100644 index 0000000..283dbc3 --- /dev/null +++ b/observability/qoa4mlopa/bts_example/bts.rego @@ -0,0 +1,59 @@ +package qoa4ml.bts.alarm +import data.bts.contract as contract + +default contract_violation = false + +contract_violation = true { + count(violation) > 0 +} + +violation[[input.client_info, "Unidentify client"]]{ + count(is_stakeholders) == 0 +} + +violation[[input.client_info, "Accuracy violation on small resource machine"]]{ + input.service_info.machinetypes == "small" + input.service_info.metric[_] == "Accuracy" + some i, j + contract.quality.mlmodels[i].Accuracy.machinetypes[j] == "small" + input.metric.Accuracy < contract.quality.mlmodels[i].Accuracy.value +} + +violation[[input.client_info, "Accuracy violation on normal resource machine"]]{ + input.service_info.machinetypes == "normal" + input.service_info.metric[_] == "Accuracy" + some i, j + contract.quality.mlmodels[i].Accuracy.machinetypes[j] == "normal" + input.metric.DataAccuracy > contract.quality.data[1].Accuracy.value + input.metric.Accuracy < contract.quality.mlmodels[i].Accuracy.value +} + +violation[[input.client_info, "ResponseTime violation on small resource machine"]]{ + input.service_info.machinetypes == "small" + input.service_info.metric[_] == "ResponseTime" + some i, j + contract.quality.services[i].ResponseTime.machinetypes[j] == "small" + input.metric.ResponseTime > contract.quality.services[i].ResponseTime.value +} + +violation[[input.client_info, "ResponseTime violation on normal resource machine"]]{ + input.service_info.machinetypes == "normal" + input.service_info.metric[_] == "ResponseTime" + some i, j + contract.quality.services[i].ResponseTime.machinetypes[j] == "normal" + input.metric.ResponseTime > contract.quality.services[i].ResponseTime.value +} + +violation[[input.client_info, "Data quality violation"]]{ + input.service_info.metric[_] == "DataAccuracy" + some i + contract.quality.data[i].Accuracy.operators == "min" + input.metric.DataAccuracy < contract.quality.data[i].Accuracy.value +} + + +is_stakeholders[stakeholders.id]{ + stakeholders := contract.stakeholders[_] + stakeholders.id == input.client_info.id + stakeholders.roles == input.client_info.roles +} \ No newline at end of file diff --git a/observability/qoa4mlopa/bts_example/contract.json b/observability/qoa4mlopa/bts_example/contract.json new file mode 100644 index 0000000..769886a --- /dev/null +++ b/observability/qoa4mlopa/bts_example/contract.json @@ -0,0 +1,268 @@ +{ + "cost": { + "cost": { + "class": "cost", + "operators": [ + "min", + "max", + "range" + ], + "unit": [ + "USD", + "EUR", + "other" + ], + "value": "value" + }, + "pricingmodel": { + "class": "cost", + "id": "the id of the pricing model in the system", + "name": "name" + } + }, + "fairness": { + "predictionbias": { + "class": [ + "Accuracy" + ], + "operators": [ + "min", + "max" + ], + "unit": "percentage", + "value": "value" + } + }, + "interpretability": { + "explainability": { + "modes": [ + "full", + "compact" + ] + } + }, + "privacy": { + "membershipinferencerisk": { + "class": [ + "Privacy" + ], + "operators": [ + "min", + "max" + ], + "range": [ + 0, + 1 + ], + "unit": "float", + "value": "value" + } + }, + "quality": { + "data": [ + { + "Accuracy": { + "attributenames": "Accuracy", + "class": [ + "qualityofdata" + ], + "id": 4, + "operators": "min", + "unit": "percentage", + "value": 80 + } + }, + { + "Completeness": { + "attributenames": "Completeness", + "id": 5, + "operators": "min", + "resourceType": [ + "qualityofdata" + ], + "unit": "percentage", + "value": 90 + } + } + ], + "mlmodels": [ + { + "Accuracy": { + "attributenames": "Accuracy of MLmodel on small devices", + "class": [ + "Accuracy" + ], + "id": 6, + "machinetypes": [ + "small" + ], + "operators": "min", + "unit": "percentage", + "value": 80 + } + }, + { + "Accuracy": { + "attributenames": "Accuracy of MLmodel on normal devices", + "class": [ + "Accuracy" + ], + "id": 7, + "machinetypes": [ + "normal" + ], + "operators": "min", + "unit": "percentage", + "value": 95 + } + } + ], + "services": [ + { + "ResponseTime": { + "attributenames": "ResponseTime on small devices", + "class": [ + "performance" + ], + "id": 1, + "machinetypes": [ + "small" + ], + "operators": "max", + "unit": "s", + "value": 0.05 + } + }, + { + "ResponseTime": { + "attributenames": "ResponseTime on normal devices", + "class": [ + "performance" + ], + "id": 2, + "machinetypes": [ + "normal" + ], + "operators": "max", + "unit": "s", + "value": 0.05 + } + }, + { + "Reliability": { + "attributenames": "Reliability on normal devices", + "class": [ + "performance" + ], + "id": 3, + "machinetypes": [ + "normal" + ], + "operators": "min", + "unit": "percentage", + "value": 90 + } + } + ] + }, + "resources": { + "data": [ + { + "datatypes": "plain_text", + "formats": "csv", + "id": "BTS" + } + ], + "mlmodels": [ + { + "id": "ml_inference", + "inferencemodes": "dynamic", + "mlinfrastructures": "tensorflow", + "modelclasses": [ + "RNN", + "LR" + ] + }, + { + "id": "ml_training", + "inferencemodes": "dynamic", + "mlinfrastructures": "tensorflow", + "modelclasses": [ + "RNN" + ] + } + ], + "service": [ + { + "id": "request", + "machinetypes": [ + "small", + "normal" + ], + "processortypes": [ + "CPU" + ], + "serviceapis": "mptt" + } + ] + }, + "security": { + "encryptedinference": { + "mode": [ + true, + false + ] + }, + "encryption": { + "types": [ + "end2end" + ] + } + }, + "stakeholders": [ + { + "id": "google1", + "provisioning": [ + "storage", + "computing" + ], + "roles": "inf_provider" + }, + { + "id": "google2", + "provisioning": [ + "storage" + ], + "roles": "inf_provider" + }, + { + "id": "aaltosea1", + "provisioning": [ + "mlmodels", + "services" + ], + "roles": "ml_provider" + }, + { + "id": "aaltosea2", + "provisioning": [ + "mlmodels" + ], + "roles": "ml_provider" + }, + { + "id": "user1", + "provisioning": [ + "request" + ], + "roles": "ml_user" + }, + { + "id": "user2", + "provisioning": [ + "request" + ], + "roles": "ml_user" + } + ] +} diff --git a/observability/qoa4mlopa/bts_example/run.sh b/observability/qoa4mlopa/bts_example/run.sh new file mode 100755 index 0000000..9a971ff --- /dev/null +++ b/observability/qoa4mlopa/bts_example/run.sh @@ -0,0 +1,13 @@ +#!/bin/bash +docker_cmd="docker run -p 8181:8181 openpolicyagent/opa:latest run --server --set=decision_logs.console=true" +$docker_cmd & + +sleep 10 + +curl --location --request PUT 'localhost:8181/v1/policies/bts' -H 'Content-Type: text/plain' --data-binary @bts.rego + +curl --location --request PUT 'localhost:8181/v1/data/bts/contract' -H 'Content-Type: application/json' -d @contract.json + +docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management + +docker run -p 9090:9090 -v "$(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml" "prom/prometheus" diff --git a/observability/qoa4mlopa/bts_example/submit_contract.sh b/observability/qoa4mlopa/bts_example/submit_contract.sh new file mode 100644 index 0000000..ffbd3ba --- /dev/null +++ b/observability/qoa4mlopa/bts_example/submit_contract.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# e.g., parameter $1 'localhost:8181/v1/data/bts/contract' +# e.g., parameter $2: @contract.json +echo "DEBUG: call $1 with $2" +curl --location --request PUT "$1" -H 'Content-Type: application/json' -d "$2" diff --git a/observability/qoa4mlopa/bts_example/submit_policies.sh b/observability/qoa4mlopa/bts_example/submit_policies.sh new file mode 100644 index 0000000..cbd89c9 --- /dev/null +++ b/observability/qoa4mlopa/bts_example/submit_policies.sh @@ -0,0 +1,5 @@ +#!/bin/bash +# e.g., parameter $1 'localhost:8181/v1/policies/bts' +# e.g., parameter $2: @bts.rego +echo "DEBUG: call $1 with $2" +curl --location --request PUT "$1" -H 'Content-Type: text/plain' --data-binary "$2" diff --git a/observability/rohe_ObService/rohe_Agent.py b/observability/rohe_ObService/rohe_Agent.py new file mode 100644 index 0000000..4cac299 --- /dev/null +++ b/observability/rohe_ObService/rohe_Agent.py @@ -0,0 +1,47 @@ +import json +from threading import Thread + +import pymongo +from qoa4ml.collector.amqp_collector import AmqpCollector + + +class Rohe_Agent: + def __init__(self, configuration, mg_db=False): + self.conf = configuration + colletor_conf = self.conf["collector"] + self.collector = AmqpCollector( + colletor_conf["amqp_collector"]["conf"], host_object=self + ) + db_conf = self.conf["database"] + self.mongo_client = pymongo.MongoClient(db_conf["url"]) + self.db = self.mongo_client[db_conf["db_name"]] + self.metric_collection = self.db[db_conf["metric_collection"]] + + self.insert_db = mg_db + + def reset_db(self): + self.metric_collection.drop() + + def start_consuming(self): + print("Start Consuming") + self.collector.start() + + def start(self): + sub_thread = Thread(target=self.start_consuming) + sub_thread.start() + print("start consumming message") + + def message_processing(self, ch, method, props, body): + mess = json.loads(str(body.decode("utf-8"))) + print("Receive QoA Report: \n", mess) + if self.insert_db: + insert_id = self.metric_collection.insert_one(mess) + print("Insert to database", insert_id) + + def stop(self): + # self.collector.stop() + self.insert_db = False + + def restart(self): + # self.collector.stop() + self.insert_db = True diff --git a/observability/rohe_ObService/rohe_ObService.py b/observability/rohe_ObService/rohe_ObService.py new file mode 100644 index 0000000..7dc26f3 --- /dev/null +++ b/observability/rohe_ObService/rohe_ObService.py @@ -0,0 +1,145 @@ +import argparse +import uuid + +import qoa4ml.utils as utils +from flask import Flask, jsonify, request +from flask_restful import Api, Resource +from rohe_Agent import Rohe_Agent + +app = Flask(__name__) +api = Api(app) + + +def get_dict_at(dict, i): + keys = list(dict.keys()) + return dict[keys[i]], keys[i] + + +application_list = {} +agent_list = {} + + +class Rohe_ObService(Resource): + def __init__(self, **kwargs) -> None: + super().__init__() + self.conf = kwargs + self.db_config = self.conf["database"] + self.connector_config = self.conf["connector"] + self.collector_config = self.conf["collector"] + + def get(self): + args = request.query_string.decode("utf-8").split("&") + # get param from args here + return jsonify({"status": args}) + + def post(self): + if request.is_json: + args = request.get_json(force=True) + print(args) + response = {} + if "application_name" in args: + application_name = args["application_name"] + if application_name not in application_list: + application_list[application_name] = {} + application_list[application_name]["id"] = str(uuid.uuid4()) + application_list[application_name]["client_count"] = 0 + response[application_name] = ( + f"Application {application_name} created" + ) + else: + response[application_name] = "OK" + + application_list[application_name]["client_count"] += 1 + # TO DO + # Check user_id, role, stage_id, instance_name + + # Prepare connector for QoA Client + connector = self.connector_config.copy() + for key in list(connector.keys()): + connector_i = connector[key] + i_config = connector_i["conf"] + i_config["exchange_name"] = str(application_name) + "_exchange" + i_config["out_routing_key"] = str(application_name) + if "user_id" in args: + i_config["out_routing_key"] = ( + i_config["out_routing_key"] + "." + args["user_id"] + ) + if "stage_id" in args: + i_config["out_routing_key"] = ( + i_config["out_routing_key"] + "." + args["stage_id"] + ) + if "instance_name" in args: + i_config["out_routing_key"] = ( + i_config["out_routing_key"] + "." + args["instance_name"] + ) + i_config["out_routing_key"] = ( + i_config["out_routing_key"] + + ".client" + + str(application_list[application_name]["client_count"]) + ) + response["application_id"] = application_list[application_name]["id"] + response["connector"] = connector + + # Prepare QoA Agent + application_id = application_list[application_name]["id"] + if application_id not in agent_list: + # Database configuration + agent_db_config = self.db_config.copy() + agent_db_config["db_name"] = application_name + "_" + application_id + agent_db_config["metric_collection"] = "metric_collection" + # Collector configuration + collector_config = self.collector_config.copy() + for key in list(collector_config.keys()): + collector_i = collector_config[key] + i_config = collector_i["conf"] + i_config["exchange_name"] = str(application_name) + "_exchange" + i_config["out_routing_key"] = str(application_name) + ".#" + + # Agent configuration + agent_config = {} + agent_config["database"] = agent_db_config + agent_config["collector"] = collector_config + agent = Rohe_Agent(agent_config) + agent_id = str(uuid.uuid4()) + agent_list[application_id] = {} + agent_list[application_id][agent_id] = {} + agent_list[application_id][agent_id]["agent"] = agent + agent_list[application_id][agent_id]["status"] = "stop" + agent_list[application_id][agent_id]["configuration"] = agent_config + agent.start() + + else: + response["Error"] = "Application name not found" + + return jsonify({"status": "success", "response": response}) + + def put(self): + if request.is_json: + args = request.get_json(force=True) + # get param from args here + return jsonify({"status": True}) + + def delete(self): + if request.is_json: + args = request.get_json(force=True) + # get param from args here + return jsonify({"status": args}) + + +if __name__ == "__main__": + # init_env_variables() + parser = argparse.ArgumentParser( + description="Argument for Rohe Observation Service" + ) + parser.add_argument("--conf", help="configuration file", default=None) + args = parser.parse_args() + config_file = args.conf + if not config_file: + config_file = utils.get_parent_dir(__file__, 2) + "/config/rohe_obs_conf.json" + print(config_file) + configuration = utils.load_config(config_file) + + api.add_resource( + Rohe_ObService, "/registration", resource_class_kwargs=configuration + ) + app.run(debug=True, port=5001) diff --git a/observability/simple_evaluation.py b/observability/simple_evaluation.py new file mode 100644 index 0000000..115c05b --- /dev/null +++ b/observability/simple_evaluation.py @@ -0,0 +1,30 @@ +""" +a simple python showing how to invoke the QoA4ML OPA service +""" + +import argparse +import json +import sys + +import requests + +V1_API = "/v1/data/qoa4ml/bts/alarm/contract_violation" +parser = argparse.ArgumentParser() +parser.add_argument( + "--purl", help="qoa4ml OPA service", default="http://localhost:8181" +) +parser.add_argument("--input", help="json input file of metrics") +args = parser.parse_args() + +if args.input is None: + print("Input file is not specified") + sys.exit(0) +with open(args.input, encoding="utf-8") as input_file: + data = input_file.read() +input_metrics = json.loads(data) +payload = {"input": input_metrics} +headers = {"Content-Type": "application/json"} +url = f"{args.purl}{V1_API}" +response = requests.request("POST", url, headers=headers, data=json.dumps(payload)) + +print(response.text.encode("utf8")) diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..dbd566d --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,122 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.hatch.build.targets.wheel] +packages = ["src/qoa4ml"] + +[tool.hatch.build.targets.sdist] +include = ["src/qoa4ml"] + +[project] +name = "qoa4ml" +version = "0.2.17" +description = "Quality of Analysis for Machine Learning" +readme = "README.md" + +authors = [ + { name = "AaltoSEA", email = "tri.m.nguyen@aalto.fi" }, + { name = "nguu0123", email = "nguu0123@gmail.com" }, +] +license = { text = "Apache-2.0" } +keywords = ["Monitoring", "Machine Learning"] +homepage = "https://rdsea.github.io/" +repository = "https://github.com/rdsea/QoA4ML" +documentation = "https://rdsea.github.io/QoA4ML/" +requires-python = ">=3.9" +classifiers = [ + "License :: OSI Approved :: Apache Software License", + "Development Status :: 3 - Alpha", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: System :: Monitoring", + "Topic :: Utilities", + "Operating System :: POSIX :: Linux", +] + +dependencies = [ + "pika>=1.3.2", + "psutil>=5.9.2", + "PyYAML>=6.0.1", + "requests>=2.31.0", + "fastapi>=0.110.2", + "flatten_dict>=0.4.2", + "pydantic>=2.7.4,<2.8", + "tinyflux>=1.0.0", + "uvicorn>=0.29.0", + "lazy-import>=0.2.2", + "confluent-kafka>=2.4.0", + "docker==7.1.0", + "numpy>=1.23.5", + "eval-type-backport>=0.2.0", +] + +optional-dependencies.ml = [ + "paho-mqtt==1.6.1", + "Pillow==10.0.0", + "prometheus-client==0.16.0", + "tensorflow>=2.15.0", + # "ydata-quality==0.1.0", +] + +optional-dependencies.otel = [ + "opentelemetry-api>=1.26.0", + "opentelemetry-sdk>=1.26.0", + "opentelemetry-instrumentation-system-metrics>=0.47b0", +] + +[project.urls] +Repository = "https://github.com/rdsea/QoA4ML" +Documentation = "https://rdsea.github.io/QoA4ML/" +AaltoSEA = "https://rdsea.github.io/" + + +[tool.rye] +dev-dependencies = [ + "mkdocs-material", + "pre-commit", + "devtools", + "ruff", + "codespell", + "pip>=24.2", + "pytest>=8.3.2", + "tox>=4.18.0", + "pytest-sugar>=1.0.0", + "tox-uv>=1.11.2", + "tox-gh-actions>=3.2.0", +] +managed = true +universal = true + + +[tool.ruff.lint] +exclude = ["src/qoa4ml/utils/pynvml_forked.py"] +select = [ + "F", # Pyflakes + "E", # Pycode styles + "W", # Pycode styles + "N", # Pep8 naming + "I", # Isort + "UP", # Pyupgrade + "C4", # Flake8 comprehension + "ISC", # Flake8 implicit str concat + "B", # Flake8 bugbear + "PGH", # Pygrep hook + "RUF", # Ruff specific rules +] +ignore = [ + "E501", # Line too long + "RET504", # Unnecessary assignment + "RET505", # Unnecessary else after return + "C901", # Too complex function + "B904", # raise-without-from-inside-except, enable when understand more + "PLR", + "ISC001", +] + +[tool.rye.lint.pylint] +max-args = 10 diff --git a/requirements-dev.lock b/requirements-dev.lock new file mode 100644 index 0000000..dbcf04c --- /dev/null +++ b/requirements-dev.lock @@ -0,0 +1,306 @@ +# generated by rye +# use `rye lock` or `rye sync` to update this lockfile +# +# last locked with the following flags: +# pre: false +# features: [] +# all-features: true +# with-sources: false +# generate-hashes: false +# universal: true + +-e file:. +absl-py==2.1.0 + # via keras + # via tensorboard + # via tensorflow +annotated-types==0.7.0 + # via pydantic +anyio==4.4.0 + # via starlette +asttokens==2.4.1 + # via devtools +astunparse==1.6.3 + # via tensorflow +babel==2.16.0 + # via mkdocs-material +cachetools==5.5.0 + # via tox +certifi==2024.7.4 + # via requests +cfgv==3.4.0 + # via pre-commit +chardet==5.2.0 + # via tox +charset-normalizer==3.3.2 + # via requests +click==8.1.7 + # via mkdocs + # via uvicorn +codespell==2.3.0 +colorama==0.4.6 + # via click + # via mkdocs + # via mkdocs-material + # via pytest + # via tox +confluent-kafka==2.5.0 + # via qoa4ml +deprecated==1.2.14 + # via opentelemetry-api + # via opentelemetry-semantic-conventions +devtools==0.12.2 +distlib==0.3.8 + # via virtualenv +docker==7.1.0 + # via qoa4ml +eval-type-backport==0.2.0 + # via qoa4ml +exceptiongroup==1.2.2 ; python_full_version < '3.11' + # via anyio + # via pytest +executing==2.0.1 + # via devtools +fastapi==0.112.1 + # via qoa4ml +filelock==3.15.4 + # via tox + # via virtualenv +flatbuffers==24.3.25 + # via tensorflow +flatten-dict==0.4.2 + # via qoa4ml +gast==0.6.0 + # via tensorflow +ghp-import==2.1.0 + # via mkdocs +google-pasta==0.2.0 + # via tensorflow +grpcio==1.66.0 + # via tensorboard + # via tensorflow +h11==0.14.0 + # via uvicorn +h5py==3.11.0 + # via keras + # via tensorflow +identify==2.6.0 + # via pre-commit +idna==3.7 + # via anyio + # via requests +importlib-metadata==8.0.0 + # via opentelemetry-api +iniconfig==2.0.0 + # via pytest +jinja2==3.1.4 + # via mkdocs + # via mkdocs-material +keras==3.5.0 + # via tensorflow +lazy-import==0.2.2 + # via qoa4ml +libclang==18.1.1 + # via tensorflow +markdown==3.7 + # via mkdocs + # via mkdocs-material + # via pymdown-extensions + # via tensorboard +markdown-it-py==3.0.0 + # via rich +markupsafe==2.1.5 + # via jinja2 + # via mkdocs + # via werkzeug +mdurl==0.1.2 + # via markdown-it-py +mergedeep==1.3.4 + # via mkdocs + # via mkdocs-get-deps +mkdocs==1.6.0 + # via mkdocs-material +mkdocs-get-deps==0.2.0 + # via mkdocs +mkdocs-material==9.5.32 +mkdocs-material-extensions==1.3.1 + # via mkdocs-material +ml-dtypes==0.4.0 + # via keras + # via tensorflow +namex==0.0.8 + # via keras +nodeenv==1.9.1 + # via pre-commit +numpy==1.26.4 + # via h5py + # via keras + # via ml-dtypes + # via opt-einsum + # via qoa4ml + # via tensorboard + # via tensorflow +opentelemetry-api==1.26.0 + # via opentelemetry-instrumentation + # via opentelemetry-instrumentation-system-metrics + # via opentelemetry-sdk + # via opentelemetry-semantic-conventions + # via qoa4ml +opentelemetry-instrumentation==0.47b0 + # via opentelemetry-instrumentation-system-metrics +opentelemetry-instrumentation-system-metrics==0.47b0 + # via qoa4ml +opentelemetry-sdk==1.26.0 + # via qoa4ml +opentelemetry-semantic-conventions==0.47b0 + # via opentelemetry-sdk +opt-einsum==3.3.0 + # via tensorflow +optree==0.12.1 + # via keras +packaging==24.1 + # via keras + # via mkdocs + # via pyproject-api + # via pytest + # via pytest-sugar + # via tensorboard + # via tensorflow + # via tox + # via tox-uv +paginate==0.5.6 + # via mkdocs-material +paho-mqtt==1.6.1 + # via qoa4ml +pathspec==0.12.1 + # via mkdocs +pika==1.3.2 + # via qoa4ml +pillow==10.0.0 + # via qoa4ml +pip==24.2 +platformdirs==4.2.2 + # via mkdocs-get-deps + # via tox + # via virtualenv +pluggy==1.5.0 + # via pytest + # via tox +pre-commit==3.8.0 +prometheus-client==0.16.0 + # via qoa4ml +protobuf==4.25.4 + # via tensorboard + # via tensorflow +psutil==6.0.0 + # via opentelemetry-instrumentation-system-metrics + # via qoa4ml +pydantic==2.7.4 + # via fastapi + # via qoa4ml +pydantic-core==2.18.4 + # via pydantic +pygments==2.18.0 + # via devtools + # via mkdocs-material + # via rich +pymdown-extensions==10.9 + # via mkdocs-material +pyproject-api==1.7.1 + # via tox +pytest==8.3.2 + # via pytest-sugar +pytest-sugar==1.0.0 +python-dateutil==2.9.0.post0 + # via ghp-import +pywin32==306 ; sys_platform == 'win32' + # via docker +pyyaml==6.0.2 + # via mkdocs + # via mkdocs-get-deps + # via pre-commit + # via pymdown-extensions + # via pyyaml-env-tag + # via qoa4ml +pyyaml-env-tag==0.1 + # via mkdocs +regex==2024.7.24 + # via mkdocs-material +requests==2.32.3 + # via docker + # via mkdocs-material + # via qoa4ml + # via tensorflow +rich==13.7.1 + # via keras +ruff==0.6.1 +setuptools==73.0.1 + # via opentelemetry-instrumentation + # via tensorboard + # via tensorflow +six==1.16.0 + # via asttokens + # via astunparse + # via flatten-dict + # via google-pasta + # via lazy-import + # via python-dateutil + # via tensorboard + # via tensorflow +sniffio==1.3.1 + # via anyio +starlette==0.38.2 + # via fastapi +tensorboard==2.17.1 + # via tensorflow +tensorboard-data-server==0.7.2 + # via tensorboard +tensorflow==2.17.0 + # via qoa4ml +tensorflow-io-gcs-filesystem==0.37.1 ; python_full_version < '3.12' + # via tensorflow +termcolor==2.4.0 + # via pytest-sugar + # via tensorflow +tinyflux==1.0.0 + # via qoa4ml +tomli==2.0.1 ; python_full_version < '3.11' + # via pyproject-api + # via pytest + # via tox +tox==4.18.0 + # via tox-gh-actions + # via tox-uv +tox-gh-actions==3.2.0 +tox-uv==1.11.2 +typing-extensions==4.12.2 + # via anyio + # via fastapi + # via opentelemetry-sdk + # via optree + # via pydantic + # via pydantic-core + # via tensorflow + # via uvicorn +urllib3==2.2.2 + # via docker + # via requests +uv==0.3.3 + # via tox-uv +uvicorn==0.30.6 + # via qoa4ml +virtualenv==20.26.3 + # via pre-commit + # via tox +watchdog==4.0.2 + # via mkdocs +werkzeug==3.0.4 + # via tensorboard +wheel==0.44.0 + # via astunparse +wrapt==1.16.0 + # via deprecated + # via opentelemetry-instrumentation + # via tensorflow +zipp==3.20.0 + # via importlib-metadata diff --git a/requirements.lock b/requirements.lock new file mode 100644 index 0000000..7d13cbb --- /dev/null +++ b/requirements.lock @@ -0,0 +1,195 @@ +# generated by rye +# use `rye lock` or `rye sync` to update this lockfile +# +# last locked with the following flags: +# pre: false +# features: [] +# all-features: true +# with-sources: false +# generate-hashes: false +# universal: true + +-e file:. +absl-py==2.1.0 + # via keras + # via tensorboard + # via tensorflow +annotated-types==0.7.0 + # via pydantic +anyio==4.4.0 + # via starlette +astunparse==1.6.3 + # via tensorflow +certifi==2024.7.4 + # via requests +charset-normalizer==3.3.2 + # via requests +click==8.1.7 + # via uvicorn +colorama==0.4.6 ; platform_system == 'Windows' + # via click +confluent-kafka==2.5.0 + # via qoa4ml +deprecated==1.2.14 + # via opentelemetry-api + # via opentelemetry-semantic-conventions +docker==7.1.0 + # via qoa4ml +eval-type-backport==0.2.0 + # via qoa4ml +exceptiongroup==1.2.2 ; python_full_version < '3.11' + # via anyio +fastapi==0.112.1 + # via qoa4ml +flatbuffers==24.3.25 + # via tensorflow +flatten-dict==0.4.2 + # via qoa4ml +gast==0.6.0 + # via tensorflow +google-pasta==0.2.0 + # via tensorflow +grpcio==1.66.0 + # via tensorboard + # via tensorflow +h11==0.14.0 + # via uvicorn +h5py==3.11.0 + # via keras + # via tensorflow +idna==3.7 + # via anyio + # via requests +importlib-metadata==8.0.0 + # via opentelemetry-api +keras==3.5.0 + # via tensorflow +lazy-import==0.2.2 + # via qoa4ml +libclang==18.1.1 + # via tensorflow +markdown==3.7 + # via tensorboard +markdown-it-py==3.0.0 + # via rich +markupsafe==2.1.5 + # via werkzeug +mdurl==0.1.2 + # via markdown-it-py +ml-dtypes==0.4.0 + # via keras + # via tensorflow +namex==0.0.8 + # via keras +numpy==1.26.4 + # via h5py + # via keras + # via ml-dtypes + # via opt-einsum + # via qoa4ml + # via tensorboard + # via tensorflow +opentelemetry-api==1.26.0 + # via opentelemetry-instrumentation + # via opentelemetry-instrumentation-system-metrics + # via opentelemetry-sdk + # via opentelemetry-semantic-conventions + # via qoa4ml +opentelemetry-instrumentation==0.47b0 + # via opentelemetry-instrumentation-system-metrics +opentelemetry-instrumentation-system-metrics==0.47b0 + # via qoa4ml +opentelemetry-sdk==1.26.0 + # via qoa4ml +opentelemetry-semantic-conventions==0.47b0 + # via opentelemetry-sdk +opt-einsum==3.3.0 + # via tensorflow +optree==0.12.1 + # via keras +packaging==24.1 + # via keras + # via tensorboard + # via tensorflow +paho-mqtt==1.6.1 + # via qoa4ml +pika==1.3.2 + # via qoa4ml +pillow==10.0.0 + # via qoa4ml +prometheus-client==0.16.0 + # via qoa4ml +protobuf==4.25.4 + # via tensorboard + # via tensorflow +psutil==6.0.0 + # via opentelemetry-instrumentation-system-metrics + # via qoa4ml +pydantic==2.7.4 + # via fastapi + # via qoa4ml +pydantic-core==2.18.4 + # via pydantic +pygments==2.18.0 + # via rich +pywin32==306 ; sys_platform == 'win32' + # via docker +pyyaml==6.0.2 + # via qoa4ml +requests==2.32.3 + # via docker + # via qoa4ml + # via tensorflow +rich==13.7.1 + # via keras +setuptools==73.0.1 + # via opentelemetry-instrumentation + # via tensorboard + # via tensorflow +six==1.16.0 + # via astunparse + # via flatten-dict + # via google-pasta + # via lazy-import + # via tensorboard + # via tensorflow +sniffio==1.3.1 + # via anyio +starlette==0.38.2 + # via fastapi +tensorboard==2.17.1 + # via tensorflow +tensorboard-data-server==0.7.2 + # via tensorboard +tensorflow==2.17.0 + # via qoa4ml +tensorflow-io-gcs-filesystem==0.37.1 ; python_full_version < '3.12' + # via tensorflow +termcolor==2.4.0 + # via tensorflow +tinyflux==1.0.0 + # via qoa4ml +typing-extensions==4.12.2 + # via anyio + # via fastapi + # via opentelemetry-sdk + # via optree + # via pydantic + # via pydantic-core + # via tensorflow + # via uvicorn +urllib3==2.2.2 + # via docker + # via requests +uvicorn==0.30.6 + # via qoa4ml +werkzeug==3.0.4 + # via tensorboard +wheel==0.44.0 + # via astunparse +wrapt==1.16.0 + # via deprecated + # via opentelemetry-instrumentation + # via tensorflow +zipp==3.20.0 + # via importlib-metadata diff --git a/src/qoa4ml/__init__.py b/src/qoa4ml/__init__.py new file mode 100644 index 0000000..50e4000 --- /dev/null +++ b/src/qoa4ml/__init__.py @@ -0,0 +1,9 @@ +# NOTE: Mark lazy module globally, only load when used +from __future__ import annotations + +import lazy_import + +lazy_import.lazy_module("requests") +lazy_import.lazy_module("fastapi") +lazy_import.lazy_module("tinyflux") +lazy_import.lazy_module("psutil") diff --git a/src/qoa4ml/collector/__init__.py b/src/qoa4ml/collector/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/qoa4ml/collector/amqp_collector.py b/src/qoa4ml/collector/amqp_collector.py new file mode 100644 index 0000000..f2b2562 --- /dev/null +++ b/src/qoa4ml/collector/amqp_collector.py @@ -0,0 +1,75 @@ +import json +from typing import Optional + +import pika + +from ..config.configs import AMQPCollectorConfig +from ..utils.logger import qoa_logger +from .base_collector import BaseCollector +from .host_object import HostObject + + +class AmqpCollector(BaseCollector): + # Init an amqp client handling the connection to amqp servier + def __init__( + self, + configuration: AMQPCollectorConfig, + host_object: Optional[HostObject] = None, + ): + self.host_object = host_object + self.exchange_name = configuration.exchange_name + self.exchange_type = configuration.exchange_type + self.in_routing_key = configuration.in_routing_key + + # Connect to RabbitMQ host + if "amqps://" in configuration.end_point: + self.in_connection = pika.BlockingConnection( + pika.URLParameters(configuration.end_point) + ) + else: + self.in_connection = pika.BlockingConnection( + pika.ConnectionParameters(host=configuration.end_point) + ) + + # Create a channel + self.in_channel = self.in_connection.channel() + + # Init an Exchange + self.in_channel.exchange_declare( + exchange=self.exchange_name, exchange_type=self.exchange_type + ) + + # Declare a queue to receive prediction response + self.queue = self.in_channel.queue_declare( + queue=configuration.in_queue, exclusive=False + ) + self.queue_name = self.queue.method.queue + # Binding the exchange to the queue with specific routing + self.in_channel.queue_bind( + exchange=self.exchange_name, + queue=self.queue_name, + routing_key=self.in_routing_key, + ) + + def on_request(self, ch, method, props, body): + # Process the data on request: sending back to host object + if self.host_object is not None: + self.host_object.message_processing(ch, method, props, body) + else: + mess = json.loads(str(body.decode("utf-8"))) + qoa_logger.info(mess) + + def start_collecting(self): + # Start rabbit MQ + self.in_channel.basic_qos(prefetch_count=1) + self.in_channel.basic_consume( + queue=self.queue_name, on_message_callback=self.on_request, auto_ack=True + ) + self.in_channel.start_consuming() + + def stop(self): + self.in_channel.stop_consuming() + self.in_channel.close() + + def get_queue(self): + return self.queue.method.queue diff --git a/src/qoa4ml/collector/base_collector.py b/src/qoa4ml/collector/base_collector.py new file mode 100644 index 0000000..37716f5 --- /dev/null +++ b/src/qoa4ml/collector/base_collector.py @@ -0,0 +1,7 @@ +from abc import ABC, abstractmethod + + +class BaseCollector(ABC): + @abstractmethod + def start_collecting(self): + pass diff --git a/src/qoa4ml/collector/host_object.py b/src/qoa4ml/collector/host_object.py new file mode 100644 index 0000000..a84ad0b --- /dev/null +++ b/src/qoa4ml/collector/host_object.py @@ -0,0 +1,7 @@ +from abc import ABC, abstractmethod + + +class HostObject(ABC): + @abstractmethod + def message_processing(self, ch, method, props, body): + pass diff --git a/src/qoa4ml/collector/kafka_collector.py b/src/qoa4ml/collector/kafka_collector.py new file mode 100644 index 0000000..03ea920 --- /dev/null +++ b/src/qoa4ml/collector/kafka_collector.py @@ -0,0 +1,47 @@ +import json + +from confluent_kafka import Consumer + +from ..config.configs import KafkaCollectorConfig +from ..utils.logger import qoa_logger +from .base_collector import BaseCollector +from .host_object import HostObject + + +class KafkaCollector(BaseCollector): + def __init__( + self, + config: KafkaCollectorConfig, + host_object: HostObject | None = None, + ): + self.config = config + self.host_object = host_object + self.running = False + self.consumer = Consumer( + { + "bootstrap.servers": self.config.broker_url, + "group.id": self.config.group_id, + "auto.offset.reset": self.config.auto_offset_reset, + } + ) + + def on_request(self, ch, method, props, body): + if self.host_object is not None: + self.host_object.message_processing(ch, method, props, body) + else: + mess = json.loads(str(body.decode("utf-8"))) + qoa_logger.info(mess) + + def start_collecting(self): + self.running = True + while self.running: + msg = self.consumer.poll(self.config.poll_inteval) + + if msg is None: + continue + if msg.error(): + print(f"Consumer error: {msg.error()}") + continue + + def stop(self): + self.running = False diff --git a/src/qoa4ml/collector/socket_collector.py b/src/qoa4ml/collector/socket_collector.py new file mode 100644 index 0000000..307b8c4 --- /dev/null +++ b/src/qoa4ml/collector/socket_collector.py @@ -0,0 +1,34 @@ +import pickle +import socket +from typing import Callable + +from ..config.configs import SocketCollectorConfig +from .base_collector import BaseCollector + + +class SocketCollector(BaseCollector): + def __init__(self, config: SocketCollectorConfig, process_report: Callable) -> None: + self.config = config + self.host = config.host + self.port = config.port + self.backlog = config.backlog + self.bufsize = config.bufsize + self.process_report = process_report + self.execution_flag = True + + def start_collecting(self): + server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server_socket.bind((self.host, self.port)) + server_socket.listen(self.backlog) + while self.execution_flag: + client_socket, _ = server_socket.accept() + data = b"" + while True: + packet = client_socket.recv(self.bufsize) + if not packet: + break + data += packet + + report = pickle.loads(data) + self.process_report(report) + client_socket.close() diff --git a/src/qoa4ml/config/__init__.py b/src/qoa4ml/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/qoa4ml/config/configs.py b/src/qoa4ml/config/configs.py new file mode 100644 index 0000000..2ef6dc2 --- /dev/null +++ b/src/qoa4ml/config/configs.py @@ -0,0 +1,225 @@ +from __future__ import annotations + +from typing import Union + +from pydantic import BaseModel, Field, model_validator + +from ..lang.datamodel_enum import ( + EnvironmentEnum, + MetricClassEnum, + MetricNameEnum, + ServiceAPIEnum, +) + + +class ClientInfo(BaseModel): + id: str = Field( + default="", + description="The id of the QoAClient, should be not be set manually, auto-generated by QoAClient", + ) + name: str = Field( + default="", + description="The name of the QoAClient, for example, qoa_client1", + ) + + user_id: str = Field( + default="", + description="Can be set if you have external user_id, otherwise auto generated", + ) + username: str = Field(default="", description="The name of the qoa_client user") + instance_id: str = Field( + default="", + description="An UUID4 that is used to identify the instance, can be set manually in the config or through environment variable INSTANCE_ID, if not, auto-generated by QoAClient", + ) + instance_name: str = Field(default="", description="The name of the instance") + stage_id: str = "" + functionality: str = "" + application_name: str = "" + role: str = "" + run_id: str = "" + environment: EnvironmentEnum = Field( + default=EnvironmentEnum.edge, + description="The environment where the qoa_client is run", + ) + custom_info: dict | str = Field( + default="", description="Additional information that you can add" + ) + + +class AMQPCollectorConfig(BaseModel): + end_point: str + exchange_name: str + exchange_type: str + in_routing_key: str + in_queue: str + + +class AMQPConnectorConfig(BaseModel): + end_point: str + exchange_name: str + exchange_type: str + out_routing_key: str + + +class MQTTConnectorConfig(BaseModel): + in_queue: str + out_queue: str + broker_url: str + broker_port: int + broker_keepalive: int + client_id: str + + +class SocketConnectorConfig(BaseModel): + host: str + port: int + + +class SocketCollectorConfig(BaseModel): + host: str + port: int + backlog: int + bufsize: int + + +class PrometheusConnectorConfig(BaseModel): + pass + + +class KafkaConnectorConfig(BaseModel): + topic: str + broker_url: str + + +class KafkaCollectorConfig(BaseModel): + topic: str + broker_url: str + group_id: str + auto_offset_reset: str = "earliest" + poll_inteval: float = 1.0 + + +class DebugConnectorConfig(BaseModel): + silence: bool + + +# TODO: test if loading the config, the type of the config can be found +CollectorConfigClass = Union[ + AMQPCollectorConfig, SocketCollectorConfig, KafkaCollectorConfig, dict +] +ConnectorConfigClass = Union[ + AMQPConnectorConfig, + SocketConnectorConfig, + KafkaConnectorConfig, + DebugConnectorConfig, + dict, +] + + +class CollectorConfig(BaseModel): + name: str + collector_class: ServiceAPIEnum + config: CollectorConfigClass + + +class ConnectorConfig(BaseModel): + name: str + connector_class: ServiceAPIEnum + config: ConnectorConfigClass | None = None + + +class ClientConfig(BaseModel): + client: ClientInfo + registration_url: str | None = None + collector: list[CollectorConfig] | None = None + connector: list[ConnectorConfig] | None = None + probes: list[ProbeConfig] | None = None + + @model_validator(mode="before") + @classmethod + def validate_probe_type(cls, values): + probe_type_map: dict[str, type[ProbeConfig]] = { + "process": ProcessProbeConfig, + "docker": DockerProbeConfig, + "system": SystemProbeConfig, + } + probes = values.get("probes", []) + if probes: + for i, probe_data in enumerate(probes): + probe_type = probe_data.get("probe_type") + if probe_type in probe_type_map: + probes[i] = probe_type_map[probe_type](**probe_data) + values["probes"] = probes + return values + + +class MetricConfig(BaseModel): + name: MetricNameEnum + metric_class: MetricClassEnum + description: str | None = None + default_value: int + category: int + + +class GroupMetricConfig(BaseModel): + name: str + metric_configs: list[MetricConfig] + + +class ProbeConfig(BaseModel): + probe_type: str + frequency: int + require_register: bool + obs_service_url: str | None = None + log_latency_flag: bool + latency_logging_path: str | None = None + environment: EnvironmentEnum = Field( + default=EnvironmentEnum.edge, description="The environment where the probe run" + ) + + +class ProcessProbeConfig(ProbeConfig): + probe_type: str = Field("process") + pid: int | None = None + + +class SystemProbeConfig(ProbeConfig): + probe_type: str = Field("system") + node_name: str | None = None + + +class DockerProbeConfig(ProbeConfig): + probe_type: str = Field("docker") + container_list: list[str] = [] + + +class JetsonSystemProbeConfig(ProbeConfig): + probe_type: str = Field("jetson_sys") + node_name: str | None + + +class JetsonProcessesProbeConfig(ProbeConfig): + probe_type: str = Field("jetson_sys") + node_name: str | None + + +class NodeAggregatorConfig(BaseModel): + socket_collector_config: SocketCollectorConfig + environment: EnvironmentEnum + query_method: str + data_separator: str + unit_conversion: dict + database_path: str + + +class ExporterConfig(BaseModel): + host: str + port: int + node_aggregator: NodeAggregatorConfig + + +class OdopObsConfig(BaseModel): + process: ProcessProbeConfig + system: SystemProbeConfig + probe_connector: SocketConnectorConfig + exporter: ExporterConfig diff --git a/src/qoa4ml/connector/__init__.py b/src/qoa4ml/connector/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/qoa4ml/connector/amqp_connector.py b/src/qoa4ml/connector/amqp_connector.py new file mode 100644 index 0000000..1e5f9b4 --- /dev/null +++ b/src/qoa4ml/connector/amqp_connector.py @@ -0,0 +1,69 @@ +import uuid +from typing import Optional + +import pika + +from ..config.configs import AMQPConnectorConfig +from .base_connector import BaseConnector + + +class AmqpConnector(BaseConnector): + # Init an amqp client handling the connection to amqp servier + def __init__(self, config: AMQPConnectorConfig, log: bool = False): + """ + AMQP connector + configuration: a dictionary include broker and queue information + log: a bool flag for logging message if being set to True, default is False + """ + self.conf = config + self.exchange_name = config.exchange_name + self.exchange_type = config.exchange_type + self.out_routing_key = config.out_routing_key + self.log_flag = log + + # Connect to RabbitMQ host + if "amqps://" in config.end_point: + self.out_connection = pika.BlockingConnection( + pika.URLParameters(config.end_point) + ) + else: + self.out_connection = pika.BlockingConnection( + pika.ConnectionParameters(host=config.end_point) + ) + + # Create a channel + self.out_channel = self.out_connection.channel() + + # Init an Exchange + self.out_channel.exchange_declare( + exchange=self.exchange_name, exchange_type=self.exchange_type + ) + + def send_report( + self, + body_message: str, + corr_id=None, + routing_key: Optional[str] = None, + expiration=1000, + ): + # Sending data to desired destination + # if sender is client, it will include the "reply_to" attribute to specify where to reply this message + # if sender is server, it will reply the message to "reply_to" via default exchange + if corr_id is None: + corr_id = str(uuid.uuid4()) + if routing_key is None: + routing_key = self.out_routing_key + self.sub_properties = pika.BasicProperties( + correlation_id=corr_id, expiration=str(expiration) + ) + self.out_channel.basic_publish( + exchange=self.exchange_name, + routing_key=routing_key, + properties=self.sub_properties, + body=body_message, + ) + # if self.log_flag: + # self.mess_logging.log_request(body_mess,corr_id) + + def get(self): + return self.conf diff --git a/src/qoa4ml/connector/base_connector.py b/src/qoa4ml/connector/base_connector.py new file mode 100644 index 0000000..8de491a --- /dev/null +++ b/src/qoa4ml/connector/base_connector.py @@ -0,0 +1,7 @@ +from abc import ABC, abstractmethod + + +class BaseConnector(ABC): + @abstractmethod + def send_report(self, body_message: str): + pass diff --git a/src/qoa4ml/connector/debug_connector.py b/src/qoa4ml/connector/debug_connector.py new file mode 100644 index 0000000..70f414a --- /dev/null +++ b/src/qoa4ml/connector/debug_connector.py @@ -0,0 +1,15 @@ +import json + +from devtools import debug + +from ..config.configs import DebugConnectorConfig +from .base_connector import BaseConnector + + +class DebugConnector(BaseConnector): + def __init__(self, config: DebugConnectorConfig): + self.silence = config.silence + + def send_report(self, body_message: str): + if not self.silence: + debug(json.loads(body_message)) diff --git a/src/qoa4ml/connector/kafka_connector.py b/src/qoa4ml/connector/kafka_connector.py new file mode 100644 index 0000000..8c14da1 --- /dev/null +++ b/src/qoa4ml/connector/kafka_connector.py @@ -0,0 +1,39 @@ +from confluent_kafka import Producer + +from ..config.configs import KafkaConnectorConfig +from ..utils.logger import qoa_logger +from .base_connector import BaseConnector + + +def kafka_delivery_error(err, msg): + if err is not None: + qoa_logger.error(f"Message delivery failed: {err}") + + +class KafkaConnector(BaseConnector): + def __init__(self, config: KafkaConnectorConfig, log: bool = False): + self.conf = config + self.topic = config.topic + self.log_flag = log + self.producer: Producer = Producer( + bootstrap_servers=config.broker_url, + ) + + def send_report( + self, + body_message: str, + ): + self.producer.poll(0) + + self.producer.produce( + self.topic, + body_message.encode("utf-8"), + callback=kafka_delivery_error, + ) + self.producer.flush() + + if self.log_flag: + qoa_logger.info(f"Sent message to topic {self.topic}: {body_message}") + + def get(self): + return self.conf diff --git a/src/qoa4ml/connector/mqtt_connector.py b/src/qoa4ml/connector/mqtt_connector.py new file mode 100644 index 0000000..d9c493c --- /dev/null +++ b/src/qoa4ml/connector/mqtt_connector.py @@ -0,0 +1,67 @@ +from typing import TYPE_CHECKING + +import lazy_import + +from ..collector.host_object import HostObject +from ..config.configs import MQTTConnectorConfig +from ..utils.qoa_utils import qoaLogger +from .base_connector import BaseConnector + +if TYPE_CHECKING: + import paho.mqtt.client as mqtt +else: + mqtt = lazy_import.lazy_module("paho.mqtt") + + +# TODO: this client handle both connector and collector +class MqttConnector(BaseConnector): + # This class will handle all the mqtt connection for each client application + # FIX: what is host object? + def __init__(self, host_object: HostObject, configuration: MQTTConnectorConfig): + # from paho.mqtt.client import Client as MqttClient + # from paho.mqtt.enums import CallbackAPIVersion + # Init the host object to return message + self.host_object = host_object + # Init the send/receive queue + self.pub_queue = configuration.in_queue + self.sub_queue = configuration.out_queue + # Create the mqtt client + self.test = mqtt + self.client = mqtt.Client( + callback_api_version=mqtt.CallbackAPIVersion.VERSION2, + client_id=configuration.client_id, + clean_session=False, + userdata=None, + transport="tcp", + ) + # Set some functional method + self.client.on_connect = self.on_connect + self.client.on_message = self.on_message + # Connect to mqtt broker + self.client.connect( + configuration.broker_url, + configuration.broker_port, + configuration.broker_keepalive, + ) + + def on_connect(self, client, userdata, flags, rc): + qoaLogger.debug("Connected with result code " + str(rc)) + # Subscribing in on_connect() means that if we lose the connection and + # reconnect then subscriptions will be renewed. + client.subscribe(self.sub_queue) + + def on_message(self, client, userdata, msg): + # Pass the data to the host object + self.host_object.message_processing(client, userdata, msg) + + def stop(self): + # stop the connection + self.client.disconnect() + + def start(self): + # Start looking for data from broker + self.client.loop_start() + + def send_data(self, body_message: str): + # Send data in form of text message + self.client.publish(self.pub_queue, body_message) diff --git a/src/qoa4ml/connector/prom_connector.py b/src/qoa4ml/connector/prom_connector.py new file mode 100644 index 0000000..16cc05d --- /dev/null +++ b/src/qoa4ml/connector/prom_connector.py @@ -0,0 +1,62 @@ +import prometheus_client as pr + +_INF = float("inf") + + +class PromConnector: + def __init__(self, info): + self.info = info["metric"] + self.port = info["port"] + self.metrices = {} + for key in self.info: + self.metrices[key] = {} + if self.info[key]["Type"] == "Gauge": + self.metrices[key]["metric"] = pr.Gauge( + self.info[key]["Prom_name"], self.info[key]["Description"] + ) + if self.info[key]["Type"] == "Counter": + self.metrices[key]["metric"] = pr.Counter( + self.info[key]["Prom_name"], self.info[key]["Description"] + ) + if self.info[key]["Type"] == "Summary": + self.metrices[key]["metric"] = pr.Summary( + self.info[key]["Prom_name"], self.info[key]["Description"] + ) + if self.info[key]["Type"] == "Histogram": + self.metrices[key]["metric"] = pr.Histogram( + self.info[key]["Prom_name"], + self.info[key]["Description"], + buckets=(tuple(self.info[key]["Buckets"])), + ) + self.metrices[key]["violation"] = pr.Counter( + self.info[key]["Prom_name"] + "_violation", + self.info[key]["Description"] + " (violation)", + ) + pr.start_http_server(int(info["port"])) + + def inc(self, key, num=1): + if self.info[key]["Type"] in ["Gauge", "Counter"]: + self.metrices[key]["metric"].inc(num) + + def dec(self, key, num=1): + if self.info[key]["Type"] == "Gauge": + self.metrices[key]["metric"].dec(num) + + def set(self, key, num=1): + if self.info[key]["Type"] == "Gauge": + self.metrices[key]["metric"].set(num) + elif self.info[key]["Type"] == "Counter": + self.metrices[key]["metric"].inc(num) + elif self.info[key]["Type"] in ["Histogram", "Summary"]: + self.metrices[key]["metric"].observe(num) + + def observe(self, key, val): + if self.info[key]["Type"] in ["Summary", "Histogram"]: + self.metrices[key]["metric"].observe(val) + + def inc_violation(self, key, num=1): + self.metrices[key]["violation"].inc(num) + + def update_violation_count(self): + for key in self.metrices: + pr.generate_latest(self.metrices[key]["violation"]) diff --git a/src/qoa4ml/connector/socket_connector.py b/src/qoa4ml/connector/socket_connector.py new file mode 100644 index 0000000..0e592b4 --- /dev/null +++ b/src/qoa4ml/connector/socket_connector.py @@ -0,0 +1,29 @@ +import logging +import pickle +import socket +import time +from typing import Optional + +from ..config.configs import SocketConnectorConfig +from .base_connector import BaseConnector + + +class SocketConnector(BaseConnector): + def __init__(self, config: SocketConnectorConfig): + self.config = config + self.host = config.host + self.port = config.port + + def send_report(self, body_message: str, log_path: Optional[str] = None): + try: + start = time.time() + client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + client_socket.connect((self.host, self.port)) + serialized_message = pickle.dumps(body_message) + client_socket.sendall(serialized_message) + client_socket.close() + if log_path: + with open(log_path, "a", encoding="utf-8") as file: + file.write(str((time.time() - start) * 1000) + "\n") + except ConnectionRefusedError: + logging.error("Connection to aggregator refused") diff --git a/src/qoa4ml/lang/__init__.py b/src/qoa4ml/lang/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/qoa4ml/lang/common_models.py b/src/qoa4ml/lang/common_models.py new file mode 100644 index 0000000..ae19fce --- /dev/null +++ b/src/qoa4ml/lang/common_models.py @@ -0,0 +1,28 @@ +from typing import Optional, Union + +from pydantic import BaseModel + +from .datamodel_enum import AggregateFunctionEnum, MetricNameEnum, OperatorEnum + + +class Metric(BaseModel): + metric_name: MetricNameEnum + records: list[Union[dict, float, int, tuple, str]] = [] + unit: Optional[str] = None + description: Optional[str] = None + + +class Condition(BaseModel): + operator: OperatorEnum + value: Union[dict, float, int] + + +class MetricConstraint(BaseModel): + metrics: Metric + condition: Condition + aggregate_function: AggregateFunctionEnum + + +class BaseConstraint(BaseModel): + name: str + constraint_list: list[MetricConstraint] diff --git a/src/qoa4ml/lang/datamodel_enum.py b/src/qoa4ml/lang/datamodel_enum.py new file mode 100644 index 0000000..e0dc4db --- /dev/null +++ b/src/qoa4ml/lang/datamodel_enum.py @@ -0,0 +1,188 @@ +from enum import Enum +from typing import Union + + +class ServiceMetricNameEnum(str, Enum): + response_time = "response_time" + reliability = "reliability" + completeness = "completeness" + + +class MlSpecificMetricNameEnum(str, Enum): + confidence = "confidence" + accuracy = "accuracy" + precision = "precision" + recall = "recall" + auc = "auc" + mse = "mse" + + +class ResourcesUtilizationMetricNameEnum(str, Enum): + cpu = "cpu_usage" + memory = "memory_usage" + + +class ImageQualityNameEnum(str, Enum): + image_size = "image_size" + object_size = "object_size" + color_mode = "color_mode" + color_channel = "color_channel" + + +MetricNameEnum = Union[ + ServiceMetricNameEnum, + MlSpecificMetricNameEnum, + ResourcesUtilizationMetricNameEnum, + ImageQualityNameEnum, + str, +] + + +class StageNameEnum(str, Enum): + ml_inference_aggregate = "ml_inference_aggregate" + ml_inference_ensemble = "ml_inference_ensemble" + data_processing = "data_processing" + gateway = "gateway" + + +class FunctionalityEnum(str, Enum): + rest = "REST" + tensorflow = "TensorFlow" + transformation = "Transformation" + max_aggregate = "Max Aggregate" + + +class StakeholderRoleEnum(str, Enum): + ml_consumer = "ml_provider" + ml_provider = "ml_provider" + ml_infrastructure = "ml_infrastructure" + + +class ResourceEnum(str, Enum): + ml_service = "ml_service" + storage = "storage" + ml_models = "ml_models" + + +class ServiceAPIEnum(str, Enum): + rest = "REST" + mqtt = "MQTT" + kafka = "Kafka" + amqp = "AMQP" + coapp = "coapp" + socket = "socket" + debug = "Debug" + + +class InfrastructureEnum(str, Enum): + raspi4 = "Raspberry Pi 4 Model B" + nvidia_jetson_nano = "NVIDIA Jetson Nano" + nvidia_jetson_orin_nano = "NVIDIA Jetson Orin Nano" + nvidia_jetson_agx_xavier = "NVIDIA Jetson AGX Xavier" + beelink_bt3 = "Beelink BT3" + rock_pi_n10 = "Rock Pi N10" + + +class ProcessorEnum(str, Enum): + cpu = "CPU" + gpu = "GPU" + tpu = "TPU" + + +class DataTypeEnum(str, Enum): + video = "video" + image = "image" + message = "message" + + +class DataFormatEnum(str, Enum): + binary = "binary" + csv = "csv" + json = "json" + avro = "avro" + png = "png" + jpg = "jpg" + mp4 = "mp4" + + +class DevelopmentEnvironmentEnum(str, Enum): + kerash5 = "kerash5" + onnx = "onnx" + + +class ServingPlatformEnum(Enum): + tensorflow = "TensorFlow" + predictio = "predictio" + + +class ModelCategoryEnum(Enum): + svm = "SVM" + dt = "DT" + cnn = "CNN" + lr = "LR" + kmeans = "KMeans" + ann = "ANN" + + +class InferenceModeEnum(Enum): + static = "static" + dynamic = "dynamic" + + +class OperatorEnum(Enum): + range = "range" + leq = "less_equal" + geq = "greater_equal" + lt = "less_than" + gt = "greater_than" + eq = "equal" + + +class AggregateFunctionEnum(Enum): + MIN = "MIN" + MAX = "MAX" + AVG = "AVERAGE" + SUM = "SUM" + COUNT = "COUNT" + OR = "OR" + AND = "AND" + PRODUCT = "PRODUCT" + + +class CostUnitEnum(Enum): + usd = "USD" + eur = "EUR" + other = "other" + + +class MetricCategoryEnum(Enum): + service = "service" + data = "data" + ml_specific = "ml_specific" + quality = "quality" + inference = "inference" + + +class CgroupVersionEnum(Enum): + v1 = "cgroupv1" + v2 = "cgroupv2" + + +class MetricClassEnum(Enum): + gauge = "Gauge" + counter = "Counter" + summary = "Summary" + histogram = "Histogram" + + +class ReportTypeEnum(Enum): + data = "data_report" + service = "service_report" + ml_specific = "ml_specific_report" + security = "security_report" + + +class EnvironmentEnum(str, Enum): + hpc = "HPC" + edge = "Edge" + cloud = "Cloud" diff --git a/src/qoa4ml/lang/ml_contract.py b/src/qoa4ml/lang/ml_contract.py new file mode 100644 index 0000000..c8da5c3 --- /dev/null +++ b/src/qoa4ml/lang/ml_contract.py @@ -0,0 +1,101 @@ +from common_models import BaseConstraint +from datamodel_enum import ( + DataFormatEnum, + DataTypeEnum, + DevelopmentEnvironmentEnum, + InferenceModeEnum, + InfrastructureEnum, + ModelCategoryEnum, + ProcessorEnum, + ResourceEnum, + ServiceAPIEnum, + ServingPlatformEnum, + StakeholderRoleEnum, +) +from pydantic import BaseModel + + +class Stakeholder(BaseModel): + id: str + name: str + roles: list[StakeholderRoleEnum] + provisioning: list[ResourceEnum] + + +class MicroserviceSpecs(BaseModel): + id: str + name: str + service_api: list[ServiceAPIEnum] + infrastructure: list[InfrastructureEnum] + processor_types: list[ProcessorEnum] + + +class DataSpecs(BaseModel): + id: str + name: str + types: list[DataTypeEnum] + formats: list[DataFormatEnum] + + +class MLSpecs(BaseModel): + id: str + name: str + development_environment: list[DevelopmentEnvironmentEnum] + serving_platform: list[ServingPlatformEnum] + model_classes: list[ModelCategoryEnum] + inference_modes: list[InferenceModeEnum] + + +class ResourceSpecs(BaseModel): + services_specs: list[MicroserviceSpecs] + data_specs: DataSpecs + ml_specs: MLSpecs + + +class CostConstraint(BaseConstraint): + name: str = "cost_constraint" + + +class InterpretabilityConstraint(BaseModel): + explainability: dict + + +class FairnessConstraint(BaseConstraint): + name: str = "fairness_constraint" + + +class PrivacyConstraint: + risks: dict + + +class SecurityConstraint(BaseModel): + encryption: dict + + +class MLSpecificConstraint(BaseConstraint): + name: str = "ml_specific_constraint" + + +class DataConstraint(BaseConstraint): + name: str = "data_constaint" + + +class ServiceConstraint(BaseConstraint): + name: str = "service_constraint" + + +class QualityConstraint(BaseModel): + service: list[ServiceConstraint] + data: list[DataConstraint] + ml_specific: list[MLSpecificConstraint] + security: list[SecurityConstraint] + privacy: list[PrivacyConstraint] + fairness: list[FairnessConstraint] + interpretability: list[InterpretabilityConstraint] + cost: list[CostConstraint] + + +class MLContract(BaseModel): + stakeholders: list[Stakeholder] + resources: ResourceSpecs + quality: QualityConstraint diff --git a/src/qoa4ml/metric.py b/src/qoa4ml/metric.py new file mode 100644 index 0000000..a3afa01 --- /dev/null +++ b/src/qoa4ml/metric.py @@ -0,0 +1,147 @@ +# Metrics are implemented based on these classes to be compatible with Prometheus +from .lang.datamodel_enum import MetricNameEnum + + +class PrometheusMetric: + """ + This class defines the common attribute and provide basic function for handling a metric + - Attribute: + - name: name of the metric + - description: describe the metric + - value: value of the metric + - category: group metric into specific category supporting building QoA_Report + - others: (Developing) + + - Function: + - set: set specific value + - get_val: return current value + - get_name: return metric name + - get_des: return metric description + - other: (Developing) + + - Category: metrics are categorized into following groups + 0 - Quality: Performance (metrics for evaluating service performance e.g., response time, throughput) + 1 - Quality: Data (metrics for evaluating data quality e.g., missing, duplicate, erroneous) + 2 - Quality: Inference (metrics for evaluating quality of ML inference, measured from inferences e.g., accuracy, confidence) + 3 - Resource: metrics for evaluating resource utilization e.g. CPU, Memory + Other: To do (extend more categories) + """ + + def __init__( + self, metric_name: MetricNameEnum, description, default_value=-1, category=0 + ): + self.name = metric_name + self.description = description + self.default_value = default_value + self.value = default_value + self.category = category + + def set(self, value): + self.value = value + + def get_val(self): + return self.value + + def get_name(self): + return self.name + + def get_des(self): + return self.description + + def get_category(self): + return self.category + + def reset(self): + self.value = self.default_value + + def __str__(self) -> str: + return "metric_name: " + self.name + ", " + "value: " + str(self.value) + + def to_dict(self): + mectric_dict = {} + mectric_dict[self.name] = self.value + return mectric_dict + + +class Counter(PrometheusMetric): + """ + This class inherit all attributes of Metric + - Attribute: (Developing) + + - Function: + - inc: increase its value by num + - reset: set the value back to zero + - others: (Developing) + """ + + def __init__(self, metric_name, description, default_value=0, category=0): + super().__init__(metric_name, description, default_value, category) + + def inc(self, num=1): + self.value += num + + +class Gauge(PrometheusMetric): + """ + This class inherit all attributes of Metric + - Attribute: (Developing) + + - Function: + - inc: increase its value by num + - others: (Developing) + """ + + def __init__(self, metric_name, description, default_value=-1, category=0): + super().__init__(metric_name, description, default_value, category) + + def inc(self, num=1): + self.value += num + + # TO DO: + # implement other functions + def dec(self, num=1): + self.value -= num + + +class Summary(PrometheusMetric): + """ + This class inherit all attributes of Metric + - Attribute: (Developing) + + - Function: + - inc: increase its value by num + - others: (Developing) + """ + + def __init__(self, metric_name, description, default_value=-1, category=0): + super().__init__(metric_name, description, default_value, category) + + def inc(self, num): + self.value += num + + # TO DO: + # implement other functions + def dec(self, num): + self.value -= num + + +class Histogram(PrometheusMetric): + """ + This class inherit all attributes of Metric + - Attribute: (Developing) + + - Function: + - inc: increase its value by num + - others: (Developing) + """ + + def __init__(self, metric_name, description, default_value=-1, category=0): + super().__init__(metric_name, description, default_value, category) + + def inc(self, num): + self.value += num + + # TO DO: + # implement other functions + def dec(self, num): + self.value -= num diff --git a/src/qoa4ml/observability/__init__.py b/src/qoa4ml/observability/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/qoa4ml/observability/odop_obs/__init__.py b/src/qoa4ml/observability/odop_obs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/qoa4ml/observability/odop_obs/config/exporter_config.yaml b/src/qoa4ml/observability/odop_obs/config/exporter_config.yaml new file mode 100644 index 0000000..f0a76f0 --- /dev/null +++ b/src/qoa4ml/observability/odop_obs/config/exporter_config.yaml @@ -0,0 +1,28 @@ +host: "127.0.0.1" +port: 8000 +environment: "HPC" +node_aggregator: + socket_collector_config: + host: "127.0.0.1" + port: 12345 + backlog: 5 + bufsize: 4096 + environment: "HPC" + query_method: "GET" + data_separator: "dot" + unit_conversion: + cpu: + usage: + milicpu: 1 + cputime: 2 + percentage: 3 + gpu: + usage: + percentage: 1 + mem: + Gb: 1 + Mb: 2 + Kb: 3 + frequency: + GHz: 1 + MHz: 2 diff --git a/src/qoa4ml/observability/odop_obs/config/node_aggregator_config.yaml b/src/qoa4ml/observability/odop_obs/config/node_aggregator_config.yaml new file mode 100644 index 0000000..588d874 --- /dev/null +++ b/src/qoa4ml/observability/odop_obs/config/node_aggregator_config.yaml @@ -0,0 +1,24 @@ +socket_collector_config: + host: "127.0.0.1" + port: 12345 + backlog: 5 + bufsize: 4096 +environment: "HPC" +query_method: "GET" +data_separator: "dot" +unit_conversion: + cpu: + usage: + milicpu: 1 + cputime: 2 + percentage: 3 + gpu: + usage: + percentage: 1 + mem: + Gb: 1 + Mb: 2 + Kb: 3 + frequency: + GHz: 1 + MHz: 2 diff --git a/src/qoa4ml/observability/odop_obs/config/process_probe_conf.yaml b/src/qoa4ml/observability/odop_obs/config/process_probe_conf.yaml new file mode 100644 index 0000000..cd40301 --- /dev/null +++ b/src/qoa4ml/observability/odop_obs/config/process_probe_conf.yaml @@ -0,0 +1,5 @@ +frequency: 1 +require_register: false +log_latency_flag: true +latency_logging_path: "logs/" +environment: "HPC" diff --git a/src/qoa4ml/observability/odop_obs/config/system_probe_conf.yaml b/src/qoa4ml/observability/odop_obs/config/system_probe_conf.yaml new file mode 100644 index 0000000..c350d83 --- /dev/null +++ b/src/qoa4ml/observability/odop_obs/config/system_probe_conf.yaml @@ -0,0 +1,5 @@ +frequency: 1 +require_register: false +latency_logging_path: "logs/" +log_latency_flag: true +environment: "HPC" diff --git a/src/qoa4ml/observability/odop_obs/config/unit_conversion.yaml b/src/qoa4ml/observability/odop_obs/config/unit_conversion.yaml new file mode 100644 index 0000000..5097796 --- /dev/null +++ b/src/qoa4ml/observability/odop_obs/config/unit_conversion.yaml @@ -0,0 +1,15 @@ +cpu: + usage: + milicpu: 1 + cputime: 2 + percentage: 3 +gpu: + usage: + percentage: 1 +mem: + Gb: 1 + Mb: 2 + Kb: 3 +frequency: + GHz: 1 + MHz: 2 diff --git a/src/qoa4ml/observability/odop_obs/embedded_database.py b/src/qoa4ml/observability/odop_obs/embedded_database.py new file mode 100644 index 0000000..278f64f --- /dev/null +++ b/src/qoa4ml/observability/odop_obs/embedded_database.py @@ -0,0 +1,20 @@ +import math +import time +from datetime import datetime + +from tinyflux import Point, TimeQuery, TinyFlux + + +class EmbeddedDatabase: + def __init__(self, db_path: str) -> None: + self.db = TinyFlux(db_path) + + def insert(self, timestamp: float, tags: dict, fields: dict): + timestamp_datetime = datetime.fromtimestamp(timestamp) + datapoint = Point(time=timestamp_datetime, tags=tags, fields=fields) + self.db.insert(datapoint, compact_key_prefixes=True) + + def get_lastest_timestamp(self): + time_query = TimeQuery() + timestamp = datetime.fromtimestamp(math.floor(time.time())) + return self.db.search(time_query >= timestamp) diff --git a/src/qoa4ml/observability/odop_obs/exporter.py b/src/qoa4ml/observability/odop_obs/exporter.py new file mode 100644 index 0000000..b4f7840 --- /dev/null +++ b/src/qoa4ml/observability/odop_obs/exporter.py @@ -0,0 +1,23 @@ +import logging + +import uvicorn +from fastapi import FastAPI + +from ...config.configs import ExporterConfig +from .node_aggregator import NodeAggregator + +logging.basicConfig( + format="%(asctime)s:%(levelname)s -- %(message)s", level=logging.INFO +) + + +class Exporter: + def __init__(self, config: ExporterConfig) -> None: + self.app = FastAPI() + self.config = config + self.node_aggregator = NodeAggregator(self.config.node_aggregator) + self.app.include_router(self.node_aggregator.router) + + def start(self): + self.node_aggregator.start() + uvicorn.run(self.app, host=self.config.host, port=self.config.port) diff --git a/src/qoa4ml/observability/odop_obs/node_aggregator.py b/src/qoa4ml/observability/odop_obs/node_aggregator.py new file mode 100644 index 0000000..c7004b1 --- /dev/null +++ b/src/qoa4ml/observability/odop_obs/node_aggregator.py @@ -0,0 +1,194 @@ +import logging +import socket +from datetime import datetime +from threading import Thread +from typing import TYPE_CHECKING + +import lazy_import +from fastapi import APIRouter +from flatten_dict import flatten, unflatten + +from ...collector.socket_collector import SocketCollector +from ...config.configs import NodeAggregatorConfig +from ...lang.datamodel_enum import EnvironmentEnum +from ...utils.qoa_utils import make_folder +from .embedded_database import EmbeddedDatabase + +logging.basicConfig( + format="%(asctime)s:%(levelname)s -- %(message)s", level=logging.INFO +) + +METRICS_URL_PATH = "/metrics" + +if TYPE_CHECKING: + from ...reports.resources_report_model import ProcessReport, SystemReport +else: + ProcessReport = lazy_import.lazy_class( + "...reports.resources_report_model", "ProcessReport" + ) + SystemReport = lazy_import.lazy_class( + "...reports.resources_report_model", "SystemReport" + ) + + +class NodeAggregator: + def __init__(self, config: NodeAggregatorConfig): + self.config = config + self.unit_conversion = self.config.unit_conversion + self.node_name = socket.gethostname().split(".")[0] + make_folder(self.config.database_path) + self.embedded_database = EmbeddedDatabase( + self.config.database_path + self.node_name + ".csv" + ) + self.environment = config.environment + self.collector = SocketCollector( + config.socket_collector_config, self.process_report + ) + self.server_thread = Thread(target=self.collector.start_collecting, daemon=True) + self.router = APIRouter() + self.router.add_api_route( + METRICS_URL_PATH, + self.get_lastest_timestamp, + methods=[self.config.query_method], + ) + + def process_report(self, report): + if self.environment == EnvironmentEnum.hpc: + if report["type"] == "system": + del report["type"] + metadata = flatten( + {"metadata": report["metadata"]}, self.config.data_separator + ) + timestamp = report["timestamp"] + del report["metadata"], report["timestamp"] + fields = self.convert_unit(flatten(report, self.config.data_separator)) + self.embedded_database.insert( + timestamp, + {"type": "node", **metadata}, + fields, + ) + elif report["type"] == "process": + del report["type"] + metadata = flatten( + {"metadata": report["metadata"]}, self.config.data_separator + ) + timestamp = report["timestamp"] + del report["metadata"], report["timestamp"] + fields = self.convert_unit(flatten(report, self.config.data_separator)) + self.embedded_database.insert( + timestamp, + {"type": "process", **metadata}, + fields, + ) + else: + logging.error("Value Error: Unknown report type") + elif isinstance(report, SystemReport): + node_name = report.metadata.node_name + timestamp = report.timestamp + del report.metadata, report.timestamp + fields = self.convert_unit( + flatten(report.dict(exclude_none=True), self.config.data_separator) + ) + self.embedded_database.insert( + timestamp, + { + "type": "node", + "node_name": node_name, + }, + fields, + ) + elif isinstance(report, ProcessReport): + metadata = flatten( + {"metadata": report.metadata.dict()}, self.config.data_separator + ) + timestamp = report.timestamp + del report.metadata, report.timestamp + fields = self.convert_unit( + flatten(report.dict(exclude_none=True), self.config.data_separator) + ) + self.embedded_database.insert( + timestamp, {"type": "process", **metadata}, fields + ) + + def convert_unit(self, report: dict): + converted_report = report + for key, value in report.items(): + # TODO: for instead of hard coded + if isinstance(value, str): + if "frequency" in key: + converted_report[key] = self.unit_conversion["frequency"][value] + elif "mem" in key: + converted_report[key] = self.unit_conversion["mem"][value] + elif "cpu" in key: + if "usage" in key: + converted_report[key] = self.unit_conversion["cpu"]["usage"][ + value + ] + elif "gpu" in key: + if "usage" in key: + converted_report[key] = self.unit_conversion["gpu"]["usage"][ + value + ] + return converted_report + + def revert_unit(self, converted_report: dict): + original_report = converted_report.copy() + for key, value in converted_report.items(): + if "unit" in key: + if "frequency" in key: + for original_unit, converted_unit in self.unit_conversion[ + "frequency" + ].items(): + if converted_unit == value: + original_report[key] = original_unit + break + elif "mem" in key: + for original_unit, converted_unit in self.unit_conversion[ + "mem" + ].items(): + if converted_unit == value: + original_report[key] = original_unit + break + elif "cpu" in key: + if "usage" in key: + for original_unit, converted_unit in self.unit_conversion[ + "cpu" + ]["usage"].items(): + if converted_unit == value: + original_report[key] = original_unit + break + elif "gpu" in key: + if "usage" in key: + for original_unit, converted_unit in self.unit_conversion[ + "gpu" + ]["usage"].items(): + if converted_unit == value: + original_report[key] = original_unit + break + return original_report + + def get_lastest_timestamp(self): + data = self.embedded_database.get_lastest_timestamp() + return [ + unflatten( + self.revert_unit( + { + "timestamp": datetime.timestamp(datapoint.time), + **datapoint.tags, + **datapoint.fields, + } + ), + self.config.data_separator, + ) + for datapoint in data + ] + + def start(self): + self.execution_flag = True + self.server_thread.start() + logging.info("node aggregator started") + + def stop(self): + self.execution_flag = False + self.server_thread.join() + logging.info("node aggregator stopped") diff --git a/src/qoa4ml/probes/__init__.py b/src/qoa4ml/probes/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/qoa4ml/probes/dataquality.py b/src/qoa4ml/probes/dataquality.py new file mode 100644 index 0000000..92035b7 --- /dev/null +++ b/src/qoa4ml/probes/dataquality.py @@ -0,0 +1,201 @@ +# This library is built based on ydata_quality: https://github.com/ydataai/ydata-quality + +# import io +# import pathlib +# import sys +# import traceback +# +# import numpy as np +# import pandas as pd +# +# from ..lang.datamodel_enum import ImageQualityNameEnum +# from ..utils.logger import qoa_logger +# from ..utils.qoa_utils import is_numpyarray +# +# p_dir = pathlib.Path(__file__).parent.parent.absolute() +# sys.path.append(str(p_dir)) +# +# # Define metric names, return formats: dictionary {metric name} {sub-element} +# # Return error/debugging +# ################################################ DATA QUALITY ######################################################## +# +# +# def eva_erronous(data, errors=None): +# """ +# Return number/percentage of error data +# data: numpy array or pandas data frame +# errors: list of item considered as error +# ratio: return percentage if set to True +# sum: sum the result if set to True, otherwise return errors following the categories in list of 'errors' +# """ +# try: +# if "ErroneousDataIdentifier" not in globals(): +# global ErroneousDataIdentifier +# from ydata_quality.erroneous_data import ErroneousDataIdentifier +# if is_numpyarray(data): +# data = pd.DataFrame(data) +# if is_pddataframe(data): +# if errors and isinstance(errors, list): +# eva_err = ErroneousDataIdentifier(df=data, ed_extensions=errors) +# else: +# eva_err = ErroneousDataIdentifier(df=data) +# error_df = eva_err.predefined_erroneous_data() +# +# total_count = data.count().to_numpy().flatten().sum() +# results = {} +# results["totalErrors"] = error_df.to_numpy().flatten().sum() +# results["errorRatio"] = 100 * error_df / total_count +# return results +# else: +# qoa_logger.warning(f"Unsupported data: {type(data)}") +# return None +# except Exception as e: +# qoa_logger.error(f"Error {type(e)} in eva_erronous: {e.__traceback__}") +# traceback.print_exception(*sys.exc_info()) +# +# +# def eva_duplicate(data): +# """ +# Return data/percentage of duplicate +# data: numpy array or pandas data frame +# ratio: return percentage if set to True +# """ +# try: +# if "DuplicateChecker" not in globals(): +# global DuplicateChecker +# from ydata_quality.duplicates import DuplicateChecker +# if is_numpyarray(data): +# data = pd.DataFrame(data) +# if is_pddataframe(data): +# dc = DuplicateChecker(df=data) +# dc_eva = dc.exact_duplicates() +# results = {} +# results["duplicateRatio"] = 100 * len(dc_eva.index) / len(data.index) +# results["totalDuplicate"] = len(dc_eva.index) +# return results +# else: +# qoa_logger.warning(f"Unsupported data: {type(data)}") +# return None +# except Exception as e: +# qoa_logger.error(f"Error {type(e)} in eva_duplicate: {e.__traceback__}") +# traceback.print_exception(*sys.exc_info()) +# +# +# def eva_missing( +# data, null_count=True, correlations=False, predict=False, random_state=0 +# ): +# try: +# if "MissingsProfiler" not in globals(): +# global MissingsProfiler +# from ydata_quality.missing import MissingsProfiler +# if is_numpyarray(data): +# data = pd.DataFrame(data) +# if is_pddataframe(data): +# mp = MissingsProfiler(df=data, random_state=random_state) +# results = {} +# if null_count: +# results["nullCount"] = mp.null_count() +# if correlations: +# results["correlations"] = mp.missing_correlations() +# if predict: +# results["missingPrediction"] = mp.predict_missings() +# return results +# else: +# qoa_logger.warning(f"Unsupported data: {type(data)}") +# return None +# except Exception as e: +# qoa_logger.error(f"Error {type(e)} in eva_erronous: {e.__traceback__}") +# traceback.print_exception(*sys.exc_info()) +# +# +# class OutlierDetector: +# def __init__(self, data): +# self.data = None +# self.update_data(data) +# +# def detect_outlier(self, n_data, labels=None, random_state=0, n=10, cluster=False): +# if labels is None: +# labels = [] +# if is_numpyarray(n_data): +# n_data = pd.DataFrame(n_data) +# if is_pddataframe(n_data): +# if self.data is not None: +# data = None +# try: +# data = pd.concat([self.data, n_data]) +# except Exception as e: +# qoa_logger.error( +# f"Error {type(e)} in concatenating data: {e.__traceback__}" +# ) +# traceback.print_exception(*sys.exc_info()) +# if data is not None: +# results = {} +# for label in labels: +# try: +# if "LabelInspector" not in globals(): +# global LabelInspector +# from ydata_quality.labelling import LabelInspector +# li = LabelInspector( +# df=data, label=label, random_state=random_state +# ) +# results[label] = li.outlier_detection( +# th=n, use_clusters=cluster +# ) +# except Exception as e: +# qoa_logger.error( +# f"Error {type(e)} in LabelInspector: {e.__traceback__}" +# ) +# traceback.print_exception(*sys.exc_info()) +# return results +# else: +# return {"Error": "Cannot concatenate data"} +# else: +# return {"Error": "Historical data has not been set"} +# else: +# return {"Error": f"Unsupported data: {type(data)}"} +# +# def update_data(self, data): +# if is_numpyarray(data): +# data = pd.DataFrame(data) +# if is_pddataframe(data): +# self.data = data +# return {"Response": "Success"} +# else: +# return {"Error": f"Unsupported data: {type(data)}"} +# +# +# def image_quality(image): +# if "PIL" not in globals(): +# global PIL +# import PIL +# quality = {} +# if isinstance(image, bytes): +# image = PIL.Image.open(io.BytesIO(image)) +# if isinstance(image, np.ndarray): +# image = PIL.Image.fromarray(image) +# if isinstance(image, (PIL.Image.Image, PIL.JpegImagePlugin.JpegImageFile)): +# # qoa_logger.debug(dir(image) +# quality[ImageQualityNameEnum.image_size] = image.size +# quality[ImageQualityNameEnum.color_mode] = image.mode +# quality[ImageQualityNameEnum.color_channel] = len(image.getbands()) +# return quality +# +# +# def eva_none(data): +# try: +# if is_pddataframe(data): +# data = data.to_numpy() +# if is_numpyarray(data): +# valid_count = np.count_nonzero(~np.isnan(data)) +# none_count = np.count_nonzero(np.isnan(data)) +# results = {} +# results["totalValid"] = valid_count +# results["totalNone"] = none_count +# results["noneRatio"] = valid_count / (valid_count + none_count) +# return results +# else: +# qoa_logger.warning(f"Unsupported data: {type(data)}") +# return None +# except Exception as e: +# qoa_logger.error(f"Error {type(e)} in eva_none: {e.__traceback__}") +# traceback.print_exception(*sys.exc_info()) diff --git a/src/qoa4ml/probes/docker_monitoring_probe.py b/src/qoa4ml/probes/docker_monitoring_probe.py new file mode 100644 index 0000000..6a7ecc8 --- /dev/null +++ b/src/qoa4ml/probes/docker_monitoring_probe.py @@ -0,0 +1,45 @@ +import json +import time + +import docker + +from qoa4ml.reports.resources_report_model import DockerReport + +from ..config.configs import ClientInfo, DockerProbeConfig +from ..connector.base_connector import BaseConnector +from ..utils.docker_util import get_docker_stats +from ..utils.logger import qoa_logger +from .probe import Probe + + +class DockerMonitoringProbe(Probe): + def __init__( + self, + config: DockerProbeConfig, + connector: BaseConnector, + client_info: ClientInfo, + ) -> None: + super().__init__(config, connector, client_info) + self.config = config + if self.config.require_register: + self.obs_service_url = self.config.obs_service_url + self.docker_client = docker.from_env() + + def create_report(self): + try: + reports = get_docker_stats(self.docker_client, self.config.container_list) + docker_report = DockerReport( + metadata=self.client_info, + timestamp=time.time(), + container_reports=reports, + ) + reports_dict = docker_report.model_dump() + # NOTE: if the reports dict is empty, the loop will run very fast, so here add 2 seconds as if there is container to report + if not reports_dict: + time.sleep(2) + return json.dumps(reports_dict) + except RuntimeError: + qoa_logger.exception( + "Maybe running in the background result in this exception!" + ) + return json.dumps({"error": "RuntimeError"}) diff --git a/src/qoa4ml/probes/mlquality.py b/src/qoa4ml/probes/mlquality.py new file mode 100644 index 0000000..1febe2e --- /dev/null +++ b/src/qoa4ml/probes/mlquality.py @@ -0,0 +1,123 @@ +import sys +import traceback +from typing import TYPE_CHECKING + +import lazy_import + +from ..utils.logger import qoa_logger +from ..utils.qoa_utils import is_numpyarray + +np = lazy_import.lazy_module("numpy") +tf = lazy_import.lazy_module("tensorflow") +if TYPE_CHECKING: + import numpy as np + import tensorflow as tf + + +def timeseries_metric(model): + metrics = {} + try: + if isinstance(model, tf.keras.Sequential): + for metric in model.metrics: + metrics[metric.name] = metric.result().numpy() + return metrics + except Exception as e: + qoa_logger.exception(f"Error {type(e)} when querying timeseries model metrics") + return {"Error": "Unable to get metrics"} + + +def ts_inference_metric(model, name): + try: + metrics = timeseries_metric(model) + results = {} + if name in metrics: + results[name] = metrics[name] + if "Error" in metrics: + results["Error"] = metrics["Error"] + return results + except Exception as e: + qoa_logger.exception(f"Error {type(e)} when querying timeseries {name}") + return {"Error": f"Unable to get model {name}"} + + +def ts_inference_mae(model): + try: + metrics = ts_inference_metric(model, "mean_absolute_error") + return {"MAE": metrics} + except Exception as e: + qoa_logger.exception( + f"Error {type(e)} when querying timeseries mean absolute error" + ) + return {"Error": "Unable to get model mean absolute error"} + + +def ts_inference_loss(model): + try: + metrics = ts_inference_metric(model, "loss") + return {"Loss": metrics} + except Exception as e: + qoa_logger.exception( + f"Error {type(e)} when querying timeseries mean absolute error" + ) + return {"Error": "Unable to get model mean absolute error"} + + +def training_metric(model): + try: + if isinstance(model, tf.keras.Sequential): + return model.history.history + else: + return None + except Exception as e: + qoa_logger.exception(f"Error {type(e)} when querying training metrics") + return {"Error": "Unable to get training metrics"} + + +def training_loss(model): + try: + if isinstance(model, tf.keras.Sequential): + return {"Training Loss": model.history.history["loss"]} + else: + return None + except Exception as e: + qoa_logger.exception(f"Error {type(e)} when querying training loss") + return {"Error": "Unable to get training loss"} + + +def training_val_accuracy(model): + try: + if isinstance(model, tf.keras.Sequential): + return {"Evaluate Accuracy": model.history.history["val_accuracy"]} + else: + return None + except Exception as e: + qoa_logger.exception( + f"Error {type(e)} when querying training validation accuracy" + ) + traceback.print_exception(*sys.exc_info()) + return {"Error": "Unable to get validation accuracy"} + + +def training_accuracy(model): + try: + if isinstance(model, tf.keras.Sequential): + return {"Evaluate Loss": model.history.history["val_loss"]} + else: + return None + except Exception as e: + qoa_logger.exception(f"Error {type(e)} when querying training validation loss") + return {"Error": "Unable to get validation loss"} + + +def classification_confidence(data, score=True): + try: + if score: + return {"Confidence": 100 * np.max(data)} + elif is_numpyarray(data): + scores = tf.nn.softmax(data[0]) + return {"Confidence": 100 * np.max(scores)} + else: + return {"Error": f"Unsupported data: {type(data)}"} + except Exception as e: + qoa_logger.exception(f"Error {type(e)} in extracting classification confidence") + return {"Error": "Unable to get classification confidence"} diff --git a/src/qoa4ml/probes/probe.py b/src/qoa4ml/probes/probe.py new file mode 100644 index 0000000..b6b9a41 --- /dev/null +++ b/src/qoa4ml/probes/probe.py @@ -0,0 +1,64 @@ +import math +import time +from abc import ABC, abstractmethod +from typing import Any + +from ..config.configs import ClientInfo, ProbeConfig +from ..connector.base_connector import BaseConnector +from ..utils.qoa_utils import make_folder +from ..utils.repeated_timer import RepeatedTimer + + +class Probe(ABC): + def __init__( + self, config: ProbeConfig, connector: BaseConnector, client_info: ClientInfo + ) -> None: + self.config = config + self.client_info = client_info + self.frequency = self.config.frequency + self.monitoring_interval = 1.0 / self.frequency + self.execution_flag = False + self.report_thread = None + self.log_latency_flag = self.config.log_latency_flag + if self.log_latency_flag: + self.latency_logging_path = config.latency_logging_path + make_folder(self.latency_logging_path) + self.max_latency = 0.0 + self.connector = connector + + @abstractmethod + def create_report(self) -> Any: + pass + + def reporting(self): + report = self.create_report() + self.connector.send_report(report) + + def start_reporting(self, background: bool = True): + """ + background = False for blocking reporting + """ + self.execution_flag = True + current_time = time.time() + time.sleep(math.ceil(current_time) - current_time) + self.timer = RepeatedTimer(self.monitoring_interval, self.reporting) + if not background: + self.timer.thread.join() + + def stop_reporting(self): + if not hasattr(self, "timer"): + raise RuntimeError("Can't stop reporting when the timer is not created yet") + self.timer.stop() + + def send_report(self, report): + start = time.time() + self.connector.send_report(report) + if self.log_latency_flag and self.latency_logging_path: + self.write_log( + (time.time() - start) * 1000, + self.latency_logging_path + "report_latency.txt", + ) + + def write_log(self, latency, filepath: str): + with open(filepath, "a", encoding="utf-8") as file: + file.write(str(latency) + "\n") diff --git a/src/qoa4ml/probes/process_monitoring_probe.py b/src/qoa4ml/probes/process_monitoring_probe.py new file mode 100644 index 0000000..9a5fb50 --- /dev/null +++ b/src/qoa4ml/probes/process_monitoring_probe.py @@ -0,0 +1,101 @@ +import json +import logging +import os +import time +from typing import TYPE_CHECKING + +import lazy_import +import psutil + +from ..config.configs import ClientInfo, ProcessProbeConfig +from ..connector.base_connector import BaseConnector +from ..lang.datamodel_enum import EnvironmentEnum +from ..utils.qoa_utils import ( + convert_to_mbyte, + get_process_allowed_cpus, + get_process_allowed_memory, + report_proc_child_cpu, + report_proc_mem, +) +from .probe import Probe + +if TYPE_CHECKING: + from ..reports import resources_report_model +else: + resources_report_model = lazy_import.lazy_module( + "qoa4ml.reports.resources_report_model" + ) +logging.basicConfig( + format="%(asctime)s:%(levelname)s -- %(message)s", level=logging.INFO +) + + +class ProcessMonitoringProbe(Probe): + def __init__( + self, + config: ProcessProbeConfig, + connector: BaseConnector, + client_info: ClientInfo, + ) -> None: + super().__init__(config, connector, client_info) + self.config = config + if self.config.pid is None: + self.pid = os.getpid() + else: + self.pid = self.config.pid + if not psutil.pid_exists(self.pid): + raise RuntimeError(f"No process with pid {self.pid}") + self.environment = config.environment + self.process = psutil.Process(self.pid) + if self.config.require_register: + self.obs_service_url = self.config.obs_service_url + if self.environment == EnvironmentEnum.hpc: + self.metadata = {"pid": str(self.pid), "user": self.process.username()} + else: + self.metadata = resources_report_model.ProcessMetadata( + pid=str(self.pid), user=self.process.username(), client_info=client_info + ) + + def get_cpu_usage(self): + process_usage = report_proc_child_cpu(self.process) + return process_usage + + def get_mem_usage(self): + data = report_proc_mem(self.process) + return { + "rss": {"value": convert_to_mbyte(data["rss"]), "unit": "Mb"}, + "vms": {"value": convert_to_mbyte(data["vms"]), "unit": "Mb"}, + } + + def create_report(self): + timestamp = time.time() + cpu_usage = self.get_cpu_usage() + mem_usage = self.get_mem_usage() + allowed_cpu_list = get_process_allowed_cpus() + allowed_memory_size = get_process_allowed_memory() + report = None + if self.environment == EnvironmentEnum.hpc: + report = { + "type": "process", + "metadata": { + "pid": str(self.pid), + "user": self.process.username(), + "allowed_cpu_list": str(allowed_cpu_list), + "allowed_memory_size": str(allowed_memory_size), + }, + "timestamp": round(timestamp), + "cpu": { + "usage": cpu_usage, + }, + "mem": { + "usage": mem_usage, + }, + } + else: + report = resources_report_model.ProcessReport( + metadata=self.metadata, + timestamp=round(timestamp), + cpu=resources_report_model.ResourceReport(usage=cpu_usage), + mem=resources_report_model.ResourceReport(usage=mem_usage), + ).model_dump() + return json.dumps(report) diff --git a/src/qoa4ml/probes/system_monitoring_probe.py b/src/qoa4ml/probes/system_monitoring_probe.py new file mode 100644 index 0000000..732f2bb --- /dev/null +++ b/src/qoa4ml/probes/system_monitoring_probe.py @@ -0,0 +1,112 @@ +import json +import socket +import time +from typing import TYPE_CHECKING + +import lazy_import + +from ..config.configs import ClientInfo, SystemProbeConfig +from ..connector.base_connector import BaseConnector +from ..lang.datamodel_enum import EnvironmentEnum +from ..utils.gpu_utils import get_sys_gpu_metadata, get_sys_gpu_usage +from ..utils.qoa_utils import ( + convert_to_gbyte, + convert_to_mbyte, + get_sys_cpu_metadata, + get_sys_cpu_util, + get_sys_mem, +) +from .probe import Probe + +if TYPE_CHECKING: + from ..reports import resources_report_model +else: + resources_report_model = lazy_import.lazy_module( + "qoa4ml.reports.resources_report_model" + ) + + +class SystemMonitoringProbe(Probe): + def __init__( + self, + config: SystemProbeConfig, + connector: BaseConnector, + client_info: ClientInfo, + ) -> None: + super().__init__(config, connector, client_info) + self.config = config + if self.config.node_name is None: + self.node_name = socket.gethostname().split(".")[0] + else: + self.node_name = self.config.node_name + if self.config.require_register: + self.obs_service_url = self.config.obs_service_url + self.environment = config.environment + self.cpu_metadata = self.get_cpu_metadata() + self.gpu_metadata = self.get_gpu_metadata() + self.mem_metadata = self.get_mem_metadata() + self.metadata = {"node_name": self.node_name} + + def get_cpu_metadata(self): + return get_sys_cpu_metadata() + + def get_cpu_usage(self): + value = get_sys_cpu_util() + return {"value": value, "unit": "percentage"} + + def get_gpu_metadata(self): + report = get_sys_gpu_metadata() + return report + + def get_gpu_usage(self): + report = get_sys_gpu_usage() + return report + + def get_mem_metadata(self): + mem = get_sys_mem() + return {"mem": {"capacity": convert_to_gbyte(mem["total"]), "unit": "Gb"}} + + def get_mem_usage(self): + mem = get_sys_mem() + return {"value": convert_to_mbyte(mem["used"]), "unit": "Mb"} + + def create_report(self): + timestamp = time.time() + cpu_usage = self.get_cpu_usage() + gpu_usage = self.get_gpu_usage() + mem_usage = self.get_mem_usage() + if self.environment == EnvironmentEnum.hpc: + report = { + "type": "system", + "metadata": {**self.metadata}, + "timestamp": round(timestamp), + "cpu": { + "metadata": self.cpu_metadata, + "usage": cpu_usage, + }, + "gpu": { + "metadata": self.gpu_metadata, + "usage": gpu_usage, + }, + "mem": { + "metadata": self.mem_metadata, + "usage": mem_usage, + }, + } + else: + report = resources_report_model.SystemReport( + metadata=resources_report_model.SystemMetadata( + node_name=self.node_name, client_info=self.client_info + ), + timestamp=round(timestamp), + cpu=resources_report_model.ResourceReport( + metadata=self.cpu_metadata, usage=cpu_usage + ), + gpu=resources_report_model.ResourceReport( + metadata=self.gpu_metadata, usage=gpu_usage + ), + mem=resources_report_model.ResourceReport( + metadata=self.mem_metadata, usage=mem_usage + ), + ).model_dump() + return json.dumps(report) diff --git a/src/qoa4ml/qoa_client.py b/src/qoa4ml/qoa_client.py new file mode 100644 index 0000000..a242109 --- /dev/null +++ b/src/qoa4ml/qoa_client.py @@ -0,0 +1,362 @@ +import copy +import os +import sys +import threading +import time +import traceback +import uuid +from threading import Thread +from typing import Any, Generic, Optional, TypeVar, Union + +import requests +from pydantic import create_model + +# from .connector.mqtt_connector import Mqtt_Connector +from .config.configs import ( + AMQPConnectorConfig, + ClientConfig, + ClientInfo, + ConnectorConfig, + DebugConnectorConfig, + DockerProbeConfig, + ProbeConfig, + ProcessProbeConfig, + SystemProbeConfig, +) +from .connector.amqp_connector import AmqpConnector +from .connector.base_connector import BaseConnector +from .connector.debug_connector import DebugConnector +from .lang.common_models import Metric +from .lang.datamodel_enum import ( + MetricNameEnum, + ReportTypeEnum, + ServiceAPIEnum, + ServiceMetricNameEnum, +) +from .probes.docker_monitoring_probe import DockerMonitoringProbe +from .probes.probe import Probe +from .probes.process_monitoring_probe import ProcessMonitoringProbe +from .probes.system_monitoring_probe import SystemMonitoringProbe +from .reports.abstract_report import AbstractReport +from .reports.ml_reports import MLReport +from .utils.logger import qoa_logger +from .utils.qoa_utils import ( + load_config, + set_logger_level, +) + +headers = {"Content-Type": "application/json"} + + +# NOTE: T must be a subtype of AbstractReport +T = TypeVar("T", bound=AbstractReport) + + +class QoaClient(Generic[T]): + def __init__( + self, + # NOTE: use text, number, enum + report_cls: type[T] = MLReport, + config_dict: Optional[dict] = None, + config_path: Optional[str] = None, + registration_url: Optional[str] = None, + logging_level=2, + ): + set_logger_level(logging_level) + + if config_dict is not None: + self.configuration = ClientConfig.model_validate(config_dict) + + if config_path is not None: + self.configuration = ClientConfig.model_validate(load_config(config_path)) + + self.client_config = self.configuration.client + self.connector_list: dict[str, BaseConnector] = {} + self.timer_flag = False + self.functionality = self.client_config.functionality + self.stage_id = self.client_config.stage_id + self.process_monitor_flag = 0 + self.inference_flag = False + + self.instance_id = os.environ.get("INSTANCE_ID") + if self.instance_id: + qoa_logger.info("Setting instance_id with INSTANCE_ID") + self.instance_id = uuid.UUID(self.instance_id) + elif self.configuration.client.instance_id: + qoa_logger.info("Setting instance_id with client.instance_id") + self.instance_id = uuid.UUID(self.configuration.client.instance_id) + else: + self.instance_id = str(uuid.uuid4()) + + self.client_config.instance_id = str(self.instance_id) + self.client_config.id = str(uuid.uuid4()) + self.qoa_report = report_cls(self.client_config) + if self.configuration.connector: + # init connectors offline if it's specified + connector_conf = self.configuration.connector + try: + for connector in connector_conf: + self.connector_list[connector.name] = self.init_connector(connector) + except Exception as e: + qoa_logger.exception( + f"Error {type(e)} when configuring connector in QoaClient" + ) + elif registration_url or self.configuration.registration_url: + # init connectors using configuration received from monitoring service, if it's specified + try: + if registration_url: + registration_data = self.registration(registration_url) + else: + # NOTE: logically true + registration_data = self.registration( + self.configuration.registration_url + ) + json_data = registration_data.json() + response = json_data["response"] + if isinstance(response, dict): + connector_configs = response["connector"] + if isinstance(connector_configs, dict): + connector_config = ConnectorConfig(**connector_configs) + self.connector_list[connector_config.name] = ( + self.init_connector(connector_config) + ) + elif isinstance(connector_configs, list): + for config in connector_configs: + connector_config = ConnectorConfig(**config) + self.connector_list[connector_config.name] = ( + self.init_connector(connector_config) + ) + else: + qoa_logger.warning( + "Unable to register Qoa Client: connector configuration must be dictionary" + ) + except Exception as e: + qoa_logger.exception(f"Error {type(e)} when registering QoA client") + traceback.print_exception(*sys.exc_info()) + + if not self.connector_list: + qoa_logger.warning("No connector initiated") + self.default_connector = None + else: + # Set default connector for sending monitoring data if not specify + self.default_connector = next(iter(self.connector_list.keys())) + + self.probes_list = None + if self.configuration.probes: + self.probes_list = self.init_probes( + self.configuration.probes, self.configuration.client + ) + # lock report to guarantee consistency + self.lock = threading.Lock() + + def registration(self, url: str): + # get connector configuration by registering with the monitoring service + + return requests.request( + "POST", url, headers=headers, data=self.client_config.json() + ) + + def init_probes( + self, probe_config_list: list[ProbeConfig], client_info: ClientInfo + ): + probes_list: list[Probe] = [] + # TODO: each probe can have their own connector + if self.default_connector: + selected_connector = self.connector_list[self.default_connector] + else: + qoa_logger.warning("No default connector, using debug connector") + selected_connector = DebugConnector() + + for probe_config in probe_config_list: + # TODO: can be simplify for less duplicate code + if isinstance(probe_config, DockerProbeConfig): + probes_list.append( + DockerMonitoringProbe(probe_config, selected_connector, client_info) + ) + elif isinstance(probe_config, ProcessProbeConfig): + probes_list.append( + ProcessMonitoringProbe( + probe_config, selected_connector, client_info + ) + ) + elif isinstance(probe_config, SystemProbeConfig): + probes_list.append( + SystemMonitoringProbe(probe_config, selected_connector, client_info) + ) + else: + raise ValueError( + f"Probe config type {type(probe_config)} is not supported yet" + ) + return probes_list + + def init_connector(self, configuration: ConnectorConfig) -> BaseConnector: + # init connector from configuration + if configuration.connector_class == ServiceAPIEnum.amqp and isinstance( + configuration.config, AMQPConnectorConfig + ): + return AmqpConnector(configuration.config) + elif configuration.connector_class == ServiceAPIEnum.debug and isinstance( + configuration.config, DebugConnectorConfig + ): + return DebugConnector(configuration.config) + + # TODO: MQTT is both connector and collector + # + # if ( + # configuration.connector_class == ServiceAPIEnum.mqtt + # and type(configuration.config) is MQTTConnectorConfig + # ): + # return Mqtt_Connector(configuration.config) + raise RuntimeError("Connector config is not of correct type") + + def get_client_config(self): + # TODO: what to do exactly? + return self.client_config + + def set_config(self, key, value): + try: + self.client_config.__setattr__(key, value) + except Exception as e: + qoa_logger.exception(f"Error {type(e)} when setConfig in QoA client") + + def observe_metric( + self, + metric_name: MetricNameEnum, + value, + category: int = 0, + description: str = "", + ): + if category == 0: + report_type = ReportTypeEnum.service + elif category == 1: + report_type = ReportTypeEnum.data + elif category == 2: + report_type = ReportTypeEnum.security + else: + raise RuntimeError("Report type not supported") + + self.qoa_report.observe_metric( + report_type, + self.stage_id, + Metric(metric_name=metric_name, records=[value], description=description), + ) + + def timer(self): + if self.timer_flag is False: + self.timer_flag = True + self.timerStart = time.time() + return {} + else: + self.timer_flag = False + response_time = { + "startTime": self.timerStart, + "responseTime": time.time() - self.timerStart, + } + self.observe_metric( + ServiceMetricNameEnum.response_time, response_time, category=0 + ) + return response_time + + def import_previous_report(self, reports: Union[dict, list[dict]]): + if isinstance(reports, list): + for report in reports: + self.qoa_report.process_previous_report(report) + else: + self.qoa_report.process_previous_report(reports) + + def __str__(self): + return self.client_config.model_dump_json() + "\n" + str(self.connector_list) + + def asyn_report(self, body_mess: str, connectors: Optional[list] = None): + self.lock.acquire() + if connectors is None: + # if connectors are not specify, use default + if self.default_connector: + chosen_connector = self.connector_list[self.default_connector] + if isinstance(chosen_connector, AmqpConnector): + chosen_connector.send_report(body_mess, corr_id=str(uuid.uuid4())) + else: + chosen_connector.send_report(body_mess) + else: + qoa_logger.error( + "No default connector, please specify the connector to use" + ) + else: + # iterate connector to send report + # for connector in connectors: + # print(connector) + # Todo: send by multiple connector + pass + + self.lock.release() + + def report( + self, + report: Optional[dict] = None, + connectors: Optional[list] = None, + submit=False, + reset=True, + corr_id=None, + ): + """ + submit=True to submit the report through the default connector + """ + if report is None: + return_report = self.qoa_report.generate_report(reset, corr_id=corr_id) + else: + user_defined_report_model = create_model( + "UserDefinedReportModel", + metadata=(dict, ...), + timestamp=(float, ...), + report=(dict, ...), + ) + return_report = user_defined_report_model( + report=report, + metadata=copy.deepcopy(self.client_config.__dict__), + timestamp=time.time(), + ) + + if submit: + if self.default_connector is not None: + sub_thread = Thread( + target=self.asyn_report, + args=(return_report.model_dump_json(), connectors), + ) + sub_thread.start() + else: + qoa_logger.warning("No connector available") + return return_report.model_dump(mode="json") + + def start_all_probes(self): + """ + Start all probes in the background, will be killed when the main process exited + NOTE: if the probe takes long to report, and the main process exit, no report may be sent + """ + if not self.probes_list: + raise RuntimeError( + "There is no initiated probes, please recheck the config" + ) + for probe in self.probes_list: + probe.start_reporting() + + def stop_all_probes(self): + if not self.probes_list: + raise RuntimeError( + "There is no initiated probes, please recheck the config" + ) + for probe in self.probes_list: + probe.stop_reporting() + + def observe_inference( + self, + inference_value, + ): + self.qoa_report.observe_inference(inference_value) + + def observe_inference_metric( + self, + metric_name: MetricNameEnum, + value: Any, + ): + metric = Metric(metric_name=metric_name, records=[value]) + self.qoa_report.observe_inference_metric(metric) diff --git a/src/qoa4ml/reports/__init__.py b/src/qoa4ml/reports/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/qoa4ml/reports/abstract_report.py b/src/qoa4ml/reports/abstract_report.py new file mode 100644 index 0000000..205cb9c --- /dev/null +++ b/src/qoa4ml/reports/abstract_report.py @@ -0,0 +1,37 @@ +from abc import ABC, abstractmethod +from typing import Optional + +from ..lang.common_models import Metric +from ..reports.ml_report_model import BaseReport + + +class AbstractReport(ABC): + @abstractmethod + def __init__(self, client_config): + pass + + @abstractmethod + def reset(self): + pass + + @abstractmethod + def generate_report( + self, reset: bool = True, corr_id: Optional[str] = None + ) -> BaseReport: + pass + + @abstractmethod + def process_previous_report(self, previous_report_dict: dict): + pass + + @abstractmethod + def observe_metric(self, report_type, stage, metric: Metric): + pass + + @abstractmethod + def observe_inference(self, inference_value): + pass + + @abstractmethod + def observe_inference_metric(self, metric: Metric): + pass diff --git a/src/qoa4ml/reports/general_application_report.py b/src/qoa4ml/reports/general_application_report.py new file mode 100644 index 0000000..3ce064a --- /dev/null +++ b/src/qoa4ml/reports/general_application_report.py @@ -0,0 +1,76 @@ +import copy +import time +from uuid import UUID + +from ..config.configs import ClientInfo +from ..lang.common_models import Metric +from ..lang.datamodel_enum import ReportTypeEnum +from ..reports.ml_report_model import ( + FlattenMetric, + GeneralApplicationReportModel, + MicroserviceInstance, +) +from .abstract_report import AbstractReport + + +class GeneralApplicationReport(AbstractReport): + def __init__(self, client_config: ClientInfo): + self.client_config = copy.deepcopy(client_config) + self.reset() + self.init_time = time.time() + + def reset(self): + self.report = GeneralApplicationReportModel() + + self.execution_instance = MicroserviceInstance( + id=UUID(self.client_config.instance_id), + name=self.client_config.name, + functionality=self.client_config.functionality, + stage=self.client_config.stage_id, + ) + self.previous_reports: list[MicroserviceInstance] = [] + + def process_previous_report(self, previous_report_dict: dict): + previous_report = GeneralApplicationReportModel(**previous_report_dict) + # NOTE: assume that the last metric is observed by the previous instance + self.previous_reports.append(previous_report.metrics[-1].instance) + for metric in previous_report.metrics: + self.report.metrics.append(metric) + + def observe_metric(self, report_type, stage, metric: Metric): + flatten_metric = FlattenMetric( + metric_name=metric.metric_name, + records=metric.records, + unit=metric.unit, + description=metric.description, + stage=stage, + report_type=report_type, + instance=self.execution_instance, + previous_instances=self.previous_reports, + ) + self.report.metrics.append(flatten_metric) + + def observe_inference(self, inference_value): + # TODO: may not be a great idea + flatten_metric = FlattenMetric( + metric_name="Inference", + records=inference_value, + stage=self.client_config.stage_id, + report_type=ReportTypeEnum.ml_specific, + instance=self.execution_instance, + previous_instances=self.previous_reports, + ) + self.report.metrics.append(flatten_metric) + + def observe_inference_metric(self, metric: Metric): + flatten_metric = FlattenMetric( + metric_name=metric.metric_name, + records=metric.records, + unit=metric.unit, + description=metric.description, + stage=self.client_config.stage_id, + report_type=ReportTypeEnum.ml_specific, + instance=self.execution_instance, + previous_instances=self.previous_reports, + ) + self.report.metrics.append(flatten_metric) diff --git a/src/qoa4ml/reports/ml_report_model.py b/src/qoa4ml/reports/ml_report_model.py new file mode 100644 index 0000000..469a26c --- /dev/null +++ b/src/qoa4ml/reports/ml_report_model.py @@ -0,0 +1,83 @@ +from typing import Generic, Optional, TypeVar, Union +from uuid import UUID + +from pydantic import BaseModel + +from ..lang.common_models import Metric +from ..lang.datamodel_enum import MetricNameEnum, ReportTypeEnum + + +class MicroserviceInstance(BaseModel): + id: UUID + name: str + functionality: str = "" + stage: Optional[str] = None + # stage: Optional[StageNameEnum] = None + + +class StageReport(BaseModel): + # name: StageNameEnum + name: str + metrics: dict[MetricNameEnum, dict[UUID, Metric]] + + +class InferenceInstance(BaseModel): + inference_id: UUID + instance_id: UUID + functionality: str + metrics: list[Metric] = [] + prediction: Optional[Union[dict, float]] = None + + +InstanceType = TypeVar("InstanceType") + + +class LinkedInstance(BaseModel, Generic[InstanceType]): + previous: list[InstanceType] = [] + instance: InstanceType + + +class ExecutionGraph(BaseModel): + end_point: Optional[MicroserviceInstance] = None + linked_list: dict[UUID, LinkedInstance[MicroserviceInstance]] + + +class InferenceGraph(BaseModel): + end_point: Optional[InferenceInstance] = None + linked_list: dict[UUID, LinkedInstance[InferenceInstance]] = {} + + +# NOTE: use dict so that we know which stage to add metric to + + +class BaseReport(BaseModel): + metadata: dict = {} + + +class FlattenMetric(Metric): + stage: str + report_type: ReportTypeEnum + instance: MicroserviceInstance + previous_instances: list[MicroserviceInstance] + + +class GeneralApplicationReportModel(BaseReport): + metrics: list[FlattenMetric] = [] + + +class MlQualityReport(BaseModel): + service: dict[str, StageReport] = {} + data: dict[str, StageReport] = {} + + +class GeneralMlInferenceReport(MlQualityReport, BaseReport): + ml_inference: dict[str, InferenceInstance] = {} + + +class EnsembleInferenceReport(MlQualityReport): + ml_specific: Optional[InferenceGraph] = None + + +class RoheReportModel(BaseReport): + inference_report: Optional[EnsembleInferenceReport] = None + execution_graph: Optional[ExecutionGraph] = None diff --git a/src/qoa4ml/reports/ml_reports.py b/src/qoa4ml/reports/ml_reports.py new file mode 100644 index 0000000..73f3596 --- /dev/null +++ b/src/qoa4ml/reports/ml_reports.py @@ -0,0 +1,132 @@ +import copy +import time +from typing import Optional +from uuid import UUID, uuid4 + +from ..config.configs import ClientInfo +from ..lang.common_models import Metric +from ..lang.datamodel_enum import ReportTypeEnum +from ..reports.ml_report_model import ( + BaseReport, + GeneralMlInferenceReport, + InferenceInstance, + StageReport, +) +from .abstract_report import AbstractReport + + +class MLReport(AbstractReport): + def __init__(self, client_config: ClientInfo): + self.client_config = copy.deepcopy(client_config) + self.reset() + self.init_time = time.time() + + def reset(self): + self.previous_report: list[GeneralMlInferenceReport] = [] + self.report = GeneralMlInferenceReport() + + def combine_stage_report( + self, + current_stage_report: dict[str, StageReport], + previous_stage_report: dict[str, StageReport], + ): + combined_stage_report: dict[str, StageReport] = {} + for stage_name, stage_report in previous_stage_report.items(): + new_stage_report = StageReport(name=stage_name, metrics={}) + if stage_name not in current_stage_report: + current_stage_report[stage_name] = StageReport( + name=stage_name, metrics={} + ) + for metric_name, instance_report_dict in stage_report.metrics.items(): + if metric_name not in current_stage_report[stage_name].metrics: + current_stage_report[stage_name].metrics[metric_name] = {} + new_stage_report.metrics[metric_name] = { + **current_stage_report[stage_name].metrics[metric_name], + **instance_report_dict, + } + combined_stage_report[stage_name] = new_stage_report + return combined_stage_report + + def process_previous_report(self, previous_report_dict: dict): + previous_report = GeneralMlInferenceReport(**previous_report_dict) + self.previous_report.append(previous_report) + + # NOTE: service quality report + self.report.service = self.combine_stage_report( + self.report.service, previous_report.service + ) + + # NOTE: data quality report + self.report.data = self.combine_stage_report( + self.report.data, previous_report.data + ) + # NOTE: ml inference report + # + self.report.ml_inference |= previous_report.ml_inference + + def observe_metric(self, report_type, stage, metric: Metric): + if stage == "": + raise ValueError("Stage name can't be empty") + if report_type == ReportTypeEnum.service: + if stage not in self.report.service: + self.report.service[stage] = StageReport(name=stage, metrics={}) + if metric.metric_name not in self.report.service[stage].metrics: + self.report.service[stage].metrics[metric.metric_name] = {} + + self.report.service[stage].metrics[metric.metric_name] |= { + UUID(self.client_config.instance_id): metric + } + + elif report_type == ReportTypeEnum.data: + if stage not in self.report.data: + self.report.data[stage] = StageReport(name=stage, metrics={}) + if metric.metric_name not in self.report.data[stage].metrics: + self.report.data[stage].metrics[metric.metric_name] = {} + + self.report.data[stage].metrics[metric.metric_name] |= { + UUID(self.client_config.instance_id): metric + } + else: + raise ValueError(f"Can't handle report type {report_type}") + + def observe_inference(self, inference_value): + if self.client_config.instance_id in self.report.ml_inference: + raise RuntimeWarning( + "Inference existed, will override the existing inference" + ) + self.report.ml_inference[self.client_config.instance_id] = InferenceInstance( + inference_id=uuid4(), + instance_id=UUID(self.client_config.instance_id), + functionality=self.client_config.functionality, + prediction=inference_value, + ) + + def observe_inference_metric(self, metric: Metric): + if self.client_config.instance_id in self.report.ml_inference: + self.report.ml_inference[self.client_config.instance_id].metrics.append( + metric + ) + else: + self.report.ml_inference[self.client_config.instance_id] = ( + InferenceInstance( + inference_id=uuid4(), + instance_id=UUID(self.client_config.instance_id), + functionality=self.client_config.functionality, + metrics=[metric], + ) + ) + + def generate_report( + self, reset: bool = True, corr_id: Optional[str] = None + ) -> BaseReport: + self.report.metadata["client_config"] = copy.deepcopy(self.client_config) + self.report.metadata["timestamp"] = time.time() + if corr_id is not None: + self.report.metadata["corr_id"] = corr_id + self.report.metadata["runtime"] = ( + self.report.metadata["timestamp"] - self.init_time + ) + report = copy.deepcopy(self.report) + if reset: + self.reset() + return report diff --git a/src/qoa4ml/reports/resources_report_model.py b/src/qoa4ml/reports/resources_report_model.py new file mode 100644 index 0000000..13f6fc6 --- /dev/null +++ b/src/qoa4ml/reports/resources_report_model.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +from pydantic import BaseModel + +from ..config.configs import ClientInfo + + +class BaseMetadata(BaseModel): + client_info: ClientInfo | None = None + + +class ProcessMetadata(BaseMetadata): + pid: str + user: str + + +class SystemMetadata(BaseMetadata): + node_name: str + model: str | None = None + + +class ResourceReport(BaseModel): + metadata: dict | None = None + usage: dict + + +class ProcessReport(BaseModel): + metadata: ProcessMetadata + timestamp: float + cpu: ResourceReport + gpu: ResourceReport | None = None + mem: ResourceReport + + +class SystemReport(BaseModel): + metadata: SystemMetadata + timestamp: float + cpu: ResourceReport + gpu: ResourceReport | None = None + mem: ResourceReport + + +class DockerContainerMetadata(BaseMetadata): + id: str + image: str + + +class DockerContainerReport(BaseModel): + metadata: DockerContainerMetadata + timestamp: float + cpu: ResourceReport + gpu: ResourceReport | None = None + mem: ResourceReport + + +class DockerReport(BaseModel): + metadata: ClientInfo + timestamp: float + container_reports: list[DockerContainerReport] = [] diff --git a/src/qoa4ml/reports/rohe_reports.py b/src/qoa4ml/reports/rohe_reports.py new file mode 100644 index 0000000..39ff3f1 --- /dev/null +++ b/src/qoa4ml/reports/rohe_reports.py @@ -0,0 +1,241 @@ +import copy +import time +from typing import Optional +from uuid import UUID, uuid4 + +from ..config.configs import ClientInfo +from ..lang.common_models import Metric +from ..lang.datamodel_enum import ReportTypeEnum +from ..reports.abstract_report import AbstractReport +from ..reports.ml_report_model import ( + EnsembleInferenceReport, + ExecutionGraph, + InferenceGraph, + InferenceInstance, + LinkedInstance, + MicroserviceInstance, + RoheReportModel, + StageReport, +) +from ..utils.qoa_utils import load_config + + +class RoheReport(AbstractReport): + def __init__(self, client_config: ClientInfo): + self.client_config = copy.deepcopy(client_config) + self.reset() + self.init_time = time.time() + + # if file_path: + # self.import_report_from_file(file_path) + + def reset(self): + self.previous_report: list[RoheReportModel] = [] + self.inference_report = EnsembleInferenceReport() + self.execution_graph = ExecutionGraph(linked_list={}) + self.report = RoheReportModel() + self.previous_microservice_instance = [] + self.execution_instance = MicroserviceInstance( + id=UUID(self.client_config.instance_id), + name=self.client_config.name, + functionality=self.client_config.functionality, + stage=self.client_config.stage_id, + ) + + def import_report_from_file(self, file_path: str): + report = load_config(file_path) + self.inference_report = EnsembleInferenceReport(**report["inference_report"]) + self.execution_graph = ExecutionGraph(**report["execution_graph"]) + self.report = RoheReportModel( + inference_report=self.inference_report, execution_graph=self.execution_graph + ) + + def combine_stage_report( + self, + current_stage_report: dict[str, StageReport], + previous_stage_report: dict[str, StageReport], + ): + combined_stage_report: dict[str, StageReport] = {} + for stage_name, stage_report in previous_stage_report.items(): + new_stage_report = StageReport(name=stage_name, metrics={}) + if stage_name not in current_stage_report: + current_stage_report[stage_name] = StageReport( + name=stage_name, metrics={} + ) + for metric_name, instance_report_dict in stage_report.metrics.items(): + if metric_name not in current_stage_report[stage_name].metrics: + current_stage_report[stage_name].metrics[metric_name] = {} + new_stage_report.metrics[metric_name] = { + **current_stage_report[stage_name].metrics[metric_name], + **instance_report_dict, + } + combined_stage_report[stage_name] = new_stage_report + return combined_stage_report + + def process_previous_report(self, previous_report_dict: dict): + previous_report = RoheReportModel(**previous_report_dict) + self.previous_report.append(previous_report) + if not previous_report.inference_report or not previous_report.execution_graph: + raise ValueError("Can't process empty previous report") + + # NOTE: service quality report + self.inference_report.service = self.combine_stage_report( + self.inference_report.service, previous_report.inference_report.service + ) + + # NOTE: data quality report + self.inference_report.data = self.combine_stage_report( + self.inference_report.data, previous_report.inference_report.data + ) + + # NOTE: ml-specific quality report + # debug(previous_report.inference_report.ml_specific) + if not self.inference_report.ml_specific: + if ( + previous_report.inference_report.ml_specific + and previous_report.inference_report.ml_specific.end_point + and previous_report.inference_report.ml_specific.linked_list + ): + self.inference_report.ml_specific = ( + previous_report.inference_report.ml_specific + ) + end_point = InferenceInstance( + inference_id=uuid4(), + functionality=self.client_config.functionality, + instance_id=self.execution_instance.id, + ) + self.inference_report.ml_specific.end_point = end_point + self.inference_report.ml_specific.linked_list |= { + end_point.instance_id: LinkedInstance[InferenceInstance]( + instance=end_point, + previous=[ + previous_report.inference_report.ml_specific.end_point + ], + ) + } + + elif ( + previous_report.inference_report.ml_specific + and previous_report.inference_report.ml_specific.end_point + and previous_report.inference_report.ml_specific.linked_list + and self.inference_report.ml_specific.end_point + ): + self.inference_report.ml_specific.linked_list |= ( + previous_report.inference_report.ml_specific.linked_list + ) + current_end_point = self.inference_report.ml_specific.end_point + previous_end_point = previous_report.inference_report.ml_specific.end_point + self.inference_report.ml_specific.linked_list[ + current_end_point.instance_id + ].previous.append(previous_end_point) + # NOTE: execution graph + if not self.execution_graph: + self.execution_graph = previous_report.execution_graph + else: + self.execution_graph.linked_list.update( + previous_report.execution_graph.linked_list + ) + self.previous_microservice_instance.append( + previous_report.execution_graph.end_point + ) + self.report = RoheReportModel( + inference_report=self.inference_report, execution_graph=self.execution_graph + ) + + def build_execution_graph(self): + end_point = LinkedInstance( + instance=self.execution_instance, + previous=list(self.previous_microservice_instance), + ) + self.execution_graph.linked_list[end_point.instance.id] = end_point + self.execution_graph.end_point = end_point.instance + self.report.execution_graph = self.execution_graph + + def observe_metric(self, report_type: ReportTypeEnum, stage: str, metric: Metric): + if stage == "": + raise ValueError("Stage name can't be empty") + if report_type == ReportTypeEnum.service: + if stage not in self.inference_report.service: + self.inference_report.service[stage] = StageReport( + name=stage, metrics={} + ) + if metric.metric_name not in self.inference_report.service[stage].metrics: + self.inference_report.service[stage].metrics[metric.metric_name] = {} + + self.inference_report.service[stage].metrics[metric.metric_name] |= { + UUID(self.client_config.instance_id): metric + } + + elif report_type == ReportTypeEnum.data: + if stage not in self.inference_report.data: + self.inference_report.data[stage] = StageReport(name=stage, metrics={}) + if metric.metric_name not in self.inference_report.data[stage].metrics: + self.inference_report.data[stage].metrics[metric.metric_name] = {} + + self.inference_report.data[stage].metrics[metric.metric_name] |= { + UUID(self.client_config.instance_id): metric + } + else: + raise ValueError(f"Can't handle report type {report_type}") + self.report.inference_report = self.inference_report + + def observe_inference(self, inference_value): + if ( + self.inference_report.ml_specific + and self.inference_report.ml_specific.end_point + ): + self.inference_report.ml_specific.end_point.prediction = inference_value + else: + self.inference_report.ml_specific = InferenceGraph() + end_point = InferenceInstance( + inference_id=uuid4(), + instance_id=self.execution_instance.id, + functionality=self.client_config.functionality, + prediction=inference_value, + ) + self.inference_report.ml_specific.end_point = end_point + self.inference_report.ml_specific.linked_list |= { + end_point.instance_id: LinkedInstance[InferenceInstance]( + instance=end_point, + previous=[], + ) + } + + def observe_inference_metric( + self, + metric: Metric, + ): + if ( + self.inference_report.ml_specific + and self.inference_report.ml_specific.end_point + ): + self.inference_report.ml_specific.end_point.metrics.append(metric) + else: + if self.inference_report.ml_specific is None: + self.inference_report.ml_specific = InferenceGraph() + if self.inference_report.ml_specific.end_point is None: + end_point = InferenceInstance( + inference_id=uuid4(), + instance_id=self.execution_instance.id, + functionality=self.client_config.functionality, + ) + + self.inference_report.ml_specific.end_point = end_point + self.inference_report.ml_specific.linked_list[end_point.instance_id] = ( + LinkedInstance[InferenceInstance](instance=end_point) + ) + self.inference_report.ml_specific.end_point.metrics.append(metric) + + def generate_report(self, reset: bool = True, corr_id: Optional[str] = None): + self.build_execution_graph() + self.report.metadata["client_config"] = copy.deepcopy(self.client_config) + self.report.metadata["timestamp"] = time.time() + if corr_id is not None: + self.report.metadata["corr_id"] = corr_id + self.report.metadata["runtime"] = ( + self.report.metadata["timestamp"] - self.init_time + ) + report = copy.deepcopy(self.report) + if reset: + self.reset() + return report diff --git a/src/qoa4ml/utils/__init__.py b/src/qoa4ml/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/qoa4ml/utils/docker_util.py b/src/qoa4ml/utils/docker_util.py new file mode 100644 index 0000000..e5e3fd2 --- /dev/null +++ b/src/qoa4ml/utils/docker_util.py @@ -0,0 +1,85 @@ +import asyncio +import time + +import docker +from docker.models.containers import Container + +from qoa4ml.reports.resources_report_model import ( + DockerContainerMetadata, + DockerContainerReport, + ResourceReport, +) + +BYTES_TO_MB = 1024.0 * 1024.0 + + +async def get_container_stats( + container: Container, +) -> DockerContainerReport: + container_stats = {} + container_stats["cpu"] = {} + container_stats["mem"] = {} + + timestamp = time.time() + stat = await asyncio.to_thread(container.stats, stream=False) + + usage_delta = ( + stat["cpu_stats"]["cpu_usage"]["total_usage"] + - stat["precpu_stats"]["cpu_usage"]["total_usage"] + ) + system_delta = ( + stat["cpu_stats"]["system_cpu_usage"] - stat["precpu_stats"]["system_cpu_usage"] + ) + len_cpu = stat["cpu_stats"]["online_cpus"] + cpu_percentage = (usage_delta / system_delta) * len_cpu * 100 + container_stats["cpu"] = {"cpu_percentage": cpu_percentage} + + # Bytes to Mb + container_stats["mem"] = { + "memory_usage": stat["memory_stats"]["usage"] / BYTES_TO_MB + } + + container_id = container.id + container_image = container.image + if not container_id or not container_image: + raise RuntimeError("container id or container image is None") + return DockerContainerReport( + metadata=DockerContainerMetadata( + id=container_id, image=container_image.tags[0] + ), + timestamp=timestamp, + cpu=ResourceReport(usage={"cpu_percentage": cpu_percentage}), + mem=ResourceReport( + usage={"memory_usage": stat["memory_stats"]["usage"] / BYTES_TO_MB} + ), + ) + + +async def get_all_container_stats(client): + tasks = [] + for container in client.containers.list(): + if container.status == "running": + tasks.append(get_container_stats(container)) + results = await asyncio.gather(*tasks) + return results + + +async def get_container_list_stats( + client: docker.DockerClient, container_list: list[str] +): + tasks = [] + for container_name in container_list: + container = client.containers.get(container_name) + if container.status == "running": + tasks.append(get_container_stats(container)) + results = await asyncio.gather(*tasks) + return results + + +def get_docker_stats( + client: docker.DockerClient, container_list: list[str] +) -> list[DockerContainerReport]: + if container_list: + return asyncio.run(get_container_list_stats(client, container_list)) + + return asyncio.run(get_all_container_stats(client)) diff --git a/src/qoa4ml/utils/gpu_utils.py b/src/qoa4ml/utils/gpu_utils.py new file mode 100644 index 0000000..f2697f2 --- /dev/null +++ b/src/qoa4ml/utils/gpu_utils.py @@ -0,0 +1,57 @@ +from .pynvml_forked import ( + nvmlDeviceGetCount, + nvmlDeviceGetHandleByIndex, + nvmlDeviceGetMaxClockInfo, + nvmlDeviceGetMemoryInfo, + nvmlDeviceGetNumGpuCores, + nvmlDeviceGetUtilizationRates, + nvmlInit, +) + +HAS_NVIDIA_GPU = True +try: + nvmlInit() +except Exception: + HAS_NVIDIA_GPU = False + + +def get_sys_gpu_usage(): + usage = {} + if not HAS_NVIDIA_GPU: + return {} + try: + device_count = nvmlDeviceGetCount() + except Exception: + nvmlInit() + device_count = nvmlDeviceGetCount() + + for i in range(device_count): + handle = nvmlDeviceGetHandleByIndex(i) + util = nvmlDeviceGetUtilizationRates(handle) + mem = nvmlDeviceGetMemoryInfo(handle) + usage[f"device_{i+1}_core"] = util.gpu + usage[f"device_{i+1}_mem"] = mem.used / 1024.0 / 1024 + return usage + + +def get_sys_gpu_metadata(): + metadata = {} + if not HAS_NVIDIA_GPU: + return {} + try: + device_count = nvmlDeviceGetCount() + except Exception: + nvmlInit() + device_count = nvmlDeviceGetCount() + + for i in range(device_count): + handle = nvmlDeviceGetHandleByIndex(i) + cores = nvmlDeviceGetNumGpuCores(handle) + clock = nvmlDeviceGetMaxClockInfo(handle, 0) + mem = nvmlDeviceGetMemoryInfo(handle) + metadata[f"device_{i+1}"] = { + "frequency": {"value": clock, "unit": "MHz"}, + "core": cores, + "mem": {"capacity": mem.total / 1024.0 / 1024, "unit": "Gb"}, + } + return metadata diff --git a/src/qoa4ml/utils/jetson_utils.py b/src/qoa4ml/utils/jetson_utils.py new file mode 100644 index 0000000..6fc7fee --- /dev/null +++ b/src/qoa4ml/utils/jetson_utils.py @@ -0,0 +1,113 @@ +import os +import re + +from .logger import qoa_logger + +DEFAULT_IGPU_PATH = "/sys/class/devfreq/" + +MEMINFO_REG = re.compile(r"(?P.+):\s+(?P.+) (?P.)B") + + +def cat(path): + with open(path) as f: + return f.readline().rstrip("\x00") + + +def find_igpu(): + # Check if exist a integrated gpu + # if not os.path.exists("/dev/nvhost-gpu") and not os.path.exists("/dev/nvhost-power-gpu"): + # return [] + igpu = {} + if not os.path.isdir(DEFAULT_IGPU_PATH): + qoa_logger.error(f"Folder {DEFAULT_IGPU_PATH} doesn't exist") + return igpu + for item in os.listdir(DEFAULT_IGPU_PATH): + item_path = os.path.join(DEFAULT_IGPU_PATH, item) + if os.path.isfile(item_path) or os.path.islink(item_path): + # Check name device + name_path = f"{item_path}/device/of_node/name" + if os.path.isfile(name_path): + # Decode name + name = cat(name_path) + # Check if gpu + if name in ["gv11b", "gp10b", "ga10b", "gpu"]: + # Extract real path GPU device + path = os.path.realpath(os.path.join(item_path, "device")) + frq_path = os.path.realpath(item_path) + igpu[name] = { + "type": "integrated", + "path": path, + "frq_path": frq_path, + } + qoa_logger.info(f'GPU "{name}" status in {path}') + qoa_logger.info(f'GPU "{name}" frq in {frq_path}') + path_railgate = os.path.join(path, "railgate_enable") + if os.path.isfile(path_railgate): + igpu[name]["railgate"] = path_railgate + path_3d_scaling = os.path.join(path, "enable_3d_scaling") + if os.path.isfile(path_3d_scaling): + igpu[name]["3d_scaling"] = path_3d_scaling + else: + qoa_logger.debug(f"Skipped {name}") + return igpu + + +def find_dgpu(): + pass + + +def get_gpu_status(self): + gpu_list = {} + # Read iGPU frequency + for name, data in self._gpu_list.items(): + # Initialize GPU status + gpu = {"type": data["type"]} + if gpu["type"] == "integrated": + if os.access(data["path"] + "/load", os.R_OK): + with open(data["path"] + "/load") as f: + gpu["load"] = float(f.read()) / 10.0 + elif gpu["type"] == "discrete": + qoa_logger.info("TODO discrete GPU") + gpu_list[name] = gpu + return gpu_list + + +def meminfo(): + # Read meminfo and decode + # https://access.redhat.com/solutions/406773 + status_mem = {} + with open("/proc/meminfo") as fp: + for line in fp: + # Search line + match = re.search(MEMINFO_REG, line.strip()) + if match: + parsed_line = match.groupdict() + status_mem[parsed_line["key"]] = int(parsed_line["value"]) + return status_mem + + +def get_memory_status(mem_total): + memory = {} + status_mem = meminfo() + # NOTE: Read memory use + # NvMapMemUsed: Is the shared memory between CPU and GPU + # This key is always available on Jetson (not really always) + ram_shared = status_mem.get("NvMapMemUsed", 0) + if mem_total: + ram_shared = mem_total if ram_shared == 0 else ram_shared + ram_total = status_mem.get("MemTotal", 0) + ram_free = status_mem.get("MemFree", 0) + ram_buffer = status_mem.get("Buffers", 0) + ram_cached = status_mem.get("Cached", 0) + ram_sreclaimable = status_mem.get("SReclaimable", 0) + total_used_memory = ram_total - ram_free + cached_memory = ram_cached + ram_sreclaimable # + ram_Shmem + memory["RAM"] = { + "tot": ram_total, + "used": total_used_memory - (ram_buffer + ram_cached), + "free": ram_free, + "buffers": ram_buffer, + "cached": cached_memory, + "shared": ram_shared, + } + return memory diff --git a/src/qoa4ml/utils/logger.py b/src/qoa4ml/utils/logger.py new file mode 100644 index 0000000..1b8cd39 --- /dev/null +++ b/src/qoa4ml/utils/logger.py @@ -0,0 +1,12 @@ +import logging + +qoa_logger = logging.getLogger(f"qoa4ml---{__name__}") + +c_handler = logging.StreamHandler() +c_handler.setLevel(logging.INFO) +c_format = logging.Formatter( + "%(module)s : %(asctime)s : %(levelname)s - %(message)s", + # datefmt="%d-%b-%y %H:%M:%S", +) +c_handler.setFormatter(c_format) +qoa_logger.addHandler(c_handler) diff --git a/src/qoa4ml/utils/pynvml_forked.py b/src/qoa4ml/utils/pynvml_forked.py new file mode 100644 index 0000000..9b61349 --- /dev/null +++ b/src/qoa4ml/utils/pynvml_forked.py @@ -0,0 +1,1889 @@ +##### +# Copyright (c) 2011-2015, NVIDIA Corporation. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the NVIDIA Corporation nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +# THE POSSIBILITY OF SUCH DAMAGE. +##### + +import os +import string +import sys +import threading + +## +# Python bindings for the NVML library +## +from ctypes import * + +## C Type mappings ## +## Enums +_nvmlEnableState_t = c_uint +NVML_FEATURE_DISABLED = 0 +NVML_FEATURE_ENABLED = 1 + +_nvmlBrandType_t = c_uint +NVML_BRAND_UNKNOWN = 0 +NVML_BRAND_QUADRO = 1 +NVML_BRAND_TESLA = 2 +NVML_BRAND_NVS = 3 +NVML_BRAND_GRID = 4 +NVML_BRAND_GEFORCE = 5 +NVML_BRAND_COUNT = 6 + +_nvmlTemperatureThresholds_t = c_uint +NVML_TEMPERATURE_THRESHOLD_SHUTDOWN = 0 +NVML_TEMPERATURE_THRESHOLD_SLOWDOWN = 1 +NVML_TEMPERATURE_THRESHOLD_COUNT = 1 + +_nvmlTemperatureSensors_t = c_uint +NVML_TEMPERATURE_GPU = 0 +NVML_TEMPERATURE_COUNT = 1 + +_nvmlComputeMode_t = c_uint +NVML_COMPUTEMODE_DEFAULT = 0 +NVML_COMPUTEMODE_EXCLUSIVE_THREAD = 1 +NVML_COMPUTEMODE_PROHIBITED = 2 +NVML_COMPUTEMODE_EXCLUSIVE_PROCESS = 3 +NVML_COMPUTEMODE_COUNT = 4 + +_nvmlMemoryLocation_t = c_uint +NVML_MEMORY_LOCATION_L1_CACHE = 0 +NVML_MEMORY_LOCATION_L2_CACHE = 1 +NVML_MEMORY_LOCATION_DEVICE_MEMORY = 2 +NVML_MEMORY_LOCATION_REGISTER_FILE = 3 +NVML_MEMORY_LOCATION_TEXTURE_MEMORY = 4 +NVML_MEMORY_LOCATION_COUNT = 5 + +# These are deprecated, instead use _nvmlMemoryErrorType_t +_nvmlEccBitType_t = c_uint +NVML_SINGLE_BIT_ECC = 0 +NVML_DOUBLE_BIT_ECC = 1 +NVML_ECC_ERROR_TYPE_COUNT = 2 + +_nvmlEccCounterType_t = c_uint +NVML_VOLATILE_ECC = 0 +NVML_AGGREGATE_ECC = 1 +NVML_ECC_COUNTER_TYPE_COUNT = 2 + +_nvmlMemoryErrorType_t = c_uint +NVML_MEMORY_ERROR_TYPE_CORRECTED = 0 +NVML_MEMORY_ERROR_TYPE_UNCORRECTED = 1 +NVML_MEMORY_ERROR_TYPE_COUNT = 2 + +_nvmlClockType_t = c_uint +NVML_CLOCK_GRAPHICS = 0 +NVML_CLOCK_SM = 1 +NVML_CLOCK_MEM = 2 +NVML_CLOCK_COUNT = 3 + +_nvmlDriverModel_t = c_uint +NVML_DRIVER_WDDM = 0 +NVML_DRIVER_WDM = 1 + +_nvmlPstates_t = c_uint +NVML_PSTATE_0 = 0 +NVML_PSTATE_1 = 1 +NVML_PSTATE_2 = 2 +NVML_PSTATE_3 = 3 +NVML_PSTATE_4 = 4 +NVML_PSTATE_5 = 5 +NVML_PSTATE_6 = 6 +NVML_PSTATE_7 = 7 +NVML_PSTATE_8 = 8 +NVML_PSTATE_9 = 9 +NVML_PSTATE_10 = 10 +NVML_PSTATE_11 = 11 +NVML_PSTATE_12 = 12 +NVML_PSTATE_13 = 13 +NVML_PSTATE_14 = 14 +NVML_PSTATE_15 = 15 +NVML_PSTATE_UNKNOWN = 32 + +_nvmlInforomObject_t = c_uint +NVML_INFOROM_OEM = 0 +NVML_INFOROM_ECC = 1 +NVML_INFOROM_POWER = 2 +NVML_INFOROM_COUNT = 3 + +_nvmlReturn_t = c_uint +NVML_SUCCESS = 0 +NVML_ERROR_UNINITIALIZED = 1 +NVML_ERROR_INVALID_ARGUMENT = 2 +NVML_ERROR_NOT_SUPPORTED = 3 +NVML_ERROR_NO_PERMISSION = 4 +NVML_ERROR_ALREADY_INITIALIZED = 5 +NVML_ERROR_NOT_FOUND = 6 +NVML_ERROR_INSUFFICIENT_SIZE = 7 +NVML_ERROR_INSUFFICIENT_POWER = 8 +NVML_ERROR_DRIVER_NOT_LOADED = 9 +NVML_ERROR_TIMEOUT = 10 +NVML_ERROR_IRQ_ISSUE = 11 +NVML_ERROR_LIBRARY_NOT_FOUND = 12 +NVML_ERROR_FUNCTION_NOT_FOUND = 13 +NVML_ERROR_CORRUPTED_INFOROM = 14 +NVML_ERROR_GPU_IS_LOST = 15 +NVML_ERROR_RESET_REQUIRED = 16 +NVML_ERROR_OPERATING_SYSTEM = 17 +NVML_ERROR_LIB_RM_VERSION_MISMATCH = 18 +NVML_ERROR_UNKNOWN = 999 + +_nvmlFanState_t = c_uint +NVML_FAN_NORMAL = 0 +NVML_FAN_FAILED = 1 + +_nvmlLedColor_t = c_uint +NVML_LED_COLOR_GREEN = 0 +NVML_LED_COLOR_AMBER = 1 + +_nvmlGpuOperationMode_t = c_uint +NVML_GOM_ALL_ON = 0 +NVML_GOM_COMPUTE = 1 +NVML_GOM_LOW_DP = 2 + +_nvmlPageRetirementCause_t = c_uint +NVML_PAGE_RETIREMENT_CAUSE_DOUBLE_BIT_ECC_ERROR = 0 +NVML_PAGE_RETIREMENT_CAUSE_MULTIPLE_SINGLE_BIT_ECC_ERRORS = 1 +NVML_PAGE_RETIREMENT_CAUSE_COUNT = 2 + +_nvmlRestrictedAPI_t = c_uint +NVML_RESTRICTED_API_SET_APPLICATION_CLOCKS = 0 +NVML_RESTRICTED_API_SET_AUTO_BOOSTED_CLOCKS = 1 +NVML_RESTRICTED_API_COUNT = 2 + +_nvmlBridgeChipType_t = c_uint +NVML_BRIDGE_CHIP_PLX = 0 +NVML_BRIDGE_CHIP_BRO4 = 1 +NVML_MAX_PHYSICAL_BRIDGE = 128 + +_nvmlValueType_t = c_uint +NVML_VALUE_TYPE_DOUBLE = 0 +NVML_VALUE_TYPE_UNSIGNED_INT = 1 +NVML_VALUE_TYPE_UNSIGNED_LONG = 2 +NVML_VALUE_TYPE_UNSIGNED_LONG_LONG = 3 +NVML_VALUE_TYPE_COUNT = 4 + +_nvmlPerfPolicyType_t = c_uint +NVML_PERF_POLICY_POWER = 0 +NVML_PERF_POLICY_THERMAL = 1 +NVML_PERF_POLICY_COUNT = 2 + +_nvmlSamplingType_t = c_uint +NVML_TOTAL_POWER_SAMPLES = 0 +NVML_GPU_UTILIZATION_SAMPLES = 1 +NVML_MEMORY_UTILIZATION_SAMPLES = 2 +NVML_ENC_UTILIZATION_SAMPLES = 3 +NVML_DEC_UTILIZATION_SAMPLES = 4 +NVML_PROCESSOR_CLK_SAMPLES = 5 +NVML_MEMORY_CLK_SAMPLES = 6 +NVML_SAMPLINGTYPE_COUNT = 7 + +_nvmlPcieUtilCounter_t = c_uint +NVML_PCIE_UTIL_TX_BYTES = 0 +NVML_PCIE_UTIL_RX_BYTES = 1 +NVML_PCIE_UTIL_COUNT = 2 + +_nvmlGpuTopologyLevel_t = c_uint +NVML_TOPOLOGY_INTERNAL = 0 +NVML_TOPOLOGY_SINGLE = 10 +NVML_TOPOLOGY_MULTIPLE = 20 +NVML_TOPOLOGY_HOSTBRIDGE = 30 +NVML_TOPOLOGY_CPU = 40 +NVML_TOPOLOGY_SYSTEM = 50 + +# C preprocessor defined values +nvmlFlagDefault = 0 +nvmlFlagForce = 1 + +# buffer size +NVML_DEVICE_INFOROM_VERSION_BUFFER_SIZE = 16 +NVML_DEVICE_UUID_BUFFER_SIZE = 80 +NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE = 81 +NVML_SYSTEM_NVML_VERSION_BUFFER_SIZE = 80 +NVML_DEVICE_NAME_BUFFER_SIZE = 64 +NVML_DEVICE_SERIAL_BUFFER_SIZE = 30 +NVML_DEVICE_VBIOS_VERSION_BUFFER_SIZE = 32 +NVML_DEVICE_PCI_BUS_ID_BUFFER_SIZE = 16 + +NVML_VALUE_NOT_AVAILABLE_ulonglong = c_ulonglong(-1) +NVML_VALUE_NOT_AVAILABLE_uint = c_uint(-1) + +## Lib loading ## +nvmlLib = None +libLoadLock = threading.Lock() +_nvmlLib_refcount = 0 # Incremented on each nvmlInit and decremented on nvmlShutdown + + +## Error Checking ## +class NVMLError(Exception): + _valClassMapping = dict() + # List of currently known error codes + _errcode_to_string = { + NVML_ERROR_UNINITIALIZED: "Uninitialized", + NVML_ERROR_INVALID_ARGUMENT: "Invalid Argument", + NVML_ERROR_NOT_SUPPORTED: "Not Supported", + NVML_ERROR_NO_PERMISSION: "Insufficient Permissions", + NVML_ERROR_ALREADY_INITIALIZED: "Already Initialized", + NVML_ERROR_NOT_FOUND: "Not Found", + NVML_ERROR_INSUFFICIENT_SIZE: "Insufficient Size", + NVML_ERROR_INSUFFICIENT_POWER: "Insufficient External Power", + NVML_ERROR_DRIVER_NOT_LOADED: "Driver Not Loaded", + NVML_ERROR_TIMEOUT: "Timeout", + NVML_ERROR_IRQ_ISSUE: "Interrupt Request Issue", + NVML_ERROR_LIBRARY_NOT_FOUND: "NVML Shared Library Not Found", + NVML_ERROR_FUNCTION_NOT_FOUND: "Function Not Found", + NVML_ERROR_CORRUPTED_INFOROM: "Corrupted infoROM", + NVML_ERROR_GPU_IS_LOST: "GPU is lost", + NVML_ERROR_RESET_REQUIRED: "GPU requires restart", + NVML_ERROR_OPERATING_SYSTEM: "The operating system has blocked the request.", + NVML_ERROR_LIB_RM_VERSION_MISMATCH: "RM has detected an NVML/RM version mismatch.", + NVML_ERROR_UNKNOWN: "Unknown Error", + } + + def __new__(typ, value): + """ + Maps value to a proper subclass of NVMLError. + See _extractNVMLErrorsAsClasses function for more details + """ + if typ == NVMLError: + typ = NVMLError._valClassMapping.get(value, typ) + obj = Exception.__new__(typ) + obj.value = value + return obj + + def __str__(self): + try: + if self.value not in NVMLError._errcode_to_string: + NVMLError._errcode_to_string[self.value] = str( + nvmlErrorString(self.value) + ) + return NVMLError._errcode_to_string[self.value] + except NVMLError_Uninitialized: + return "NVML Error with code %d" % self.value + + def __eq__(self, other): + return self.value == other.value + + +def _extractNVMLErrorsAsClasses(): + """ + Generates a hierarchy of classes on top of NVMLError class. + + Each NVML Error gets a new NVMLError subclass. This way try,except blocks can filter appropriate + exceptions more easily. + + NVMLError is a parent class. Each NVML_ERROR_* gets it's own subclass. + e.g. NVML_ERROR_ALREADY_INITIALIZED will be turned into NVMLError_AlreadyInitialized + """ + this_module = sys.modules[__name__] + nvmlErrorsNames = filter(lambda x: x.startswith("NVML_ERROR_"), dir(this_module)) + for err_name in nvmlErrorsNames: + # e.g. Turn NVML_ERROR_ALREADY_INITIALIZED into NVMLError_AlreadyInitialized + class_name = "NVMLError_" + string.capwords( + err_name.replace("NVML_ERROR_", ""), "_" + ).replace("_", "") + err_val = getattr(this_module, err_name) + + def gen_new(val): + def new(typ): + obj = NVMLError.__new__(typ, val) + return obj + + return new + + new_error_class = type(class_name, (NVMLError,), {"__new__": gen_new(err_val)}) + new_error_class.__module__ = __name__ + setattr(this_module, class_name, new_error_class) + NVMLError._valClassMapping[err_val] = new_error_class + + +_extractNVMLErrorsAsClasses() + + +def _nvmlCheckReturn(ret): + if ret != NVML_SUCCESS: + raise NVMLError(ret) + return ret + + +## Function access ## +_nvmlGetFunctionPointer_cache = ( + dict() +) # function pointers are cached to prevent unnecessary libLoadLock locking + + +def _nvmlGetFunctionPointer(name): + global nvmlLib + + if name in _nvmlGetFunctionPointer_cache: + return _nvmlGetFunctionPointer_cache[name] + + libLoadLock.acquire() + try: + # ensure library was loaded + if nvmlLib == None: + raise NVMLError(NVML_ERROR_UNINITIALIZED) + try: + _nvmlGetFunctionPointer_cache[name] = getattr(nvmlLib, name) + return _nvmlGetFunctionPointer_cache[name] + except AttributeError: + raise NVMLError(NVML_ERROR_FUNCTION_NOT_FOUND) + finally: + # lock is always freed + libLoadLock.release() + + +## Alternative object +# Allows the object to be printed +# Allows mismatched types to be assigned +# - like None when the Structure variant requires c_uint +class nvmlFriendlyObject: + def __init__(self, dictionary): + for x in dictionary: + setattr(self, x, dictionary[x]) + + def __str__(self): + return self.__dict__.__str__() + + +def nvmlStructToFriendlyObject(struct): + d = {} + for x in struct._fields_: + key = x[0] + value = getattr(struct, key) + d[key] = value + obj = nvmlFriendlyObject(d) + return obj + + +# pack the object so it can be passed to the NVML library +def nvmlFriendlyObjectToStruct(obj, model): + for x in model._fields_: + key = x[0] + value = obj.__dict__[key] + setattr(model, key, value) + return model + + +## Unit structures +class struct_c_nvmlUnit_t(Structure): + pass # opaque handle + + +c_nvmlUnit_t = POINTER(struct_c_nvmlUnit_t) + + +class _PrintableStructure(Structure): + """ + Abstract class that produces nicer __str__ output than ctypes.Structure. + e.g. instead of: + >>> print str(obj) + + this class will print + class_name(field_name: formatted_value, field_name: formatted_value) + + _fmt_ dictionary of -> + e.g. class that has _field_ 'hex_value', c_uint could be formatted with + _fmt_ = {"hex_value" : "%08X"} + to produce nicer output. + Default formatting string for all fields can be set with key "" like: + _fmt_ = {"" : "%d MHz"} # e.g all values are numbers in MHz. + If not set it's assumed to be just "%s" + + Exact format of returned str from this class is subject to change in the future. + """ + + _fmt_ = {} + + def __str__(self): + result = [] + for x in self._fields_: + key = x[0] + value = getattr(self, key) + fmt = "%s" + if key in self._fmt_: + fmt = self._fmt_[key] + elif "" in self._fmt_: + fmt = self._fmt_[""] + result.append(("%s: " + fmt) % (key, value)) + return self.__class__.__name__ + "(" + string.join(result, ", ") + ")" + + +class c_nvmlUnitInfo_t(_PrintableStructure): + _fields_ = [ + ("name", c_char * 96), + ("id", c_char * 96), + ("serial", c_char * 96), + ("firmwareVersion", c_char * 96), + ] + + +class c_nvmlLedState_t(_PrintableStructure): + _fields_ = [ + ("cause", c_char * 256), + ("color", _nvmlLedColor_t), + ] + + +class c_nvmlPSUInfo_t(_PrintableStructure): + _fields_ = [ + ("state", c_char * 256), + ("current", c_uint), + ("voltage", c_uint), + ("power", c_uint), + ] + + +class c_nvmlUnitFanInfo_t(_PrintableStructure): + _fields_ = [ + ("speed", c_uint), + ("state", _nvmlFanState_t), + ] + + +class c_nvmlUnitFanSpeeds_t(_PrintableStructure): + _fields_ = [("fans", c_nvmlUnitFanInfo_t * 24), ("count", c_uint)] + + +## Device structures +class struct_c_nvmlDevice_t(Structure): + pass # opaque handle + + +c_nvmlDevice_t = POINTER(struct_c_nvmlDevice_t) + + +class nvmlPciInfo_t(_PrintableStructure): + _fields_ = [ + ("busId", c_char * 16), + ("domain", c_uint), + ("bus", c_uint), + ("device", c_uint), + ("pciDeviceId", c_uint), + # Added in 2.285 + ("pciSubSystemId", c_uint), + ("reserved0", c_uint), + ("reserved1", c_uint), + ("reserved2", c_uint), + ("reserved3", c_uint), + ] + _fmt_ = { + "domain": "0x%04X", + "bus": "0x%02X", + "device": "0x%02X", + "pciDeviceId": "0x%08X", + "pciSubSystemId": "0x%08X", + } + + +class c_nvmlMemory_t(_PrintableStructure): + _fields_ = [ + ("total", c_ulonglong), + ("free", c_ulonglong), + ("used", c_ulonglong), + ] + _fmt_ = {"": "%d B"} + + +class c_nvmlBAR1Memory_t(_PrintableStructure): + _fields_ = [ + ("bar1Total", c_ulonglong), + ("bar1Free", c_ulonglong), + ("bar1Used", c_ulonglong), + ] + _fmt_ = {"": "%d B"} + + +# On Windows with the WDDM driver, usedGpuMemory is reported as None +# Code that processes this structure should check for None, I.E. +# +# if (info.usedGpuMemory == None): +# # TODO handle the error +# pass +# else: +# print("Using %d MiB of memory" % (info.usedGpuMemory / 1024 / 1024)) +# +# See NVML documentation for more information +class c_nvmlProcessInfo_t(_PrintableStructure): + _fields_ = [ + ("pid", c_uint), + ("usedGpuMemory", c_ulonglong), + ] + _fmt_ = {"usedGpuMemory": "%d B"} + + +class c_nvmlBridgeChipInfo_t(_PrintableStructure): + _fields_ = [ + ("type", _nvmlBridgeChipType_t), + ("fwVersion", c_uint), + ] + + +class c_nvmlBridgeChipHierarchy_t(_PrintableStructure): + _fields_ = [ + ("bridgeCount", c_uint), + ("bridgeChipInfo", c_nvmlBridgeChipInfo_t * 128), + ] + + +class c_nvmlEccErrorCounts_t(_PrintableStructure): + _fields_ = [ + ("l1Cache", c_ulonglong), + ("l2Cache", c_ulonglong), + ("deviceMemory", c_ulonglong), + ("registerFile", c_ulonglong), + ] + + +class c_nvmlUtilization_t(_PrintableStructure): + _fields_ = [ + ("gpu", c_uint), + ("memory", c_uint), + ] + _fmt_ = {"": "%d %%"} + + +# Added in 2.285 +class c_nvmlHwbcEntry_t(_PrintableStructure): + _fields_ = [ + ("hwbcId", c_uint), + ("firmwareVersion", c_char * 32), + ] + + +class c_nvmlValue_t(Union): + _fields_ = [ + ("dVal", c_double), + ("uiVal", c_uint), + ("ulVal", c_ulong), + ("ullVal", c_ulonglong), + ] + + +class c_nvmlSample_t(_PrintableStructure): + _fields_ = [ + ("timeStamp", c_ulonglong), + ("sampleValue", c_nvmlValue_t), + ] + + +class c_nvmlViolationTime_t(_PrintableStructure): + _fields_ = [ + ("referenceTime", c_ulonglong), + ("violationTime", c_ulonglong), + ] + + +## Event structures +class struct_c_nvmlEventSet_t(Structure): + pass # opaque handle + + +c_nvmlEventSet_t = POINTER(struct_c_nvmlEventSet_t) + +nvmlEventTypeSingleBitEccError = 0x0000000000000001 +nvmlEventTypeDoubleBitEccError = 0x0000000000000002 +nvmlEventTypePState = 0x0000000000000004 +nvmlEventTypeXidCriticalError = 0x0000000000000008 +nvmlEventTypeClock = 0x0000000000000010 +nvmlEventTypeNone = 0x0000000000000000 +nvmlEventTypeAll = ( + nvmlEventTypeNone + | nvmlEventTypeSingleBitEccError + | nvmlEventTypeDoubleBitEccError + | nvmlEventTypePState + | nvmlEventTypeClock + | nvmlEventTypeXidCriticalError +) + +## Clock Throttle Reasons defines +nvmlClocksThrottleReasonGpuIdle = 0x0000000000000001 +nvmlClocksThrottleReasonApplicationsClocksSetting = 0x0000000000000002 +nvmlClocksThrottleReasonUserDefinedClocks = nvmlClocksThrottleReasonApplicationsClocksSetting # deprecated, use nvmlClocksThrottleReasonApplicationsClocksSetting +nvmlClocksThrottleReasonSwPowerCap = 0x0000000000000004 +nvmlClocksThrottleReasonHwSlowdown = 0x0000000000000008 +nvmlClocksThrottleReasonUnknown = 0x8000000000000000 +nvmlClocksThrottleReasonNone = 0x0000000000000000 +nvmlClocksThrottleReasonAll = ( + nvmlClocksThrottleReasonNone + | nvmlClocksThrottleReasonGpuIdle + | nvmlClocksThrottleReasonApplicationsClocksSetting + | nvmlClocksThrottleReasonSwPowerCap + | nvmlClocksThrottleReasonHwSlowdown + | nvmlClocksThrottleReasonUnknown +) + + +class c_nvmlEventData_t(_PrintableStructure): + _fields_ = [ + ("device", c_nvmlDevice_t), + ("eventType", c_ulonglong), + ("eventData", c_ulonglong), + ] + _fmt_ = {"eventType": "0x%08X"} + + +class c_nvmlAccountingStats_t(_PrintableStructure): + _fields_ = [ + ("gpuUtilization", c_uint), + ("memoryUtilization", c_uint), + ("maxMemoryUsage", c_ulonglong), + ("time", c_ulonglong), + ("startTime", c_ulonglong), + ("isRunning", c_uint), + ("reserved", c_uint * 5), + ] + + +## C function wrappers ## +def nvmlInit(): + _LoadNvmlLibrary() + + # + # Initialize the library + # + fn = _nvmlGetFunctionPointer("nvmlInit_v2") + ret = fn() + _nvmlCheckReturn(ret) + + # Atomically update refcount + global _nvmlLib_refcount + libLoadLock.acquire() + _nvmlLib_refcount += 1 + libLoadLock.release() + + +def _LoadNvmlLibrary(): + """ + Load the library if it isn't loaded already + """ + global nvmlLib + + if nvmlLib == None: + # lock to ensure only one caller loads the library + libLoadLock.acquire() + + try: + # ensure the library still isn't loaded + if nvmlLib == None: + try: + if sys.platform[:3] == "win": + # cdecl calling convention + # load nvml.dll from %ProgramFiles%/NVIDIA Corporation/NVSMI/nvml.dll + nvmlLib = CDLL( + os.path.join( + os.getenv("ProgramFiles", "C:/Program Files"), + "NVIDIA Corporation/NVSMI/nvml.dll", + ) + ) + else: + # assume linux + nvmlLib = CDLL("libnvidia-ml.so.1") + except OSError: + _nvmlCheckReturn(NVML_ERROR_LIBRARY_NOT_FOUND) + if nvmlLib == None: + _nvmlCheckReturn(NVML_ERROR_LIBRARY_NOT_FOUND) + finally: + # lock is always freed + libLoadLock.release() + + +def nvmlShutdown(): + # + # Leave the library loaded, but shutdown the interface + # + fn = _nvmlGetFunctionPointer("nvmlShutdown") + ret = fn() + _nvmlCheckReturn(ret) + + # Atomically update refcount + global _nvmlLib_refcount + libLoadLock.acquire() + if 0 < _nvmlLib_refcount: + _nvmlLib_refcount -= 1 + libLoadLock.release() + + +# Added in 2.285 +def nvmlErrorString(result): + fn = _nvmlGetFunctionPointer("nvmlErrorString") + fn.restype = c_char_p # otherwise return is an int + ret = fn(result) + return ret + + +# Added in 2.285 +def nvmlSystemGetNVMLVersion(): + c_version = create_string_buffer(NVML_SYSTEM_NVML_VERSION_BUFFER_SIZE) + fn = _nvmlGetFunctionPointer("nvmlSystemGetNVMLVersion") + ret = fn(c_version, c_uint(NVML_SYSTEM_NVML_VERSION_BUFFER_SIZE)) + _nvmlCheckReturn(ret) + return c_version.value + + +# Added in 2.285 +def nvmlSystemGetProcessName(pid): + c_name = create_string_buffer(1024) + fn = _nvmlGetFunctionPointer("nvmlSystemGetProcessName") + ret = fn(c_uint(pid), c_name, c_uint(1024)) + _nvmlCheckReturn(ret) + return c_name.value + + +def nvmlSystemGetDriverVersion(): + c_version = create_string_buffer(NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE) + fn = _nvmlGetFunctionPointer("nvmlSystemGetDriverVersion") + ret = fn(c_version, c_uint(NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE)) + _nvmlCheckReturn(ret) + return c_version.value + + +# Added in 2.285 +def nvmlSystemGetHicVersion(): + c_count = c_uint(0) + hics = None + fn = _nvmlGetFunctionPointer("nvmlSystemGetHicVersion") + + # get the count + ret = fn(byref(c_count), None) + + # this should only fail with insufficient size + if (ret != NVML_SUCCESS) and (ret != NVML_ERROR_INSUFFICIENT_SIZE): + raise NVMLError(ret) + + # if there are no hics + if c_count.value == 0: + return [] + + hic_array = c_nvmlHwbcEntry_t * c_count.value + hics = hic_array() + ret = fn(byref(c_count), hics) + _nvmlCheckReturn(ret) + return hics + + +## Unit get functions +def nvmlUnitGetCount(): + c_count = c_uint() + fn = _nvmlGetFunctionPointer("nvmlUnitGetCount") + ret = fn(byref(c_count)) + _nvmlCheckReturn(ret) + return c_count.value + + +def nvmlUnitGetHandleByIndex(index): + c_index = c_uint(index) + unit = c_nvmlUnit_t() + fn = _nvmlGetFunctionPointer("nvmlUnitGetHandleByIndex") + ret = fn(c_index, byref(unit)) + _nvmlCheckReturn(ret) + return unit + + +def nvmlUnitGetUnitInfo(unit): + c_info = c_nvmlUnitInfo_t() + fn = _nvmlGetFunctionPointer("nvmlUnitGetUnitInfo") + ret = fn(unit, byref(c_info)) + _nvmlCheckReturn(ret) + return c_info + + +def nvmlUnitGetLedState(unit): + c_state = c_nvmlLedState_t() + fn = _nvmlGetFunctionPointer("nvmlUnitGetLedState") + ret = fn(unit, byref(c_state)) + _nvmlCheckReturn(ret) + return c_state + + +def nvmlUnitGetPsuInfo(unit): + c_info = c_nvmlPSUInfo_t() + fn = _nvmlGetFunctionPointer("nvmlUnitGetPsuInfo") + ret = fn(unit, byref(c_info)) + _nvmlCheckReturn(ret) + return c_info + + +def nvmlUnitGetTemperature(unit, type): + c_temp = c_uint() + fn = _nvmlGetFunctionPointer("nvmlUnitGetTemperature") + ret = fn(unit, c_uint(type), byref(c_temp)) + _nvmlCheckReturn(ret) + return c_temp.value + + +def nvmlUnitGetFanSpeedInfo(unit): + c_speeds = c_nvmlUnitFanSpeeds_t() + fn = _nvmlGetFunctionPointer("nvmlUnitGetFanSpeedInfo") + ret = fn(unit, byref(c_speeds)) + _nvmlCheckReturn(ret) + return c_speeds + + +# added to API +def nvmlUnitGetDeviceCount(unit): + c_count = c_uint(0) + # query the unit to determine device count + fn = _nvmlGetFunctionPointer("nvmlUnitGetDevices") + ret = fn(unit, byref(c_count), None) + if ret == NVML_ERROR_INSUFFICIENT_SIZE: + ret = NVML_SUCCESS + _nvmlCheckReturn(ret) + return c_count.value + + +def nvmlUnitGetDevices(unit): + c_count = c_uint(nvmlUnitGetDeviceCount(unit)) + device_array = c_nvmlDevice_t * c_count.value + c_devices = device_array() + fn = _nvmlGetFunctionPointer("nvmlUnitGetDevices") + ret = fn(unit, byref(c_count), c_devices) + _nvmlCheckReturn(ret) + return c_devices + + +## Device get functions +def nvmlDeviceGetCount(): + c_count = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetCount_v2") + ret = fn(byref(c_count)) + _nvmlCheckReturn(ret) + return c_count.value + + +def nvmlDeviceGetHandleByIndex(index): + c_index = c_uint(index) + device = c_nvmlDevice_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetHandleByIndex_v2") + ret = fn(c_index, byref(device)) + _nvmlCheckReturn(ret) + return device + + +def nvmlDeviceGetHandleBySerial(serial): + c_serial = c_char_p(serial) + device = c_nvmlDevice_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetHandleBySerial") + ret = fn(c_serial, byref(device)) + _nvmlCheckReturn(ret) + return device + + +def nvmlDeviceGetHandleByUUID(uuid): + c_uuid = c_char_p(uuid) + device = c_nvmlDevice_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetHandleByUUID") + ret = fn(c_uuid, byref(device)) + _nvmlCheckReturn(ret) + return device + + +def nvmlDeviceGetHandleByPciBusId(pciBusId): + c_busId = c_char_p(pciBusId) + device = c_nvmlDevice_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetHandleByPciBusId_v2") + ret = fn(c_busId, byref(device)) + _nvmlCheckReturn(ret) + return device + + +def nvmlDeviceGetName(handle): + c_name = create_string_buffer(NVML_DEVICE_NAME_BUFFER_SIZE) + fn = _nvmlGetFunctionPointer("nvmlDeviceGetName") + ret = fn(handle, c_name, c_uint(NVML_DEVICE_NAME_BUFFER_SIZE)) + _nvmlCheckReturn(ret) + return c_name.value + + +def nvmlDeviceGetBoardId(handle): + c_id = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetBoardId") + ret = fn(handle, byref(c_id)) + _nvmlCheckReturn(ret) + return c_id.value + + +def nvmlDeviceGetMultiGpuBoard(handle): + c_multiGpu = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetMultiGpuBoard") + ret = fn(handle, byref(c_multiGpu)) + _nvmlCheckReturn(ret) + return c_multiGpu.value + + +def nvmlDeviceGetBrand(handle): + c_type = _nvmlBrandType_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetBrand") + ret = fn(handle, byref(c_type)) + _nvmlCheckReturn(ret) + return c_type.value + + +def nvmlDeviceGetSerial(handle): + c_serial = create_string_buffer(NVML_DEVICE_SERIAL_BUFFER_SIZE) + fn = _nvmlGetFunctionPointer("nvmlDeviceGetSerial") + ret = fn(handle, c_serial, c_uint(NVML_DEVICE_SERIAL_BUFFER_SIZE)) + _nvmlCheckReturn(ret) + return c_serial.value + + +def nvmlDeviceGetCpuAffinity(handle, cpuSetSize): + affinity_array = c_ulonglong * cpuSetSize + c_affinity = affinity_array() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetCpuAffinity") + ret = fn(handle, cpuSetSize, byref(c_affinity)) + _nvmlCheckReturn(ret) + return c_affinity + + +def nvmlDeviceSetCpuAffinity(handle): + fn = _nvmlGetFunctionPointer("nvmlDeviceSetCpuAffinity") + ret = fn(handle) + _nvmlCheckReturn(ret) + + +def nvmlDeviceClearCpuAffinity(handle): + fn = _nvmlGetFunctionPointer("nvmlDeviceClearCpuAffinity") + ret = fn(handle) + _nvmlCheckReturn(ret) + + +def nvmlDeviceGetMinorNumber(handle): + c_minor_number = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetMinorNumber") + ret = fn(handle, byref(c_minor_number)) + _nvmlCheckReturn(ret) + return c_minor_number.value + + +def nvmlDeviceGetUUID(handle): + c_uuid = create_string_buffer(NVML_DEVICE_UUID_BUFFER_SIZE) + fn = _nvmlGetFunctionPointer("nvmlDeviceGetUUID") + ret = fn(handle, c_uuid, c_uint(NVML_DEVICE_UUID_BUFFER_SIZE)) + _nvmlCheckReturn(ret) + return c_uuid.value + + +def nvmlDeviceGetInforomVersion(handle, infoRomObject): + c_version = create_string_buffer(NVML_DEVICE_INFOROM_VERSION_BUFFER_SIZE) + fn = _nvmlGetFunctionPointer("nvmlDeviceGetInforomVersion") + ret = fn( + handle, + _nvmlInforomObject_t(infoRomObject), + c_version, + c_uint(NVML_DEVICE_INFOROM_VERSION_BUFFER_SIZE), + ) + _nvmlCheckReturn(ret) + return c_version.value + + +# Added in 4.304 +def nvmlDeviceGetInforomImageVersion(handle): + c_version = create_string_buffer(NVML_DEVICE_INFOROM_VERSION_BUFFER_SIZE) + fn = _nvmlGetFunctionPointer("nvmlDeviceGetInforomImageVersion") + ret = fn(handle, c_version, c_uint(NVML_DEVICE_INFOROM_VERSION_BUFFER_SIZE)) + _nvmlCheckReturn(ret) + return c_version.value + + +# Added in 4.304 +def nvmlDeviceGetInforomConfigurationChecksum(handle): + c_checksum = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetInforomConfigurationChecksum") + ret = fn(handle, byref(c_checksum)) + _nvmlCheckReturn(ret) + return c_checksum.value + + +# Added in 4.304 +def nvmlDeviceValidateInforom(handle): + fn = _nvmlGetFunctionPointer("nvmlDeviceValidateInforom") + ret = fn(handle) + _nvmlCheckReturn(ret) + + +def nvmlDeviceGetDisplayMode(handle): + c_mode = _nvmlEnableState_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetDisplayMode") + ret = fn(handle, byref(c_mode)) + _nvmlCheckReturn(ret) + return c_mode.value + + +def nvmlDeviceGetDisplayActive(handle): + c_mode = _nvmlEnableState_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetDisplayActive") + ret = fn(handle, byref(c_mode)) + _nvmlCheckReturn(ret) + return c_mode.value + + +def nvmlDeviceGetPersistenceMode(handle): + c_state = _nvmlEnableState_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetPersistenceMode") + ret = fn(handle, byref(c_state)) + _nvmlCheckReturn(ret) + return c_state.value + + +def nvmlDeviceGetPciInfo(handle): + c_info = nvmlPciInfo_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetPciInfo_v2") + ret = fn(handle, byref(c_info)) + _nvmlCheckReturn(ret) + return c_info + + +def nvmlDeviceGetClockInfo(handle, type): + c_clock = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetClockInfo") + ret = fn(handle, _nvmlClockType_t(type), byref(c_clock)) + _nvmlCheckReturn(ret) + return c_clock.value + + +# Added in 2.285 +def nvmlDeviceGetMaxClockInfo(handle, type): + c_clock = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetMaxClockInfo") + ret = fn(handle, _nvmlClockType_t(type), byref(c_clock)) + _nvmlCheckReturn(ret) + return c_clock.value + + +# Added in 4.304 +def nvmlDeviceGetApplicationsClock(handle, type): + c_clock = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetApplicationsClock") + ret = fn(handle, _nvmlClockType_t(type), byref(c_clock)) + _nvmlCheckReturn(ret) + return c_clock.value + + +# Added in 5.319 +def nvmlDeviceGetDefaultApplicationsClock(handle, type): + c_clock = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetDefaultApplicationsClock") + ret = fn(handle, _nvmlClockType_t(type), byref(c_clock)) + _nvmlCheckReturn(ret) + return c_clock.value + + +# Added in 4.304 +def nvmlDeviceGetSupportedMemoryClocks(handle): + # first call to get the size + c_count = c_uint(0) + fn = _nvmlGetFunctionPointer("nvmlDeviceGetSupportedMemoryClocks") + ret = fn(handle, byref(c_count), None) + + if ret == NVML_SUCCESS: + # special case, no clocks + return [] + elif ret == NVML_ERROR_INSUFFICIENT_SIZE: + # typical case + clocks_array = c_uint * c_count.value + c_clocks = clocks_array() + + # make the call again + ret = fn(handle, byref(c_count), c_clocks) + _nvmlCheckReturn(ret) + + procs = [] + for i in range(c_count.value): + procs.append(c_clocks[i]) + + return procs + else: + # error case + raise NVMLError(ret) + + +# Added in 4.304 +def nvmlDeviceGetSupportedGraphicsClocks(handle, memoryClockMHz): + # first call to get the size + c_count = c_uint(0) + fn = _nvmlGetFunctionPointer("nvmlDeviceGetSupportedGraphicsClocks") + ret = fn(handle, c_uint(memoryClockMHz), byref(c_count), None) + + if ret == NVML_SUCCESS: + # special case, no clocks + return [] + elif ret == NVML_ERROR_INSUFFICIENT_SIZE: + # typical case + clocks_array = c_uint * c_count.value + c_clocks = clocks_array() + + # make the call again + ret = fn(handle, c_uint(memoryClockMHz), byref(c_count), c_clocks) + _nvmlCheckReturn(ret) + + procs = [] + for i in range(c_count.value): + procs.append(c_clocks[i]) + + return procs + else: + # error case + raise NVMLError(ret) + + +def nvmlDeviceGetFanSpeed(handle): + c_speed = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetFanSpeed") + ret = fn(handle, byref(c_speed)) + _nvmlCheckReturn(ret) + return c_speed.value + + +def nvmlDeviceGetTemperature(handle, sensor): + c_temp = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetTemperature") + ret = fn(handle, _nvmlTemperatureSensors_t(sensor), byref(c_temp)) + _nvmlCheckReturn(ret) + return c_temp.value + + +def nvmlDeviceGetTemperatureThreshold(handle, threshold): + c_temp = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetTemperatureThreshold") + ret = fn(handle, _nvmlTemperatureThresholds_t(threshold), byref(c_temp)) + _nvmlCheckReturn(ret) + return c_temp.value + + +# DEPRECATED use nvmlDeviceGetPerformanceState +def nvmlDeviceGetPowerState(handle): + c_pstate = _nvmlPstates_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetPowerState") + ret = fn(handle, byref(c_pstate)) + _nvmlCheckReturn(ret) + return c_pstate.value + + +def nvmlDeviceGetPerformanceState(handle): + c_pstate = _nvmlPstates_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetPerformanceState") + ret = fn(handle, byref(c_pstate)) + _nvmlCheckReturn(ret) + return c_pstate.value + + +def nvmlDeviceGetPowerManagementMode(handle): + c_pcapMode = _nvmlEnableState_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetPowerManagementMode") + ret = fn(handle, byref(c_pcapMode)) + _nvmlCheckReturn(ret) + return c_pcapMode.value + + +def nvmlDeviceGetPowerManagementLimit(handle): + c_limit = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetPowerManagementLimit") + ret = fn(handle, byref(c_limit)) + _nvmlCheckReturn(ret) + return c_limit.value + + +# Added in 4.304 +def nvmlDeviceGetPowerManagementLimitConstraints(handle): + c_minLimit = c_uint() + c_maxLimit = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetPowerManagementLimitConstraints") + ret = fn(handle, byref(c_minLimit), byref(c_maxLimit)) + _nvmlCheckReturn(ret) + return [c_minLimit.value, c_maxLimit.value] + + +# Added in 4.304 +def nvmlDeviceGetPowerManagementDefaultLimit(handle): + c_limit = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetPowerManagementDefaultLimit") + ret = fn(handle, byref(c_limit)) + _nvmlCheckReturn(ret) + return c_limit.value + + +# Added in 331 +def nvmlDeviceGetEnforcedPowerLimit(handle): + c_limit = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetEnforcedPowerLimit") + ret = fn(handle, byref(c_limit)) + _nvmlCheckReturn(ret) + return c_limit.value + + +def nvmlDeviceGetPowerUsage(handle): + c_watts = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetPowerUsage") + ret = fn(handle, byref(c_watts)) + _nvmlCheckReturn(ret) + return c_watts.value + + +# Added in 4.304 +def nvmlDeviceGetGpuOperationMode(handle): + c_currState = _nvmlGpuOperationMode_t() + c_pendingState = _nvmlGpuOperationMode_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetGpuOperationMode") + ret = fn(handle, byref(c_currState), byref(c_pendingState)) + _nvmlCheckReturn(ret) + return [c_currState.value, c_pendingState.value] + + +# Added in 4.304 +def nvmlDeviceGetCurrentGpuOperationMode(handle): + return nvmlDeviceGetGpuOperationMode(handle)[0] + + +# Added in 4.304 +def nvmlDeviceGetPendingGpuOperationMode(handle): + return nvmlDeviceGetGpuOperationMode(handle)[1] + + +def nvmlDeviceGetMemoryInfo(handle): + c_memory = c_nvmlMemory_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetMemoryInfo") + ret = fn(handle, byref(c_memory)) + _nvmlCheckReturn(ret) + return c_memory + + +def nvmlDeviceGetBAR1MemoryInfo(handle): + c_bar1_memory = c_nvmlBAR1Memory_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetBAR1MemoryInfo") + ret = fn(handle, byref(c_bar1_memory)) + _nvmlCheckReturn(ret) + return c_bar1_memory + + +def nvmlDeviceGetComputeMode(handle): + c_mode = _nvmlComputeMode_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetComputeMode") + ret = fn(handle, byref(c_mode)) + _nvmlCheckReturn(ret) + return c_mode.value + + +def nvmlDeviceGetEccMode(handle): + c_currState = _nvmlEnableState_t() + c_pendingState = _nvmlEnableState_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetEccMode") + ret = fn(handle, byref(c_currState), byref(c_pendingState)) + _nvmlCheckReturn(ret) + return [c_currState.value, c_pendingState.value] + + +# added to API +def nvmlDeviceGetCurrentEccMode(handle): + return nvmlDeviceGetEccMode(handle)[0] + + +# added to API +def nvmlDeviceGetPendingEccMode(handle): + return nvmlDeviceGetEccMode(handle)[1] + + +def nvmlDeviceGetTotalEccErrors(handle, errorType, counterType): + c_count = c_ulonglong() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetTotalEccErrors") + ret = fn( + handle, + _nvmlMemoryErrorType_t(errorType), + _nvmlEccCounterType_t(counterType), + byref(c_count), + ) + _nvmlCheckReturn(ret) + return c_count.value + + +# This is deprecated, instead use nvmlDeviceGetMemoryErrorCounter +def nvmlDeviceGetDetailedEccErrors(handle, errorType, counterType): + c_counts = c_nvmlEccErrorCounts_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetDetailedEccErrors") + ret = fn( + handle, + _nvmlMemoryErrorType_t(errorType), + _nvmlEccCounterType_t(counterType), + byref(c_counts), + ) + _nvmlCheckReturn(ret) + return c_counts + + +# Added in 4.304 +def nvmlDeviceGetMemoryErrorCounter(handle, errorType, counterType, locationType): + c_count = c_ulonglong() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetMemoryErrorCounter") + ret = fn( + handle, + _nvmlMemoryErrorType_t(errorType), + _nvmlEccCounterType_t(counterType), + _nvmlMemoryLocation_t(locationType), + byref(c_count), + ) + _nvmlCheckReturn(ret) + return c_count.value + + +def nvmlDeviceGetUtilizationRates(handle): + c_util = c_nvmlUtilization_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetUtilizationRates") + ret = fn(handle, byref(c_util)) + _nvmlCheckReturn(ret) + return c_util + + +def nvmlDeviceGetEncoderUtilization(handle): + c_util = c_uint() + c_samplingPeriod = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetEncoderUtilization") + ret = fn(handle, byref(c_util), byref(c_samplingPeriod)) + _nvmlCheckReturn(ret) + return [c_util.value, c_samplingPeriod.value] + + +def nvmlDeviceGetDecoderUtilization(handle): + c_util = c_uint() + c_samplingPeriod = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetDecoderUtilization") + ret = fn(handle, byref(c_util), byref(c_samplingPeriod)) + _nvmlCheckReturn(ret) + return [c_util.value, c_samplingPeriod.value] + + +def nvmlDeviceGetPcieReplayCounter(handle): + c_replay = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetPcieReplayCounter") + ret = fn(handle, byref(c_replay)) + _nvmlCheckReturn(ret) + return c_replay.value + + +def nvmlDeviceGetDriverModel(handle): + c_currModel = _nvmlDriverModel_t() + c_pendingModel = _nvmlDriverModel_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetDriverModel") + ret = fn(handle, byref(c_currModel), byref(c_pendingModel)) + _nvmlCheckReturn(ret) + return [c_currModel.value, c_pendingModel.value] + + +# added to API +def nvmlDeviceGetCurrentDriverModel(handle): + return nvmlDeviceGetDriverModel(handle)[0] + + +# added to API +def nvmlDeviceGetPendingDriverModel(handle): + return nvmlDeviceGetDriverModel(handle)[1] + + +# Added in 2.285 +def nvmlDeviceGetVbiosVersion(handle): + c_version = create_string_buffer(NVML_DEVICE_VBIOS_VERSION_BUFFER_SIZE) + fn = _nvmlGetFunctionPointer("nvmlDeviceGetVbiosVersion") + ret = fn(handle, c_version, c_uint(NVML_DEVICE_VBIOS_VERSION_BUFFER_SIZE)) + _nvmlCheckReturn(ret) + return c_version.value + + +# Added in 2.285 +def nvmlDeviceGetComputeRunningProcesses(handle): + # first call to get the size + c_count = c_uint(0) + fn = _nvmlGetFunctionPointer("nvmlDeviceGetComputeRunningProcesses") + ret = fn(handle, byref(c_count), None) + + if ret == NVML_SUCCESS: + # special case, no running processes + return [] + elif ret == NVML_ERROR_INSUFFICIENT_SIZE: + # typical case + # oversize the array in case more processes are created + c_count.value = c_count.value * 2 + 5 + proc_array = c_nvmlProcessInfo_t * c_count.value + c_procs = proc_array() + + # make the call again + ret = fn(handle, byref(c_count), c_procs) + _nvmlCheckReturn(ret) + + procs = [] + for i in range(c_count.value): + # use an alternative struct for this object + obj = nvmlStructToFriendlyObject(c_procs[i]) + if obj.usedGpuMemory == NVML_VALUE_NOT_AVAILABLE_ulonglong.value: + # special case for WDDM on Windows, see comment above + obj.usedGpuMemory = None + procs.append(obj) + + return procs + else: + # error case + raise NVMLError(ret) + + +def nvmlDeviceGetGraphicsRunningProcesses(handle): + # first call to get the size + c_count = c_uint(0) + fn = _nvmlGetFunctionPointer("nvmlDeviceGetGraphicsRunningProcesses") + ret = fn(handle, byref(c_count), None) + + if ret == NVML_SUCCESS: + # special case, no running processes + return [] + elif ret == NVML_ERROR_INSUFFICIENT_SIZE: + # typical case + # oversize the array in case more processes are created + c_count.value = c_count.value * 2 + 5 + proc_array = c_nvmlProcessInfo_t * c_count.value + c_procs = proc_array() + + # make the call again + ret = fn(handle, byref(c_count), c_procs) + _nvmlCheckReturn(ret) + + procs = [] + for i in range(c_count.value): + # use an alternative struct for this object + obj = nvmlStructToFriendlyObject(c_procs[i]) + if obj.usedGpuMemory == NVML_VALUE_NOT_AVAILABLE_ulonglong.value: + # special case for WDDM on Windows, see comment above + obj.usedGpuMemory = None + procs.append(obj) + + return procs + else: + # error case + raise NVMLError(ret) + + +def nvmlDeviceGetAutoBoostedClocksEnabled(handle): + c_isEnabled = _nvmlEnableState_t() + c_defaultIsEnabled = _nvmlEnableState_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetAutoBoostedClocksEnabled") + ret = fn(handle, byref(c_isEnabled), byref(c_defaultIsEnabled)) + _nvmlCheckReturn(ret) + return [c_isEnabled.value, c_defaultIsEnabled.value] + # Throws NVML_ERROR_NOT_SUPPORTED if hardware doesn't support setting auto boosted clocks + + +## Set functions +def nvmlUnitSetLedState(unit, color): + fn = _nvmlGetFunctionPointer("nvmlUnitSetLedState") + ret = fn(unit, _nvmlLedColor_t(color)) + _nvmlCheckReturn(ret) + + +def nvmlDeviceSetPersistenceMode(handle, mode): + fn = _nvmlGetFunctionPointer("nvmlDeviceSetPersistenceMode") + ret = fn(handle, _nvmlEnableState_t(mode)) + _nvmlCheckReturn(ret) + + +def nvmlDeviceSetComputeMode(handle, mode): + fn = _nvmlGetFunctionPointer("nvmlDeviceSetComputeMode") + ret = fn(handle, _nvmlComputeMode_t(mode)) + _nvmlCheckReturn(ret) + + +def nvmlDeviceSetEccMode(handle, mode): + fn = _nvmlGetFunctionPointer("nvmlDeviceSetEccMode") + ret = fn(handle, _nvmlEnableState_t(mode)) + _nvmlCheckReturn(ret) + + +def nvmlDeviceClearEccErrorCounts(handle, counterType): + fn = _nvmlGetFunctionPointer("nvmlDeviceClearEccErrorCounts") + ret = fn(handle, _nvmlEccCounterType_t(counterType)) + _nvmlCheckReturn(ret) + + +def nvmlDeviceSetDriverModel(handle, model): + fn = _nvmlGetFunctionPointer("nvmlDeviceSetDriverModel") + ret = fn(handle, _nvmlDriverModel_t(model)) + _nvmlCheckReturn(ret) + + +def nvmlDeviceSetAutoBoostedClocksEnabled(handle, enabled): + fn = _nvmlGetFunctionPointer("nvmlDeviceSetAutoBoostedClocksEnabled") + ret = fn(handle, _nvmlEnableState_t(enabled)) + _nvmlCheckReturn(ret) + # Throws NVML_ERROR_NOT_SUPPORTED if hardware doesn't support setting auto boosted clocks + + +def nvmlDeviceSetDefaultAutoBoostedClocksEnabled(handle, enabled, flags): + fn = _nvmlGetFunctionPointer("nvmlDeviceSetDefaultAutoBoostedClocksEnabled") + ret = fn(handle, _nvmlEnableState_t(enabled), c_uint(flags)) + _nvmlCheckReturn(ret) + # Throws NVML_ERROR_NOT_SUPPORTED if hardware doesn't support setting auto boosted clocks + + +# Added in 4.304 +def nvmlDeviceSetApplicationsClocks(handle, maxMemClockMHz, maxGraphicsClockMHz): + fn = _nvmlGetFunctionPointer("nvmlDeviceSetApplicationsClocks") + ret = fn(handle, c_uint(maxMemClockMHz), c_uint(maxGraphicsClockMHz)) + _nvmlCheckReturn(ret) + + +# Added in 4.304 +def nvmlDeviceResetApplicationsClocks(handle): + fn = _nvmlGetFunctionPointer("nvmlDeviceResetApplicationsClocks") + ret = fn(handle) + _nvmlCheckReturn(ret) + + +# Added in 4.304 +def nvmlDeviceSetPowerManagementLimit(handle, limit): + fn = _nvmlGetFunctionPointer("nvmlDeviceSetPowerManagementLimit") + ret = fn(handle, c_uint(limit)) + _nvmlCheckReturn(ret) + + +# Added in 4.304 +def nvmlDeviceSetGpuOperationMode(handle, mode): + fn = _nvmlGetFunctionPointer("nvmlDeviceSetGpuOperationMode") + ret = fn(handle, _nvmlGpuOperationMode_t(mode)) + _nvmlCheckReturn(ret) + + +# Added in 2.285 +def nvmlEventSetCreate(): + fn = _nvmlGetFunctionPointer("nvmlEventSetCreate") + eventSet = c_nvmlEventSet_t() + ret = fn(byref(eventSet)) + _nvmlCheckReturn(ret) + return eventSet + + +# Added in 2.285 +def nvmlDeviceRegisterEvents(handle, eventTypes, eventSet): + fn = _nvmlGetFunctionPointer("nvmlDeviceRegisterEvents") + ret = fn(handle, c_ulonglong(eventTypes), eventSet) + _nvmlCheckReturn(ret) + + +# Added in 2.285 +def nvmlDeviceGetSupportedEventTypes(handle): + c_eventTypes = c_ulonglong() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetSupportedEventTypes") + ret = fn(handle, byref(c_eventTypes)) + _nvmlCheckReturn(ret) + return c_eventTypes.value + + +# Added in 2.285 +# raises NVML_ERROR_TIMEOUT exception on timeout +def nvmlEventSetWait(eventSet, timeoutms): + fn = _nvmlGetFunctionPointer("nvmlEventSetWait") + data = c_nvmlEventData_t() + ret = fn(eventSet, byref(data), c_uint(timeoutms)) + _nvmlCheckReturn(ret) + return data + + +# Added in 2.285 +def nvmlEventSetFree(eventSet): + fn = _nvmlGetFunctionPointer("nvmlEventSetFree") + ret = fn(eventSet) + _nvmlCheckReturn(ret) + + +# Added in 3.295 +def nvmlDeviceOnSameBoard(handle1, handle2): + fn = _nvmlGetFunctionPointer("nvmlDeviceOnSameBoard") + onSameBoard = c_int() + ret = fn(handle1, handle2, byref(onSameBoard)) + _nvmlCheckReturn(ret) + return onSameBoard.value != 0 + + +# Added in 3.295 +def nvmlDeviceGetCurrPcieLinkGeneration(handle): + fn = _nvmlGetFunctionPointer("nvmlDeviceGetCurrPcieLinkGeneration") + gen = c_uint() + ret = fn(handle, byref(gen)) + _nvmlCheckReturn(ret) + return gen.value + + +# Added in 3.295 +def nvmlDeviceGetMaxPcieLinkGeneration(handle): + fn = _nvmlGetFunctionPointer("nvmlDeviceGetMaxPcieLinkGeneration") + gen = c_uint() + ret = fn(handle, byref(gen)) + _nvmlCheckReturn(ret) + return gen.value + + +# Added in 3.295 +def nvmlDeviceGetCurrPcieLinkWidth(handle): + fn = _nvmlGetFunctionPointer("nvmlDeviceGetCurrPcieLinkWidth") + width = c_uint() + ret = fn(handle, byref(width)) + _nvmlCheckReturn(ret) + return width.value + + +# Added in 3.295 +def nvmlDeviceGetMaxPcieLinkWidth(handle): + fn = _nvmlGetFunctionPointer("nvmlDeviceGetMaxPcieLinkWidth") + width = c_uint() + ret = fn(handle, byref(width)) + _nvmlCheckReturn(ret) + return width.value + + +# Added in 4.304 +def nvmlDeviceGetSupportedClocksThrottleReasons(handle): + c_reasons = c_ulonglong() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetSupportedClocksThrottleReasons") + ret = fn(handle, byref(c_reasons)) + _nvmlCheckReturn(ret) + return c_reasons.value + + +# Added in 4.304 +def nvmlDeviceGetCurrentClocksThrottleReasons(handle): + c_reasons = c_ulonglong() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetCurrentClocksThrottleReasons") + ret = fn(handle, byref(c_reasons)) + _nvmlCheckReturn(ret) + return c_reasons.value + + +# Added in 5.319 +def nvmlDeviceGetIndex(handle): + fn = _nvmlGetFunctionPointer("nvmlDeviceGetIndex") + c_index = c_uint() + ret = fn(handle, byref(c_index)) + _nvmlCheckReturn(ret) + return c_index.value + + +# Added in 5.319 +def nvmlDeviceGetAccountingMode(handle): + c_mode = _nvmlEnableState_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetAccountingMode") + ret = fn(handle, byref(c_mode)) + _nvmlCheckReturn(ret) + return c_mode.value + + +def nvmlDeviceSetAccountingMode(handle, mode): + fn = _nvmlGetFunctionPointer("nvmlDeviceSetAccountingMode") + ret = fn(handle, _nvmlEnableState_t(mode)) + _nvmlCheckReturn(ret) + + +def nvmlDeviceClearAccountingPids(handle): + fn = _nvmlGetFunctionPointer("nvmlDeviceClearAccountingPids") + ret = fn(handle) + _nvmlCheckReturn(ret) + + +def nvmlDeviceGetAccountingStats(handle, pid): + stats = c_nvmlAccountingStats_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetAccountingStats") + ret = fn(handle, c_uint(pid), byref(stats)) + _nvmlCheckReturn(ret) + if stats.maxMemoryUsage == NVML_VALUE_NOT_AVAILABLE_ulonglong.value: + # special case for WDDM on Windows, see comment above + stats.maxMemoryUsage = None + return stats + + +def nvmlDeviceGetAccountingPids(handle): + count = c_uint(nvmlDeviceGetAccountingBufferSize(handle)) + pids = (c_uint * count.value)() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetAccountingPids") + ret = fn(handle, byref(count), pids) + _nvmlCheckReturn(ret) + return map(int, pids[0 : count.value]) + + +def nvmlDeviceGetAccountingBufferSize(handle): + bufferSize = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetAccountingBufferSize") + ret = fn(handle, byref(bufferSize)) + _nvmlCheckReturn(ret) + return int(bufferSize.value) + + +def nvmlDeviceGetRetiredPages(device, sourceFilter): + c_source = _nvmlPageRetirementCause_t(sourceFilter) + c_count = c_uint(0) + fn = _nvmlGetFunctionPointer("nvmlDeviceGetRetiredPages") + + # First call will get the size + ret = fn(device, c_source, byref(c_count), None) + + # this should only fail with insufficient size + if (ret != NVML_SUCCESS) and (ret != NVML_ERROR_INSUFFICIENT_SIZE): + raise NVMLError(ret) + + # call again with a buffer + # oversize the array for the rare cases where additional pages + # are retired between NVML calls + c_count.value = c_count.value * 2 + 5 + page_array = c_ulonglong * c_count.value + c_pages = page_array() + ret = fn(device, c_source, byref(c_count), c_pages) + _nvmlCheckReturn(ret) + return map(int, c_pages[0 : c_count.value]) + + +def nvmlDeviceGetRetiredPagesPendingStatus(device): + c_pending = _nvmlEnableState_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetRetiredPagesPendingStatus") + ret = fn(device, byref(c_pending)) + _nvmlCheckReturn(ret) + return int(c_pending.value) + + +def nvmlDeviceGetAPIRestriction(device, apiType): + c_permission = _nvmlEnableState_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetAPIRestriction") + ret = fn(device, _nvmlRestrictedAPI_t(apiType), byref(c_permission)) + _nvmlCheckReturn(ret) + return int(c_permission.value) + + +def nvmlDeviceSetAPIRestriction(handle, apiType, isRestricted): + fn = _nvmlGetFunctionPointer("nvmlDeviceSetAPIRestriction") + ret = fn(handle, _nvmlRestrictedAPI_t(apiType), _nvmlEnableState_t(isRestricted)) + _nvmlCheckReturn(ret) + + +def nvmlDeviceGetBridgeChipInfo(handle): + bridgeHierarchy = c_nvmlBridgeChipHierarchy_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetBridgeChipInfo") + ret = fn(handle, byref(bridgeHierarchy)) + _nvmlCheckReturn(ret) + return bridgeHierarchy + + +def nvmlDeviceGetSamples(device, sampling_type, timeStamp): + c_sampling_type = _nvmlSamplingType_t(sampling_type) + c_time_stamp = c_ulonglong(timeStamp) + c_sample_count = c_uint(0) + c_sample_value_type = _nvmlValueType_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetSamples") + + ## First Call gets the size + ret = fn( + device, + c_sampling_type, + c_time_stamp, + byref(c_sample_value_type), + byref(c_sample_count), + None, + ) + + # Stop if this fails + if ret != NVML_SUCCESS: + raise NVMLError(ret) + + sampleArray = c_sample_count.value * c_nvmlSample_t + c_samples = sampleArray() + ret = fn( + device, + c_sampling_type, + c_time_stamp, + byref(c_sample_value_type), + byref(c_sample_count), + c_samples, + ) + _nvmlCheckReturn(ret) + return (c_sample_value_type.value, c_samples[0 : c_sample_count.value]) + + +def nvmlDeviceGetViolationStatus(device, perfPolicyType): + c_perfPolicy_type = _nvmlPerfPolicyType_t(perfPolicyType) + c_violTime = c_nvmlViolationTime_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetViolationStatus") + + ## Invoke the method to get violation time + ret = fn(device, c_perfPolicy_type, byref(c_violTime)) + _nvmlCheckReturn(ret) + return c_violTime + + +def nvmlDeviceGetPcieThroughput(device, counter): + c_util = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetPcieThroughput") + ret = fn(device, _nvmlPcieUtilCounter_t(counter), byref(c_util)) + _nvmlCheckReturn(ret) + return c_util.value + + +def nvmlSystemGetTopologyGpuSet(cpuNumber): + c_count = c_uint(0) + fn = _nvmlGetFunctionPointer("nvmlSystemGetTopologyGpuSet") + + # First call will get the size + ret = fn(cpuNumber, byref(c_count), None) + + if ret != NVML_SUCCESS: + raise NVMLError(ret) + print(c_count.value) + # call again with a buffer + device_array = c_nvmlDevice_t * c_count.value + c_devices = device_array() + ret = fn(cpuNumber, byref(c_count), c_devices) + _nvmlCheckReturn(ret) + return map(None, c_devices[0 : c_count.value]) + + +def nvmlDeviceGetTopologyNearestGpus(device, level): + c_count = c_uint(0) + fn = _nvmlGetFunctionPointer("nvmlDeviceGetTopologyNearestGpus") + + # First call will get the size + ret = fn(device, level, byref(c_count), None) + + if ret != NVML_SUCCESS: + raise NVMLError(ret) + + # call again with a buffer + device_array = c_nvmlDevice_t * c_count.value + c_devices = device_array() + ret = fn(device, level, byref(c_count), c_devices) + _nvmlCheckReturn(ret) + return map(None, c_devices[0 : c_count.value]) + + +def nvmlDeviceGetTopologyCommonAncestor(device1, device2): + c_level = _nvmlGpuTopologyLevel_t() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetTopologyCommonAncestor") + ret = fn(device1, device2, byref(c_level)) + _nvmlCheckReturn(ret) + return c_level.value + + +def nvmlDeviceGetNumGpuCores(handle): + c_cores = c_uint() + fn = _nvmlGetFunctionPointer("nvmlDeviceGetNumGpuCores") + ret = fn(handle, byref(c_cores)) + _nvmlCheckReturn(ret) + return c_cores.value diff --git a/src/qoa4ml/utils/qoa_utils.py b/src/qoa4ml/utils/qoa_utils.py new file mode 100644 index 0000000..c1cef76 --- /dev/null +++ b/src/qoa4ml/utils/qoa_utils.py @@ -0,0 +1,459 @@ +import glob +import json +import logging +import os +import pathlib +import re +import shlex +import subprocess +import sys +import time +import traceback +from threading import Thread + +import numpy as np +import psutil +import yaml + +from .logger import qoa_logger + + +def make_folder(temp_path): + try: + if os.path.exists(temp_path): + pass + else: + os.makedirs(temp_path) + return True + except Exception: + return False + + +def get_cgroup_version() -> str: + proc1 = subprocess.Popen("mount", stdout=subprocess.PIPE) + proc2 = subprocess.Popen( + shlex.split("grep cgroup"), + stdin=proc1.stdout, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + if proc1.stdout: + proc1.stdout.close() + out, _ = proc2.communicate() + if "cgroup2" in out.decode(): + return "v2" + return "v1" + + +if get_cgroup_version() == "v2": + CGROUP_VERSION = "v2" +else: + CGROUP_VERSION = "v1" + + +def set_logger_level(logging_level): + if logging_level == 0: + log_level = logging.NOTSET + elif logging_level == 1: + log_level = logging.DEBUG + elif logging_level == 2: + log_level = logging.INFO + elif logging_level == 3: + log_level = logging.WARNING + elif logging_level == 4: + log_level = logging.ERROR + elif logging_level == 5: + log_level = logging.CRITICAL + else: + raise ValueError(f"Error logging level {logging_level}") + qoa_logger.setLevel(log_level) + + +def load_config(file_path: str) -> dict: + """ + file_path: file path to load config + + """ + try: + if "json" in file_path: + with open(file_path) as f: + return json.load(f) + if ("yaml" in file_path) or ("yml" in file_path): + with open(file_path) as f: + return yaml.safe_load(f) + else: + qoa_logger.warning("Unsupported format") + return None + except Exception: + qoa_logger.error("Unable to load configuration") + + return None + + +def to_json(file_path: str, conf: dict): + """ + file_path: file path to save config + """ + with open(file_path, "w") as f: + json.dump(conf, f) + + +def to_yaml(file_path: str, conf: dict): + """ + file_path: file path to save config + """ + with open(file_path, "w") as f: + yaml.dump(conf, f) + + +def get_sys_cpu(): + stats = psutil.cpu_stats() + cpu_time = psutil.cpu_times() + info = {} + for key in stats._fields: + info[key] = getattr(stats, key) + for key in cpu_time._fields: + info[key] = getattr(cpu_time, key) + return info + + +def get_sys_cpu_util(): + info = {} + core_utils = psutil.cpu_percent(percpu=True) + for core_num, core_util in enumerate(core_utils): + info[f"core_{core_num}"] = core_util + return info + + +def get_sys_cpu_metadata(): + cpu_freq = psutil.cpu_freq() + frequency = {"value": cpu_freq.max / 1000, "unit": "GHz"} + cpu_threads = psutil.cpu_count(logical=True) + return {"frequency": frequency, "thread": cpu_threads} + + +def get_sys_mem(): + stats = psutil.virtual_memory() + info = {} + for key in stats._fields: + info[key] = getattr(stats, key) + return info + + +def get_sys_net(): + info = {} + net = psutil.net_io_counters() + for key in net._fields: + info[key] = getattr(net, key) + return info + + +def report_proc_cpu(process): + report = {} + cpu_time = process.cpu_times() + context = process.num_ctx_switches() + for key in cpu_time._fields: + report[key] = getattr(cpu_time, key) + for key in context._fields: + report[key] = getattr(context, key) + report["num_thread"] = process.num_threads() + + return report + + +def report_proc_child_cpu(process: psutil.Process): + # WARNING: this children function takes a lot of time + child_processes = process.children(recursive=True) + child_processes_count = len(child_processes) + child_processes_cpu = {} + process_cpu_time = process.cpu_times() + for id, child_proc in enumerate(child_processes): + cpu_time = child_proc.cpu_times() + child_processes_cpu[f"child_{id}"] = float(cpu_time.user + cpu_time.system) + + total_cpu_usage = sum(child_processes_cpu.values()) + total_cpu_usage += float( + process_cpu_time.user + + process_cpu_time.system + + process_cpu_time.children_user + + process_cpu_time.children_system + ) + + return { + "child_process": child_processes_count, + "value": child_processes_cpu, + "total": total_cpu_usage, + "unit": "cputime", + } + + +def get_proc_cpu(pid=None): + if pid is None: + pid = os.getpid() + process = psutil.Process(pid) + child_list = process.children() + info = {} + info[pid] = report_proc_cpu(process) + + for child in child_list: + info[child.pid + "c"] = report_proc_cpu(child) + return info + + +def report_proc_mem(process: psutil.Process): + report = {} + mem_info = process.memory_info() + for key in mem_info._fields: + report[key] = getattr(mem_info, key) + return report + + +def get_proc_mem(pid=None): + if pid is None: + pid = os.getpid() + process = psutil.Process(pid) + child_list = process.children() + info = {} + info[pid] = report_proc_mem(process) + + for child in child_list: + info[child.pid + "c"] = report_proc_mem(child) + return info + + +def convert_to_gbyte(value): + return value / 1024.0 / 1024.0 / 1024.0 + + +def convert_to_mbyte(value): + return value / 1024.0 / 1024.0 + + +def convert_to_kbyte(value): + return value / 1024.0 + + +###################### SYSTEM REPORT ###################### + +sys_monitor_flag = False +process_monitor_flag = False +doc_monitor_flag = False + + +def system_report(client, interval: int, to_mb=True, to_gb=False, to_kb=False): + report = {} + last_net_value = {"sent": 0, "receive": 0} + while sys_monitor_flag: + try: + report["sys_cpu_stats"] = get_sys_mem() + except Exception as e: + qoa_logger.error(f"Error {type(e)} in report CPU stat: {e.__traceback__}") + traceback.print_exception(*sys.exc_info()) + try: + report["sys_mem_stats"] = get_sys_mem() + except Exception as e: + qoa_logger.error( + f"Error {type(e)} in report memory stat: {e.__traceback__}" + ) + traceback.print_exception(*sys.exc_info()) + try: + report["sys_net_stats"] = get_sys_net() + sent = 0 + if to_mb: + sent = convert_to_mbyte(psutil.net_io_counters().bytes_sent) + receive = convert_to_mbyte(psutil.net_io_counters().bytes_recv) + elif to_gb: + sent = convert_to_gbyte(psutil.net_io_counters().bytes_sent) + receive = convert_to_gbyte(psutil.net_io_counters().bytes_recv) + elif to_kb: + sent = convert_to_kbyte(psutil.net_io_counters().bytes_sent) + receive = convert_to_kbyte(psutil.net_io_counters().bytes_recv) + else: + sent = psutil.net_io_counters().bytes_sent + receive = psutil.net_io_counters().bytes_recv + curr_net_value = {"sent": sent, "receive": receive} + report["sys_net_send"] = curr_net_value["sent"] - last_net_value["sent"] + report["sys_net_receive"] = ( + curr_net_value["receive"] - last_net_value["receive"] + ) + last_net_value = curr_net_value.copy() + except Exception as e: + qoa_logger.error( + f"Error {type(e)} in report network stat: {e.__traceback__}" + ) + traceback.print_exception(*sys.exc_info()) + try: + client.report(report=report) + except Exception as e: + qoa_logger.error( + f"Error {type(e)} in sent system report: {e.__traceback__}" + ) + traceback.print_exception(*sys.exc_info()) + time.sleep(interval) + + +def sys_monitor(client, interval: int): + sub_thread = Thread(target=system_report, args=(client, interval)) + sub_thread.start() + + +###################### PROCESS REPORT ###################### + +# def process_report(client, interval:int, pid:int = None): +# report = {} +# while procMonitorFlag: +# try: +# report["proc_cpu_stats"] = get_proc_cpu() +# except Exception as e: +# qoaLogger.error("Error {} in report process cpu stat: {}".format(type(e),e.__traceback__)) +# traceback.print_exception(*sys.exc_info()) +# try: +# report["proc_mem_stats"] = get_proc_mem() +# except Exception as e: +# qoaLogger.error("Error {} in report process memory stat: {}".format(type(e),e.__traceback__)) +# traceback.print_exception(*sys.exc_info()) +# try: +# client.report(report=report) +# except Exception as e: +# qoaLogger.error("Error {} in sent process report: {}".format(type(e),e.__traceback__)) +# traceback.print_exception(*sys.exc_info()) +# time.sleep(interval) + + +# def process_monitor(client, interval:int, pid:int = None): +# if (pid == None): +# pid = os.getpid() +# sub_thread = Thread(target=process_report, args=(client, interval, pid)) +# sub_thread.start() + + +###################### DOCKER REPORT ###################### + + +def get_cpu_stat(stats, key): + if key == "percentage": + usage_delta = ( + stats["cpu_stats"]["cpu_usage"]["total_usage"] + - stats["precpu_stats"]["cpu_usage"]["total_usage"] + ) + + system_delta = ( + stats["cpu_stats"]["system_cpu_usage"] + - stats["precpu_stats"]["system_cpu_usage"] + ) + + len_cpu = stats["cpu_stats"]["online_cpus"] + + percentage = (usage_delta / system_delta) * len_cpu * 100 + return round(percentage, 2) + else: + return -1 + + +def get_mem_stat(stats, key): + if key == "used": + return stats["memory_stats"]["usage"] + else: + return -1 + + +def merge_report(f_report, i_report, prio=True): + try: + if isinstance(f_report, dict) and isinstance(i_report, dict): + key_list = tuple(f_report.keys()) + for key in key_list: + if key in i_report: + f_report[key] = merge_report(f_report[key], i_report[key], prio) + i_report.pop(key) + f_report.update(i_report) + elif f_report != i_report: + if prio is True: + return f_report + else: + return i_report + except Exception as e: + qoa_logger.error(f"Error {type(e)} in mergeReport: {e.__traceback__}") + traceback.print_exception(*sys.exc_info()) + return f_report + + +def get_dict_at(dict, i=0): + try: + keys = list(dict.keys()) + return keys[i], dict[keys[i]] + except Exception as e: + qoa_logger.error(f"Error {type(e)} in get_dict_at: {e.__traceback__}") + traceback.print_exception(*sys.exc_info()) + + +def get_file_dir(file, to_string=True): + current_dir = pathlib.Path(file).parent.absolute() + if to_string: + return str(current_dir) + else: + return current_dir + + +def get_parent_dir(file, parent_level=1, to_string=True): + current_dir = get_file_dir(file=file, to_string=False) + for _ in range(parent_level): + current_dir = current_dir.parent.absolute() + if to_string: + return str(current_dir) + else: + return current_dir + + +def is_numpyarray(obj): + return isinstance(obj, np.ndarray) + + +def get_process_allowed_cpus(): + # NOTE: 0 as PID represents the calling process + pid = 0 + affinity = os.sched_getaffinity(pid) + return list(affinity) + + +def get_process_allowed_memory(): + if CGROUP_VERSION == "v1": + with open("/proc/self/cgroup") as file: + for line in file: + parts = line.strip().split(":") + if len(parts) == 3 and parts[1] == "memory": + cgroup_path = parts[2] + memory_limit_file = re.sub(r"/task_\d+", "", cgroup_path) + + number_of_task = len( + glob.glob(f"/sys/fs/cgroup/memory{memory_limit_file}/task_*") + ) + + with open( + f"/sys/fs/cgroup/memory{memory_limit_file}/memory.limit_in_bytes" + ) as limit_file: + memory_limit_str = limit_file.read().strip() + try: + memory_limit_int = int(memory_limit_str) + return memory_limit_int / number_of_task + except ValueError: + return memory_limit_str + return None + + else: + with open("/proc/self/cgroup") as file: + for line in file: + parts = line.strip().split(":") + cgroup_path = parts[2] + pattern = r"/task_\d+" + cgroup_path = re.sub(pattern, "", cgroup_path) + with open(f"/sys/fs/cgroup{cgroup_path}/memory.max") as limit_file: + number_of_task = len( + glob.glob(f"/sys/fs/cgroup{cgroup_path}/task_*") + ) + memory_limit_str = limit_file.read().strip() + try: + memory_limit_int = int(memory_limit_str) + return memory_limit_int / number_of_task + except ValueError: + return memory_limit_str + return None diff --git a/src/qoa4ml/utils/repeated_timer.py b/src/qoa4ml/utils/repeated_timer.py new file mode 100644 index 0000000..36c75cd --- /dev/null +++ b/src/qoa4ml/utils/repeated_timer.py @@ -0,0 +1,29 @@ +import time +from threading import Event, Thread + + +class RepeatedTimer: + """Repeat `function` every `interval` seconds.""" + + def __init__(self, interval, function, *args, **kwargs): + self.interval = interval + self.function = function + self.args = args + self.kwargs = kwargs + self.start = time.time() + self.event = Event() + self.thread = Thread(target=self._target, daemon=True) + self.thread.start() + + def _target(self): + self.function(*self.args, **self.kwargs) + while not self.event.wait(self._time): + self.function(*self.args, **self.kwargs) + + @property + def _time(self): + return self.interval - ((time.time() - self.start) % self.interval) + + def stop(self): + self.event.set() + self.thread.join() diff --git a/tests/gpu_test.py b/tests/gpu_test.py new file mode 100644 index 0000000..82e4c13 --- /dev/null +++ b/tests/gpu_test.py @@ -0,0 +1,5 @@ +from devtools import debug + +from qoa4ml.utils.jetson_utils import find_igpu + +debug(find_igpu()) diff --git a/tests/qoaclient_test/config/client.yaml b/tests/qoaclient_test/config/client.yaml new file mode 100644 index 0000000..2da8206 --- /dev/null +++ b/tests/qoaclient_test/config/client.yaml @@ -0,0 +1,19 @@ +client: + name: qoa_client_test + username: aaltosea + user_id: "1" + instance_name: aaltosea_instance_test1 + instance_id: b6f83293-cf67-44dd-a7b5-77229d384012 + stage_id: gateway + functionality: REST + application_name: test + role: ml + run_id: test1 + custom_info: + your_custom_info: 1 + +connector: + - name: debug_connector + connector_class: Debug + config: + silence: True diff --git a/tests/qoaclient_test/config/client_with_probes.yaml b/tests/qoaclient_test/config/client_with_probes.yaml new file mode 100644 index 0000000..83bde42 --- /dev/null +++ b/tests/qoaclient_test/config/client_with_probes.yaml @@ -0,0 +1,40 @@ +client: + name: qoa_client_test + username: aaltosea + user_id: "1" + instance_name: aaltosea_instance_test1 + instance_id: b6f83293-cf67-44dd-a7b5-77229d384012 + stage_id: gateway + functionality: REST + application_name: test + role: ml + run_id: test1 + custom_info: + your_custom_info: 1 + +connector: + - name: debug_connector + connector_class: Debug + config: + silence: True + +probes: + - probe_type: "docker" + frequency: 1 + require_register: false + log_latency_flag: false + environment: Edge + container_list: ["test"] + + - probe_type: "system" + frequency: 1 + require_register: false + log_latency_flag: false + environment: Edge + node_name: "Edge1" + + - probe_type: "process" + frequency: 1 + require_register: false + log_latency_flag: false + environment: Edge diff --git a/tests/qoaclient_test/probes_test.py b/tests/qoaclient_test/probes_test.py new file mode 100644 index 0000000..ada181d --- /dev/null +++ b/tests/qoaclient_test/probes_test.py @@ -0,0 +1,12 @@ +import os +import time + +from qoa4ml.qoa_client import QoaClient + +dir_path = os.path.dirname(os.path.realpath(__file__)) + + +def test_probes_reporting(): + qoa_client = QoaClient(config_path=f"{dir_path}/config/client_with_probes.yaml") + qoa_client.start_all_probes() + time.sleep(1) diff --git a/tests/qoaclient_test/qoaclient_test.py b/tests/qoaclient_test/qoaclient_test.py new file mode 100644 index 0000000..7063287 --- /dev/null +++ b/tests/qoaclient_test/qoaclient_test.py @@ -0,0 +1,56 @@ +import os +from random import random + +from qoa4ml.qoa_client import QoaClient +from qoa4ml.reports.ml_reports import MLReport + +dir_path = os.path.dirname(os.path.realpath(__file__)) + + +def test_creating_qoaclient_from_file(): + _ = QoaClient(config_path=f"{dir_path}/config/client.yaml") + + +def test_creating_qoaclient_from_dict(): + config = { + "client": { + "name": "qoa_client_test", + "username": "aaltosea", + "user_id": "1", + "instance_id": "b6f83293-cf67-44dd-a7b5-77229d384012", + "instance_name": "aaltosea_instance_test1", + "stage_id": "gateway", + "functionality": "REST", + "application_name": "test", + "role": "ml", + "run_id": "test1", + "custom_info": {"your_custom_info": 1}, + }, + "connector": [ + { + "name": "debug_connector", + "connector_class": "Debug", + "config": {"silence": True}, + } + ], + } + _ = QoaClient(config_dict=config) + + +def test_submiting_report(): + qoa_client = QoaClient( + report_cls=MLReport, config_path=f"{dir_path}/config/client.yaml" + ) + qoa_client.observe_metric("test", random()) + qoa_client.report(submit=True) + + +def test_submiting_custom_report(): + qoa_client = QoaClient( + report_cls=MLReport, config_path=f"{dir_path}/config/client.yaml" + ) + qoa_client.observe_metric("test", random()) + report = { + "test": "123456", + } + qoa_client.report(report=report, submit=True) diff --git a/tests/simple_test.py b/tests/simple_test.py new file mode 100644 index 0000000..c96baeb --- /dev/null +++ b/tests/simple_test.py @@ -0,0 +1,9 @@ +import qoa4ml + + +def inc(x): + return x + 1 + + +def test_answer(): + assert inc(4) == 5 diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..4575644 --- /dev/null +++ b/tox.ini @@ -0,0 +1,22 @@ +[tox] +requires = + tox>=4 +env_list = py{39,310,311,312} + +[gh-actions] +python = + 3.9: py39 + 3.10: py310 + 3.11: py311 + 3.12: py312 + + +[testenv] +description = run unit tests +deps = + pytest>=7 + pytest-sugar + devtools +commands = + pytest -s tests {posargs:tests} +