From 2ecc8d4d6194b41dde1cf9430c7cdb13b9ec80ce Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 25 May 2022 16:36:24 -0400 Subject: [PATCH 001/113] Add the example directory --- example/controller.py | 30 +++++ example/plotym.py | 34 +++++ example/pm.py | 25 ++++ example/sampleplot.graphml | 256 +++++++++++++++++++++++++++++++++++++ 4 files changed, 345 insertions(+) create mode 100644 example/controller.py create mode 100644 example/plotym.py create mode 100644 example/pm.py create mode 100644 example/sampleplot.graphml diff --git a/example/controller.py b/example/controller.py new file mode 100644 index 0000000..73ef352 --- /dev/null +++ b/example/controller.py @@ -0,0 +1,30 @@ +import numpy as np +import concore + +ysp = 3.0 + +def controller(ym): + if ym[0] < ysp: + return 1.01 * ym + else: + return 0.9 * ym + +concore.default_maxtime(150) ##maps to-- for i in range(0,150): +concore.delay = 0.02 + +init_simtime_u = "[0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0]" + +u = np.array([concore.initval(init_simtime_u)]).T +while(concore.simtime + + + + + + + + + + + CZ:controller.py + + + + + + + + + + + PZ:pm.py + + + + + + + + + + + XZ:plotym.py + + + + + + + + + + CU + + + + + + + + + + + + PYM + + + + + + + + + + + + XYM + + + + + + + + 1638390071794 + Pradeeban + + DEL_NODE + WyIyM2ZlODE5Yi1hMTZjLTQzY2ItOWQ5NC1mM2I1M2QwNjk4NWYiXQ== + + + ADD_NODE + WyJDWjpjb250cm9sbGVyLnB5Iix7IndpZHRoIjoxMzIsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTAwLCJ5IjoxMDB9LHt9LCIyM2ZlODE5Yi1hMTZjLTQzY2ItOWQ5NC1mM2I1M2QwNjk4NWYiXQ== + + + + 1638390078744 + Pradeeban + + DEL_NODE + WyI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiXQ== + + + ADD_NODE + WyJQWjpwbS5weSIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjk5LCJ5IjoyNjJ9LHt9LCI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiXQ== + + + + 1638390083602 + Pradeeban + + SET_POS + WyI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6OTksInkiOjI2Mn1d + + + SET_POS + WyI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLHsieCI6OTksInkiOjI2Mn0seyJ4IjoxMTAsInkiOjExMH1d + + + + 1638390087263 + Pradeeban + + DEL_EDGE + WyI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIyM2ZlODE5Yi1hMTZjLTQzY2ItOWQ5NC1mM2I1M2QwNjk4NWYiLCJ0YXJnZXRJRCI6IjljNWUxNGM4LTFmNWMtNDIwZS1hNzJkLTQ2YjJlZmEyNDRhNiIsImxhYmVsIjoiQyIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2Y0NDMzNiIsInNoYXBlIjoic29saWQifSwiaWQiOiI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYifV0= + + + + 1638390162285 + Pradeeban + + DEL_EDGE + WyI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLCJ0YXJnZXRJRCI6IjIzZmU4MTliLWExNmMtNDNjYi05ZDk0LWYzYjUzZDA2OTg1ZiIsImxhYmVsIjoiUCIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UifV0= + + + + 1638390238818 + Pradeeban + + UPDATE_EDGE + WyI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZjQ0MzM2Iiwic2hhcGUiOiJzb2xpZCJ9LCJDIix0cnVlXQ== + + + UPDATE_EDGE + WyI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZjQ0MzM2Iiwic2hhcGUiOiJzb2xpZCJ9LCJDVSIsdHJ1ZV0= + + + + 1638390244629 + Pradeeban + + UPDATE_EDGE + WyI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjODI3NzE3Iiwic2hhcGUiOiJzb2xpZCJ9LCJQIix0cnVlXQ== + + + UPDATE_EDGE + WyI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjODI3NzE3Iiwic2hhcGUiOiJzb2xpZCJ9LCJQWU0iLHRydWVd + + + + 1638469013851 + mark + + ADD_EDGE + W3sibGFiZWwiOiJQWU0iLCJzb3VyY2UiOiJjZTI2Y2MwMS0zYmNhLTRmOWMtODEwNi1lZGE2ODBiNzA0NTUiLCJ0YXJnZXQiOiIyM2ZlODE5Yi1hMTZjLTQzY2ItOWQ5NC1mM2I1M2QwNjk4NWYiLCJzdHlsZSI6eyJiYWNrZ3JvdW5kQ29sb3IiOiIjODI3NzE3IiwidGhpY2tuZXNzIjoxLCJzaGFwZSI6InNvbGlkIn0sImJlbmREYXRhIjp7ImJlbmREaXN0YW5jZSI6MjIuNjYyMDY2MDgxMTIxNTEsImJlbmRXZWlnaHQiOjAuNTA1ODIzMjkzNTY4MTg1OSwiYmVuZFBvaW50Ijp7IngiOjEyNS4yMDE1NTkyMTY5NTIzMiwieSI6MTY2Ljg0NzM3MDM4NzUzMzk0fX0sInNvdXJjZUlEIjoiOWM1ZTE0YzgtMWY1Yy00MjBlLWE3MmQtNDZiMmVmYTI0NGE2IiwidGFyZ2V0SUQiOiIyM2ZlODE5Yi1hMTZjLTQzY2ItOWQ5NC1mM2I1M2QwNjk4NWYiLCJ0eXBlIjoib3JkaW4iLCJpZCI6IjNjNzA0MzdhLTc3YTgtNDcyMS1iODRiLTA5MDc4OTgzYzljOCJ9XQ== + + + DEL_EDGE + WyIzYzcwNDM3YS03N2E4LTQ3MjEtYjg0Yi0wOTA3ODk4M2M5YzgiXQ== + + + + 1638469066213 + mark + + DEL_NODE + WyI4NGM3MTExMy05YzE2LTQwZGEtYWM3OC1jNzRiMzA5ZGMwOTkiXQ== + + + ADD_NODE + WyJYWjpwbG90eW0ucHkiLHsid2lkdGgiOjExMywiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjoyNTUuMjgxNDMxNzEwMDY2MTYsInkiOjIxMi42NDQ0ODk3OTUxNTUxNX0se30sIjg0YzcxMTEzLTljMTYtNDBkYS1hYzc4LWM3NGIzMDlkYzA5OSJd + + + + 1638469079000 + mark + + SET_POS + WyI4NGM3MTExMy05YzE2LTQwZGEtYWM3OC1jNzRiMzA5ZGMwOTkiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MzI0Ljc2Mzg1NTU3MTQwMTU2LCJ5IjoxNjYuODQ5MjU1ODg2NTQ3NDd9XQ== + + + SET_POS + WyI4NGM3MTExMy05YzE2LTQwZGEtYWM3OC1jNzRiMzA5ZGMwOTkiLHsieCI6MzI0Ljc2Mzg1NTU3MTQwMTU2LCJ5IjoxNjYuODQ5MjU1ODg2NTQ3NDd9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1638469085022 + mark + + SET_POS + WyI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLHsieCI6OTksInkiOjI2Mn0seyJ4Ijo5OSwieSI6MzY0LjY0NDQ4OTc5NTE1NTE1fV0= + + + SET_POS + WyI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLHsieCI6OTksInkiOjM2NC42NDQ0ODk3OTUxNTUxNX0seyJ4Ijo5OSwieSI6MjYyfV0= + + + + 1638469093591 + mark + + DEL_EDGE + WyJkMzE3MjZlZC0zYzFlLTQxNzAtOTgzYS0zMDQxN2Q2ZDBiYWIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLCJ0YXJnZXRJRCI6Ijg0YzcxMTEzLTljMTYtNDBkYS1hYzc4LWM3NGIzMDlkYzA5OSIsImxhYmVsIjoiUFlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZjQ0MzM2Iiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6ImQzMTcyNmVkLTNjMWUtNDE3MC05ODNhLTMwNDE3ZDZkMGJhYiJ9XQ== + + + + 1638469106380 + mark + + SET_POS + WyI4NGM3MTExMy05YzE2LTQwZGEtYWM3OC1jNzRiMzA5ZGMwOTkiLHsieCI6MzI0Ljc2Mzg1NTU3MTQwMTU2LCJ5IjoxNjYuODQ5MjU1ODg2NTQ3NDd9LHsieCI6MjU1LjI4MTQzMTcxMDA2NjE2LCJ5IjoyMTIuNjQ0NDg5Nzk1MTU1MTV9XQ== + + + SET_POS + WyI4NGM3MTExMy05YzE2LTQwZGEtYWM3OC1jNzRiMzA5ZGMwOTkiLHsieCI6MjU1LjI4MTQzMTcxMDA2NjE2LCJ5IjoyMTIuNjQ0NDg5Nzk1MTU1MTV9LHsieCI6MzI0Ljc2Mzg1NTU3MTQwMTU2LCJ5IjoxNjYuODQ5MjU1ODg2NTQ3NDd9XQ== + + + + 1638469110190 + mark + + DEL_EDGE + WyJjODIyNGU1ZS1iNjQ2LTQ5MmItOGZiNS1iNzUzN2U4Mjc2YmMiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI4NGM3MTExMy05YzE2LTQwZGEtYWM3OC1jNzRiMzA5ZGMwOTkiLCJ0YXJnZXRJRCI6IjIzZmU4MTliLWExNmMtNDNjYi05ZDk0LWYzYjUzZDA2OTg1ZiIsImxhYmVsIjoiT1lNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjMDA5Njg4Iiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6ImM4MjI0ZTVlLWI2NDYtNDkyYi04ZmI1LWI3NTM3ZTgyNzZiYyJ9XQ== + + + + 1639165156556 + Pradeeban + + UPDATE_EDGE + WyI4YjUxMzdjNS1hY2JkLTRmNDktYjAzMi00NjM3OTNiMDVjZWYiLHsiYmFja2dyb3VuZENvbG9yIjoiIzAwOTY4OCIsInRoaWNrbmVzcyI6MSwic2hhcGUiOiJzb2xpZCJ9LCJPWU0iLHRydWVd + + + UPDATE_EDGE + WyI4YjUxMzdjNS1hY2JkLTRmNDktYjAzMi00NjM3OTNiMDVjZWYiLHsiYmFja2dyb3VuZENvbG9yIjoiIzAwOTY4OCIsInRoaWNrbmVzcyI6MSwic2hhcGUiOiJzb2xpZCJ9LCJYWU0iLHRydWVd + + + + \ No newline at end of file From 687a43e1368cff3cfa1fcc48ff8406e8d3f15e92 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Mon, 8 Aug 2022 13:11:06 -0400 Subject: [PATCH 002/113] Update README.md --- README.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7b155a7..c6d5089 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,15 @@ -# _concore_ -CONTROL-CORE is a framework for closed-loop peripheral neuromodulation control systems. The CONTROL-CORE protocol, known as _concore_, allows modular simulation of controller and PM nodes to run on different operating systems, computing platforms, and programming languages. +# The CONTROL-CORE Framework. +[CONTROL-CORE](https://github.com/ControlCore-Project/) is a framework for closed-loop peripheral neuromodulation control systems. + +The CONTROL-CORE framework consists of the below projects. + +* _concore_: The CONTROL-CORE protocol, known as _concore_, allows modular simulation of controller and PM nodes to run on different operating systems, computing platforms, and programming languages. [This repository](https://github.com/ControlCore-Project/concore/) consists of _concore_ source code. The _concore_ documentation can be found [here](https://control-core.readthedocs.io/en/latest/index.html). For a more scientific documentation, please read our extensive [open-access research paper](https://doi.org/10.1109/ACCESS.2022.3161471). + +* _concore_ Editor: This is the front-end for CONTROL-CORE. We forked [DHGWorkflow](https://github.com/ControlCore-Project/DHGWorkflow), a sibling project we developed, and extend as the _concore_ Editor. + +* _Mediator_ + +* _concore-lite_ # Configuring _concore_ From 99de41a9a59cacaf3c83eab6c7bc13deab3f0b2f Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Mon, 8 Aug 2022 17:01:37 -0400 Subject: [PATCH 003/113] Update README.md --- README.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index c6d5089..1bd6da7 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,24 @@ # The CONTROL-CORE Framework. -[CONTROL-CORE](https://github.com/ControlCore-Project/) is a framework for closed-loop peripheral neuromodulation control systems. +[CONTROL-CORE](https://github.com/ControlCore-Project/) is a framework for closed-loop peripheral neuromodulation control systems. At its center is _concore_, a lightweight Python-based protocol to simulate neuromodulation control systems. This repository consists of the implementation of _concore_ protocol and sample (demo and neuromodulation control systems) studies. The CONTROL-CORE framework consists of the below projects. * _concore_: The CONTROL-CORE protocol, known as _concore_, allows modular simulation of controller and PM nodes to run on different operating systems, computing platforms, and programming languages. [This repository](https://github.com/ControlCore-Project/concore/) consists of _concore_ source code. The _concore_ documentation can be found [here](https://control-core.readthedocs.io/en/latest/index.html). For a more scientific documentation, please read our extensive [open-access research paper](https://doi.org/10.1109/ACCESS.2022.3161471). -* _concore_ Editor: This is the front-end for CONTROL-CORE. We forked [DHGWorkflow](https://github.com/ControlCore-Project/DHGWorkflow), a sibling project we developed, and extend as the _concore_ Editor. +* _concore_ Editor: This is the front-end for CONTROL-CORE. We forked [DHGWorkflow](https://github.com/ControlCore-Project/DHGWorkflow), a sibling project we developed, and extend as the _concore_ Editor. Please check out the [dev branch](https://github.com/ControlCore-Project/DHGWorkflow/tree/dev) for the _concore_ Editor. -* _Mediator_ +* _Mediator_: The [Mediator](https://github.com/ControlCore-Project/mediator) allows the CONTROL-CORE studies to be distributed and run, rather than having all the programs that construct a study to be run just from a centralized location. -* _concore-lite_ +* _concore-lite_: The [_concore-lite_](https://github.com/ControlCore-Project/concore-lite) repository consists of a simple example version of a _concore_ study. Please check out and run this, if you like to learn the _concore_ protocol without having to clone this large _concore_ repository. +* documentation: The [source code repository](https://github.com/ControlCore-Project/documentation) of the ReadTheDocs documentation of CONTROL-CORE. -# Configuring _concore_ -concore is a lightweight Python-based protocol to simulate neuromodulation control systems. Installation instructions for concore can be found [here](https://control-core.readthedocs.io/en/latest/installation.html). +# The _concore_ Protocol. +Please follow the [ReadTheDocs](https://control-core.readthedocs.io/en/latest/index.html) documentation and the [_concore-lite_](https://github.com/ControlCore-Project/concore-lite) repository to get started quick. -# Using _concore_ - -Usage instructions can be found [here](https://control-core.readthedocs.io/en/latest/usage.html). +Installation instructions for concore can be found [here](https://control-core.readthedocs.io/en/latest/installation.html). Usage instructions can be found [here](https://control-core.readthedocs.io/en/latest/usage.html). # Citing _concore_ From eb9e5561fbde277da90a79d8836a1a7f49c0c2e6 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Mon, 8 Aug 2022 17:01:53 -0400 Subject: [PATCH 004/113] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1bd6da7..4dd7297 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# The CONTROL-CORE Framework. +# The CONTROL-CORE Framework [CONTROL-CORE](https://github.com/ControlCore-Project/) is a framework for closed-loop peripheral neuromodulation control systems. At its center is _concore_, a lightweight Python-based protocol to simulate neuromodulation control systems. This repository consists of the implementation of _concore_ protocol and sample (demo and neuromodulation control systems) studies. The CONTROL-CORE framework consists of the below projects. @@ -14,7 +14,7 @@ The CONTROL-CORE framework consists of the below projects. * documentation: The [source code repository](https://github.com/ControlCore-Project/documentation) of the ReadTheDocs documentation of CONTROL-CORE. -# The _concore_ Protocol. +# The _concore_ Protocol Please follow the [ReadTheDocs](https://control-core.readthedocs.io/en/latest/index.html) documentation and the [_concore-lite_](https://github.com/ControlCore-Project/concore-lite) repository to get started quick. From 8064bc93f75f5578efcc41c1d6f0b9c251658a75 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Mon, 8 Aug 2022 17:04:56 -0400 Subject: [PATCH 005/113] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4dd7297..ee62ba5 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # The CONTROL-CORE Framework -[CONTROL-CORE](https://github.com/ControlCore-Project/) is a framework for closed-loop peripheral neuromodulation control systems. At its center is _concore_, a lightweight Python-based protocol to simulate neuromodulation control systems. This repository consists of the implementation of _concore_ protocol and sample (demo and neuromodulation control systems) studies. +[CONTROL-CORE](https://github.com/ControlCore-Project/) is a framework for closed-loop peripheral neuromodulation control systems. At its center is _concore_, a lightweight Python-based protocol to simulate neuromodulation control systems. This repository consists of the implementation of _concore_ protocol and sample (demo and neuromodulation control systems) studies. In addition to its standard Python implementation, _concore_ also supports developing studies in Matlab/Octave, Verilog, and C++. + The CONTROL-CORE framework consists of the below projects. From 857c9f4742a9144cd0e7fa1a7b0ef6f42b31aab8 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Mon, 8 Aug 2022 17:28:12 -0400 Subject: [PATCH 006/113] Update README.md --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index ee62ba5..ce488c8 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,19 @@ Please follow the [ReadTheDocs](https://control-core.readthedocs.io/en/latest/in Installation instructions for concore can be found [here](https://control-core.readthedocs.io/en/latest/installation.html). Usage instructions can be found [here](https://control-core.readthedocs.io/en/latest/usage.html). +# The _concore_ Repository + +_concore contains programs (such as physiological models or more commonly called "PMs" and controllers) and studies (i.e., graphml files that represents the studies as workflows). The _wrappers_ enable seamlessly extending a study into a distributed one with the CONTROL-CORE Mediator. + +_concore_ repository consists of several scripts at its root level. The demo folder consists of several sample programs and studies, mostly toy examples to learn the protocol. The ratc folder consists of the programs and studies of the rat cardiac experiments we developed with _concore_. + +If you have a bug to report in one of the CONTROL-CORE projects, please report it through relevant Issue Tracker. Similarly, please feel free to contribute your studies and code enhancements using pull requests. Questions and discussions can be made through the relevant Discussions forum. + +The _concore Issues can be reported [here](https://github.com/ControlCore-Project/concore/issues). + +The _concore_ discussion forum can be found [here](https://github.com/ControlCore-Project/concore/discussions). + +Please make sure to send your _concore_ pull requests to the [dev branch](https://github.com/ControlCore-Project/concore/tree/dev). # Citing _concore_ From 4964198f3dbbcf164646638f0159bb0d04c2505b Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Mon, 8 Aug 2022 17:33:28 -0400 Subject: [PATCH 007/113] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ce488c8..fd0779e 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ The CONTROL-CORE framework consists of the below projects. * _concore_: The CONTROL-CORE protocol, known as _concore_, allows modular simulation of controller and PM nodes to run on different operating systems, computing platforms, and programming languages. [This repository](https://github.com/ControlCore-Project/concore/) consists of _concore_ source code. The _concore_ documentation can be found [here](https://control-core.readthedocs.io/en/latest/index.html). For a more scientific documentation, please read our extensive [open-access research paper](https://doi.org/10.1109/ACCESS.2022.3161471). -* _concore_ Editor: This is the front-end for CONTROL-CORE. We forked [DHGWorkflow](https://github.com/ControlCore-Project/DHGWorkflow), a sibling project we developed, and extend as the _concore_ Editor. Please check out the [dev branch](https://github.com/ControlCore-Project/DHGWorkflow/tree/dev) for the _concore_ Editor. +* _concore_ Editor: This is the front-end for CONTROL-CORE. We forked [DHGWorkflow](https://github.com/ControlCore-Project/DHGWorkflow), a sibling project we developed, and extend it as the _concore_ Editor. Please check out the [dev branch](https://github.com/ControlCore-Project/DHGWorkflow/tree/dev) for the _concore_ Editor. * _Mediator_: The [Mediator](https://github.com/ControlCore-Project/mediator) allows the CONTROL-CORE studies to be distributed and run, rather than having all the programs that construct a study to be run just from a centralized location. From cc0b93bfd30763d918fb616313a0efc10c46a778 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 00:18:42 -0400 Subject: [PATCH 008/113] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fd0779e..fe8316d 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ # The CONTROL-CORE Framework [CONTROL-CORE](https://github.com/ControlCore-Project/) is a framework for closed-loop peripheral neuromodulation control systems. At its center is _concore_, a lightweight Python-based protocol to simulate neuromodulation control systems. This repository consists of the implementation of _concore_ protocol and sample (demo and neuromodulation control systems) studies. In addition to its standard Python implementation, _concore_ also supports developing studies in Matlab/Octave, Verilog, and C++. - The CONTROL-CORE framework consists of the below projects. * _concore_: The CONTROL-CORE protocol, known as _concore_, allows modular simulation of controller and PM nodes to run on different operating systems, computing platforms, and programming languages. [This repository](https://github.com/ControlCore-Project/concore/) consists of _concore_ source code. The _concore_ documentation can be found [here](https://control-core.readthedocs.io/en/latest/index.html). For a more scientific documentation, please read our extensive [open-access research paper](https://doi.org/10.1109/ACCESS.2022.3161471). @@ -17,6 +16,8 @@ The CONTROL-CORE framework consists of the below projects. # The _concore_ Protocol +_concore_ enables composing studies from programs developed in different languages. Currently supported languages are, Python, Matlab/Octave, Verilog, and C++. The studies are designed through the visual _concore_ Editor (DHGWorkflow) and interpreted into _concore_ through its parser. Neural control systems consist of loops (dicycles). Therefore, they cannot be represented by classic workflow standards (such as CWL or WDL). Therefore, _concore_ addresses a significant research gap to model closed-loop neuromodulation control systems. The _concore_ protocol shares data between the programs through file sharing, with no centralized entity (a broker or an orchestrator) to arbitrate communications between the programs. (In the distributed executions, the CONTROL-CORE Mediator enables connecting the disjoint pieces of the study through REST APIs). + Please follow the [ReadTheDocs](https://control-core.readthedocs.io/en/latest/index.html) documentation and the [_concore-lite_](https://github.com/ControlCore-Project/concore-lite) repository to get started quick. Installation instructions for concore can be found [here](https://control-core.readthedocs.io/en/latest/installation.html). Usage instructions can be found [here](https://control-core.readthedocs.io/en/latest/usage.html). From f2804df8535e4da069a1725e1c67cd7822af8a5e Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 00:22:18 -0400 Subject: [PATCH 009/113] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fe8316d..f9f2215 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # The CONTROL-CORE Framework -[CONTROL-CORE](https://github.com/ControlCore-Project/) is a framework for closed-loop peripheral neuromodulation control systems. At its center is _concore_, a lightweight Python-based protocol to simulate neuromodulation control systems. This repository consists of the implementation of _concore_ protocol and sample (demo and neuromodulation control systems) studies. In addition to its standard Python implementation, _concore_ also supports developing studies in Matlab/Octave, Verilog, and C++. +[CONTROL-CORE](https://github.com/ControlCore-Project/) is a design and simulation framework for closed-loop peripheral neuromodulation control systems. At its center is _concore_, a lightweight Python-based protocol to simulate neuromodulation control systems. This repository consists of the implementation of _concore_ protocol and sample (demo and neuromodulation control systems) studies. In addition to its standard Python implementation, _concore_ also supports developing studies in Matlab/Octave, Verilog, and C++. In addition to the implementation of these lmnguage support, _concore_ aims to support more language programs in the future. The CONTROL-CORE framework consists of the below projects. From 8c80c570566404c708990724e76e88f8cf8a9905 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 00:46:13 -0400 Subject: [PATCH 010/113] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f9f2215..5159532 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ # The CONTROL-CORE Framework -[CONTROL-CORE](https://github.com/ControlCore-Project/) is a design and simulation framework for closed-loop peripheral neuromodulation control systems. At its center is _concore_, a lightweight Python-based protocol to simulate neuromodulation control systems. This repository consists of the implementation of _concore_ protocol and sample (demo and neuromodulation control systems) studies. In addition to its standard Python implementation, _concore_ also supports developing studies in Matlab/Octave, Verilog, and C++. In addition to the implementation of these lmnguage support, _concore_ aims to support more language programs in the future. +[CONTROL-CORE](https://github.com/ControlCore-Project/) is a design and simulation framework for closed-loop peripheral neuromodulation control systems. At its center is _concore_, a lightweight protocol to simulate neuromodulation control systems. This repository consists of the implementation of _concore_ protocol and sample (demo and neuromodulation control systems) studies. In addition to its default standard Python implementation, _concore_ also supports developing studies in Matlab/Octave, Verilog, and C++. _concore_ also aims to support more language programs in the future. The CONTROL-CORE framework consists of the below projects. -* _concore_: The CONTROL-CORE protocol, known as _concore_, allows modular simulation of controller and PM nodes to run on different operating systems, computing platforms, and programming languages. [This repository](https://github.com/ControlCore-Project/concore/) consists of _concore_ source code. The _concore_ documentation can be found [here](https://control-core.readthedocs.io/en/latest/index.html). For a more scientific documentation, please read our extensive [open-access research paper](https://doi.org/10.1109/ACCESS.2022.3161471). +* _concore_: The CONTROL-CORE protocol, known as _concore_, allows modular simulation of controller and PM nodes to run on different operating systems, computing platforms, and programming languages. [This repository](https://github.com/ControlCore-Project/concore/) consists of _concore_ source code. The _concore_ documentation can be found [here](https://control-core.readthedocs.io/en/latest/index.html). + +For a detailed and more scientific documentation, please read our extensive [open-access research paper](https://doi.org/10.1109/ACCESS.2022.3161471). This paper has a complete discussion on the CONTROL-CORE architecture and deployment, together with the commands to execute the studies in different programming languages and programming environments (Ubuntu, Windows, MacOS, Docker, and distributed execution). * _concore_ Editor: This is the front-end for CONTROL-CORE. We forked [DHGWorkflow](https://github.com/ControlCore-Project/DHGWorkflow), a sibling project we developed, and extend it as the _concore_ Editor. Please check out the [dev branch](https://github.com/ControlCore-Project/DHGWorkflow/tree/dev) for the _concore_ Editor. From 806a30432bc640da1f7107deb0405068d88d24fc Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 00:53:42 -0400 Subject: [PATCH 011/113] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 5159532..b301d78 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,9 @@ For a detailed and more scientific documentation, please read our extensive [ope _concore_ enables composing studies from programs developed in different languages. Currently supported languages are, Python, Matlab/Octave, Verilog, and C++. The studies are designed through the visual _concore_ Editor (DHGWorkflow) and interpreted into _concore_ through its parser. Neural control systems consist of loops (dicycles). Therefore, they cannot be represented by classic workflow standards (such as CWL or WDL). Therefore, _concore_ addresses a significant research gap to model closed-loop neuromodulation control systems. The _concore_ protocol shares data between the programs through file sharing, with no centralized entity (a broker or an orchestrator) to arbitrate communications between the programs. (In the distributed executions, the CONTROL-CORE Mediator enables connecting the disjoint pieces of the study through REST APIs). + +# Installation and Getting Started Guide + Please follow the [ReadTheDocs](https://control-core.readthedocs.io/en/latest/index.html) documentation and the [_concore-lite_](https://github.com/ControlCore-Project/concore-lite) repository to get started quick. Installation instructions for concore can be found [here](https://control-core.readthedocs.io/en/latest/installation.html). Usage instructions can be found [here](https://control-core.readthedocs.io/en/latest/usage.html). From c5ee70953b24c734143c1409f0dc74be254cad92 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 00:55:15 -0400 Subject: [PATCH 012/113] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b301d78..c02a7e4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ -# The CONTROL-CORE Framework +# CONTROL-CORE: A Framework for Simulationand Design of Closed-Loop Peripheral Neuromodulation Control Systems + [CONTROL-CORE](https://github.com/ControlCore-Project/) is a design and simulation framework for closed-loop peripheral neuromodulation control systems. At its center is _concore_, a lightweight protocol to simulate neuromodulation control systems. This repository consists of the implementation of _concore_ protocol and sample (demo and neuromodulation control systems) studies. In addition to its default standard Python implementation, _concore_ also supports developing studies in Matlab/Octave, Verilog, and C++. _concore_ also aims to support more language programs in the future. +# The CONTROL-CORE Framework + The CONTROL-CORE framework consists of the below projects. * _concore_: The CONTROL-CORE protocol, known as _concore_, allows modular simulation of controller and PM nodes to run on different operating systems, computing platforms, and programming languages. [This repository](https://github.com/ControlCore-Project/concore/) consists of _concore_ source code. The _concore_ documentation can be found [here](https://control-core.readthedocs.io/en/latest/index.html). From ad656e5bc97cee19b8ee825a5848f8185c3e64b4 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 00:59:19 -0400 Subject: [PATCH 013/113] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c02a7e4..e536890 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,9 @@ The CONTROL-CORE framework consists of the below projects. -* _concore_: The CONTROL-CORE protocol, known as _concore_, allows modular simulation of controller and PM nodes to run on different operating systems, computing platforms, and programming languages. [This repository](https://github.com/ControlCore-Project/concore/) consists of _concore_ source code. The _concore_ documentation can be found [here](https://control-core.readthedocs.io/en/latest/index.html). +* _concore_: The CONTROL-CORE protocol, known as _concore_, allows modular simulation of controller and PM nodes to run on different operating systems, computing platforms, and programming languages. [This repository](https://github.com/ControlCore-Project/concore/) consists of _concore_ source code. The _concore_ documentation can be found [here](https://control-core.readthedocs.io/en/latest/index.html). A _concore_ study can be developed from programss written in different languages. That means, _concore_ facilitates a seamless communication across codes developed in different languages that it supports, through its simple file-based data sharing between the programs. -For a detailed and more scientific documentation, please read our extensive [open-access research paper](https://doi.org/10.1109/ACCESS.2022.3161471). This paper has a complete discussion on the CONTROL-CORE architecture and deployment, together with the commands to execute the studies in different programming languages and programming environments (Ubuntu, Windows, MacOS, Docker, and distributed execution). +For a detailed and more scientific documentation, please read our extensive [open-access research paper on CONTROL-CORE](https://doi.org/10.1109/ACCESS.2022.3161471). This paper has a complete discussion on the CONTROL-CORE architecture and deployment, together with the commands to execute the studies in different programming languages and programming environments (Ubuntu, Windows, MacOS, Docker, and distributed execution). * _concore_ Editor: This is the front-end for CONTROL-CORE. We forked [DHGWorkflow](https://github.com/ControlCore-Project/DHGWorkflow), a sibling project we developed, and extend it as the _concore_ Editor. Please check out the [dev branch](https://github.com/ControlCore-Project/DHGWorkflow/tree/dev) for the _concore_ Editor. From d7066c200b36e0df87bb1e9b6807dc4aa4befb1a Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 00:59:51 -0400 Subject: [PATCH 014/113] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e536890..e802f90 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,6 @@ The CONTROL-CORE framework consists of the below projects. * _concore_: The CONTROL-CORE protocol, known as _concore_, allows modular simulation of controller and PM nodes to run on different operating systems, computing platforms, and programming languages. [This repository](https://github.com/ControlCore-Project/concore/) consists of _concore_ source code. The _concore_ documentation can be found [here](https://control-core.readthedocs.io/en/latest/index.html). A _concore_ study can be developed from programss written in different languages. That means, _concore_ facilitates a seamless communication across codes developed in different languages that it supports, through its simple file-based data sharing between the programs. -For a detailed and more scientific documentation, please read our extensive [open-access research paper on CONTROL-CORE](https://doi.org/10.1109/ACCESS.2022.3161471). This paper has a complete discussion on the CONTROL-CORE architecture and deployment, together with the commands to execute the studies in different programming languages and programming environments (Ubuntu, Windows, MacOS, Docker, and distributed execution). - * _concore_ Editor: This is the front-end for CONTROL-CORE. We forked [DHGWorkflow](https://github.com/ControlCore-Project/DHGWorkflow), a sibling project we developed, and extend it as the _concore_ Editor. Please check out the [dev branch](https://github.com/ControlCore-Project/DHGWorkflow/tree/dev) for the _concore_ Editor. * _Mediator_: The [Mediator](https://github.com/ControlCore-Project/mediator) allows the CONTROL-CORE studies to be distributed and run, rather than having all the programs that construct a study to be run just from a centralized location. @@ -18,6 +16,8 @@ For a detailed and more scientific documentation, please read our extensive [ope * documentation: The [source code repository](https://github.com/ControlCore-Project/documentation) of the ReadTheDocs documentation of CONTROL-CORE. +For a detailed and more scientific documentation, please read our extensive [open-access research paper on CONTROL-CORE](https://doi.org/10.1109/ACCESS.2022.3161471). This paper has a complete discussion on the CONTROL-CORE architecture and deployment, together with the commands to execute the studies in different programming languages and programming environments (Ubuntu, Windows, MacOS, Docker, and distributed execution). + # The _concore_ Protocol From ca5897633724678b1a885f3c55a7d33557cef7cd Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 01:00:12 -0400 Subject: [PATCH 015/113] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e802f90..13e9fb0 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,6 @@ The CONTROL-CORE framework consists of the below projects. * documentation: The [source code repository](https://github.com/ControlCore-Project/documentation) of the ReadTheDocs documentation of CONTROL-CORE. -For a detailed and more scientific documentation, please read our extensive [open-access research paper on CONTROL-CORE](https://doi.org/10.1109/ACCESS.2022.3161471). This paper has a complete discussion on the CONTROL-CORE architecture and deployment, together with the commands to execute the studies in different programming languages and programming environments (Ubuntu, Windows, MacOS, Docker, and distributed execution). - # The _concore_ Protocol @@ -30,6 +28,9 @@ Please follow the [ReadTheDocs](https://control-core.readthedocs.io/en/latest/in Installation instructions for concore can be found [here](https://control-core.readthedocs.io/en/latest/installation.html). Usage instructions can be found [here](https://control-core.readthedocs.io/en/latest/usage.html). +For a detailed and more scientific documentation, please read our extensive [open-access research paper on CONTROL-CORE](https://doi.org/10.1109/ACCESS.2022.3161471). This paper has a complete discussion on the CONTROL-CORE architecture and deployment, together with the commands to execute the studies in different programming languages and programming environments (Ubuntu, Windows, MacOS, Docker, and distributed execution). + + # The _concore_ Repository _concore contains programs (such as physiological models or more commonly called "PMs" and controllers) and studies (i.e., graphml files that represents the studies as workflows). The _wrappers_ enable seamlessly extending a study into a distributed one with the CONTROL-CORE Mediator. From 0abd80940a8c6a18f053c07b20c3cc2674514fc6 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 01:10:27 -0400 Subject: [PATCH 016/113] Update README.md community outreach --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 13e9fb0..3737e9a 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,12 @@ The _concore_ discussion forum can be found [here](https://github.com/ControlCor Please make sure to send your _concore_ pull requests to the [dev branch](https://github.com/ControlCore-Project/concore/tree/dev). +# Community Outreach + +The CONTROL-CORE project has tremendously benefitted from open-source. We have been a part of the Google Summer of Code (GSoC), via the Department of Biomedical Informatics, Emory University as the mentoring organization. DHGWorkflow (which is adopted as the _concore_ Editor) was developed by the GSoC 2021 contributor. For GSoC 2022, we have 2 contributors - one working on _concore_ Editor and the other one on the _concore_ itself. + +Please use the GitHub discussion forums for user-queries. For GSoC and similar open-source contributions, as well as for other real-time user queries, feel free to join the Emory BMI slack workspace using the link - http://bit.ly/emory-bmi and find the room concore. + # Citing _concore_ If you use _concore_ in your research, please cite the below paper: From f29fb09304d8a5b42b70911cd1531ab950cd23a1 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 01:16:05 -0400 Subject: [PATCH 017/113] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3737e9a..cad5a52 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ Please make sure to send your _concore_ pull requests to the [dev branch](https: The CONTROL-CORE project has tremendously benefitted from open-source. We have been a part of the Google Summer of Code (GSoC), via the Department of Biomedical Informatics, Emory University as the mentoring organization. DHGWorkflow (which is adopted as the _concore_ Editor) was developed by the GSoC 2021 contributor. For GSoC 2022, we have 2 contributors - one working on _concore_ Editor and the other one on the _concore_ itself. -Please use the GitHub discussion forums for user-queries. For GSoC and similar open-source contributions, as well as for other real-time user queries, feel free to join the Emory BMI slack workspace using the link - http://bit.ly/emory-bmi and find the room concore. +Please use the GitHub discussion forums for user-queries. For GSoC and similar open-source contributions, as well as for other real-time user queries, feel free to join the Emory BMI slack workspace using the link - http://bit.ly/emory-bmi and find the channel "concore." # Citing _concore_ From 039a57a3ef1aaca31778396188d661d6956df587 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 01:27:08 -0400 Subject: [PATCH 018/113] Create draft-pdf.yml --- .github/workflows/draft-pdf.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/workflows/draft-pdf.yml diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml new file mode 100644 index 0000000..cf6d3db --- /dev/null +++ b/.github/workflows/draft-pdf.yml @@ -0,0 +1,23 @@ +on: [push] + +jobs: + paper: + runs-on: ubuntu-latest + name: Paper Draft + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Build draft PDF + uses: openjournals/openjournals-draft-action@master + with: + journal: joss + # This should be the path to the paper within your repo. + paper-path: paper.md + - name: Upload + uses: actions/upload-artifact@v1 + with: + name: paper + # This is the output path where Pandoc will write the compiled + # PDF. Note, this should be the same directory as the input + # paper.md + path: paper.pdf From 7056c16de3717aee82f783f3fef195300810868c Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 01:30:19 -0400 Subject: [PATCH 019/113] Create paper.md --- paper.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 paper.md diff --git a/paper.md b/paper.md new file mode 100644 index 0000000..bd9c3c3 --- /dev/null +++ b/paper.md @@ -0,0 +1,8 @@ +--- +title: 'CONTROL-CORE: A Framework for Simulationand Design of Closed-Loop Peripheral Neuromodulation Control Systems' +tags: + - Neuroscience + - Control Systems + - Python + - Interoperability + - Workflows From 6dc9ef2adf932ac7ca222f03775d53a8610c31a4 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 01:33:03 -0400 Subject: [PATCH 020/113] Update paper.md --- paper.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/paper.md b/paper.md index bd9c3c3..514b15c 100644 --- a/paper.md +++ b/paper.md @@ -6,3 +6,9 @@ tags: - Python - Interoperability - Workflows +--- +# Summary + +# Statement of need + +# References From 31e4d57e4b327309138f0a8b5acff183fc36d6f0 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 01:51:56 -0400 Subject: [PATCH 021/113] Update paper.md --- paper.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/paper.md b/paper.md index 514b15c..963cc44 100644 --- a/paper.md +++ b/paper.md @@ -6,6 +6,36 @@ tags: - Python - Interoperability - Workflows +authors: + - name: Pradeeban Kathiravelu + orcid: 0000-0002-0335-0458 + equal-contrib: true + corresponding: true + affiliation: 1 + - name: Mark Arnold + orchid: 0000-0001-5175-2374 + equal-contrib: true + affiliation: 2 + - name: Shubham Awasthi + orchid: 0000-0002-9913-9875 + affiliation: 3 + - name: Mayuresh V. Kothare + orchid: 0000-0001-7681-7445 + affiliation: 2 + - name: Babak Mahmoudi + affiliation: "1, 4" + +affiliations: + - name: Department of Biomedical Informatics, Emory University, Atlanta, GA 30322, USA + index: 1 + - name: Department of Chemical \& Biomolecular Engineering, Lehigh University, Bethlehem, PA 18015, USA + index: 2 + - name: School of Information Technology and Engineering, Vellore Institute of Technology, Vellore, TN 632014, India + index: 3 + - name: Department of Biomedical Engineering, Georgia Institute of Technology, Atlanta, GA 30332, USA + index: 4 +date: 9 August 2022 +bibliography: paper.bib --- # Summary From eedae7e587e1632d983ee2f5f66be90d27cba412 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 01:52:39 -0400 Subject: [PATCH 022/113] Create paper.bib --- paper.bib | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 paper.bib diff --git a/paper.bib b/paper.bib new file mode 100644 index 0000000..9314048 --- /dev/null +++ b/paper.bib @@ -0,0 +1,9 @@ +@article{kathiravelu2022control, + title={CONTROL-CORE: A Framework for Simulation and Design of Closed-Loop Peripheral Neuromodulation Control Systems}, + author={Kathiravelu, Pradeeban and Arnold, Mark and Fleischer, Jake and Yao, Yuyu and Awasthi, Shubham and Goel, Aviral Kumar and Branen, Andrew and Sarikhani, Parisa and Kumar, Gautam and Kothare, Mayuresh V and others}, + journal={IEEE Access}, + volume={10}, + pages={36268--36285}, + year={2022}, + publisher={IEEE} +} From a0261f89a1eaca2d5510a024f0d3a79e5bee9459 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 01:56:20 -0400 Subject: [PATCH 023/113] Update paper.md --- paper.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper.md b/paper.md index 963cc44..e920fe2 100644 --- a/paper.md +++ b/paper.md @@ -1,5 +1,5 @@ --- -title: 'CONTROL-CORE: A Framework for Simulationand Design of Closed-Loop Peripheral Neuromodulation Control Systems' +title: '_concore_ for Simulating Closed-Loop Peripheral Neuromodulation Control Systems' tags: - Neuroscience - Control Systems From e7763d18d2adf945c01fbf5865afac9f6cbc52dd Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 02:08:41 -0400 Subject: [PATCH 024/113] Update paper.md --- paper.md | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/paper.md b/paper.md index e920fe2..3852239 100644 --- a/paper.md +++ b/paper.md @@ -16,14 +16,28 @@ authors: orchid: 0000-0001-5175-2374 equal-contrib: true affiliation: 2 + - name: Yuyu Yao + affiliation: 2 + - name: Jake Fleischer + affiliation: 2 - name: Shubham Awasthi orchid: 0000-0002-9913-9875 affiliation: 3 + - name: Aviral Kumar Goel + affiliation: 4 + - name: Amit Kumar + affiliation: 5 - name: Mayuresh V. Kothare orchid: 0000-0001-7681-7445 affiliation: 2 + - name: Andrew Branen + affiliation: 6 + - name: Parisa Sarikhani + affiliation: 1 + - name: Gautam Kumar + affiliation: 6 - name: Babak Mahmoudi - affiliation: "1, 4" + affiliation: "1, 7" affiliations: - name: Department of Biomedical Informatics, Emory University, Atlanta, GA 30322, USA @@ -32,12 +46,19 @@ affiliations: index: 2 - name: School of Information Technology and Engineering, Vellore Institute of Technology, Vellore, TN 632014, India index: 3 - - name: Department of Biomedical Engineering, Georgia Institute of Technology, Atlanta, GA 30332, USA + - name: Department of Computer Science and Information Systems, Birla Institute of Technology and Science, Pilani, K. K. Birla Goa Campus, Sancoale, GA 403726, India. index: 4 + - name: School of Engineering, Jawaharlal Nehru University, New Delhi, 110067, India. + index: 5 + - name: Department of Chemical and Materials Engineering, San José State University, San José, CA, 95192, USA. + index: 6 + - name: Department of Biomedical Engineering, Georgia Institute of Technology, Atlanta, GA 30332, USA + index: 7 date: 9 August 2022 bibliography: paper.bib --- # Summary +The scientific contributions of _concore_ protocol and the CONTROL-CORE framework have been extensively discussed in our previous work~\cite{kathiravelu2022control}. # Statement of need From 49557e216fe22d3d8758769ed6ee3d1264b0d33a Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 02:14:56 -0400 Subject: [PATCH 025/113] Update paper.md --- paper.md | 1 + 1 file changed, 1 insertion(+) diff --git a/paper.md b/paper.md index 3852239..b81fc33 100644 --- a/paper.md +++ b/paper.md @@ -56,6 +56,7 @@ affiliations: index: 7 date: 9 August 2022 bibliography: paper.bib + --- # Summary The scientific contributions of _concore_ protocol and the CONTROL-CORE framework have been extensively discussed in our previous work~\cite{kathiravelu2022control}. From 164edd86d909761fbdd5718dcd1c2faa5c9dc8b8 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 02:20:31 -0400 Subject: [PATCH 026/113] Update paper.md --- paper.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper.md b/paper.md index b81fc33..9da062a 100644 --- a/paper.md +++ b/paper.md @@ -59,7 +59,7 @@ bibliography: paper.bib --- # Summary -The scientific contributions of _concore_ protocol and the CONTROL-CORE framework have been extensively discussed in our previous work~\cite{kathiravelu2022control}. +The scientific contributions of _concore_ protocol and the CONTROL-CORE framework have been extensively discussed in our previous work [kathiravelu2022control]. # Statement of need From 2de923fccdcd554f1dd087d58a41b75529bddf1e Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 02:23:50 -0400 Subject: [PATCH 027/113] Update paper.md --- paper.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper.md b/paper.md index 9da062a..915a1b3 100644 --- a/paper.md +++ b/paper.md @@ -59,7 +59,7 @@ bibliography: paper.bib --- # Summary -The scientific contributions of _concore_ protocol and the CONTROL-CORE framework have been extensively discussed in our previous work [kathiravelu2022control]. +The scientific contributions of _concore_ protocol and the CONTROL-CORE framework have been extensively discussed in our previous work~[@kathiravelu2022control]. # Statement of need From ab6dac40f4f795db4efd04ff522fd0304b2bfa37 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 02:43:51 -0400 Subject: [PATCH 028/113] Update paper.md Acknowledgments --- paper.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/paper.md b/paper.md index 915a1b3..84e50e3 100644 --- a/paper.md +++ b/paper.md @@ -59,8 +59,12 @@ bibliography: paper.bib --- # Summary -The scientific contributions of _concore_ protocol and the CONTROL-CORE framework have been extensively discussed in our previous work~[@kathiravelu2022control]. +The scientific contributions of _concore_ protocol and the CONTROL-CORE framework have been extensively discussed in our previous work [@kathiravelu2022control]. # Statement of need +# Acknowledgements + +This work was supported in part by the National Institutes of Health under Grant OT2OD030535 and Google Summer of Code (GSoC) 2021 and 2022 projects. The authors acknowledge the guidance from Tyler Best and Herbert Sauro. The authors appreciate the assistance with OSPARC that they received from the staff at IT'IS, especially Sylvain Anderegg, Pedro Crespo-Valero, Elisabetta Iavarone, Andrei Neagu, Esra Neufeld, and Katie Zhuang. + # References From 56f25bf1f24032f4f439d0c30bb70cb55490a3e1 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 02:46:33 -0400 Subject: [PATCH 029/113] Update paper.md --- paper.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paper.md b/paper.md index 84e50e3..000f4ca 100644 --- a/paper.md +++ b/paper.md @@ -59,11 +59,11 @@ bibliography: paper.bib --- # Summary -The scientific contributions of _concore_ protocol and the CONTROL-CORE framework have been extensively discussed in our previous work [@kathiravelu2022control]. +The scientific contributions of _concore_ protocol and the CONTROL-CORE framework, along with sample closed-loop neuromodulation control systems workflows have been extensively discussed in our previous work [@kathiravelu2022control]. # Statement of need -# Acknowledgements +# Acknowledgment This work was supported in part by the National Institutes of Health under Grant OT2OD030535 and Google Summer of Code (GSoC) 2021 and 2022 projects. The authors acknowledge the guidance from Tyler Best and Herbert Sauro. The authors appreciate the assistance with OSPARC that they received from the staff at IT'IS, especially Sylvain Anderegg, Pedro Crespo-Valero, Elisabetta Iavarone, Andrei Neagu, Esra Neufeld, and Katie Zhuang. From 544e26cbfcb9d38fa20ee2892f8f1ab490987e26 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 03:17:45 -0400 Subject: [PATCH 030/113] Update paper.md Statement of need --- paper.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/paper.md b/paper.md index 000f4ca..84eaa75 100644 --- a/paper.md +++ b/paper.md @@ -63,6 +63,9 @@ The scientific contributions of _concore_ protocol and the CONTROL-CORE framewor # Statement of need +Workflow frameworks can run a series of containerized programs, with predefined start and end steps, as a modular workflow. Such workflows do not have a cycle, by definition. A neuromodulation control system comprises feedback loops represented by directed cycles (dicycles). The presence of a dicycle violates the core tenet of classic workflow frameworks, such as Common Workflow Language (CWL) and Workflow Description Language (WDL), which expect the studies to be represented by a directed acyclic graph (DAG). Furthermore, control systems run the same program multiple times as part of the execution with feedback. Consequently, overheads imposed by workflow frameworks, significantly when handling implementations across diverse programming languages and execution environments, are magnified in the case of a closed-loop execution. + +Interoperability plays a significant role in scientific research. Therefore, we should support the modeling and simulation of studies composed of programs (such as the controllers and PMs) developed in different programming languages, executing on different execution modes (local, distributed, or containerized). _concore_ is designed for efficiency in control systems' specific use cases, supporting interoperable communication and data exchange between programs from independent researchers. The simple file-based communication and synchronization, without a centralized workflow orchestrator, enables interoperable executions with high performance. # Acknowledgment This work was supported in part by the National Institutes of Health under Grant OT2OD030535 and Google Summer of Code (GSoC) 2021 and 2022 projects. The authors acknowledge the guidance from Tyler Best and Herbert Sauro. The authors appreciate the assistance with OSPARC that they received from the staff at IT'IS, especially Sylvain Anderegg, Pedro Crespo-Valero, Elisabetta Iavarone, Andrei Neagu, Esra Neufeld, and Katie Zhuang. From 23108f1c19248d4cbeb3fdaa5ca35ea62dc259f2 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 03:38:19 -0400 Subject: [PATCH 031/113] Update paper.md --- paper.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/paper.md b/paper.md index 84eaa75..442d9b0 100644 --- a/paper.md +++ b/paper.md @@ -59,7 +59,16 @@ bibliography: paper.bib --- # Summary -The scientific contributions of _concore_ protocol and the CONTROL-CORE framework, along with sample closed-loop neuromodulation control systems workflows have been extensively discussed in our previous work [@kathiravelu2022control]. +Closed-loop Vagus Nerve Stimulation (VNS) based on physiological feedback signals is a promising approach to regulating organ functions and developing therapeutic devices. Designing closed-loop neurostimulation systems requires simulation environments and computing infrastructures that support i) modeling the physiological responses of organs under neuromodulation, also known as physiological models (PMs), and ii) the interaction between the PMs and the neuromodulation control algorithms. However, existing simulation platforms do not support closed-loop VNS control systems modeling without extensive rewriting of computer code and manual deployment and configuration of programs. + +The CONTROL-CORE framework aims to develop a flexible software platform for designing and implementing closed-loop VNS systems. The CONTROL-CORE framework consists of the _concore_ protocol at its core. In addition, it contains a visual _concore_ editor and a Mediator architecture that facilitates a distributed execution of _concore_ studies. + + +This paper presents the _concore_ protocol, which allows seamless communication between the programs (such as PMs and controllers) that compose a study. _concore_ allows simulations to run on different operating systems, be developed in various programming languages (such as Matlab, Python, C++, and Verilog), and be run locally, in containers, and in a distributed fashion. The _concore_ Editor lets the users to create studies from the programs in a visual drag-and-drop manner and store them as a GraphML file. _concore_ consists of a parser that parses the studies represented in the GraphML file and start the execution of the studies until the specified maxtime value is met. + + +We tested the \projectname platform in the context of closed-loop control of cardiac physiological models, including pulsatile and nonpulsatile rat models. These were tested using various controllers such as Model Predictive Control and Long-Short-Term Memory-based controllers. Our wide range of use cases and evaluations show the performance, flexibility, and usability of the \projectname platform. The scientific contributions of _concore_ protocol and the CONTROL-CORE framework, along with these sample closed-loop neuromodulation control systems studies have been extensively discussed in our previous work [@kathiravelu2022control]. + # Statement of need From 00b582ecd5e31b36e1b48d4ae752cbd50175c3a7 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 03:40:41 -0400 Subject: [PATCH 032/113] Update paper.md --- paper.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper.md b/paper.md index 442d9b0..6a50228 100644 --- a/paper.md +++ b/paper.md @@ -67,7 +67,7 @@ The CONTROL-CORE framework aims to develop a flexible software platform for desi This paper presents the _concore_ protocol, which allows seamless communication between the programs (such as PMs and controllers) that compose a study. _concore_ allows simulations to run on different operating systems, be developed in various programming languages (such as Matlab, Python, C++, and Verilog), and be run locally, in containers, and in a distributed fashion. The _concore_ Editor lets the users to create studies from the programs in a visual drag-and-drop manner and store them as a GraphML file. _concore_ consists of a parser that parses the studies represented in the GraphML file and start the execution of the studies until the specified maxtime value is met. -We tested the \projectname platform in the context of closed-loop control of cardiac physiological models, including pulsatile and nonpulsatile rat models. These were tested using various controllers such as Model Predictive Control and Long-Short-Term Memory-based controllers. Our wide range of use cases and evaluations show the performance, flexibility, and usability of the \projectname platform. The scientific contributions of _concore_ protocol and the CONTROL-CORE framework, along with these sample closed-loop neuromodulation control systems studies have been extensively discussed in our previous work [@kathiravelu2022control]. +We tested _concore_ in the context of closed-loop control of cardiac physiological models, including pulsatile and nonpulsatile rat models. These were tested using various controllers such as Model Predictive Control and Long-Short-Term Memory-based controllers. Our wide range of use cases and evaluations show the performance, flexibility, and usability of _concore_. The scientific contributions of _concore_ protocol and the CONTROL-CORE framework, along with these sample closed-loop neuromodulation control systems studies have been extensively discussed in our previous work [@kathiravelu2022control]. # Statement of need From eb7edb9084139f3eab5856277de603cf996e7d13 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 12:48:04 -0400 Subject: [PATCH 033/113] Update paper.md --- paper.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/paper.md b/paper.md index 6a50228..1ea9a96 100644 --- a/paper.md +++ b/paper.md @@ -27,15 +27,15 @@ authors: affiliation: 4 - name: Amit Kumar affiliation: 5 - - name: Mayuresh V. Kothare - orchid: 0000-0001-7681-7445 - affiliation: 2 - name: Andrew Branen affiliation: 6 - name: Parisa Sarikhani affiliation: 1 - name: Gautam Kumar affiliation: 6 + - name: Mayuresh V. Kothare + orchid: 0000-0001-7681-7445 + affiliation: 2 - name: Babak Mahmoudi affiliation: "1, 7" From 47a902c9a9cd92cecb37d4c9ac6d84e80a105e3e Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 13:29:53 -0400 Subject: [PATCH 034/113] Update paper.md --- paper.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/paper.md b/paper.md index 1ea9a96..263502a 100644 --- a/paper.md +++ b/paper.md @@ -16,6 +16,8 @@ authors: orchid: 0000-0001-5175-2374 equal-contrib: true affiliation: 2 + - name: Parisa Sarikhani + affiliation: 1 - name: Yuyu Yao affiliation: 2 - name: Jake Fleischer @@ -29,8 +31,6 @@ authors: affiliation: 5 - name: Andrew Branen affiliation: 6 - - name: Parisa Sarikhani - affiliation: 1 - name: Gautam Kumar affiliation: 6 - name: Mayuresh V. Kothare @@ -61,10 +61,10 @@ bibliography: paper.bib # Summary Closed-loop Vagus Nerve Stimulation (VNS) based on physiological feedback signals is a promising approach to regulating organ functions and developing therapeutic devices. Designing closed-loop neurostimulation systems requires simulation environments and computing infrastructures that support i) modeling the physiological responses of organs under neuromodulation, also known as physiological models (PMs), and ii) the interaction between the PMs and the neuromodulation control algorithms. However, existing simulation platforms do not support closed-loop VNS control systems modeling without extensive rewriting of computer code and manual deployment and configuration of programs. -The CONTROL-CORE framework aims to develop a flexible software platform for designing and implementing closed-loop VNS systems. The CONTROL-CORE framework consists of the _concore_ protocol at its core. In addition, it contains a visual _concore_ editor and a Mediator architecture that facilitates a distributed execution of _concore_ studies. +The CONTROL-CORE framework aims to develop a flexible software platform for designing and implementing closed-loop VNS systems. The CONTROL-CORE framework consists of the _concore_ protocol at its core. The _concore_ protocol allows seamless synchronized communication between the programs (such as PMs and controllers) that compose a study as a workflow. _concore_ allows simulations to run on different operating systems, be developed in various programming languages (such as Matlab, Python, C++, and Verilog), and be run locally, in containers, and in a distributed fashion. CONTROL-CORE also consists of a Mediator implementation that facilitates the distributed execution of _concore_ studies through REST calls over the Internet. -This paper presents the _concore_ protocol, which allows seamless communication between the programs (such as PMs and controllers) that compose a study. _concore_ allows simulations to run on different operating systems, be developed in various programming languages (such as Matlab, Python, C++, and Verilog), and be run locally, in containers, and in a distributed fashion. The _concore_ Editor lets the users to create studies from the programs in a visual drag-and-drop manner and store them as a GraphML file. _concore_ consists of a parser that parses the studies represented in the GraphML file and start the execution of the studies until the specified maxtime value is met. +CONTROL-CORE contains a lightweight browser-based visual _concore_ editor, which lets the users create studies from the programs in a drag-and-drop manner. It allows creation of directed hypergraphs to represent the studies with closed-loop from modular programs and exporting the directed hypergraph workflows as GraphML files. _concore_ consists of a parser that parses and interprets the studies represented in the GraphML file and execute the studies seamlessly as modular workflows until a specified maxtime value for the study (exit condition, to ensure the closed-loop workflow does not execute forever) is met. We tested _concore_ in the context of closed-loop control of cardiac physiological models, including pulsatile and nonpulsatile rat models. These were tested using various controllers such as Model Predictive Control and Long-Short-Term Memory-based controllers. Our wide range of use cases and evaluations show the performance, flexibility, and usability of _concore_. The scientific contributions of _concore_ protocol and the CONTROL-CORE framework, along with these sample closed-loop neuromodulation control systems studies have been extensively discussed in our previous work [@kathiravelu2022control]. @@ -72,9 +72,10 @@ We tested _concore_ in the context of closed-loop control of cardiac physiologic # Statement of need -Workflow frameworks can run a series of containerized programs, with predefined start and end steps, as a modular workflow. Such workflows do not have a cycle, by definition. A neuromodulation control system comprises feedback loops represented by directed cycles (dicycles). The presence of a dicycle violates the core tenet of classic workflow frameworks, such as Common Workflow Language (CWL) and Workflow Description Language (WDL), which expect the studies to be represented by a directed acyclic graph (DAG). Furthermore, control systems run the same program multiple times as part of the execution with feedback. Consequently, overheads imposed by workflow frameworks, significantly when handling implementations across diverse programming languages and execution environments, are magnified in the case of a closed-loop execution. +Existing software ecosystems are not tailored for the modeling and simulation of closed-loop control systems developed in multiple programming languages. Containerization with frameworks such as Docker has become popular across the scientific community as containerization enables reproducible science with minimal effort. Workflow frameworks can execute a series of containerized programs without human-in-the-loop, with services/programs as predefined start and end step. Workflows facilitate a modular development as they enable execution of a series of a programs without manually managing the each program individually. Typically, these programs are developed and shared across the users containerized services. Such workflows do not have a cycle, by definition. On the other hand, a neuromodulation control system comprises feedback loops represented by directed cycles (dicycles). The presence of a dicycle violates the core tenet of classic workflow frameworks, such as Common Workflow Language (CWL) and Workflow Description Language (WDL), which expect the studies to be represented by a directed acyclic graph (DAG). Furthermore, control systems run the same program multiple times as part of the execution with feedback. Consequently, overheads imposed by workflow frameworks, significantly when handling implementations across diverse programming languages and execution environments, are magnified in the case of a closed-loop execution. Interoperability plays a significant role in scientific research. Therefore, we should support the modeling and simulation of studies composed of programs (such as the controllers and PMs) developed in different programming languages, executing on different execution modes (local, distributed, or containerized). _concore_ is designed for efficiency in control systems' specific use cases, supporting interoperable communication and data exchange between programs from independent researchers. The simple file-based communication and synchronization, without a centralized workflow orchestrator, enables interoperable executions with high performance. + # Acknowledgment This work was supported in part by the National Institutes of Health under Grant OT2OD030535 and Google Summer of Code (GSoC) 2021 and 2022 projects. The authors acknowledge the guidance from Tyler Best and Herbert Sauro. The authors appreciate the assistance with OSPARC that they received from the staff at IT'IS, especially Sylvain Anderegg, Pedro Crespo-Valero, Elisabetta Iavarone, Andrei Neagu, Esra Neufeld, and Katie Zhuang. From d3a43ed96f4bd37246d83266cb0e819c72a009e9 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 14:28:00 -0400 Subject: [PATCH 035/113] Update paper.md --- paper.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/paper.md b/paper.md index 263502a..15c016a 100644 --- a/paper.md +++ b/paper.md @@ -59,22 +59,27 @@ bibliography: paper.bib --- # Summary -Closed-loop Vagus Nerve Stimulation (VNS) based on physiological feedback signals is a promising approach to regulating organ functions and developing therapeutic devices. Designing closed-loop neurostimulation systems requires simulation environments and computing infrastructures that support i) modeling the physiological responses of organs under neuromodulation, also known as physiological models (PMs), and ii) the interaction between the PMs and the neuromodulation control algorithms. However, existing simulation platforms do not support closed-loop VNS control systems modeling without extensive rewriting of computer code and manual deployment and configuration of programs. -The CONTROL-CORE framework aims to develop a flexible software platform for designing and implementing closed-loop VNS systems. The CONTROL-CORE framework consists of the _concore_ protocol at its core. The _concore_ protocol allows seamless synchronized communication between the programs (such as PMs and controllers) that compose a study as a workflow. _concore_ allows simulations to run on different operating systems, be developed in various programming languages (such as Matlab, Python, C++, and Verilog), and be run locally, in containers, and in a distributed fashion. CONTROL-CORE also consists of a Mediator implementation that facilitates the distributed execution of _concore_ studies through REST calls over the Internet. +The CONTROL-CORE framework is a flexible software platform for designing and implementing closed-loop Vagus Nerve Stimulation (VNS) systems in programming languages in diverse software environments. Its modular workflow approach for closed-loop executions of the VNS simulations aims to facilitate modeling organ functions as physiological models (PMs) and therapeutic devices in their early stages in a software environment. +The CONTROL-CORE framework consists of the _concore_ protocol at its core. The _concore_ protocol allows seamless synchronized communication between the programs (such as PMs and controllers) that compose a study as a workflow. _concore_ enables simulations to run on different operating systems, be developed in various programming languages (such as Matlab, Python, C++, and Verilog), and be run locally, in containers, and a distributed fashion. -CONTROL-CORE contains a lightweight browser-based visual _concore_ editor, which lets the users create studies from the programs in a drag-and-drop manner. It allows creation of directed hypergraphs to represent the studies with closed-loop from modular programs and exporting the directed hypergraph workflows as GraphML files. _concore_ consists of a parser that parses and interprets the studies represented in the GraphML file and execute the studies seamlessly as modular workflows until a specified maxtime value for the study (exit condition, to ensure the closed-loop workflow does not execute forever) is met. +CONTROL-CORE also consists of a Mediator implementation that facilitates the distributed execution of _concore_ studies through REST calls over the Internet. When the Mediator is deployed to enable inter-organization workflows with services spread across the Internet, access control and authentication mechanisms must be used to protect the shared data. The Mediator leverages the API key-based authentication provided by the Kong API gateway to enable such Internet deployment. +CONTROL-CORE contains a lightweight browser-based visual _concore_ editor, which lets the users create studies from the programs in a drag-and-drop manner. It allows the creation of directed hypergraphs to represent the studies with closed-loop from modular programs and exporting the directed hypergraph workflows as GraphML files. _concore_ consists of a parser that parses and interprets the studies represented in the GraphML file and executes the studies seamlessly as modular workflows until a specified maximum time value for the study is met. This exit condition ensures the closed-loop workflow does not run forever, as closed-loop studies do not contain a predefined end step, unlike the classic workflows with an end step. -We tested _concore_ in the context of closed-loop control of cardiac physiological models, including pulsatile and nonpulsatile rat models. These were tested using various controllers such as Model Predictive Control and Long-Short-Term Memory-based controllers. Our wide range of use cases and evaluations show the performance, flexibility, and usability of _concore_. The scientific contributions of _concore_ protocol and the CONTROL-CORE framework, along with these sample closed-loop neuromodulation control systems studies have been extensively discussed in our previous work [@kathiravelu2022control]. +# Statement of need +Existing software ecosystems are not tailored for the modeling and simulation of closed-loop control systems developed in multiple programming languages. Containerization with frameworks such as Docker has become popular across the scientific community as containerization enables reproducible science with minimal effort. Workflow frameworks can execute a series of containerized programs without human-in-the-loop, with services/programs as predefined start and end steps. Workflows facilitate modular development as they enable the execution of a series of programs without manually managing each program individually. Typically, these programs are developed and shared across the users as containerized services. Such workflows do not have a cycle, by definition. -# Statement of need +On the other hand, a neuromodulation control system comprises feedback loops represented by directed cycles (dicycles). The presence of a dicycle violates the core tenet of classic workflow frameworks, such as Common Workflow Language (CWL) and Workflow Description Language (WDL), which expect the studies to be represented by a directed acyclic graph (DAG). Furthermore, control systems run the same program multiple times as part of the execution with feedback. Consequently, overheads imposed by workflow frameworks, significantly when handling implementations across diverse programming languages and execution environments, are magnified in the case of a closed-loop execution. + +Interoperability plays a significant role in scientific research. Therefore, we should support the modeling and simulation of studies composed of programs developed in different programming languages, executing on different execution modes (local, distributed, or containerized). _concore_ is designed for efficiency in control systems' specific use cases, supporting interoperable communication and data exchange between programs from independent researchers. The simple file-based communication and synchronization of _concore_, without a centralized workflow orchestrator, enables interoperable executions with high performance. + +# Research works enabled by _concore_ -Existing software ecosystems are not tailored for the modeling and simulation of closed-loop control systems developed in multiple programming languages. Containerization with frameworks such as Docker has become popular across the scientific community as containerization enables reproducible science with minimal effort. Workflow frameworks can execute a series of containerized programs without human-in-the-loop, with services/programs as predefined start and end step. Workflows facilitate a modular development as they enable execution of a series of a programs without manually managing the each program individually. Typically, these programs are developed and shared across the users containerized services. Such workflows do not have a cycle, by definition. On the other hand, a neuromodulation control system comprises feedback loops represented by directed cycles (dicycles). The presence of a dicycle violates the core tenet of classic workflow frameworks, such as Common Workflow Language (CWL) and Workflow Description Language (WDL), which expect the studies to be represented by a directed acyclic graph (DAG). Furthermore, control systems run the same program multiple times as part of the execution with feedback. Consequently, overheads imposed by workflow frameworks, significantly when handling implementations across diverse programming languages and execution environments, are magnified in the case of a closed-loop execution. +The _concore_ protocol has been used to simulate closed-loop control of cardiac physiological models, with various controllers such as Model Predictive Control and Long-Short-Term Memory-based controllers. The scientific contributions of _concore_ protocol and the CONTROL-CORE framework, along with these sample closed-loop neuromodulation control systems use cases, have been extensively discussed in our previous work [@kathiravelu2022control]. -Interoperability plays a significant role in scientific research. Therefore, we should support the modeling and simulation of studies composed of programs (such as the controllers and PMs) developed in different programming languages, executing on different execution modes (local, distributed, or containerized). _concore_ is designed for efficiency in control systems' specific use cases, supporting interoperable communication and data exchange between programs from independent researchers. The simple file-based communication and synchronization, without a centralized workflow orchestrator, enables interoperable executions with high performance. # Acknowledgment From eadc13dc35719196a61b67d7e44bafca70507052 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 15:17:07 -0400 Subject: [PATCH 036/113] Update README.md --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index cad5a52..6762b6b 100644 --- a/README.md +++ b/README.md @@ -45,11 +45,6 @@ The _concore_ discussion forum can be found [here](https://github.com/ControlCor Please make sure to send your _concore_ pull requests to the [dev branch](https://github.com/ControlCore-Project/concore/tree/dev). -# Community Outreach - -The CONTROL-CORE project has tremendously benefitted from open-source. We have been a part of the Google Summer of Code (GSoC), via the Department of Biomedical Informatics, Emory University as the mentoring organization. DHGWorkflow (which is adopted as the _concore_ Editor) was developed by the GSoC 2021 contributor. For GSoC 2022, we have 2 contributors - one working on _concore_ Editor and the other one on the _concore_ itself. - -Please use the GitHub discussion forums for user-queries. For GSoC and similar open-source contributions, as well as for other real-time user queries, feel free to join the Emory BMI slack workspace using the link - http://bit.ly/emory-bmi and find the channel "concore." # Citing _concore_ From fc54f5c467ba60293e44bd02675aaea8ab709890 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 15:17:27 -0400 Subject: [PATCH 037/113] Update CONTRIBUTING.md --- CONTRIBUTING.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cd7189b..88a2d19 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -24,3 +24,10 @@ If you have questions and clarifications that are not bug reports, please use ou # Commits and pull requests New contributors are encouraged to submit pull requests, rather than directly committing even when you have committer access. Another developer can then review and merge your pull request. + + +# Community Outreach + +The CONTROL-CORE project has tremendously benefitted from open-source. We have been a part of the Google Summer of Code (GSoC), via the Department of Biomedical Informatics, Emory University as the mentoring organization. DHGWorkflow (which is adopted as the _concore_ Editor) was developed by the GSoC 2021 contributor. For GSoC 2022, we have 2 contributors - one working on _concore_ Editor and the other one on the _concore_ itself. + +Please use the GitHub discussion forums for user-queries. For GSoC and similar open-source contributions, as well as for other real-time user queries, feel free to join the Emory BMI slack workspace using the link - http://bit.ly/emory-bmi and find the channel "concore." From dbe4ec2d01e695f3efd88271981e60a47ca1a160 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 9 Aug 2022 19:07:00 -0400 Subject: [PATCH 038/113] Update paper.md --- paper.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/paper.md b/paper.md index 15c016a..e2fac7b 100644 --- a/paper.md +++ b/paper.md @@ -27,6 +27,8 @@ authors: affiliation: 3 - name: Aviral Kumar Goel affiliation: 4 + - name: Nan Li + affiliation: 1 - name: Amit Kumar affiliation: 5 - name: Andrew Branen From 5307470db65df9f500e36fef7cc51cf6cec6e36e Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 10 Aug 2022 11:52:39 -0400 Subject: [PATCH 039/113] Add arch diagram --- figures/joss-concore.png | Bin 0 -> 103941 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 figures/joss-concore.png diff --git a/figures/joss-concore.png b/figures/joss-concore.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1337649a07560eff5eca94b2f1095655f4d4f4 GIT binary patch literal 103941 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

3C_aOh%|}X^v+AT4iN0+f<}x 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 GY|4M~Ua;)| literal 0 HcmV?d00001 From 3ef7685c0c1fe4f0279bfc9a128c4b16f4e308e4 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 10 Aug 2022 11:54:46 -0400 Subject: [PATCH 040/113] Update paper.md --- paper.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/paper.md b/paper.md index e2fac7b..4c6332b 100644 --- a/paper.md +++ b/paper.md @@ -68,6 +68,8 @@ The CONTROL-CORE framework consists of the _concore_ protocol at its core. The _ CONTROL-CORE also consists of a Mediator implementation that facilitates the distributed execution of _concore_ studies through REST calls over the Internet. When the Mediator is deployed to enable inter-organization workflows with services spread across the Internet, access control and authentication mechanisms must be used to protect the shared data. The Mediator leverages the API key-based authentication provided by the Kong API gateway to enable such Internet deployment. +![A sample CONTROL-CORE distributed deployment spanning multiple sites](figures/joss-concore.png) + CONTROL-CORE contains a lightweight browser-based visual _concore_ editor, which lets the users create studies from the programs in a drag-and-drop manner. It allows the creation of directed hypergraphs to represent the studies with closed-loop from modular programs and exporting the directed hypergraph workflows as GraphML files. _concore_ consists of a parser that parses and interprets the studies represented in the GraphML file and executes the studies seamlessly as modular workflows until a specified maximum time value for the study is met. This exit condition ensures the closed-loop workflow does not run forever, as closed-loop studies do not contain a predefined end step, unlike the classic workflows with an end step. # Statement of need From 192aba724389a28d5e6c0070e3edd38271169126 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 10 Aug 2022 12:00:04 -0400 Subject: [PATCH 041/113] Update paper.md --- paper.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper.md b/paper.md index 4c6332b..d456fa3 100644 --- a/paper.md +++ b/paper.md @@ -66,7 +66,7 @@ The CONTROL-CORE framework is a flexible software platform for designing and imp The CONTROL-CORE framework consists of the _concore_ protocol at its core. The _concore_ protocol allows seamless synchronized communication between the programs (such as PMs and controllers) that compose a study as a workflow. _concore_ enables simulations to run on different operating systems, be developed in various programming languages (such as Matlab, Python, C++, and Verilog), and be run locally, in containers, and a distributed fashion. -CONTROL-CORE also consists of a Mediator implementation that facilitates the distributed execution of _concore_ studies through REST calls over the Internet. When the Mediator is deployed to enable inter-organization workflows with services spread across the Internet, access control and authentication mechanisms must be used to protect the shared data. The Mediator leverages the API key-based authentication provided by the Kong API gateway to enable such Internet deployment. +CONTROL-CORE also consists of a Mediator implementation that facilitates the distributed execution of _concore_ studies through REST calls over the Internet. When the Mediator is deployed to enable inter-organization workflows with services spread across the Internet, access control and authentication mechanisms must be used to protect the shared data. The Mediator leverages the API key-based authentication provided by the Kong API gateway to enable such Internet deployment. Figure 1 shows an illustrative CONTROL-CORE deployment across 3 distributed sites, with a public instance of a Mediator. ![A sample CONTROL-CORE distributed deployment spanning multiple sites](figures/joss-concore.png) From 87debbdd346e6f35b5bfeb5274d8bf9b91ba7b8b Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 10 Aug 2022 13:07:10 -0400 Subject: [PATCH 042/113] Update paper.md --- paper.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/paper.md b/paper.md index d456fa3..81bc8af 100644 --- a/paper.md +++ b/paper.md @@ -4,6 +4,9 @@ tags: - Neuroscience - Control Systems - Python + - Matlab + - Verilog + - C++ - Interoperability - Workflows authors: @@ -87,6 +90,6 @@ The _concore_ protocol has been used to simulate closed-loop control of cardiac # Acknowledgment -This work was supported in part by the National Institutes of Health under Grant OT2OD030535 and Google Summer of Code (GSoC) 2021 and 2022 projects. The authors acknowledge the guidance from Tyler Best and Herbert Sauro. The authors appreciate the assistance with OSPARC that they received from the staff at IT'IS, especially Sylvain Anderegg, Pedro Crespo-Valero, Elisabetta Iavarone, Andrei Neagu, Esra Neufeld, and Katie Zhuang. +This work was supported in part by the National Institutes of Health under Grant OT2OD030535 and Google Summer of Code (GSoC) 2021 and 2022 projects. The authors acknowledge the guidance from Tyler Best and Herbert Sauro. The authors appreciate the assistance that they received from the staff at IT'IS, especially Sylvain Anderegg, Pedro Crespo-Valero, Elisabetta Iavarone, Andrei Neagu, Esra Neufeld, and Katie Zhuang. # References From 142e67fe07ac2dcaee53e182d673998e8128ba82 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 10 Aug 2022 13:12:57 -0400 Subject: [PATCH 043/113] Update paper.md --- paper.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper.md b/paper.md index 81bc8af..ccc938e 100644 --- a/paper.md +++ b/paper.md @@ -69,7 +69,7 @@ The CONTROL-CORE framework is a flexible software platform for designing and imp The CONTROL-CORE framework consists of the _concore_ protocol at its core. The _concore_ protocol allows seamless synchronized communication between the programs (such as PMs and controllers) that compose a study as a workflow. _concore_ enables simulations to run on different operating systems, be developed in various programming languages (such as Matlab, Python, C++, and Verilog), and be run locally, in containers, and a distributed fashion. -CONTROL-CORE also consists of a Mediator implementation that facilitates the distributed execution of _concore_ studies through REST calls over the Internet. When the Mediator is deployed to enable inter-organization workflows with services spread across the Internet, access control and authentication mechanisms must be used to protect the shared data. The Mediator leverages the API key-based authentication provided by the Kong API gateway to enable such Internet deployment. Figure 1 shows an illustrative CONTROL-CORE deployment across 3 distributed sites, with a public instance of a Mediator. +CONTROL-CORE also consists of a Mediator implementation that facilitates the distributed execution of _concore_ studies through REST calls over the Internet. The Mediator uses wrappers developed as part of _concore_ to communicate between programs at distributed sites. When the Mediator is deployed to enable inter-organization workflows with services spread across the Internet, access control and authentication mechanisms must be used to protect the shared data. The Mediator leverages the API key-based authentication provided by the Kong API gateway to enable such Internet deployment. Figure 1 shows an illustrative CONTROL-CORE deployment across 3 distributed sites, with a public instance of the Mediator. ![A sample CONTROL-CORE distributed deployment spanning multiple sites](figures/joss-concore.png) From 782594dd7d173f76146b612249a74c2900f9cae3 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 10 Aug 2022 17:49:07 -0400 Subject: [PATCH 044/113] Update paper.bib --- paper.bib | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/paper.bib b/paper.bib index 9314048..3ba405f 100644 --- a/paper.bib +++ b/paper.bib @@ -7,3 +7,34 @@ @article{kathiravelu2022control year={2022}, publisher={IEEE} } +@article{romero2017closed, + title={Closed-loop vagus nerve stimulation based on state transition models}, + author={Romero-Ugalde, Hector M and Le Rolle, Virginie and Bonnet, Jean-Luc and Henry, Christine and Mabo, Philippe and Carrault, Guy and Hern{\'a}ndez, Alfredo I}, + journal={IEEE Transactions on Biomedical Engineering}, + volume={65}, + number={7}, + pages={1630--1638}, + year={2017}, + publisher={IEEE} +} +@inproceedings{gupta2017generation, + title={Generation and proliferation of random directed acyclic graphs for workflow scheduling problem}, + author={Gupta, Indrajeet and Choudhary, Anubhav and Jana, Prasanta K}, + booktitle={Proceedings of the 7th International Conference on Computer and Communication Technology}, + pages={123--127}, + year={2017} +} +@article{amstutz2016common, + title={Common workflow language, v1. 0}, + author={Amstutz, Peter and Crusoe, Michael R and Tijani{\'c}, Neboj{\v{s}}a and Chapman, Brad and Chilton, John and Heuer, Michael and Kartashov, Andrey and Leehr, Dan and M{\'e}nager, Herv{\'e} and Nedeljkovich, Maya and others}, + year={2016}, + publisher={Figshare} +} +@misc{miller2006method, + title={Method, system, and program for generating a workflow}, + author={Miller, Wayne F and Yaung, Alan Tsu-i}, + year={2006}, + month=aug # "~29", + publisher={Google Patents}, + note={~U.S. Patent 7,100,147} +} From 148de00043d8042c6f533701a9b66d679a78455e Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 10 Aug 2022 17:49:26 -0400 Subject: [PATCH 045/113] Update paper.md --- paper.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/paper.md b/paper.md index ccc938e..1c50869 100644 --- a/paper.md +++ b/paper.md @@ -65,7 +65,7 @@ bibliography: paper.bib --- # Summary -The CONTROL-CORE framework is a flexible software platform for designing and implementing closed-loop Vagus Nerve Stimulation (VNS) systems in programming languages in diverse software environments. Its modular workflow approach for closed-loop executions of the VNS simulations aims to facilitate modeling organ functions as physiological models (PMs) and therapeutic devices in their early stages in a software environment. +The CONTROL-CORE framework is a flexible software platform for designing and implementing closed-loop Vagus Nerve Stimulation (VNS) [@romero2017closed] systems in programming languages in diverse software environments. Its modular workflow approach for closed-loop executions of the VNS simulations aims to facilitate modeling organ functions as physiological models (PMs) and therapeutic devices in their early stages in a software environment. The CONTROL-CORE framework consists of the _concore_ protocol at its core. The _concore_ protocol allows seamless synchronized communication between the programs (such as PMs and controllers) that compose a study as a workflow. _concore_ enables simulations to run on different operating systems, be developed in various programming languages (such as Matlab, Python, C++, and Verilog), and be run locally, in containers, and a distributed fashion. @@ -79,7 +79,7 @@ CONTROL-CORE contains a lightweight browser-based visual _concore_ editor, which Existing software ecosystems are not tailored for the modeling and simulation of closed-loop control systems developed in multiple programming languages. Containerization with frameworks such as Docker has become popular across the scientific community as containerization enables reproducible science with minimal effort. Workflow frameworks can execute a series of containerized programs without human-in-the-loop, with services/programs as predefined start and end steps. Workflows facilitate modular development as they enable the execution of a series of programs without manually managing each program individually. Typically, these programs are developed and shared across the users as containerized services. Such workflows do not have a cycle, by definition. -On the other hand, a neuromodulation control system comprises feedback loops represented by directed cycles (dicycles). The presence of a dicycle violates the core tenet of classic workflow frameworks, such as Common Workflow Language (CWL) and Workflow Description Language (WDL), which expect the studies to be represented by a directed acyclic graph (DAG). Furthermore, control systems run the same program multiple times as part of the execution with feedback. Consequently, overheads imposed by workflow frameworks, significantly when handling implementations across diverse programming languages and execution environments, are magnified in the case of a closed-loop execution. +On the other hand, a neuromodulation control system comprises feedback loops represented by directed cycles (dicycles). The presence of a dicycle violates the core tenet of classic workflow frameworks, such as Common Workflow Language (CWL) [@amstutz2016common] and Workflow Description Language (WDL) [@miller2006method], which expect the studies to be represented by a directed acyclic graph (DAG) [@gupta2017generation]. Furthermore, control systems run the same program multiple times as part of the execution with feedback. Consequently, overheads imposed by workflow frameworks, significantly when handling implementations across diverse programming languages and execution environments, are magnified in the case of a closed-loop execution. Interoperability plays a significant role in scientific research. Therefore, we should support the modeling and simulation of studies composed of programs developed in different programming languages, executing on different execution modes (local, distributed, or containerized). _concore_ is designed for efficiency in control systems' specific use cases, supporting interoperable communication and data exchange between programs from independent researchers. The simple file-based communication and synchronization of _concore_, without a centralized workflow orchestrator, enables interoperable executions with high performance. From 4954eb98e0fb79259e465ca850423563c1d10070 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Thu, 11 Aug 2022 09:50:16 -0400 Subject: [PATCH 046/113] Add DOIs to the paper --- paper.bib | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/paper.bib b/paper.bib index 3ba405f..a7d3d1f 100644 --- a/paper.bib +++ b/paper.bib @@ -5,7 +5,8 @@ @article{kathiravelu2022control volume={10}, pages={36268--36285}, year={2022}, - publisher={IEEE} + publisher={IEEE}, + doi={10.1109/access.2022.3161471} } @article{romero2017closed, title={Closed-loop vagus nerve stimulation based on state transition models}, @@ -15,14 +16,16 @@ @article{romero2017closed number={7}, pages={1630--1638}, year={2017}, - publisher={IEEE} + publisher={IEEE}, + doi={10.1109/tbme.2017.2759667} } @inproceedings{gupta2017generation, title={Generation and proliferation of random directed acyclic graphs for workflow scheduling problem}, author={Gupta, Indrajeet and Choudhary, Anubhav and Jana, Prasanta K}, booktitle={Proceedings of the 7th International Conference on Computer and Communication Technology}, pages={123--127}, - year={2017} + year={2017}, + doi={10.1145/3154979.3154984} } @article{amstutz2016common, title={Common workflow language, v1. 0}, From 297222aa4537d45a677ad51cb458ab453463d57e Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Thu, 11 Aug 2022 14:53:31 -0400 Subject: [PATCH 047/113] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6762b6b..49788ff 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# CONTROL-CORE: A Framework for Simulationand Design of Closed-Loop Peripheral Neuromodulation Control Systems +# CONTROL-CORE: A Framework for Simulation and Design of Closed-Loop Peripheral Neuromodulation Control Systems [CONTROL-CORE](https://github.com/ControlCore-Project/) is a design and simulation framework for closed-loop peripheral neuromodulation control systems. At its center is _concore_, a lightweight protocol to simulate neuromodulation control systems. This repository consists of the implementation of _concore_ protocol and sample (demo and neuromodulation control systems) studies. In addition to its default standard Python implementation, _concore_ also supports developing studies in Matlab/Octave, Verilog, and C++. _concore_ also aims to support more language programs in the future. From a050eebaff1d5b262889ffba0f8e4a678b158c5d Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Tue, 16 Aug 2022 16:22:23 -0400 Subject: [PATCH 048/113] learn.py and graphml --- ratc/learn.py | 83 +++++++++++++ ratc/yuyuLearn.graphml | 256 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 339 insertions(+) create mode 100644 ratc/learn.py create mode 100644 ratc/yuyuLearn.graphml diff --git a/ratc/learn.py b/ratc/learn.py new file mode 100644 index 0000000..8c3b313 --- /dev/null +++ b/ratc/learn.py @@ -0,0 +1,83 @@ +import concore +import numpy as np +import matplotlib.pyplot as plt +import time +print("plot u") + +concore.delay = 0.005 +concore.default_maxtime(150) +init_simtime_u = "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0, 0.0]" +u = concore.initval(init_simtime_u) +ym = concore.initval(init_simtime_ym) +ut = (concore.maxtime+1)*[np.array(u).T] +ymt = (concore.maxtime+1)*[np.array(ym).T] +oldsimtime = concore.simtime +while(concore.simtime oldsimtime: + #if np.array_equal(ut[int(concore.simtime)], np.zeros((6))): + #print(" u="+str(u)) + ut[int(concore.simtime)] = np.array(u).T + #print(" ym="+str(ym)) + ymt[int(concore.simtime)] = np.array(ym).T + oldsimtime = concore.simtime +print("retry="+str(concore.retrycount)) +#print(ut) +#print(ymt) +################# +# plot inputs and outputs +u1 = [x[0].item() for x in ut] +u2 = [x[1].item() for x in ut] +u3 = [x[2].item() for x in ut] +u4 = [x[3].item() for x in ut] +u5 = [x[4].item() for x in ut] +u6 = [x[5].item() for x in ut] + +Nsim = len(u1) +plt.figure() +plt.subplot(321) +plt.plot(range(Nsim), u1) +plt.ylabel('Pw1 (s)') +plt.subplot(322) +plt.plot(range(Nsim), u2) +plt.ylabel('Pf1 (Hz)') +plt.subplot(323) +plt.plot(range(Nsim), u3) +plt.xlabel('Learn Cycles') +plt.ylabel('Pw2 (s)') +plt.subplot(324) +plt.plot(range(Nsim), u4) +plt.ylabel('Pf2 (Hz)') +plt.subplot(325) +plt.plot(range(Nsim), u5) +plt.ylabel('Pw3 (s)') +plt.subplot(326) +plt.plot(range(Nsim), u6) +plt.xlabel('Learn Cycles') +plt.ylabel('Pf3 (Hz)') +plt.savefig("stim.pdf") +plt.tight_layout() + + +################# + +# plot inputs and outputs +ym1 = [x[0].item() for x in ymt] +ym2 = [x[1].item() for x in ymt] +Nsim = len(ym1) + +plt.figure() +plt.subplot(211) +plt.plot(range(Nsim), ym1) +plt.ylabel('MAP (mmHg)') +plt.legend(['Learn MAP'], loc=0) +plt.subplot(212) +plt.plot(range(Nsim), ym2) +plt.xlabel('Cycles') +plt.ylabel('HR (bpm)') +plt.legend(['Learn HR'], loc=0) +plt.savefig("hrmap.pdf") +plt.show() diff --git a/ratc/yuyuLearn.graphml b/ratc/yuyuLearn.graphml new file mode 100644 index 0000000..083b776 --- /dev/null +++ b/ratc/yuyuLearn.graphml @@ -0,0 +1,256 @@ + + + + + + + + + + + + CZ:cvxpymatcore.py + + + + + + + + + + + PZ:pmcvxpymatcore.py + + + + + + + + + + + LZ:learn.py + + + + + + + + + + VCY + + + + + + + + + + + + VPY + + + + + + + + + + + + VCY + + + + + + + + + + + + VPY + + + + + + + + 1631987765505 + mark + + DEL_NODE + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiXQ== + + + ADD_NODE + WyJDWjpjdnhweW1hdGNvcmUucHkiLHsid2lkdGgiOjE2NiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjozNzcuODMwMjYwNTA1NjQ3NzQsInkiOjg3LjAzOTk4Nzg0ODEzMzA3fSx7fSwiMmEzZmY1MjItMWFmOS00MzhhLTgxMDctYWIwOTYyYTIzMzY2Il0= + + + + 1631987810303 + mark + + DEL_NODE + WyJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiXQ== + + + ADD_NODE + WyJQWjpwbWN2eHB5bWF0Y29yZS5weSIseyJ3aWR0aCI6MTg3LCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjM4MS4zNTAyNTQ0Mjk3MTQyNSwieSI6MjgwLjEwMDE1OTQ5MzI1Mzd9LHt9LCJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiXQ== + + + + 1631987820341 + mark + + SET_POS + WyJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MzgxLjM1MDI1NDQyOTcxNDI1LCJ5IjoyODAuMTAwMTU5NDkzMjUzN31d + + + SET_POS + WyJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLHsieCI6MzgxLjM1MDI1NDQyOTcxNDI1LCJ5IjoyODAuMTAwMTU5NDkzMjUzN30seyJ4IjoxMTAsInkiOjExMH1d + + + + 1631987826074 + mark + + SET_POS + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6Mzc3LjgzMDI2MDUwNTY0Nzc0LCJ5Ijo4Ny4wMzk5ODc4NDgxMzMwN31d + + + SET_POS + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLHsieCI6Mzc3LjgzMDI2MDUwNTY0Nzc0LCJ5Ijo4Ny4wMzk5ODc4NDgxMzMwN30seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1631987833719 + mark + + DEL_EDGE + WyI3ZDhlYmJiMS00MGQ2LTQyNDAtOWE1MC03YjZlYjU4YzU5YmIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLCJ0YXJnZXRJRCI6ImJkNmFhMjA2LTQxZGQtNDE1ZS05MzUzLTJlMmZhZmRlN2RjMiIsImxhYmVsIjoiVkNZIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjNjA3ZDhiIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjdkOGViYmIxLTQwZDYtNDI0MC05YTUwLTdiNmViNThjNTliYiJ9XQ== + + + + 1631987844901 + mark + + DEL_EDGE + WyI1MThlZWFjYy01YmNkLTRjZDMtODYxYy03MjljMDIxZGQ0OGIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLCJ0YXJnZXRJRCI6IjJhM2ZmNTIyLTFhZjktNDM4YS04MTA3LWFiMDk2MmEyMzM2NiIsImxhYmVsIjoiVlBZIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjOWMyN2IwIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjUxOGVlYWNjLTViY2QtNGNkMy04NjFjLTcyOWMwMjFkZDQ4YiJ9XQ== + + + + 1631988057648 + mark + + DEL_NODE + WyI1M2I3NjVmMi04YjU5LTQwMTgtOTAzOC0zNDAxY2M5ODNlNWMiXQ== + + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7fSwiNTNiNzY1ZjItOGI1OS00MDE4LTkwMzgtMzQwMWNjOTgzZTVjIl0= + + + + 1631988067297 + mark + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7ImlkIjoiNTNiNzY1ZjItOGI1OS00MDE4LTkwMzgtMzQwMWNjOTgzZTVjIiwibGFiZWwiOiJ5dXl1QyIsInR5cGUiOiJvcmRpbiIsInN0eWxlIjp7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfX0sIjUzYjc2NWYyLThiNTktNDAxOC05MDM4LTM0MDFjYzk4M2U1YyJd + + + DEL_NODE + WyI1M2I3NjVmMi04YjU5LTQwMTgtOTAzOC0zNDAxY2M5ODNlNWMiXQ== + + + + 1631988274563 + mark + + DEL_NODE + WyI2NzdjZTExZi1kNzZmLTQ2NDMtOWRkMS1jOGZhMjZiY2YyNzMiXQ== + + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7fSwiNjc3Y2UxMWYtZDc2Zi00NjQzLTlkZDEtYzhmYTI2YmNmMjczIl0= + + + + 1631988279632 + mark + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7ImlkIjoiNjc3Y2UxMWYtZDc2Zi00NjQzLTlkZDEtYzhmYTI2YmNmMjczIiwibGFiZWwiOiJ5dXl1QyIsInR5cGUiOiJvcmRpbiIsInN0eWxlIjp7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfX0sIjY3N2NlMTFmLWQ3NmYtNDY0My05ZGQxLWM4ZmEyNmJjZjI3MyJd + + + DEL_NODE + WyI2NzdjZTExZi1kNzZmLTQ2NDMtOWRkMS1jOGZhMjZiY2YyNzMiXQ== + + + + 1660317542808 + mark + + DEL_NODE + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiXQ== + + + ADD_NODE + WyJMWjpsZWFybi5weSIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjE2MSwieSI6MTc0fSx7fSwiZmVhNzU5ZWQtZWFkNi00M2IxLWEzY2YtOTY5MDgxMmE2ZjA5Il0= + + + + 1660317548640 + mark + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTYxLCJ5IjoxNzR9XQ== + + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6MTYxLCJ5IjoxNzR9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1660317557559 + mark + + DEL_EDGE + WyI3MDFiMmUwZS0wNzQxLTQ5NTMtYTk3Yy1mZWY0YTI2YTQzYTQiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLCJ0YXJnZXRJRCI6ImZlYTc1OWVkLWVhZDYtNDNiMS1hM2NmLTk2OTA4MTJhNmYwOSIsImlkIjoiNzAxYjJlMGUtMDc0MS00OTUzLWE5N2MtZmVmNGEyNmE0M2E0In1d + + + + 1660317565265 + mark + + DEL_EDGE + WyI5NjQxNWIxYy0yOGY4LTQzNjktYjViMi00YzE0OTQ4OWRjOTAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLCJ0YXJnZXRJRCI6ImZlYTc1OWVkLWVhZDYtNDNiMS1hM2NmLTk2OTA4MTJhNmYwOSIsImlkIjoiOTY0MTViMWMtMjhmOC00MzY5LWI1YjItNGMxNDk0ODlkYzkwIn1d + + + + \ No newline at end of file From c091bd142e36b1f6be25fed32ba40605de8421d3 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 16 Aug 2022 17:53:15 -0400 Subject: [PATCH 049/113] Create README for ratc --- ratc/README.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 ratc/README.md diff --git a/ratc/README.md b/ratc/README.md new file mode 100644 index 0000000..236e48b --- /dev/null +++ b/ratc/README.md @@ -0,0 +1,25 @@ +# Rat Cardiac (ratc) models. + +This folder consists of ratc studies. Given below is a brief introduction to the files in this folder. + +| File | Author | Language | Description | Additional Notes | +|---|------|---|---|------| +| c2.m (c2.dir) | Yuyu Yao | Octave | NMPC (amp) Controller | uses CasADi^* | +| candr.py (candr.dir,Dockerfile.candr) | Andrew Branen | Python | LSTM (wid) Controller uses Tensorflow | +| coct.m (coct.dir) | Yuyu Yao | Matlab | MMPC (wid) Controller^ | +| cvxpymatcore.py (cvxpymatcore.dir) | Yuyu Yao | Python | MPC (wid) Controller | uses cvxopt^ | +| cwrap.py (cwrap.dir) | Mark Arnold | Python | Controller wrapper (wid/amp) | +| plotu.py | Mark Arnold | Python | Plot u (6 values, wid/amp) | +| plotym.py | Mark Arnold | Python | Plot ym (2 values, HR/MAP) | +| pm2.m (pm2.dir) | Yuyu Yao | Matlab | Diseased Pulsatile PM* (amp) | +| pmcvxpymatcore.py (pmcvxpymatcore.dir) | Mark Arnold | Python | Linear Nonpulsatile PM (wid) | +| pmoct.m (pmoct.dir) | Yuyu Yao | Matlab | Healthy Pulsatile PM (wid) | +| pmsid.py | Siddharth Prabhu | Python | Healthy Pulsatile PM (wid) | +| pmvxmatcore.v (pmvxmatcore.dir) | Mark Arnold | Verilog | 16-bit Linear Nonpulsatile PM (wid) | +| pwrap.py (pwrap.dir) | Mark Arnold | Python | PM wrapper (wid/amp) | +| run_pm2.sh (run_pm2.dir) | Mark Arnold | Shell | MCR Compiled version of pm2 | +| run_pmoct.sh (run_pmoct.dir) | Mark Arnold | Shell | MCR Compiled version of pmoct | + +^Mark removed plotting from controller + +*Mark converted to HR for compatibility with plotym.py From 731fd03b663b00a48cdd535e74ff09deec05b1a6 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 16 Aug 2022 17:56:46 -0400 Subject: [PATCH 050/113] ratc study:program mapping --- ratc/README.md | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/ratc/README.md b/ratc/README.md index 236e48b..172a52e 100644 --- a/ratc/README.md +++ b/ratc/README.md @@ -5,7 +5,7 @@ This folder consists of ratc studies. Given below is a brief introduction to the | File | Author | Language | Description | Additional Notes | |---|------|---|---|------| | c2.m (c2.dir) | Yuyu Yao | Octave | NMPC (amp) Controller | uses CasADi^* | -| candr.py (candr.dir,Dockerfile.candr) | Andrew Branen | Python | LSTM (wid) Controller uses Tensorflow | +| candr.py (candr.dir,Dockerfile.candr) | Andrew Branen | Python | LSTM (wid) Controller | uses Tensorflow | | coct.m (coct.dir) | Yuyu Yao | Matlab | MMPC (wid) Controller^ | | cvxpymatcore.py (cvxpymatcore.dir) | Yuyu Yao | Python | MPC (wid) Controller | uses cvxopt^ | | cwrap.py (cwrap.dir) | Mark Arnold | Python | Controller wrapper (wid/amp) | @@ -23,3 +23,28 @@ This folder consists of ratc studies. Given below is a brief introduction to the ^Mark removed plotting from controller *Mark converted to HR for compatibility with plotym.py + +The studies and the respective programs are given below. + + +| Study | Program | +|---------|------------| +|andrC.graphml | candr.py cwrap.py| +|andrM.graphml | candr.py pmoct.m| +|andrshM.graphml | candr.py run_pmoct.sh| +|sidZ.graphml | cvxpymatcore.py pmsid.py| +|sidZPlt2.graphml | cvxpymatcore.py pmsid.py plotu.py plotym.py| +|yu2MM.graphml | c2.m pm2.m | +|yu2MMPlt2.graphml | c2.m pm2.m plotu.py plotym.py | +|yu2MshM.graphml | c2.m run_pm2.sh| +|yu2MshMPlt2.graphml | c2.m run_pm2.sh plotu.py plotym.py| +|yuoctM.graphml | cvxpymatcore.py pmoct.m | +|yuoctMM.graphml | coct.m pmoct.m | +|yuoctMMPlt2.graphml | coct.m pmoct.m plotu.py plotym.py | +|yuoctshM.graphml | coct.m run_pmoct.sh | +|yuoctshMPull.graphml | coct.m run_pmoct (pulls from markgarnold Docker repository) | +|yuyuC.graphml | cvxpymatcore.py cwrap.py | +|yuyu.graphml | cvxpymatcore.py pmcvxpymatcore.py| +|yuyuP.graphml | pwrap.py pmcvxpymatcore.py | +|yuyuPlt2.graphml | cvxpymatcore.py pmcvxpymatcore.py plotu.py plotym.py | +|yuyuV.graphml | cvxpymatcore.py pmvxmatcore.v| From 6fd997e2251f7c1a8b39f4467c2680a1f5a9cb98 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 16 Aug 2022 17:56:57 -0400 Subject: [PATCH 051/113] Update README.md --- ratc/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ratc/README.md b/ratc/README.md index 172a52e..c70baa2 100644 --- a/ratc/README.md +++ b/ratc/README.md @@ -1,4 +1,4 @@ -# Rat Cardiac (ratc) models. +# Rat Cardiac (ratc) models This folder consists of ratc studies. Given below is a brief introduction to the files in this folder. From 411d3875bb3cc84ed522a20c50f4bd4c9eff683b Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 16 Aug 2022 18:02:01 -0400 Subject: [PATCH 052/113] Update README.md --- ratc/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ratc/README.md b/ratc/README.md index c70baa2..2fd67a9 100644 --- a/ratc/README.md +++ b/ratc/README.md @@ -1,4 +1,4 @@ -# Rat Cardiac (ratc) models +# Rat cardiac (ratc) models This folder consists of ratc studies. Given below is a brief introduction to the files in this folder. From 29f260937a142e9eb2ba58d717dd5387acb9b890 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 16 Aug 2022 18:02:28 -0400 Subject: [PATCH 053/113] Update README.md --- ratc/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ratc/README.md b/ratc/README.md index 2fd67a9..36c81ea 100644 --- a/ratc/README.md +++ b/ratc/README.md @@ -24,10 +24,10 @@ This folder consists of ratc studies. Given below is a brief introduction to the *Mark converted to HR for compatibility with plotym.py -The studies and the respective programs are given below. +The studies and the respective programs that compose those studies are given below. -| Study | Program | +| Study | Programs | |---------|------------| |andrC.graphml | candr.py cwrap.py| |andrM.graphml | candr.py pmoct.m| From 3819e7636f0e106322792f8a06f6e258f37ce3f8 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 16 Aug 2022 18:02:49 -0400 Subject: [PATCH 054/113] Update README.md --- ratc/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ratc/README.md b/ratc/README.md index 36c81ea..0136b3e 100644 --- a/ratc/README.md +++ b/ratc/README.md @@ -27,7 +27,7 @@ This folder consists of ratc studies. Given below is a brief introduction to the The studies and the respective programs that compose those studies are given below. -| Study | Programs | +| Study | Composed of Programs | |---------|------------| |andrC.graphml | candr.py cwrap.py| |andrM.graphml | candr.py pmoct.m| From 519eab5dc0ea1173595fba3e24284374f569fb31 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 16 Aug 2022 18:03:10 -0400 Subject: [PATCH 055/113] Update README.md --- ratc/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ratc/README.md b/ratc/README.md index 0136b3e..36c81ea 100644 --- a/ratc/README.md +++ b/ratc/README.md @@ -27,7 +27,7 @@ This folder consists of ratc studies. Given below is a brief introduction to the The studies and the respective programs that compose those studies are given below. -| Study | Composed of Programs | +| Study | Programs | |---------|------------| |andrC.graphml | candr.py cwrap.py| |andrM.graphml | candr.py pmoct.m| From bab58c12c17dc7aeff2449611c165cfdbf12c00c Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Wed, 17 Aug 2022 13:35:41 -0400 Subject: [PATCH 056/113] Update learn.py --- ratc/learn.py | 101 ++++++++++++++++++++++++-------------------------- 1 file changed, 48 insertions(+), 53 deletions(-) diff --git a/ratc/learn.py b/ratc/learn.py index 8c3b313..d85d30b 100644 --- a/ratc/learn.py +++ b/ratc/learn.py @@ -2,7 +2,7 @@ import numpy as np import matplotlib.pyplot as plt import time -print("plot u") +GENERATE_PLOT = 1 concore.delay = 0.005 concore.default_maxtime(150) @@ -25,59 +25,54 @@ ymt[int(concore.simtime)] = np.array(ym).T oldsimtime = concore.simtime print("retry="+str(concore.retrycount)) -#print(ut) -#print(ymt) -################# -# plot inputs and outputs -u1 = [x[0].item() for x in ut] -u2 = [x[1].item() for x in ut] -u3 = [x[2].item() for x in ut] -u4 = [x[3].item() for x in ut] -u5 = [x[4].item() for x in ut] -u6 = [x[5].item() for x in ut] - -Nsim = len(u1) -plt.figure() -plt.subplot(321) -plt.plot(range(Nsim), u1) -plt.ylabel('Pw1 (s)') -plt.subplot(322) -plt.plot(range(Nsim), u2) -plt.ylabel('Pf1 (Hz)') -plt.subplot(323) -plt.plot(range(Nsim), u3) -plt.xlabel('Learn Cycles') -plt.ylabel('Pw2 (s)') -plt.subplot(324) -plt.plot(range(Nsim), u4) -plt.ylabel('Pf2 (Hz)') -plt.subplot(325) -plt.plot(range(Nsim), u5) -plt.ylabel('Pw3 (s)') -plt.subplot(326) -plt.plot(range(Nsim), u6) -plt.xlabel('Learn Cycles') -plt.ylabel('Pf3 (Hz)') -plt.savefig("stim.pdf") -plt.tight_layout() - ################# - # plot inputs and outputs -ym1 = [x[0].item() for x in ymt] -ym2 = [x[1].item() for x in ymt] -Nsim = len(ym1) -plt.figure() -plt.subplot(211) -plt.plot(range(Nsim), ym1) -plt.ylabel('MAP (mmHg)') -plt.legend(['Learn MAP'], loc=0) -plt.subplot(212) -plt.plot(range(Nsim), ym2) -plt.xlabel('Cycles') -plt.ylabel('HR (bpm)') -plt.legend(['Learn HR'], loc=0) -plt.savefig("hrmap.pdf") -plt.show() +if GENERATE_PLOT == 1: + u1 = [x[0].item() for x in ut] + u2 = [x[1].item() for x in ut] + u3 = [x[2].item() for x in ut] + u4 = [x[3].item() for x in ut] + u5 = [x[4].item() for x in ut] + u6 = [x[5].item() for x in ut] + Nsim = len(u1) + plt.figure() + plt.subplot(321) + plt.plot(range(Nsim), u1) + plt.ylabel('Pw1 (s)') + plt.subplot(322) + plt.plot(range(Nsim), u2) + plt.ylabel('Pf1 (Hz)') + plt.subplot(323) + plt.plot(range(Nsim), u3) + plt.xlabel('Learn Cycles') + plt.ylabel('Pw2 (s)') + plt.subplot(324) + plt.plot(range(Nsim), u4) + plt.ylabel('Pf2 (Hz)') + plt.subplot(325) + plt.plot(range(Nsim), u5) + plt.ylabel('Pw3 (s)') + plt.subplot(326) + plt.plot(range(Nsim), u6) + plt.xlabel('Learn Cycles') + plt.ylabel('Pf3 (Hz)') + plt.savefig("stim.pdf") + plt.tight_layout() + + ym1 = [x[0].item() for x in ymt] + ym2 = [x[1].item() for x in ymt] + Nsim = len(ym1) + plt.figure() + plt.subplot(211) + plt.plot(range(Nsim), ym1) + plt.ylabel('MAP (mmHg)') + plt.legend(['Learn MAP'], loc=0) + plt.subplot(212) + plt.plot(range(Nsim), ym2) + plt.xlabel('Cycles') + plt.ylabel('HR (bpm)') + plt.legend(['Learn HR'], loc=0) + plt.savefig("hrmap.pdf") + plt.show() From 318bdbb785167920db437fb33adcc06d78fdb858 Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Wed, 17 Aug 2022 13:38:19 -0400 Subject: [PATCH 057/113] Update learn.py --- ratc/learn.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/ratc/learn.py b/ratc/learn.py index d85d30b..189911b 100644 --- a/ratc/learn.py +++ b/ratc/learn.py @@ -18,10 +18,7 @@ u = concore.read(concore.iport["VCY"],"u",init_simtime_u) ym = concore.read(concore.iport["VPY"],"ym",init_simtime_ym) if concore.simtime > oldsimtime: - #if np.array_equal(ut[int(concore.simtime)], np.zeros((6))): - #print(" u="+str(u)) ut[int(concore.simtime)] = np.array(u).T - #print(" ym="+str(ym)) ymt[int(concore.simtime)] = np.array(ym).T oldsimtime = concore.simtime print("retry="+str(concore.retrycount)) From 492af78a9cd44a892cb8f4ba4983d4b2f22f32f6 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 17 Aug 2022 15:10:21 -0400 Subject: [PATCH 058/113] Update README.md --- ratc/README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ratc/README.md b/ratc/README.md index 36c81ea..9016ab3 100644 --- a/ratc/README.md +++ b/ratc/README.md @@ -1,6 +1,6 @@ # Rat cardiac (ratc) models -This folder consists of ratc studies. Given below is a brief introduction to the files in this folder. +This folder consists of rat cardiac studies. Given below is a brief introduction to the files in this folder. | File | Author | Language | Description | Additional Notes | |---|------|---|---|------| @@ -15,11 +15,13 @@ This folder consists of ratc studies. Given below is a brief introduction to the | pmcvxpymatcore.py (pmcvxpymatcore.dir) | Mark Arnold | Python | Linear Nonpulsatile PM (wid) | | pmoct.m (pmoct.dir) | Yuyu Yao | Matlab | Healthy Pulsatile PM (wid) | | pmsid.py | Siddharth Prabhu | Python | Healthy Pulsatile PM (wid) | -| pmvxmatcore.v (pmvxmatcore.dir) | Mark Arnold | Verilog | 16-bit Linear Nonpulsatile PM (wid) | +| pmvxmatcore.v (pmvxmatcore.dir) | Mark Arnold | Verilog | 16-bit Linear Nonpulsatile PM (wid) | LNS routines by Panos Vouzis | pwrap.py (pwrap.dir) | Mark Arnold | Python | PM wrapper (wid/amp) | | run_pm2.sh (run_pm2.dir) | Mark Arnold | Shell | MCR Compiled version of pm2 | | run_pmoct.sh (run_pmoct.dir) | Mark Arnold | Shell | MCR Compiled version of pmoct | +Here amp refers to pulse amplitude simulation and wid refers to pulse width simulation. + ^Mark removed plotting from controller *Mark converted to HR for compatibility with plotym.py From 25fe2b2b32c6446441813a6721f3cadeb01316db Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 17 Aug 2022 15:18:57 -0400 Subject: [PATCH 059/113] Update README.md --- ratc/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ratc/README.md b/ratc/README.md index 9016ab3..485d0e1 100644 --- a/ratc/README.md +++ b/ratc/README.md @@ -22,6 +22,8 @@ This folder consists of rat cardiac studies. Given below is a brief introduction Here amp refers to pulse amplitude simulation and wid refers to pulse width simulation. +All of the controllers generate a "u" which is a vector that consists of 6 stimulation values. 3 of these are frequencies. The other 3 are either amplitudes or widths. All of the PMs generate a "ym" which is a vector that consists of Mean Arterial Pressure (MAP) and Heart Rate (HR). + ^Mark removed plotting from controller *Mark converted to HR for compatibility with plotym.py From e17dbe668fff168abb6418abe74b120d18d365ee Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 17 Aug 2022 15:19:30 -0400 Subject: [PATCH 060/113] Update README.md --- ratc/README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ratc/README.md b/ratc/README.md index 485d0e1..d3177b3 100644 --- a/ratc/README.md +++ b/ratc/README.md @@ -20,14 +20,15 @@ This folder consists of rat cardiac studies. Given below is a brief introduction | run_pm2.sh (run_pm2.dir) | Mark Arnold | Shell | MCR Compiled version of pm2 | | run_pmoct.sh (run_pmoct.dir) | Mark Arnold | Shell | MCR Compiled version of pmoct | -Here amp refers to pulse amplitude simulation and wid refers to pulse width simulation. - -All of the controllers generate a "u" which is a vector that consists of 6 stimulation values. 3 of these are frequencies. The other 3 are either amplitudes or widths. All of the PMs generate a "ym" which is a vector that consists of Mean Arterial Pressure (MAP) and Heart Rate (HR). - ^Mark removed plotting from controller *Mark converted to HR for compatibility with plotym.py + +Here amp refers to pulse amplitude simulation and wid refers to pulse width simulation. + +All of the controllers generate a "u" which is a vector that consists of 6 stimulation values. 3 of these are frequencies. The other 3 are either amplitudes or widths. All of the PMs generate a "ym" which is a vector that consists of Mean Arterial Pressure (MAP) and Heart Rate (HR). + The studies and the respective programs that compose those studies are given below. From 8050ecef03bec46af79b1229f308bdbf830fb557 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 17 Aug 2022 15:19:53 -0400 Subject: [PATCH 061/113] Update README.md --- ratc/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ratc/README.md b/ratc/README.md index d3177b3..00ad3d3 100644 --- a/ratc/README.md +++ b/ratc/README.md @@ -20,9 +20,9 @@ This folder consists of rat cardiac studies. Given below is a brief introduction | run_pm2.sh (run_pm2.dir) | Mark Arnold | Shell | MCR Compiled version of pm2 | | run_pmoct.sh (run_pmoct.dir) | Mark Arnold | Shell | MCR Compiled version of pmoct | -^Mark removed plotting from controller +^Removed plotting from controller -*Mark converted to HR for compatibility with plotym.py +*Converted to HR for compatibility with plotym.py Here amp refers to pulse amplitude simulation and wid refers to pulse width simulation. From 6d3c10eb957cb029e3b30e4148608c5b8880790b Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Sun, 21 Aug 2022 15:12:37 -0400 Subject: [PATCH 062/113] learn.py 10x faster than pm/ctl --- ratc/learn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ratc/learn.py b/ratc/learn.py index 189911b..a29e1e6 100644 --- a/ratc/learn.py +++ b/ratc/learn.py @@ -4,7 +4,7 @@ import time GENERATE_PLOT = 1 -concore.delay = 0.005 +concore.delay = 0.002 concore.default_maxtime(150) init_simtime_u = "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]" init_simtime_ym = "[0.0, 0.0, 0.0]" From 592dfed684e563e860fd73accedb8eab88fdcab3 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 31 Aug 2022 14:13:36 -0400 Subject: [PATCH 063/113] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 49788ff..ade80d1 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ _concore_ repository consists of several scripts at its root level. The demo fol If you have a bug to report in one of the CONTROL-CORE projects, please report it through relevant Issue Tracker. Similarly, please feel free to contribute your studies and code enhancements using pull requests. Questions and discussions can be made through the relevant Discussions forum. -The _concore Issues can be reported [here](https://github.com/ControlCore-Project/concore/issues). +The _concore_ Issues can be reported [here](https://github.com/ControlCore-Project/concore/issues). The _concore_ discussion forum can be found [here](https://github.com/ControlCore-Project/concore/discussions). From fa69871a82b53e5140fc78ec2691011c580c613a Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 31 Aug 2022 14:13:53 -0400 Subject: [PATCH 064/113] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ade80d1..852a38b 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ For a detailed and more scientific documentation, please read our extensive [ope # The _concore_ Repository -_concore contains programs (such as physiological models or more commonly called "PMs" and controllers) and studies (i.e., graphml files that represents the studies as workflows). The _wrappers_ enable seamlessly extending a study into a distributed one with the CONTROL-CORE Mediator. +_concore_ contains programs (such as physiological models or more commonly called "PMs" and controllers) and studies (i.e., graphml files that represents the studies as workflows). The _wrappers_ enable seamlessly extending a study into a distributed one with the CONTROL-CORE Mediator. _concore_ repository consists of several scripts at its root level. The demo folder consists of several sample programs and studies, mostly toy examples to learn the protocol. The ratc folder consists of the programs and studies of the rat cardiac experiments we developed with _concore_. From b992d9d08fef66aa96b0838348ca0276d914e2f5 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 31 Aug 2022 15:13:01 -0400 Subject: [PATCH 065/113] Create README.md --- tools/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 tools/README.md diff --git a/tools/README.md b/tools/README.md new file mode 100644 index 0000000..5e393d6 --- /dev/null +++ b/tools/README.md @@ -0,0 +1,3 @@ +# _concore_ tools + +A collection of utility methods and toolkits for _concore_. From 3e9ac7e39d2d7d85b4352a7d59d9bbc9799b6151 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 31 Aug 2022 15:20:59 -0400 Subject: [PATCH 066/113] Add the initial tools --- tools/cwrap.dir/concore.init1 | 1 + tools/cwrap.dir/concore.init2 | 1 + tools/cwrap.dir/concore.name1 | 1 + tools/cwrap.dir/concore.name2 | 1 + tools/cwrap.dir/concore.yuyu | 1 + tools/cwrap.py | 124 ++++++++++++++++++++++++++++++++ tools/learn.py | 75 ++++++++++++++++++++ tools/plotu.py | 58 +++++++++++++++ tools/plotym.py | 40 +++++++++++ tools/pwrap.dir/concore.init1 | 1 + tools/pwrap.dir/concore.init2 | 1 + tools/pwrap.dir/concore.name1 | 1 + tools/pwrap.dir/concore.name2 | 1 + tools/pwrap.dir/concore.yuyu | 1 + tools/pwrap.py | 129 ++++++++++++++++++++++++++++++++++ 15 files changed, 436 insertions(+) create mode 100644 tools/cwrap.dir/concore.init1 create mode 100644 tools/cwrap.dir/concore.init2 create mode 100644 tools/cwrap.dir/concore.name1 create mode 100644 tools/cwrap.dir/concore.name2 create mode 100644 tools/cwrap.dir/concore.yuyu create mode 100644 tools/cwrap.py create mode 100644 tools/learn.py create mode 100644 tools/plotu.py create mode 100644 tools/plotym.py create mode 100644 tools/pwrap.dir/concore.init1 create mode 100644 tools/pwrap.dir/concore.init2 create mode 100644 tools/pwrap.dir/concore.name1 create mode 100644 tools/pwrap.dir/concore.name2 create mode 100644 tools/pwrap.dir/concore.yuyu create mode 100644 tools/pwrap.py diff --git a/tools/cwrap.dir/concore.init1 b/tools/cwrap.dir/concore.init1 new file mode 100644 index 0000000..052fa93 --- /dev/null +++ b/tools/cwrap.dir/concore.init1 @@ -0,0 +1 @@ +[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] diff --git a/tools/cwrap.dir/concore.init2 b/tools/cwrap.dir/concore.init2 new file mode 100644 index 0000000..01aacad --- /dev/null +++ b/tools/cwrap.dir/concore.init2 @@ -0,0 +1 @@ +[0.0, 0.0, 0.0] diff --git a/tools/cwrap.dir/concore.name1 b/tools/cwrap.dir/concore.name1 new file mode 100644 index 0000000..4ae8ef0 --- /dev/null +++ b/tools/cwrap.dir/concore.name1 @@ -0,0 +1 @@ +u diff --git a/tools/cwrap.dir/concore.name2 b/tools/cwrap.dir/concore.name2 new file mode 100644 index 0000000..1121f80 --- /dev/null +++ b/tools/cwrap.dir/concore.name2 @@ -0,0 +1 @@ +ym diff --git a/tools/cwrap.dir/concore.yuyu b/tools/cwrap.dir/concore.yuyu new file mode 100644 index 0000000..57bc6ff --- /dev/null +++ b/tools/cwrap.dir/concore.yuyu @@ -0,0 +1 @@ +yuyu diff --git a/tools/cwrap.py b/tools/cwrap.py new file mode 100644 index 0000000..b8cfb4b --- /dev/null +++ b/tools/cwrap.py @@ -0,0 +1,124 @@ +#CW +import concore +import requests +import time +from ast import literal_eval +import os + +#time.sleep(7) +timeout_max = 20 +concore.delay = 0.02 + +try: + apikey=open(concore.inpath+'1/concore.apikey',newline=None).readline().rstrip() +except: + try: + #perhaps this should be removed for security + apikey=open('./concore.apikey',newline=None).readline().rstrip() + except: + apikey = '' + +try: + yuyu=open(concore.inpath+'1/concore.yuyu',newline=None).readline().rstrip() +except: + try: + yuyu=open('./concore.yuyu',newline=None).readline().rstrip() + except: + yuyu = 'yuyu' + +try: + name1=open(concore.inpath+'1/concore.name1',newline=None).readline().rstrip() +except: + try: + name1=open('./concore.name1',newline=None).readline().rstrip() + except: + name1 = 'u' + +try: + name2=open(concore.inpath+'1/concore.name2',newline=None).readline().rstrip() +except: + try: + name2=open('./concore.name2',newline=None).readline().rstrip() + except: + name2 = 'ym' + +try: + init_simtime_u = open(concore.inpath+'1/concore.init1',newline=None).readline().rstrip() +except: + try: + init_simtime_u = open('./concore.init1',newline=None).readline().rstrip() + except: + init_simtime_u = "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]" + +try: + init_simtime_ym = open(concore.inpath+'1/concore.init2',newline=None).readline().rstrip() +except: + try: + init_simtime_ym = open('./concore.init2',newline=None).readline().rstrip() + except: + init_simtime_ym = "[0.0, 0.0, 0.0]" + +print(apikey) +print(yuyu) +print(name1+'='+init_simtime_u) +print(name2+'='+init_simtime_ym) + +while not os.path.exists(concore.inpath+'1/'+name1): + time.sleep(concore.delay) + + +#Nsim = 150 +concore.default_maxtime(150) +#init_simtime_u = "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]" +#init_simtime_ym = "[0.0, 0.0, 0.0]" + +ym = concore.initval(init_simtime_ym) +oldym = init_simtime_ym +oldt = 0 + + +while(concore.simtime 1.1*timeout_max: #timeout_count>100: + print("timeout or bad POST request "+str(r.status_code)) + quit() + if len(r.text)!=0: + try: + t=literal_eval(r.text)[0] + except: + print("bad eval "+r.text) + oldt = t + oldym = r.text + print("CW: oldym="+oldym+" t="+str(concore.simtime)) + concore.write(1,name2,oldym) +#concore.write(1,"ym",init_simtime_ym) +print("retry="+str(concore.retrycount)) + + diff --git a/tools/learn.py b/tools/learn.py new file mode 100644 index 0000000..a29e1e6 --- /dev/null +++ b/tools/learn.py @@ -0,0 +1,75 @@ +import concore +import numpy as np +import matplotlib.pyplot as plt +import time +GENERATE_PLOT = 1 + +concore.delay = 0.002 +concore.default_maxtime(150) +init_simtime_u = "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0, 0.0]" +u = concore.initval(init_simtime_u) +ym = concore.initval(init_simtime_ym) +ut = (concore.maxtime+1)*[np.array(u).T] +ymt = (concore.maxtime+1)*[np.array(ym).T] +oldsimtime = concore.simtime +while(concore.simtime oldsimtime: + ut[int(concore.simtime)] = np.array(u).T + ymt[int(concore.simtime)] = np.array(ym).T + oldsimtime = concore.simtime +print("retry="+str(concore.retrycount)) + +################# +# plot inputs and outputs + +if GENERATE_PLOT == 1: + u1 = [x[0].item() for x in ut] + u2 = [x[1].item() for x in ut] + u3 = [x[2].item() for x in ut] + u4 = [x[3].item() for x in ut] + u5 = [x[4].item() for x in ut] + u6 = [x[5].item() for x in ut] + Nsim = len(u1) + plt.figure() + plt.subplot(321) + plt.plot(range(Nsim), u1) + plt.ylabel('Pw1 (s)') + plt.subplot(322) + plt.plot(range(Nsim), u2) + plt.ylabel('Pf1 (Hz)') + plt.subplot(323) + plt.plot(range(Nsim), u3) + plt.xlabel('Learn Cycles') + plt.ylabel('Pw2 (s)') + plt.subplot(324) + plt.plot(range(Nsim), u4) + plt.ylabel('Pf2 (Hz)') + plt.subplot(325) + plt.plot(range(Nsim), u5) + plt.ylabel('Pw3 (s)') + plt.subplot(326) + plt.plot(range(Nsim), u6) + plt.xlabel('Learn Cycles') + plt.ylabel('Pf3 (Hz)') + plt.savefig("stim.pdf") + plt.tight_layout() + + ym1 = [x[0].item() for x in ymt] + ym2 = [x[1].item() for x in ymt] + Nsim = len(ym1) + plt.figure() + plt.subplot(211) + plt.plot(range(Nsim), ym1) + plt.ylabel('MAP (mmHg)') + plt.legend(['Learn MAP'], loc=0) + plt.subplot(212) + plt.plot(range(Nsim), ym2) + plt.xlabel('Cycles') + plt.ylabel('HR (bpm)') + plt.legend(['Learn HR'], loc=0) + plt.savefig("hrmap.pdf") + plt.show() diff --git a/tools/plotu.py b/tools/plotu.py new file mode 100644 index 0000000..2507702 --- /dev/null +++ b/tools/plotu.py @@ -0,0 +1,58 @@ +import concore +import numpy as np +import matplotlib.pyplot as plt +import time +print("plot u") + +concore.delay = 0.005 +concore.default_maxtime(150) +init_simtime_u = "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0, 0.0]" +ut = [] +ymt = [] +u = concore.initval(init_simtime_u) +while(concore.simtime 1.1*timeout_max: #timeout_count>200: + print("timeout or bad POST request "+str(r.status_code)) + quit() + if len(r.text)!=0: + try: + t=literal_eval(r.text)[0] + except: + print("bad eval "+r.text) + oldt = t + oldu = r.text + print("PW: oldu="+oldu+" t="+str(concore.simtime)) + concore.write(1,name1,oldu) +#concore.write(1,"u",init_simtime_u) +print("retry="+str(concore.retrycount)) From d3891e20cf3d134c687078c956ae7201e70f64a0 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 31 Aug 2022 15:22:15 -0400 Subject: [PATCH 067/113] Placeholder directory for human cardiac models. --- humanc/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 humanc/README.md diff --git a/humanc/README.md b/humanc/README.md new file mode 100644 index 0000000..c02aa35 --- /dev/null +++ b/humanc/README.md @@ -0,0 +1 @@ +# Human cardiac (humanc) models From 11f2407cb1a354b81ab83c683e40fee4a790c4d9 Mon Sep 17 00:00:00 2001 From: Olusanmi-A <95719093+Olusanmi-A@users.noreply.github.com> Date: Fri, 2 Sep 2022 15:50:09 -0400 Subject: [PATCH 068/113] Creating humanc files --- humanc/auto1.graphml | 208 + humanc/bangbang.py | 30 + humanc/cardiac_pm.dir/healthy_params.py | 149 + .../pulsatile_model_functions.py | 581 ++ humanc/cardiac_pm.dir/pulsatile_steady.txt | 6431 +++++++++++++++++ humanc/cardiac_pm.py | 34 + humanc/dummy_controller.py | 24 + humanc/hcm_bang.graphml | 232 + humanc/plotym.py | 38 + 9 files changed, 7727 insertions(+) create mode 100644 humanc/auto1.graphml create mode 100644 humanc/bangbang.py create mode 100644 humanc/cardiac_pm.dir/healthy_params.py create mode 100644 humanc/cardiac_pm.dir/pulsatile_model_functions.py create mode 100644 humanc/cardiac_pm.dir/pulsatile_steady.txt create mode 100644 humanc/cardiac_pm.py create mode 100644 humanc/dummy_controller.py create mode 100644 humanc/hcm_bang.graphml create mode 100644 humanc/plotym.py diff --git a/humanc/auto1.graphml b/humanc/auto1.graphml new file mode 100644 index 0000000..44f2fba --- /dev/null +++ b/humanc/auto1.graphml @@ -0,0 +1,208 @@ + + + + + + + + + + + + PZ:cardiac_pm.py + + + + + + + + + + + CZ:dummy_controller.py + + + + + + + + + + + XZ:plotym.py + + + + + + + + + + PYM + + + + + + + + + + + + CU + + + + + + + + + + + + XYM + + + + + + + + 1644943336906 + sanmi + + DEL_NODE + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiXQ== + + + ADD_NODE + WyJQWjpjYXJkaWFjX3BtLnB5Iix7IndpZHRoIjoxNDgsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjQ1LCJ5Ijo4NX0se30sIjU1MDg2NWQxLTI4YTMtNDBhOS05ZTI1LWQzYjY4YWQyNzdkNiJd + + + + 1644943355554 + sanmi + + DEL_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiXQ== + + + ADD_NODE + WyJDWjpkdW1teV9jb250cm9sbGVyLnB5Iix7IndpZHRoIjoxOTMsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjUyLCJ5IjoyNjR9LHt9LCIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiXQ== + + + + 1644943358106 + sanmi + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MTM0LCJ5IjoyNjZ9XQ== + + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTM0LCJ5IjoyNjZ9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1644943359494 + sanmi + + SET_POS + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MjQ1LCJ5Ijo4NX1d + + + SET_POS + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLHsieCI6MjQ1LCJ5Ijo4NX0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1644943362210 + sanmi + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTM0LCJ5IjoyNjZ9LHsieCI6MjUyLCJ5IjoyNjR9XQ== + + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MjUyLCJ5IjoyNjR9LHsieCI6MTM0LCJ5IjoyNjZ9XQ== + + + + 1644943375398 + sanmi + + DEL_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiXQ== + + + ADD_NODE + WyJYWjpwbG90eW0iLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4Ijo1MDcsInkiOjE2MH0se30sIjRiODYwYWFlLTA1YzktNGViNS1iYzQ4LWY4MDAwY2NiNDJhOCJd + + + + 1644943378630 + sanmi + + SET_POS + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NTA3LCJ5IjoxNjB9XQ== + + + SET_POS + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsieCI6NTA3LCJ5IjoxNjB9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1644943386853 + sanmi + + DEL_EDGE + WyI0NzcwODQwZi04OGEwLTQ3NTItOWMxOS0yZTdmODlmOGZhNzkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLCJ0YXJnZXRJRCI6IjRiODYwYWFlLTA1YzktNGViNS1iYzQ4LWY4MDAwY2NiNDJhOCIsImxhYmVsIjoiUFlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjN2M0ZGZmIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjQ3NzA4NDBmLTg4YTAtNDc1Mi05YzE5LTJlN2Y4OWY4ZmE3OSJ9XQ== + + + + 1644943394719 + sanmi + + DEL_EDGE + WyI3ZjJiMWM0Yy04ZjJmLTQyZjQtYjU1Yy0xY2RlNzdiMWU4NTIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLCJ0YXJnZXRJRCI6IjU1MDg2NWQxLTI4YTMtNDBhOS05ZTI1LWQzYjY4YWQyNzdkNiIsImxhYmVsIjoiQ1UiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiN2YyYjFjNGMtOGYyZi00MmY0LWI1NWMtMWNkZTc3YjFlODUyIn1d + + + + 1644943403841 + sanmi + + DEL_EDGE + WyIyZDdlZjk4ZS04Y2E5LTRhZjMtYWQxOS1hYzM0MTQ2ZmZlYmYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLCJ0YXJnZXRJRCI6IjM2YjlmMWRmLTdjODQtNGYwNy04ZmNlLWM0YTZmNjQ2MjkzMSIsImxhYmVsIjoiWFlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjMTU2NWMwIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjJkN2VmOThlLThjYTktNGFmMy1hZDE5LWFjMzQxNDZmZmViZiJ9XQ== + + + + 1644943683422 + sanmi + + UPDATE_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJYWjpwbG90eW0iLHRydWVd + + + UPDATE_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsid2lkdGgiOjExNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJYWjpwbG90eW0ucHkiLHRydWVd + + + + \ No newline at end of file diff --git a/humanc/bangbang.py b/humanc/bangbang.py new file mode 100644 index 0000000..9fcc811 --- /dev/null +++ b/humanc/bangbang.py @@ -0,0 +1,30 @@ +import numpy as np +import concore + + +def bangbang_controller(ym): + amp = 0 + if ym[0]>70: + amp = 3 + elif ym[0]<65: + amp = 1 + + + ustar = np.array([amp,30]) + return ustar + + +concore.default_maxtime(150) +concore.delay = 0.02 +init_simtime_u = "[0.0, 0.0,0.0]" +init_simtime_ym = "[0.0, 70.0,91]" +u = np.array([concore.initval(init_simtime_u)]).T +while(concore.simtimefesmin: + output = Gs*np.log(fhist-fesmin+1) + else: + output = 0 + return output + + + + +def generate_historylist(dt = 0.001, ds = K.ds, dv = K.dv): + """ + + Parameters + ---------- + + dt : sampling time + + ds : TYPE, optional + time delay in sympathetic branch. + dv : time delay in parasympathtic branch + + Returns + ------- + Five lists (histories) of firing rates in the sympathetic (3) and vagal (2) + pathways + """ + + sym1 = [20]*int(ds[0]/dt) + sym2 = [3]*int(ds[1]/dt) + sym3 = [3]*int(ds[2]/dt) + + fpara1 = [10]*int(dv/dt) + fpara2 = [10]*int(dv/dt) + return np.array(sym1 + sym2 + sym3 + fpara1 + fpara2) + +def update_historylist(fsym1,fsym2,fsym3, fpara1, fpara2,hs1,hs2,hs3,hp1, hp2): + """ + Updates lists(h) of past firing rates. Discards the earliest and appends the latest. + + Parameters + ---------- + """ + hs1.append(fsym1) + hs1.pop(0) + + hs2.append(fsym2) + hs2.pop(0) + + hs3.append(fsym3) + hs3.pop(0) + + hp1.append(fpara1) + hp1.pop(0) + + hp2.append(fpara2) + hp2.pop(0) + + return(hs1,hs2,hs3,hp1,hp2) + +def split_states(x): + """ + Splits states of the cardiac model into real states and firing histories + + Parameters + ---------- + + """ + real_state = x[0:31] + hs1 = list(x[31:2031]) + hs2 = list(x[2031:4031]) + hs3 = list(x[4031:6031]) + hp1 = list(x[6031:6231]) + hp2 = list(x[6231:6431]) + + return real_state, hs1,hs2,hs3,hp1,hp2 + + +def stimulation(fphys, amplitude, fstim,j): + """ + Describes the effect of VNS stimulation (amplitude and frequency) on + physiological firing rate + + Parameters + ---------- + fphys : physiological firing rate + + amplitude : VNS amplitude + + fstim : VNS frequency + + j : 0 : afferent, 1: efferent + + Returns + ------- + new_freq : effective firing rate after stimulation + + """ + #amplitude_effect + xmid = np.array([0.3, 1.7]) + k = np.array([0.06, 0.35]) + ymin = 0 + ymax = 1 + R = gen_sigmoid(amplitude, xmid[j], ymin, ymax,k[j]) + + #frequency effect + alpha = 1 - (fphys+fstim)/60 + + new_freq = (1-R)*fphys + R*alpha*(fphys + fstim) + return new_freq + + + + +def hcm_pulsatile_dde(x,ustar, hs1,hs2,hs3, hp1,hp2): + """ + + Parameters + ---------- + x : current states (31) + ustar : 2 by 0 array (amplitude and frequency) + hs1...hp2: delayed sympathetic and parasympathetic firing rates + + Returns + ------- + new firing rates (to be stored) + derivatives of the ODEs + """ + + + + u,zeta,dTs, dTv,dEls, dElv, dErs, dErv, dRsp, dRep, dRmp, dVusv,dVuev,\ + dVumv,Ppa,Fpa,Ppp,Ppv,Psa,Fsa,Psp,Pev,Ptv,Pla,Pra,\ + Ptilde,Pl, flr, Vmv,Vlv, Vrv = x + + T = dTs + dTv + K.theta0[0] + Emaxlv = K.theta0[1] + 1/(dEls + dElv) + Emaxrv = K.theta0[2] + 1/(dErs + dErv) + + Rsp = dRsp + K.theta0[3] + Rep = dRep + K.theta0[4] + Rmp = dRmp + K.theta0[5] + + Vusv = dVusv + K.theta0[6] + Vuev = dVuev + K.theta0[7] + Vumv = dVumv + K.theta0[8] + + Rlb = 1/((1/Rmp) + (1/K.Rd)) + + Pthor = thoracic_pressure(zeta) + vlung = K.vlung0-0.1*Pthor + Pabd = abd_pressure(zeta) + Psp_trans = Psp + phi = phi_function(u,T) + + + #left heart + Pmaxlv = phi*Emaxlv*(Vlv-K.Vulv) + (1-phi)*K.Polv*(np.exp(K.Kelv*Vlv)-1) + Rlv = K.KRlv*Pmaxlv + Qol = flow_function(Pmaxlv,Psa,Rlv) + Plv = Pmaxlv - Rlv*Qol + Qil = flow_function(Pla, Plv,K.Rla) + + #right heart + Pmaxrv = phi*Emaxrv*(Vrv-K.Vurv) + (1-phi)*K.Porv*(np.exp(K.Kerv*Vrv)-1) + Rrv = K.KRrv*Pmaxrv + Qor = flow_function(Pmaxrv,Ppa,Rrv) + Prv = Pmaxrv - Rrv*Qor + Qir = flow_function(Pra,Prv,K.Rra) + + Vu = K.Vusa + K.Vusp + K.Vump + K.Vuep + Vusv + Vuev + Vumv + K.Vutv + \ + K.Vura + K.Vupa + K.Vupp + K.Vupv + K.Vula + if Vmv >= Vumv: + + Pmv = ( 1/K.Cmv)*(Vmv-Vumv) + else: + Pmv = K.P0 *(1- (Vmv/Vumv)**(-1.5)) + + Psv = (1/K.Csv)*(K.Vt - K.Csa*Psa - (K.Csp + K.Cep + K.Cmp)*Psp -\ + K.Cev*Pev - K.Cmv*Pmv - K.Ctv*Ptv -K.Cra*Pra -\ + K.Cpa*Ppa - K.Cpp*Ppp -K.Cpv*Ppv - K.Cla*Pla - Vu-Vlv-Vrv) + + if Pmv-Ptv>0: + Vom = (Pmv-Ptv)/K.Rmv + else: + Vom = 0 + + sigmas = np.zeros(9) + for j in range(3): + sigmas[j] = calc_sigma(K.Gs[j],hs1,K.fesmin) + + + dTsdt = (sigmas[0] - dTs)/K.taus[0] + dElsdt = (sigmas[1] - dEls)/K.taus[1] + dErsdt = (sigmas[2] - dErs)/K.taus[2] + + for j in range(3,6): + sigmas[j] = calc_sigma(K.Gs[j],hs2,K.fesmin) + + dRspdt = (sigmas[3] - dRsp)/K.taus[3] + dRepdt = (sigmas[4] - dRep)/K.taus[4] + dRmpdt = (sigmas[5] - dRmp)/K.taus[5] + + for j in range(6,9): + sigmas[j] = calc_sigma(K.Gs[j],hs3,K.fesmin) + dVusvdt = (sigmas[6] - dVusv)/K.taus[6] + dVuevdt = (sigmas[7] - dVuev)/K.taus[7] + dVumvdt = (sigmas[8] - dVumv)/K.taus[8] + + dudt = 1/T + dzetadt = 1/K.Tresp + Ppadt = (1/K.Cpa)*(Qor - Fpa) + Fpadt = (1/K.Lpa)*(Ppa-Ppp - K.Rpa*Fpa) + Pppdt = (1/K.Cpp)*(Fpa - (Ppp - Ppv)/K.Rpp) + Ppvdt = (1/K.Cpv)*((Ppp-Ppv)/K.Rpp -(Ppv - Pla)/K.Rpv) + Psadt = (1/K.Csa)*(Qol - Fsa) + Fsadt = (1/K.Lsa) * (Psa - Psp - K.Rsa*Fsa) + Pspdt = 1/(K.Csp + K.Cep + K.Cmp)*(Fsa - (Psp_trans - (Psv-Pabd))/Rsp - (Psp_trans-Pev)/Rep - (Psp-Pmv)/Rlb) + Pevdt = (1/K.Cev) * ((Psp_trans-Pev)/Rep - (Pev-Ptv)/K.Rev - dVuevdt) + Vmvdt = (Psp_trans-Pmv)/Rlb - Vom + Ptvdt = (1/K.Ctv)*(Vom + (Pev-Ptv)/K.Rev + (Psv-Pabd-Ptv)/K.Rsv - (Ptv-Pra)/K.Rtv) + Pladt = (1/K.Cla)*((Ppv-Pla)/K.Rpv- Qil) + Pradt = (1/K.Cra)* ((Ptv-Pra)/K.Rtv - Qir) + Vlvdt = Qil-Qol + Vrvdt = Qir-Qor + Ptildedt = (1/K.taup)*(Psa + K.tauz*Psadt - Ptilde) + Pldt = (1/K.taucp)*(-Pl + Ppv-Pthor) + flrdt =(1/K.taulung)*(-flr + K.Gal*vlung) + + + #Autonomic regulation + + #sympathetic branch + fbr = gen_sigmoid(Ptilde, K.Pn, K.fbrmin, K.fbrmax,K.ka) + + #Afferent VNS + nfbr = stimulation(fbr , ustar[0],ustar[1],0) + fcpr = cpr(Pl) + + afferent = np.array([nfbr,fcpr,flr]) + f = np.matmul(K.G,afferent) + f[1] -=25 + f_effectors = sympathetic_outflow(f) + + + #parasympathetic branch + frv = np.zeros_like(afferent) + + for i in range(3): + frv[i] = gen_sigmoid(afferent[i],K.midpt[i],K.fmin[i],K.fmax[i],K.k[i]) + + finput = np.matmul(K.kreceptor,frv) + foNa = gen_sigmoid(finput[0],K.foutmidpt[0],K.foutmin[0], K.foutmax[0],K.foutk[0]) + nfoNa= stimulation(foNa , ustar[0], ustar[1],1) + + fDMV = gen_sigmoid(finput[1],K.foutmidpt[1],K.foutmin[1], K.foutmax[1],K.foutk[1]) + fDMV_NActr = fDMV + gen_sigmoid(nfoNa,K.foutmidpt[2],K.foutmin[2], K.foutmax[2],K.foutk[2]) + + + sigmav = np.zeros(3) + sigmav[0] = K.Gv[0] * hp1 + dTvdt = (sigmav[0] - dTv)/K.tauv[0] + + sigmav[1] = K.Gv[1]*hp2 + dElvdt = (sigmav[1] - dElv)/K.tauv[1] + + + sigmav[2] = K.Gv[2]*hp2 + dErvdt = (sigmav[2] - dErv)/K.tauv[2] + + return (f_effectors[0],f_effectors[1],f_effectors[2],nfoNa,fDMV_NActr,\ + np.array((dudt, dzetadt,dTsdt, dTvdt, dElsdt,dElvdt,dErsdt,dErvdt,\ + dRspdt,dRepdt,dRmpdt,dVusvdt,dVuevdt,dVumvdt,Ppadt,Fpadt, \ + Pppdt, Ppvdt, Psadt, Fsadt, Pspdt,Pevdt, Ptvdt, \ + Pladt, Pradt, Ptildedt,Pldt, flrdt,Vmvdt,Vlvdt, Vrvdt))) + + + +def solve_hcm_pulsatile_dde(x,ustar,dt,hs1,hs2,hs3, hp1,hp2): + """ + Solves the ODE system with the Euler method + + Parameters + ---------- + x : current state, array of size 31 + ustar : VNS stimulation (amplitude and frequency) + dt : sampling time + hs1..hp2 : real, Delayed effector firing rates (sympathetic(s) and vagal(p)) + + + + Returns + ------- + fsym1..fpara2 : New firing rates (to be stored) + new system states + + """ + fsym1,fsym2,fsym3, fpara1,fpara2,k1 = hcm_pulsatile_dde(x,ustar,hs1,hs2,hs3, hp1,hp2) + + return (fsym1,fsym2,fsym3 ,fpara1,fpara2, x + dt*k1) + + +def solve_hcm_pulsatile_dde_rk4(x,ustar,dt,hs1,hs2,hs3, hp1,hp2): + """ + Solves the system of ODEs with the RK4 method + Returns new firing rates and new system state + """ + + fsym1,fsym2,fsym3, fpara1,fpara2,k1 = hcm_pulsatile_dde(x,ustar,hs1,hs2,hs3, hp1,hp2) + a1,a2,a3,a4,a5,k2 = hcm_pulsatile_dde(x + 0.5*dt*k1,ustar,hs1,hs2,hs3, hp1,hp2) + a1,a2,a3,a4,a5,k3 = hcm_pulsatile_dde(x + 0.5*dt*k2,ustar,hs1,hs2,hs3, hp1,hp2) + a1,a2,a3,a4,a5,k4 = hcm_pulsatile_dde(x + dt*k3,ustar,hs1,hs2,hs3, hp1,hp2) + return (fsym1,fsym2,fsym3 ,fpara1,fpara2, x + (1/6)*dt*(k1+k2+2*k3 + k4)) + + +def execute_pm(giantX, ustar): + dt = 0.001 + max_time = 2 #arbitrarily large heart period (a cycle is unlikely to last 2 seconds) + nx = 31 # number of system states + x = np.inf * np.ones((nx,int((max_time/dt)+1))) + x0, hs1,hs2,hs3,hp1,hp2 = split_states(giantX) + x[:,0] = x0 + + cycle_pressure = [] #holds arterial pressure values within a cycle + + k = 0 + flag = True + while flag: + + fsym1,fsym2,fsym3, fpara1,fpara2, x[:,k+1] = solve_hcm_pulsatile_dde(x[:,k],ustar, dt, hs1[0],hs2[0],hs3[0],hp1[0],hp2[0]) + cycle_pressure.append(x[18,k+1]) #store instantaneous arterial pressure + + if x[0,k+1]>=1: # check for end of cycle + # ncycle +=1 + # print(ncycle) + + mapp = (max(cycle_pressure) + 2*min(cycle_pressure))/3 #MAP calculation + + hr = 60/ ((k+1)*dt) #hr calculation + + x[0,k+1] = 0 #reset cycle counter + + flag = False + + if x[1,k+1]>=1: #respiratory cycle refresh + x[1,k+1] = 0 + + hs1,hs2,hs3,hp1,hp2 = update_historylist(fsym1,fsym2, fsym3,fpara1,fpara2,hs1,hs2, hs3,hp1,hp2) + giantX = np.concatenate((x[:,k+1], np.array(hs1 + hs2 + hs3 + hp1 + hp2))) + k +=1 + + + return hr,mapp, giantX + + + + + + + +def healthy_pm(giantX,ustar): + """ + Determines hr and mean arterial pressure + Parameters + ---------- + giantX : array, current state of the system (including firing histories) + ustar : VNS stimulation, array (2 by 1), amplitude and frequency) + + Returns + ------- + hr: Heart rate at the end of a cycle + mapp: mean arterial pressure (mmHg) over the cycle + + """ + hr,mapp,giantX = execute_pm(giantX, ustar) + return hr,mapp,giantX + \ No newline at end of file diff --git a/humanc/cardiac_pm.dir/pulsatile_steady.txt b/humanc/cardiac_pm.dir/pulsatile_steady.txt new file mode 100644 index 0000000..4f04260 --- /dev/null +++ b/humanc/cardiac_pm.dir/pulsatile_steady.txt @@ -0,0 +1,6431 @@ +0.000000000000000000e+00 +7.014999999999504965e-01 +-1.601342888573151213e-01 +4.643347422005690284e-01 +-1.601342888596068714e-01 +7.642692091356693140e-01 +-2.709964888377479064e-01 +1.293665441798906857e+00 +8.247914556504674088e-01 +7.749479432226668019e-01 +3.334768331478856318e+00 +-3.784928950220016191e+02 +-1.533081620756027519e+02 +-3.859236241416323310e+01 +1.127327192765920572e+01 +4.644948920886543320e+00 +1.116801874304220910e+01 +7.261184318479795508e+00 +7.872471751171636356e+01 +5.173207151737411635e+00 +7.841463862768100057e+01 +6.016034145863096150e+00 +5.086935244389792388e+00 +7.109477070522475017e+00 +4.875733681130332897e+00 +5.872876907522622503e+01 +1.362514976726293803e+01 +1.463986063910249058e+01 +2.910450115771103583e+02 +1.246021885431882339e+02 +1.310891471639402823e+02 +7.250939153329296616e+00 +7.259689035977567428e+00 +7.268420194415691427e+00 +7.277132592104228692e+00 +7.285826193376571780e+00 +7.294500963316236763e+00 +7.303156867666510621e+00 +7.311793872765653290e+00 +7.320411945502101503e+00 +7.329011053285288568e+00 +7.337591164028518520e+00 +7.346152246140949416e+00 +7.354694268526481338e+00 +7.363217200587639510e+00 +7.371721012233079406e+00 +7.380205673887507700e+00 +7.388671156503182402e+00 +7.397117431572270974e+00 +7.405544471139569040e+00 +7.413952247815126739e+00 +7.422340734786562422e+00 +7.430709905830793716e+00 +7.439059735325052714e+00 +7.447390198257108906e+00 +7.455701270234600386e+00 +7.463992927493483975e+00 +7.472265146905590072e+00 +7.480517905985268001e+00 +7.488751182895180492e+00 +7.496964956451263262e+00 +7.505159206126908344e+00 +7.513333912056353370e+00 +7.521489055037438476e+00 +7.529624616533634907e+00 +7.537740578675524716e+00 +7.545836924261660528e+00 +7.553913636758949224e+00 +7.561970700302531156e+00 +7.570008099695209935e+00 +7.578025820406498525e+00 +7.586023848571285200e+00 +7.594002170988154887e+00 +7.601960775117424518e+00 +7.609899649078867512e+00 +7.617818781649209114e+00 +7.625718162259389032e+00 +7.633597780991596693e+00 +7.641457628576128869e+00 +7.649297696388094536e+00 +7.657117976443926111e+00 +7.664918461397778771e+00 +7.672699144537816096e+00 +7.680460019782330505e+00 +7.688201081675828163e+00 +7.695922325384975338e+00 +7.703623746694482577e+00 +7.711305342002905405e+00 +7.718967108318404158e+00 +7.726609043254402565e+00 +7.734231145025246335e+00 +7.741833412441764040e+00 +7.749415844906838657e+00 +7.756978442410895624e+00 +7.764521205527390890e+00 +7.772044135408265220e+00 +7.779547233779373627e+00 +7.787030502935875731e+00 +7.794493945737643870e+00 +7.801937565604628588e+00 +7.809361366512227676e+00 +7.816765352986640991e+00 +7.824149530100200423e+00 +7.831513903466726489e+00 +7.838858479236858301e+00 +7.846183264093385290e+00 +7.853488265246577171e+00 +7.860773490429521004e+00 +7.868038947893451152e+00 +7.875284646403086342e+00 +7.882510595231979167e+00 +7.889716804157837160e+00 +7.896903283457906042e+00 +7.904070043904301457e+00 +7.911217096759388667e+00 +7.918344453771144487e+00 +7.925452127168551186e+00 +7.932540129656976191e+00 +7.939608474413587302e+00 +7.946657175082753710e+00 +7.953686245771462993e+00 +7.960695701044778971e+00 +7.967685555921271146e+00 +7.974655825868481429e+00 +7.981606526798392665e+00 +7.988537675062923782e+00 +7.995449287449416076e+00 +8.002341381176169222e+00 +8.009213973887954197e+00 +8.016067083651556402e+00 +8.022900728951354310e+00 +8.029714928684880348e+00 +8.036509702158413759e+00 +8.043285069082587668e+00 +8.050041049568024576e+00 +8.056777664120968296e+00 +8.063494933638940765e+00 +8.070192879406432596e+00 +8.076871523090568772e+00 +8.083530886736856047e+00 +8.090170992764877056e+00 +8.096791863964073244e+00 +8.103393523489478056e+00 +8.109975994857515857e+00 +8.116539301941818607e+00 +8.123083468969023002e+00 +8.129608520514629788e+00 +8.136114481498866624e+00 +8.142601377182556277e+00 +8.149069233163029224e+00 +8.155518075370041586e+00 +8.161947930061703715e+00 +8.168358823820460302e+00 +8.174750783549070476e+00 +8.181123836466586141e+00 +8.187478010104401349e+00 +8.193813332302278596e+00 +8.200129831204430175e+00 +8.206427535255574668e+00 +8.212706473197078694e+00 +8.218966674063054256e+00 +8.225208167176527141e+00 +8.231430982145596431e+00 +8.237635148859624223e+00 +8.243820697485460869e+00 +8.249987658463668438e+00 +8.256136062504790374e+00 +8.262265940585610480e+00 +8.268377323945466983e+00 +8.274470244082575476e+00 +8.280544732750371395e+00 +8.286600821953873819e+00 +8.292638543946067031e+00 +8.298657931224335371e+00 +8.304659016526873216e+00 +8.310641832829150033e+00 +8.316606413340389636e+00 +8.322552791500058333e+00 +8.328481000974413462e+00 +8.334391075653019954e+00 +8.340283049645337954e+00 +8.346156957277303334e+00 +8.352012833087943733e+00 +8.357850711826019463e+00 +8.363670628446664423e+00 +8.369472618108092732e+00 +8.375256716168280491e+00 +8.381022958181702620e+00 +8.386771379896075018e+00 +8.392502017249135804e+00 +8.398214906365426557e+00 +8.403910083553123300e+00 +8.409587585300862145e+00 +8.415247448274612907e+00 +8.420889709314556271e+00 +8.426514405431987598e+00 +8.432121573806265147e+00 +8.437711251781745858e+00 +8.443283476864756665e+00 +8.448838286720611990e+00 +8.454375719170615255e+00 +8.459895812189117237e+00 +8.465398603900560204e+00 +8.470884132576593117e+00 +8.476352436633154852e+00 +8.481803554627628472e+00 +8.487237525255979520e+00 +8.492654387349944045e+00 +8.498054179874227287e+00 +8.503436941923716574e+00 +8.508802712720733297e+00 +8.514151531612299095e+00 +8.519483438067414482e+00 +8.524798471674388978e+00 +8.530096672138146374e+00 +8.535378079277601060e+00 +8.540642733023023681e+00 +8.545890673413438776e+00 +8.551121940594050841e+00 +8.556336574813673934e+00 +8.561534616422211030e+00 +8.566716105868122710e+00 +8.571881083695940262e+00 +8.577029590543791215e+00 +8.582161667140949746e+00 +8.587277354305411947e+00 +8.592376692941474658e+00 +8.597459724037358697e+00 +8.602526488662833870e+00 +8.607577027966883065e+00 +8.612611383175368118e+00 +8.617629595588745417e+00 +8.622631706579756639e+00 +8.627617757591195868e+00 +8.632587790133658956e+00 +8.637541845783323069e+00 +8.642479966179754669e+00 +8.647402193023726369e+00 +8.652308568075058659e+00 +8.657199133150491832e+00 +8.662073930121557908e+00 +8.666933000912491636e+00 +8.671776387498139727e+00 +8.676604131901926920e+00 +8.681416276193784753e+00 +8.686212862488158493e+00 +8.690993932942005173e+00 +8.695759529752796979e+00 +8.700509695156579681e+00 +8.705244471426022201e+00 +8.709963900868494591e+00 +8.714668025824154896e+00 +8.719356888664098193e+00 +8.724030531788443454e+00 +8.728688997624530543e+00 +8.733332328625058594e+00 +8.737960567266297218e+00 +8.742573756046287059e+00 +8.747171937483077642e+00 +8.751755154112954571e+00 +8.756323448488711136e+00 +8.760876863177944784e+00 +8.765415440761337607e+00 +8.769939223830979458e+00 +8.774448254988708840e+00 +8.778942576844466217e+00 +8.783422232014657993e+00 +8.787887263120552461e+00 +8.792337712786684634e+00 +8.796773623639277062e+00 +8.801195038304674867e+00 +8.805601999407821623e+00 +8.809994549570719258e+00 +8.814372731410918149e+00 +8.818736587540037419e+00 +8.823086160562281677e+00 +8.827421493072982628e+00 +8.831742627080174657e+00 +8.836049604589897299e+00 +8.840342467604695997e+00 +8.844621258122055352e+00 +8.848886018132878561e+00 +8.853136789619981073e+00 +8.857373614556603769e+00 +8.861596534904913725e+00 +8.865805592614567132e+00 +8.870000829621247362e+00 +8.874182287845254535e+00 +8.878350009190082659e+00 +8.882504035541041176e+00 +8.886644408763880065e+00 +8.890771170703430926e+00 +8.894884363182285369e+00 +8.898984027999466306e+00 +8.903070206929131203e+00 +8.907142941719293106e+00 +8.911202274090548769e+00 +8.915248245734845867e+00 +8.919280898314232431e+00 +8.923300273454998432e+00 +8.927306412738422736e+00 +8.931299357689251650e+00 +8.935279149762786588e+00 +8.939245830331250531e+00 +8.943199440669967970e+00 +8.947140021943756238e+00 +8.951067615193858629e+00 +8.954982261325621806e+00 +8.958884001097077387e+00 +8.962772875108559134e+00 +8.966648923793410830e+00 +8.970512187409820370e+00 +8.974362706033748083e+00 +8.978200519553020342e+00 +8.982025667662453472e+00 +8.985838189860052339e+00 +8.989638125444150418e+00 +8.993425513511514424e+00 +8.997200392956269610e+00 +9.000962802469622659e+00 +9.004712780540293338e+00 +9.008450365455633602e+00 +9.012175595303265396e+00 +9.008038334915134726e+00 +8.931696772293134856e+00 +8.784508758300855646e+00 +8.560108087508345065e+00 +8.248349991456535690e+00 +7.839715445646559644e+00 +7.331121685166317903e+00 +6.732618034998433032e+00 +6.072299228281465844e+00 +5.395198747693561003e+00 +4.753578442651136271e+00 +4.191810846634137278e+00 +3.734331393059610704e+00 +3.383386610245798565e+00 +3.125638222289830015e+00 +2.941402043775770192e+00 +2.811431207104733598e+00 +2.720005973460271953e+00 +2.655456348110695419e+00 +2.609544854214843834e+00 +2.576592635526757658e+00 +2.552714114625852737e+00 +2.535246113228510012e+00 +2.522351076345138665e+00 +2.512749684408943640e+00 +2.505542514848249525e+00 +2.500091019389444558e+00 +2.495937580002476341e+00 +2.492751321871450099e+00 +2.490291011416004618e+00 +2.488379391971249355e+00 +2.486885255756901447e+00 +2.485710803458892837e+00 +2.484782654392075241e+00 +2.484045401096613759e+00 +2.483456953188573735e+00 +2.482985149848622175e+00 +2.482605278762626710e+00 +2.482298247408365022e+00 +2.482049227004524461e+00 +2.481846641128682140e+00 +2.481681407202593448e+00 +2.481546364573215868e+00 +2.481435841053656777e+00 +2.481345322756181027e+00 +2.481271201379984692e+00 +2.481210579869512323e+00 +2.481161122274305075e+00 +2.481120937238173507e+00 +2.481088487191191128e+00 +2.481062517273851409e+00 +2.481041999475546156e+00 +2.481026088553770048e+00 +2.481014087113295741e+00 +2.481005417836606775e+00 +2.480999601319757275e+00 +2.480996238319303160e+00 +2.480994995483982724e+00 +2.480995593850018999e+00 +2.480997799536620363e+00 +2.481001416199947407e+00 +2.481006278898074680e+00 +2.481012249092741762e+00 +2.481019210570909461e+00 +2.481027066113921542e+00 +2.481035734777354840e+00 +2.481045149672454375e+00 +2.481055256162166600e+00 +2.481066010402380950e+00 +2.481077378173099923e+00 +2.481089333955657672e+00 +2.481101860221333499e+00 +2.481114946904307228e+00 +2.481128591038160192e+00 +2.481142796540420914e+00 +2.481157574134131849e+00 +2.481172941399343301e+00 +2.481188922950913867e+00 +2.481205550742168864e+00 +2.481222864496975156e+00 +2.481240912275644028e+00 +2.481259751182961715e+00 +2.481279448229533724e+00 +2.481300081360707122e+00 +2.481321740670530573e+00 +2.481344529821718048e+00 +2.481368567696396799e+00 +2.481393990306612896e+00 +2.481420952998246054e+00 +2.481449632987189347e+00 +2.481480232272490483e+00 +2.481512980977702565e+00 +2.481548141179042322e+00 +2.481586011287254312e+00 +2.481626931059389918e+00 +2.481671287327207764e+00 +2.481719520540714541e+00 +2.481772132238651007e+00 +2.481829693572676909e+00 +2.481892855028842604e+00 +2.481962357508819217e+00 +2.482039044954653662e+00 +2.482123878724721067e+00 +2.482217953955466960e+00 +2.482322518173828652e+00 +2.482438992459360172e+00 +2.482568995493577901e+00 +2.482714370877525667e+00 +2.482877218147754750e+00 +2.483059927976643433e+00 +2.483265222106348702e+00 +2.483496198637819230e+00 +2.483756383378725285e+00 +2.484049788048577678e+00 +2.484380976247900552e+00 +2.484755138223511128e+00 +2.485178175606938211e+00 +2.485656797471394341e+00 +2.486198629249011027e+00 +2.486812336279687230e+00 +2.487507764032360846e+00 +2.488296097356809788e+00 +2.489190041498582584e+00 +2.490204028052988239e+00 +2.491354449559857187e+00 +2.492659927065617786e+00 +2.494141615722628824e+00 +2.495823554381029208e+00 +2.497733066182860284e+00 +2.499901218423775440e+00 +2.502363351440820782e+00 +2.505159688056847411e+00 +2.508336037208591218e+00 +2.511944607854487810e+00 +2.516044952148313030e+00 +2.520705060219212257e+00 +2.526002632748771237e+00 +2.532026561887515292e+00 +2.538878655868914702e+00 +2.546675647849118374e+00 +2.555551534803190972e+00 +2.565660297351929575e+00 +2.577179055536914731e+00 +2.590311717811196512e+00 +2.605293179385727687e+00 +2.622394119430836668e+00 +2.641926431501319783e+00 +2.664249293932555496e+00 +2.689543471366940608e+00 +2.716529324626073993e+00 +2.744974331068542384e+00 +2.774615382083417181e+00 +2.805170043021238513e+00 +2.836348145963502709e+00 +2.867862798050180739e+00 +2.899440066950861095e+00 +2.930826843571081142e+00 +2.961796634226759650e+00 +2.992153261890391214e+00 +3.021732634005273255e+00 +3.050402852754152239e+00 +3.078063004552268556e+00 +3.104640978617150271e+00 +3.130090642864694850e+00 +3.154388662306236046e+00 +3.177531191853717907e+00 +3.199530620447285756e+00 +3.220412492296651941e+00 +3.240212686904986761e+00 +3.258974903684061175e+00 +3.276748469366145056e+00 +3.293586466309305738e+00 +3.309544166044244395e+00 +3.324677743781223160e+00 +3.339043244898397766e+00 +3.352695772622948489e+00 +3.365688866324878070e+00 +3.378074041380408676e+00 +3.389900463900705319e+00 +3.401214736375163916e+00 +3.412060773173231532e+00 +3.422479747700148067e+00 +3.432510095693025676e+00 +3.442187561606833590e+00 +3.451545277242756171e+00 +3.460613863705337856e+00 +3.469421549447338826e+00 +3.477994298589104361e+00 +3.486355944904582227e+00 +3.494528327873501539e+00 +3.502531428033093697e+00 +3.510383499546865238e+00 +3.518101198464262946e+00 +3.525699705593257960e+00 +3.533192843265536176e+00 +3.540593185556409672e+00 +3.547912161741889836e+00 +3.555160152944727869e+00 +3.562346582049411126e+00 +3.569479997060717835e+00 +3.576568148148330906e+00 +3.583618058666691031e+00 +3.590636090469057962e+00 +3.597628003851607303e+00 +3.604599012470075969e+00 +3.611553833570600336e+00 +3.618496733869761783e+00 +3.625431571408217479e+00 +3.632361833688674491e+00 +3.639290672393436843e+00 +3.646220934960238580e+00 +3.653155193277699553e+00 +3.660095769744580174e+00 +3.667044760919790924e+00 +3.674004058973522113e+00 +3.680975371133798468e+00 +3.687960237307527755e+00 +3.694960046040654866e+00 +3.701976048968392163e+00 +3.709009373893892292e+00 +3.716061036621777891e+00 +3.723131951662046024e+00 +3.730222941909654644e+00 +3.737334747395756551e+00 +3.744468033197907886e+00 +3.751623396588684933e+00 +3.758801373494873310e+00 +3.766002444332752663e+00 +3.773227039278967965e+00 +3.780475543030899388e+00 +3.787748299105464511e+00 +3.795045613720609445e+00 +3.802367759299678518e+00 +3.809714977634933941e+00 +3.817087482743167115e+00 +3.824485463443129785e+00 +3.831909085681718174e+00 +3.839358494633320351e+00 +3.846833816594299016e+00 +3.854335160692545337e+00 +3.861862620430085880e+00 +3.869416275074985201e+00 +3.876996190917209262e+00 +3.884602422407168021e+00 +3.892235013254126574e+00 +3.899893997478076635e+00 +3.907579403179486821e+00 +3.915291253594697096e+00 +3.923029567767969183e+00 +3.930794361282534233e+00 +3.938585647051859873e+00 +3.946403436161951994e+00 +3.954247738736468509e+00 +3.962118564771864193e+00 +3.970015924868078638e+00 +3.977939830773622454e+00 +3.985890295681069340e+00 +3.993867334247203971e+00 +4.001870962356637307e+00 +4.009901196681599167e+00 +4.017958054105224441e+00 +4.026041550919465806e+00 +4.034151701816210078e+00 +4.042288519077043674e+00 +4.050452011920953055e+00 +4.058642185976013117e+00 +4.066859042847404737e+00 +4.075102579759391830e+00 +4.083372789302880612e+00 +4.091669659432651152e+00 +4.099993173525634305e+00 +4.108343310468407950e+00 +4.116720044765726172e+00 +4.125123346663571056e+00 +4.133553182281521465e+00 +4.142009513750367411e+00 +4.150492299351811631e+00 +4.159001493657790149e+00 +4.167537047667586592e+00 +4.176098908941373367e+00 +4.184687021729221357e+00 +4.193301327094864028e+00 +4.201941763033837596e+00 +4.210608264585745886e+00 +4.219300763940537990e+00 +4.228019190538884864e+00 +4.236763471166682393e+00 +4.245533530043945625e+00 +4.254329288908239803e+00 +4.263150667092935997e+00 +4.271997581600551541e+00 +4.280869947171440870e+00 +4.289767676348155589e+00 +4.298690679535683401e+00 +4.307638865057928257e+00 +4.316612139210628030e+00 +4.325610406310991252e+00 +4.334633568744293619e+00 +4.343681527007674958e+00 +4.352754179751325836e+00 +4.361851423817299178e+00 +4.370973154276116546e+00 +4.380119264461343143e+00 +4.389289646002326073e+00 +4.398484188855215749e+00 +4.407702781332424991e+00 +4.416945310130666158e+00 +4.426211660357672883e+00 +4.435501715557720104e+00 +4.444815357736065842e+00 +4.454152467382376912e+00 +4.463512923493241580e+00 +4.472896603593870424e+00 +4.482303383759006721e+00 +4.491733138633172473e+00 +4.501185741450263400e+00 +4.510661064052593261e+00 +4.520158976909389281e+00 +4.529679349134841715e+00 +4.539222048505706653e+00 +4.548786941478521584e+00 +4.558373893206481675e+00 +4.567982767555971435e+00 +4.577613427122839695e+00 +4.587265733248393929e+00 +4.596939546035164526e+00 +4.606634724362460354e+00 +4.616351125901752894e+00 +4.626088607131862318e+00 +4.635847023354008556e+00 +4.645626228706747796e+00 +4.655426076180757988e+00 +4.665246417633550635e+00 +4.675087103804068889e+00 +4.684947984327219928e+00 +4.694828907748343383e+00 +4.704729721537608711e+00 +4.714650272104377038e+00 +4.724590404811504385e+00 +4.734549963989630683e+00 +4.744528792951433260e+00 +4.754526734005847466e+00 +4.764543628472299730e+00 +4.774579316694900655e+00 +4.784633638056652316e+00 +4.794706430993641355e+00 +4.804797533009243615e+00 +4.814906780688318122e+00 +4.825034009711423266e+00 +4.835179054869035653e+00 +4.845341750075775167e+00 +4.855521928384646912e+00 +4.865719422001302696e+00 +4.875934062298294513e+00 +4.886165679829374220e+00 +4.896414104343779883e+00 +4.906679164800550552e+00 +4.916960689382850802e+00 +4.927258505512310371e+00 +4.937572439863370022e+00 +4.947902318377642494e+00 +4.958247966278277019e+00 +4.968609208084330930e+00 +4.978985867625151052e+00 +4.989377768054731987e+00 +4.999784731866093068e+00 +5.010206580905639306e+00 +5.020643136387501926e+00 +5.031094218907862015e+00 +5.041559648459251974e+00 +5.052039244444824106e+00 +5.062532825692573901e+00 +5.073040210469518918e+00 +5.083561216495827040e+00 +5.094095660958849692e+00 +5.104643360527111540e+00 +5.115204131364174955e+00 +5.125777789142420104e+00 +5.136364149056700690e+00 +5.146963025837835382e+00 +5.157574233765982896e+00 +5.168197586683811906e+00 +5.178832898009481767e+00 +5.189479980749409194e+00 +5.200138647510780032e+00 +5.210808710513810560e+00 +5.221489981603700592e+00 +5.232182272262277500e+00 +5.242885393619296508e+00 +5.253599156463401698e+00 +5.264323371252671357e+00 +5.275057848015216599e+00 +5.285802396108772783e+00 +5.296556824043195277e+00 +5.307320939356992007e+00 +5.318094548540035049e+00 +5.328877456995623874e+00 +5.339669469035744243e+00 +5.350470387903876635e+00 +5.361280015820270251e+00 +5.372098154045056972e+00 +5.382924602954963333e+00 +5.393759162129921236e+00 +5.404601630446254745e+00 +5.415451806173621208e+00 +5.426309487073208260e+00 +5.437174470495269141e+00 +5.448046553474256370e+00 +5.458925532820336990e+00 +5.469811205206285720e+00 +5.480703367249058822e+00 +5.491601815585612556e+00 +5.502506346942668713e+00 +5.513416758200419210e+00 +5.524332846450162648e+00 +5.535254409046027391e+00 +5.546181243651133741e+00 +5.557113148278359560e+00 +5.568049921326183593e+00 +5.578991361609923594e+00 +5.589937268388785796e+00 +5.600887441389115651e+00 +5.611841680824236178e+00 +5.622799787411279837e+00 +5.633761562385329213e+00 +5.644726807511257327e+00 +5.655695325093555326e+00 +5.666666917984455765e+00 +5.677641389590587728e+00 +5.688618543878493305e+00 +5.699598185379104009e+00 +5.710580119191485338e+00 +5.721564150985943620e+00 +5.732550087006712758e+00 +5.743537734074287471e+00 +5.754526899587574462e+00 +5.765517391525950330e+00 +5.776509018451267963e+00 +5.787501589509925104e+00 +5.798494914435069703e+00 +5.809488803548903846e+00 +5.820483067765219509e+00 +5.831477518592162568e+00 +5.842471968135180660e+00 +5.853466229100295237e+00 +5.864460114797596546e+00 +5.875453439145023715e+00 +5.886446016672395309e+00 +5.897437662525746305e+00 +5.908428192471868456e+00 +5.919417422903158865e+00 +5.930405170842669271e+00 +5.941391253949406703e+00 +5.952375490523830415e+00 +5.963357699513586851e+00 +5.974337700519392946e+00 +5.985315313801129022e+00 +5.996290360284062260e+00 +6.007262661565235362e+00 +6.018232039919972465e+00 +6.029198318308511162e+00 +6.040161320382731347e+00 +6.051120870492958659e+00 +6.062076793694880728e+00 +6.073028915756463419e+00 +6.083977063164988763e+00 +6.094921063134071559e+00 +6.105860743610730168e+00 +6.116795933282467956e+00 +6.127726461584359186e+00 +6.138652158706129569e+00 +6.149572855599242160e+00 +6.160488383983921068e+00 +6.171398576356175170e+00 +6.182303265994798736e+00 +6.193202286968295667e+00 +6.204095474141755773e+00 +6.214982663183716838e+00 +6.225863690572895237e+00 +6.236738393604921882e+00 +6.247606610398946714e+00 +6.258468179904200568e+00 +6.269322941906461111e+00 +6.280170737034445949e+00 +6.291011406766106262e+00 +6.301844793434829839e+00 +6.312670740235553524e+00 +6.323489091230777959e+00 +6.334299691356473971e+00 +6.345102386427896590e+00 +6.355897023145303137e+00 +6.366683449099525660e+00 +6.377461512777495400e+00 +6.388231063567589629e+00 +6.398991951764932296e+00 +6.409744028576536579e+00 +6.420487146126346190e+00 +6.431221157460173643e+00 +6.441945916550508855e+00 +6.452661278301219383e+00 +6.463367098552135204e+00 +6.474063234083503815e+00 +6.484749542620326324e+00 +6.495425882836615372e+00 +6.506091571770529214e+00 +6.516746466311115427e+00 +6.527390425640881233e+00 +6.538023310874164551e+00 +6.548644984771929245e+00 +6.559255311518475295e+00 +6.569854156548222690e+00 +6.580441386412822169e+00 +6.591016868680632967e+00 +6.601580471862147803e+00 +6.612132065356005839e+00 +6.622671519411341023e+00 +6.633198705102941517e+00 +6.643713494316465074e+00 +6.654215759741344272e+00 +6.664705374869619448e+00 +6.675182213999175218e+00 +6.685646152240252604e+00 +6.696097065524268643e+00 +6.706534830614218734e+00 +6.716959325116096835e+00 +6.727370427490843241e+00 +6.737768017066535720e+00 +6.748151974050493607e+00 +6.758522179541150976e+00 +6.768878515539510587e+00 +6.779220864960144866e+00 +6.789549111641569823e+00 +6.799863140356055879e+00 +6.810162836818795640e+00 +6.820448087696405537e+00 +6.830718780614830621e+00 +6.840974804166597423e+00 +6.851216047917478846e+00 +6.861442402412553321e+00 +6.871653759181736376e+00 +6.881850010744761548e+00 +6.892031050615671006e+00 +6.902196773306826572e+00 +6.912347074332474861e+00 +6.922481850211909205e+00 +6.932600998472210563e+00 +6.942704417650650939e+00 +6.952792007296734411e+00 +6.962863667973930859e+00 +6.972919301261073954e+00 +6.982958809753538887e+00 +6.992982097064089686e+00 +7.002989067823527591e+00 +7.012979627681083628e+00 +7.022953683304599792e+00 +7.032911142380511293e+00 +7.042851913613620951e+00 +7.052775906726722610e+00 +7.062683032460011390e+00 +7.072573202570380246e+00 +7.082446329830517584e+00 +7.092302328027898284e+00 +7.102141111963616638e+00 +7.111962597451078949e+00 +7.121766701314619752e+00 +7.131553341387927958e+00 +7.141322436512423266e+00 +7.151073906535488689e+00 +7.160807672308598271e+00 +7.170523655685379083e+00 +7.180221779519520453e+00 +7.189901967662649440e+00 +7.199564144962069534e+00 +7.209208237258446061e+00 +7.218834171383386789e+00 +7.228441875156949692e+00 +7.238031277385079676e+00 +7.247602307856949366e+00 +7.257154897342250166e+00 +7.266688977588392717e+00 +7.276204481317646966e+00 +7.285701342224207622e+00 +7.295179494971206324e+00 +7.304638875187645652e+00 +7.314079419465270959e+00 +7.323501065355394246e+00 +7.332903751365648759e+00 +7.342287416956681412e+00 +7.351652002538799024e+00 +7.360997449468539955e+00 +7.370323700045233295e+00 +7.379630697507440829e+00 +7.388918386029411423e+00 +7.398186710717450154e+00 +7.407435617606223488e+00 +7.416665053655075113e+00 +7.425874966744226313e+00 +7.435065305670976343e+00 +7.444236020145833521e+00 +7.453387060788625007e+00 +7.462518379124531975e+00 +7.471629927580119457e+00 +7.480721659479302232e+00 +7.489793529039268094e+00 +7.498845491366379790e+00 +7.507877502452037888e+00 +7.516889519168469036e+00 +7.525881499264542640e+00 +7.534853401361502279e+00 +7.543805184948679354e+00 +7.552736810379174770e+00 +7.561648238865512184e+00 +7.570539432475241526e+00 +7.579410354126542515e+00 +7.588260967583764227e+00 +7.597091237452975321e+00 +7.605901129177436104e+00 +7.614690609033099022e+00 +7.623459644124038093e+00 +7.632208202377881889e+00 +7.640936252541196794e+00 +7.649643764174882676e+00 +7.658330707649501079e+00 +7.666997054140614054e+00 +7.675642775624094583e+00 +7.684267844871415676e+00 +7.692872235444902174e+00 +7.701455921692994977e+00 +7.710018878745477977e+00 +7.718561082508683668e+00 +7.727082509660700538e+00 +7.735583137646539598e+00 +7.744062944673309801e+00 +7.752521909705370362e+00 +7.760960012459451107e+00 +7.769377233399788807e+00 +7.777773553733245748e+00 +7.786148955404389227e+00 +7.794503421090594131e+00 +7.802836934197117102e+00 +7.811149478852161820e+00 +7.819441039901940727e+00 +7.827711602905729649e+00 +7.835961154130906436e+00 +7.844189680547984267e+00 +7.852397169825650280e+00 +7.860583610325782900e+00 +7.868748991098474477e+00 +7.876893301877036180e+00 +7.885016533073025968e+00 +7.893118675771237491e+00 +7.901199721724719183e+00 +7.909259663349757830e+00 +7.917298493720897667e+00 +7.925316206565925725e+00 +7.933312796260882038e+00 +7.941288257825048547e+00 +7.949242586915948650e+00 +7.957175779824357420e+00 +7.965087833469285172e+00 +7.972978745393005440e+00 +7.980848513756036766e+00 +7.988697137332167131e+00 +7.996524615503455280e+00 +8.004330948255271139e+00 +8.012116136171290037e+00 +8.019880180428531347e+00 +8.027623082792388232e+00 +8.035344845611673392e+00 +8.043045471813652370e+00 +8.050724964899101721e+00 +8.058383328937360091e+00 +8.066020568561405923e+00 +8.073636688962919195e+00 +8.081231695887368005e+00 +8.088805595629107614e+00 +8.096358395026472365e+00 +8.103890101456888928e+00 +8.111400722831994869e+00 +8.118890267592776766e+00 +8.126358744704704762e+00 +8.133806163652891996e+00 +8.141232534437248702e+00 +8.148637867567671833e+00 +8.156022174059225804e+00 +8.163385465427349885e+00 +8.170727753683070915e+00 +8.178049051328224905e+00 +8.185349371350712389e+00 +8.192628727219734230e+00 +8.199887132881084284e+00 +8.207124602752418951e+00 +8.214341151718555167e+00 +8.221536795126795027e+00 +8.228711548782245089e+00 +8.235865428943174749e+00 +8.242998452316360414e+00 +8.250110636052477631e+00 +8.257201997741494992e+00 +8.264272555408068044e+00 +8.271322327506993588e+00 +8.278351332918633787e+00 +8.285359590944390007e+00 +8.292347121302173107e+00 +8.299313944121921693e+00 +8.306260079941097274e+00 +8.313185549700229160e+00 +8.320090374738470018e+00 +8.326974576789165639e+00 +8.333838177975447792e+00 +8.340681200805839524e+00 +8.347503668169895974e+00 +8.354305603333845198e+00 +8.361087029936262738e+00 +8.367847971983760402e+00 +8.374588453846691039e+00 +8.381308500254885274e+00 +8.388008136293404249e+00 +8.394687387398295897e+00 +8.401346279352402746e+00 +8.407984838281169715e+00 +8.414603090648467898e+00 +8.421201063252469865e+00 +8.427778783221503645e+00 +8.434336278009965326e+00 +8.440873575394229889e+00 +8.447390703468593998e+00 +8.453887690641252561e+00 +8.460364565630248634e+00 +8.466821357459517472e+00 +8.473258095454893279e+00 +8.479674809240163924e+00 +8.486071528733145186e+00 +8.492448284141783432e+00 +8.498805105960251183e+00 +8.505142024965111958e+00 +8.511459072211472687e+00 +8.517756279029155664e+00 +8.524033677018941546e+00 +8.530291298048757298e+00 +8.536529174249967156e+00 +8.542747338013626290e+00 +8.548945821986784210e+00 +8.555124659068816584e+00 +8.561283882407764168e+00 +8.567423525396694828e+00 +8.573543621670111747e+00 +8.579644205100354526e+00 +8.585725309794042914e+00 +8.591786970088540087e+00 +8.597829220548435458e+00 +8.603852095962045254e+00 +8.609855631337955728e+00 +8.615839861901577024e+00 +8.621804823091711256e+00 +8.627750550557152565e+00 +8.633677080153338679e+00 +8.639584447938961631e+00 +8.645472690172660180e+00 +8.651341843309708679e+00 +8.657191943998750361e+00 +8.663023029078505743e+00 +8.668835135574575190e+00 +8.674628300696188177e+00 +8.680402561833057362e+00 +8.686157956552170489e+00 +8.691894522594690642e+00 +8.697612297872794329e+00 +8.703311320466605494e+00 +8.708991628621117087e+00 +8.714653260743133956e+00 +8.720296255398260143e+00 +8.725920651307873754e+00 +8.731526487346176424e+00 +8.737113802537209040e+00 +8.742682636051934963e+00 +8.748233027205319701e+00 +8.753765015453453202e+00 +8.759278640390672166e+00 +8.764773941746723196e+00 +8.770250959383947276e+00 +8.775709733294476678e+00 +8.781150303597462070e+00 +8.786572710536328046e+00 +8.791976994476023322e+00 +8.797363195900343769e+00 +8.802731355409225245e+00 +8.808081513716091493e+00 +8.813413711645207371e+00 +8.818727990129080041e+00 +8.824024390205828183e+00 +8.829302953016652467e+00 +8.834563719803252724e+00 +8.839806731905317960e+00 +8.845032030757996822e+00 +8.850239657889435563e+00 +8.855429654918305360e+00 +8.860602063551359819e+00 +8.865756925581015579e+00 +8.870894282882950677e+00 +8.876014177413731332e+00 +8.881116651208451174e+00 +8.886201746378405986e+00 +8.891269505108768456e+00 +8.896319969656307336e+00 +8.901353182347104820e+00 +8.906369185574311231e+00 +8.911368021795919248e+00 +8.916349733532550559e+00 +8.921314363365263844e+00 +8.926261953933401827e+00 +8.931192547932422343e+00 +8.936106188111793358e+00 +8.941002917272873773e+00 +8.945882778266826207e+00 +8.950745813992567079e+00 +8.955592067394693601e+00 +8.960421581461481821e+00 +8.965234399222875794e+00 +8.970030563748483843e+00 +8.974810118145631677e+00 +8.979573105557411949e+00 +8.984319569160749808e+00 +8.989049552164493306e+00 +8.993763097807532247e+00 +8.998460249356922347e+00 +9.003141050106036047e+00 +9.007805543372725765e+00 +9.012453772497526217e+00 +9.017085780841837206e+00 +9.021701611180899860e+00 +9.026301306317508377e+00 +9.030884909080093337e+00 +9.035452462320861855e+00 +9.040004008913960831e+00 +9.044539591753624208e+00 +9.049059253752353982e+00 +9.053563037839120753e+00 +9.058050986957594475e+00 +9.062523144064378755e+00 +9.066979552127255815e+00 +9.071420254123484739e+00 +9.075845293038090844e+00 +9.080254711862194128e+00 +9.084648553591330611e+00 +9.089026861223834075e+00 +9.093389677759203593e+00 +9.097737046196501254e+00 +9.102069009532778310e+00 +9.106385610761506655e+00 +9.110686892871040499e+00 +9.114972898841303461e+00 +9.119243671636187543e+00 +9.123499254192914520e+00 +9.127739689409450463e+00 +9.131965020130717647e+00 +9.136175289134314426e+00 +9.140370539116142723e+00 +9.144550812676413898e+00 +9.148716152306244354e+00 +9.152866600375100248e+00 +9.157002199119194330e+00 +9.161122990630977014e+00 +9.165229016849721688e+00 +9.169320319553305509e+00 +9.173396940351087991e+00 +9.177458920677961984e+00 +9.181506301789479352e+00 +9.185539124758017593e+00 +9.189557430469925237e+00 +9.193561259623630022e+00 +9.197550652728555320e+00 +9.201525650104841247e+00 +9.205486291883797634e+00 +9.209432618008975169e+00 +9.213364668237835176e+00 +9.213761004539117394e+00 +9.136503337359135557e+00 +8.983857242197904824e+00 +8.749756932062449977e+00 +8.424133394790757734e+00 +7.997655515728178344e+00 +7.467869580470630098e+00 +6.846138925739682080e+00 +6.162535631641647527e+00 +5.464298567624965131e+00 +4.805396238633393935e+00 +4.230842421138302001e+00 +3.764649106397596867e+00 +3.408066455435834197e+00 +3.146728992970562189e+00 +2.960175981825020841e+00 +2.828664362901658791e+00 +2.736181680013139772e+00 +2.670887486356584795e+00 +2.624441888883702667e+00 +2.591101378010118861e+00 +2.566937619570139884e+00 +2.549258169917609784e+00 +2.536204990218692057e+00 +2.526484223090360359e+00 +2.519186035624108033e+00 +2.513664377033819175e+00 +2.509456193800769785e+00 +2.506226653809688010e+00 +2.503731628258278885e+00 +2.501791731628763671e+00 +2.500274182644950827e+00 +2.499080012730684253e+00 +2.498134967546057350e+00 +2.497382983202660167e+00 +2.496781473323583800e+00 +2.496297900204095921e+00 +2.495907263537695098e+00 +2.495590249507091407e+00 +2.495331858347584308e+00 +2.495120380807778204e+00 +2.494946630568974921e+00 +2.494803365531106820e+00 +2.494684849234658053e+00 +2.494586516817784538e+00 +2.494504719354722955e+00 +2.494436527258676151e+00 +2.494379578408484122e+00 +2.494331960299557949e+00 +2.494292118197730002e+00 +2.494258783254354128e+00 +2.494230916011431987e+00 +2.494207661822836819e+00 +2.494188315540267542e+00 +2.494172293431901277e+00 +2.494159110770045817e+00 +2.494148363879721053e+00 +2.494139715711231275e+00 +2.494132884207402867e+00 +2.494127632895652535e+00 +2.494123763258179416e+00 +2.494121108528875030e+00 +2.494119528639680894e+00 +2.494118906096959520e+00 +2.494119142613782536e+00 +2.494120156359654672e+00 +2.494121879717388079e+00 +2.494124257459151117e+00 +2.494127245271534399e+00 +2.494130808573747249e+00 +2.494134921584564957e+00 +2.494139566602990410e+00 +2.494144733475278208e+00 +2.494150419227282534e+00 +2.494156627846454199e+00 +2.494163370202334917e+00 +2.494170664098366075e+00 +2.494178534451340745e+00 +2.494187013598036184e+00 +2.494196141731598537e+00 +2.494205967473133168e+00 +2.494216548586874360e+00 +2.494227952850236019e+00 +2.494240259093116752e+00 +2.494253558424110118e+00 +2.494267955664783987e+00 +2.494283571017045453e+00 +2.494300541992858555e+00 +2.494319025640310272e+00 +2.494339201105266302e+00 +2.494361272573781818e+00 +2.494385472647045354e+00 +2.494412066208082646e+00 +2.494441354847838355e+00 +2.494473681927683373e+00 +2.494509438366025567e+00 +2.494549069248672257e+00 +2.494593081376061505e+00 +2.494642051875627597e+00 +2.494696638024654689e+00 +2.494757588448143437e+00 +2.494825755877820850e+00 +2.494902111682735679e+00 +2.494987762409231369e+00 +2.495083968598904800e+00 +2.495192166187897520e+00 +2.495313990830049011e+00 +2.495451305530735908e+00 +2.495606232028328098e+00 +2.495781186417035613e+00 +2.495978919569505905e+00 +2.496202562991125529e+00 +2.496455680822066370e+00 +2.496742328799482546e+00 +2.497067121103051512e+00 +2.497435306134865307e+00 +2.497852852432607573e+00 +2.498326546086827360e+00 +2.498864101233440493e+00 +2.499474285426899645e+00 +2.500167061974468918e+00 +2.500953751635697220e+00 +2.501847216473322533e+00 +2.502862069094073494e+00 +2.504014911054337933e+00 +2.505324604843222058e+00 +2.506812584614375172e+00 +2.508503211741906824e+00 +2.510424182353078404e+00 +2.512606995274083044e+00 +2.515087490353189903e+00 +2.517906468940964260e+00 +2.521110410458117457e+00 +2.524752301519047393e+00 +2.528892597055777181e+00 +2.533600336351367499e+00 +2.538954440881557861e+00 +2.545045225392560617e+00 +2.551976158683702423e+00 +2.559865916018293053e+00 +2.568850770746228029e+00 +2.579087378210335846e+00 +2.590756009699318074e+00 +2.604064297120171290e+00 +2.619251548711913458e+00 +2.636593690359552600e+00 +2.656408872872135341e+00 +2.679063758866384592e+00 +2.704499546705479762e+00 +2.731597158360127509e+00 +2.760121382731293149e+00 +2.789807937169455521e+00 +2.820374684718842229e+00 +2.851533065167320302e+00 +2.882998857968023909e+00 +2.914501578234967472e+00 +2.945792042795071453e+00 +2.976647887865206066e+00 +3.006877037521078488e+00 +3.036319290307945007e+00 +3.064846301617476954e+00 +3.092360294528793130e+00 +3.118791841441425738e+00 +3.144097035770443860e+00 +3.168254329904436339e+00 +3.191261263280245508e+00 +3.213131250815187911e+00 +3.233890552320227041e+00 +3.253575500815825805e+00 +3.272230033034708718e+00 +3.289903538774999969e+00 +3.306649026402973313e+00 +3.322521588589879560e+00 +3.337577144097837234e+00 +3.351871426957403699e+00 +3.365459192694326251e+00 +3.378393611525487561e+00 +3.390725819987661538e+00 +3.402504604778179509e+00 +3.413776195299668359e+00 +3.424584144246927586e+00 +3.434969278374439661e+00 +3.444969704224304152e+00 +3.454620856011442864e+00 +3.463955575024046496e+00 +3.473004211795049923e+00 +3.481794743941439840e+00 +3.490352903969529130e+00 +3.498702312527250058e+00 +3.506864613573413614e+00 +3.514859608752378684e+00 +3.522705388934347148e+00 +3.530418461427592192e+00 +3.538013871809132294e+00 +3.545505319671419908e+00 +3.552905267859961747e+00 +3.560225044993032384e+00 +3.567474941220914353e+00 +3.574664297307801775e+00 +3.581801587212276594e+00 +3.588894494408846114e+00 +3.595949982238593634e+00 +3.602974358606153338e+00 +3.609973335356501778e+00 +3.616952082671486934e+00 +3.623915278824886954e+00 +3.630867155628174636e+00 +3.637811539888406109e+00 +3.644751891186163384e+00 +3.651691336266029708e+00 +3.658632700315626263e+00 +3.665578535392086668e+00 +3.672531146237731026e+00 +3.679492613709725912e+00 +3.686464816032017033e+00 +3.693449448061939755e+00 +3.700448038748828772e+00 +3.707461966947569909e+00 +3.714492475736673960e+00 +3.721540685377769719e+00 +3.728607605041769801e+00 +3.735694143416060875e+00 +3.742801118296990026e+00 +3.749929265262699651e+00 +3.757079245512763954e+00 +3.764251652953304550e+00 +3.771447020599042244e+00 +3.778665826357182844e+00 +3.785908498252048560e+00 +3.793175419143877125e+00 +3.800466930990192616e+00 +3.807783338693679909e+00 +3.815124913576266152e+00 +3.822491896515447074e+00 +3.829884500775386780e+00 +3.837302914562321199e+00 +3.844747303330920740e+00 +3.852217811865751962e+00 +3.859714566159699878e+00 +3.867237675109030715e+00 +3.874787232042960383e+00 +3.882363316103793593e+00 +3.889965993492217500e+00 +3.897595318590861169e+00 +3.905251334978009581e+00 +3.912934077803204236e+00 +3.920643576194290603e+00 +3.928379853660252330e+00 +3.936142928478916225e+00 +3.943932814063864090e+00 +3.951749519306741121e+00 +3.959593048944100246e+00 +3.967463403955595602e+00 +3.975360581984547892e+00 +3.983284577782781000e+00 +3.991235383688400251e+00 +3.999212990148114599e+00 +4.007217386293699946e+00 +4.015248560573157377e+00 +4.023306501419202874e+00 +4.031391197912140179e+00 +4.039502640367144792e+00 +4.047640820760027403e+00 +4.055805732912673101e+00 +4.063997372392982754e+00 +4.072215736132086761e+00 +4.080460821805042215e+00 +4.088732627073464521e+00 +4.097031148952234858e+00 +4.105356382997248588e+00 +4.113708322442683141e+00 +4.122086957553497300e+00 +4.130492275152059634e+00 +4.138924258284791158e+00 +4.147382886000650082e+00 +4.155868133218268312e+00 +4.164379970662622554e+00 +4.172918364855702222e+00 +4.181483278148430571e+00 +4.190074668783564604e+00 +4.198692490981285275e+00 +4.207336695040807761e+00 +4.216007227452749362e+00 +4.224704031018045924e+00 +4.233427044970179409e+00 +4.242176205098186159e+00 +4.250951443868508761e+00 +4.259752690544271303e+00 +4.268579871300940631e+00 +4.277432909337614220e+00 +4.286311724983482563e+00 +4.295216235799152571e+00 +4.304146356672695184e+00 +4.313101999910420759e+00 +4.322083075322405321e+00 +4.331089490302955980e+00 +4.340121149906134512e+00 +4.349177956916621568e+00 +4.358259811916091131e+00 +4.367366613345393667e+00 +4.376498257562776217e+00 +4.385654638898403235e+00 +4.394835649705422398e+00 +4.404041180407830325e+00 +4.413271119545354892e+00 +4.422525353815603744e+00 +4.431803768113666386e+00 +4.441106245569388378e+00 +4.450432667582497004e+00 +4.459782913855764974e+00 +4.469156862426364896e+00 +4.478554389695581506e+00 +4.487975370457006008e+00 +4.497419677923367942e+00 +4.506887183752098736e+00 +4.516377758069767268e+00 +4.525891269495474489e+00 +4.535427585163292363e+00 +4.544986570743871468e+00 +4.554568090465235031e+00 +4.564172007132920150e+00 +4.573798182149432456e+00 +4.583446475533171416e+00 +4.593116745936812961e+00 +4.602808850665228491e+00 +4.612522645692994416e+00 +4.622257985681525128e+00 +4.632014723995856009e+00 +4.641792712721152903e+00 +4.651591802678924026e+00 +4.661411843443016068e+00 +4.671252683355390900e+00 +4.681114169541709558e+00 +4.690996147926780324e+00 +4.700898463249821191e+00 +4.710820959079640602e+00 +4.720763477829679644e+00 +4.730725860772986735e+00 +4.740707948057092835e+00 +4.750709578718844917e+00 +4.760730590699155940e+00 +4.770770820857746841e+00 +4.780830104987829898e+00 +4.790908277830768114e+00 +4.801005173090733713e+00 +4.811120623449335554e+00 +4.821254460580259860e+00 +4.831406515163896742e+00 +4.841576616901981822e+00 +4.851764594532239627e+00 +4.861970275843054523e+00 +4.872193487688136315e+00 +4.882434056001230260e+00 +4.892691805810832406e+00 +4.902966561254924471e+00 +4.913258145595750470e+00 +4.923566381234618206e+00 +4.933891089726699875e+00 +4.944232091795905504e+00 +4.954589207349741287e+00 +4.964962255494230092e+00 +4.975351054548832863e+00 +4.985755422061415310e+00 +4.996175174823227039e+00 +5.006610128883912658e+00 +5.017060099566547748e+00 +5.027524901482685493e+00 +5.038004348547429068e+00 +5.048498253994516460e+00 +5.059006430391418618e+00 +5.069528689654449138e+00 +5.080064843063881064e+00 +5.090614701279058352e+00 +5.101178074353499348e+00 +5.111754771750010917e+00 +5.122344602355767051e+00 +5.132947374497385695e+00 +5.143562895955959391e+00 +5.154190973982056612e+00 +5.164831415310688456e+00 +5.175484026176208729e+00 +5.186148612327160734e+00 +5.196824979041034354e+00 +5.207512931138946755e+00 +5.218212273000226276e+00 +5.228922808576868420e+00 +5.239644341407860395e+00 +5.250376674633359109e+00 +5.261119611008705732e+00 +5.271872952918243982e+00 +5.282636502388921684e+00 +5.293410061103668518e+00 +5.304193430414507304e+00 +5.314986411355394402e+00 +5.325788804654732367e+00 +5.336600410747555756e+00 +5.347421029787387425e+00 +5.358250461657677377e+00 +5.369088505791350663e+00 +5.379934960949935174e+00 +5.390789625059476897e+00 +5.401652295095699330e+00 +5.412522767011956226e+00 +5.423400835704164535e+00 +5.434286295007431988e+00 +5.445178937719495238e+00 +5.456078555646402428e+00 +5.466984939666140519e+00 +5.477897879806333137e+00 +5.488817165332341652e+00 +5.499742584842564064e+00 +5.510673926368080622e+00 +5.521610977474099791e+00 +5.532553525361173286e+00 +5.543501356964374516e+00 +5.554454259049089515e+00 +5.565412018302310138e+00 +5.576374421418643479e+00 +5.587341255180494848e+00 +5.598312306532096549e+00 +5.609287362647227937e+00 +5.620266210990655154e+00 +5.631248639373408693e+00 +5.642234436002111053e+00 +5.653223389522686659e+00 +5.664215289058763148e+00 +5.675209924245187665e+00 +5.686207085257013460e+00 +5.697206562834431054e+00 +5.708208148303981488e+00 +5.719211633596493982e+00 +5.730216811262136112e+00 +5.741223474482898048e+00 +5.752231417082898091e+00 +5.763240433536794605e+00 +5.774250318976591245e+00 +5.785260869197140110e+00 +5.796271880660519571e+00 +5.807283150499564783e+00 +5.818294476520675218e+00 +5.829305657206139912e+00 +5.840316491716052383e+00 +5.851326779890003493e+00 +5.862336322248624221e+00 +5.873344919995086677e+00 +5.884352375016636216e+00 +5.895358489886216802e+00 +5.906363067864257133e+00 +5.917365912900646840e+00 +5.928366829636921409e+00 +5.939365623408717099e+00 +5.950362100248480779e+00 +5.961356066888461314e+00 +5.972347330763987827e+00 +5.983335700017025083e+00 +5.994320983500017519e+00 +6.005302990780009509e+00 +6.016281532143036515e+00 +6.027256418598762266e+00 +6.038227461885386838e+00 +6.049194474474765215e+00 +6.060157269577747030e+00 +6.071115661149740106e+00 +6.082069463896427663e+00 +6.093018493279708458e+00 +6.103962565523728401e+00 +6.114901497621115567e+00 +6.125835107339307584e+00 +6.136763213226995362e+00 +6.147685634620659201e+00 +6.158602191651207036e+00 +6.169512705250657092e+00 +6.180416997158889814e+00 +6.191314889930424670e+00 +6.202206206941260902e+00 +6.213090772395702288e+00 +6.223968411333210327e+00 +6.234838949635253869e+00 +6.245702214032132105e+00 +6.256558032109790446e+00 +6.267406232316622194e+00 +6.278246643970184948e+00 +6.289079097263925888e+00 +6.299903423273825354e+00 +6.310719453964985348e+00 +6.321527022198143442e+00 +6.332325961736165354e+00 +6.343116107250384772e+00 +6.353897294326937839e+00 +6.364669359472962640e+00 +6.375432140122720526e+00 +6.386185474643649940e+00 +6.396929202342301224e+00 +6.407663163470161294e+00 +6.418387199229410811e+00 +6.429101151778541023e+00 +6.439804864237897775e+00 +6.450498180695076300e+00 +6.461180946210241416e+00 +6.471853006821321586e+00 +6.482514209549069761e+00 +6.493164402402030078e+00 +6.503803434381385529e+00 +6.514431155485674196e+00 +6.525047416715398896e+00 +6.535652070077491160e+00 +6.546244968589695290e+00 +6.556825966284790752e+00 +6.567394918214706223e+00 +6.577951680454519945e+00 +6.588496110106328629e+00 +6.599028065302979584e+00 +6.609547405211715798e+00 +6.620053990037645164e+00 +6.630547681027143980e+00 +6.641028340471093472e+00 +6.651495831708009732e+00 +6.661950019127058198e+00 +6.672390768170931352e+00 +6.682817945338612731e+00 +6.693231418188020143e+00 +6.703631055338522771e+00 +6.714016726473349905e+00 +6.724388302341862911e+00 +6.734745654761717049e+00 +6.745088656620907841e+00 +6.755417181879691313e+00 +6.765731105572397652e+00 +6.776030303809116973e+00 +6.786314653777278494e+00 +6.796584033743096498e+00 +6.806838323052936346e+00 +6.817077402134538389e+00 +6.827301152498129966e+00 +6.837509456737434377e+00 +6.847702198530575046e+00 +6.857879262640850015e+00 +6.868040534917419393e+00 +6.878185902295861354e+00 +6.888315252798633992e+00 +6.898428475535434146e+00 +6.908525460703437204e+00 +6.918606099587439218e+00 +6.928670284559901305e+00 +6.938717909080873270e+00 +6.948748867697830178e+00 +6.958763056045402351e+00 +6.968760370845016539e+00 +6.978740709904402095e+00 +6.988703972117047414e+00 +6.998650057461523133e+00 +7.008578867000720081e+00 +7.018490302881005505e+00 +7.028384268331247853e+00 +7.038260667661806025e+00 +7.048119406263364084e+00 +7.057960390605707346e+00 +7.067783528236427415e+00 +7.077588727779488664e+00 +7.087375898933741425e+00 +7.097144952471348134e+00 +7.106895800236099348e+00 +7.116628355141678242e+00 +7.126342531169811423e+00 +7.136038243368346912e+00 +7.145715407849261069e+00 +7.155373941786571379e+00 +7.165013763414172843e+00 +7.174634792023597996e+00 +7.184236947961709419e+00 +7.193820152628280340e+00 +7.203384328473550369e+00 +7.212929398995671093e+00 +7.222455288738077073e+00 +7.231961923286815974e+00 +7.241449229267777454e+00 +7.250917134343865200e+00 +7.260365567212090809e+00 +7.269794457600616155e+00 +7.279203736265710489e+00 +7.288593334988661354e+00 +7.297963186572594907e+00 +7.307313224839266041e+00 +7.316643384625750812e+00 +7.325953601781108659e+00 +7.335243813162955817e+00 +7.344513956634008522e+00 +7.353763971058540960e+00 +7.362993796298809457e+00 +7.372203373211394961e+00 +7.381392643643517104e+00 +7.390561550429284310e+00 +7.399710037385869299e+00 +7.408838049309668605e+00 +7.417945531972391038e+00 +7.427032432117101735e+00 +7.436098697454195161e+00 +7.445144276657361004e+00 +7.454169119359486118e+00 +7.463173176148488963e+00 +7.472156398563123858e+00 +7.481118739088769232e+00 +7.490060151153116408e+00 +7.498980589121870821e+00 +7.507880008294383956e+00 +7.516758364899235545e+00 +7.525615616089813997e+00 +7.534451719939816883e+00 +7.543266635438749645e+00 +7.552060322487355037e+00 +7.560832741893039000e+00 +7.569583855365237923e+00 +7.578313625510764595e+00 +7.587022015829134602e+00 +7.595708990707805697e+00 +7.604374515417479330e+00 +7.613018556107268964e+00 +7.621641079799925222e+00 +7.630242054386988215e+00 +7.638821448623913213e+00 +7.647379232125189219e+00 +7.655915375359418462e+00 +7.664429849644385229e+00 +7.672922627142067853e+00 +7.681393680853668471e+00 +7.689842984614612575e+00 +7.698270513089491729e+00 +7.706676241767029367e+00 +7.715060146955014631e+00 +7.723422205775198890e+00 +7.731762396158192274e+00 +7.740080696838354868e+00 +7.748377087348625736e+00 +7.756651548015398134e+00 +7.764904059953325444e+00 +7.773134605060150193e+00 +7.781343166011494006e+00 +7.789529726255658204e+00 +7.797694270008388884e+00 +7.805836782247654426e+00 +7.813957248708391035e+00 +7.822055655877255376e+00 +7.830131990987355906e+00 +7.838186242012989524e+00 +7.846218397664353361e+00 +7.854228447382267220e+00 +7.862216381332874704e+00 +7.870182190402346123e+00 +7.878125866191590276e+00 +7.886047401010921831e+00 +7.893946787874773108e+00 +7.901824020496368561e+00 +7.909679093282420581e+00 +7.917512001327796867e+00 +7.925322740410209121e+00 +7.933111306984907074e+00 +7.940877698179331645e+00 +7.948621911787821404e+00 +7.956343946266281719e+00 +7.964043800726875233e+00 +7.971721474932701668e+00 +7.979376969292500732e+00 +7.987010284855326603e+00 +7.994621423305257935e+00 +8.002210386956102539e+00 +8.009777178746080750e+00 +8.017321802232570960e+00 +8.024844261586789429e+00 +8.032344561588558918e+00 +8.039822707620986719e+00 +8.047278705665249277e+00 +8.054712562295318179e+00 +8.062124284672700369e+00 +8.069513880541233419e+00 +8.076881358221836393e+00 +8.084226726607294466e+00 +8.091549995157054198e+00 +8.098851173892024136e+00 +8.106130273389396734e+00 +8.113387304777450737e+00 +8.120622279730417503e+00 +8.127835210463310034e+00 +8.135026109726789301e+00 +8.142194990802035903e+00 +8.149341867495644820e+00 +8.156466754134520158e+00 +8.163569665560792998e+00 +8.170650617126746340e+00 +8.177709624689770251e+00 +8.184746704607304579e+00 +8.191761873731833177e+00 +8.198755149405860365e+00 +8.205726549456915819e+00 +8.212676092192587873e+00 +8.219603796395563933e+00 +8.226509681318669109e+00 +8.233393766679963477e+00 +8.240256072657816233e+00 +8.247096619886015390e+00 +8.253915429448912988e+00 +8.260712522876547226e+00 +8.267487922139819645e+00 +8.274241649645679431e+00 +8.280973728232320141e+00 +8.287684181164399533e+00 +8.294373032128293133e+00 +8.301040305227338933e+00 +8.307686024977137151e+00 +8.314310216300825118e+00 +8.320912904524435660e+00 +8.327494115372203964e+00 +8.334053874961956154e+00 +8.340592209800480106e+00 +8.347109146778944222e+00 +8.353604713168309104e+00 +8.360078936614794287e+00 +8.366531845135334322e+00 +8.372963467113081037e+00 +8.379373831292920016e+00 +8.385762966777001282e+00 +8.392130903020307287e+00 +8.398477669826226233e+00 +8.404803297342171575e+00 +8.411107816055201525e+00 +8.417391256787665199e+00 +8.423653650692898509e+00 +8.429895029250898730e+00 +8.436115424264063023e+00 +8.442314867852926952e+00 +8.448493392451924322e+00 +8.454651030805210965e+00 +8.460787815962442338e+00 +8.466903781274643492e+00 +8.472998960390061285e+00 +8.479073387250050331e+00 +8.485127096084999820e+00 +8.491160121410255002e+00 +8.497172498022090181e+00 +8.503164260993697710e+00 +8.509135445671182296e+00 +8.515086087669615722e+00 +8.521016222869087997e+00 +8.526925887410785165e+00 +8.532815117693123952e+00 +8.538683950367852660e+00 +8.544532422336235555e+00 +8.550360570745230149e+00 +8.556168432983689343e+00 +8.561956046678611543e+00 +8.567723449691378335e+00 +8.573470680114063214e+00 +8.579197776265717224e+00 +8.584904776688718542e+00 +8.590591720145132726e+00 +8.596258645613078286e+00 +8.601905592283168644e+00 +8.607532599554916786e+00 +8.613139707033205639e+00 +8.618726954524779771e+00 +8.624294382034747741e+00 +8.629842029763116429e+00 +8.635369938101359111e+00 +8.640878147628995976e+00 +8.646366699110197729e+00 +8.651835633490430055e+00 +8.657284991893119397e+00 +8.662714815616320507e+00 +8.668125146129442626e+00 +8.673516025069975655e+00 +8.678887494240260736e+00 +8.684239595604262618e+00 +8.689572371284389973e+00 +8.694885863558322825e+00 +8.700180114855877278e+00 +8.705455167755893342e+00 +8.710711064983128082e+00 +8.715947849405210945e+00 +8.721165564029586648e+00 +8.726364252000502475e+00 +8.731543956596022227e+00 +8.736704721225036607e+00 +8.741846589424355329e+00 +8.746969604855749481e+00 +8.752073811303082707e+00 +8.757159252669429961e+00 +8.762225972974226451e+00 +8.767274016350455668e+00 +8.772303427041848067e+00 +8.777314249400090418e+00 +8.782306527882097313e+00 +8.787280307047275585e+00 +8.792235631554808251e+00 +8.797172546160995310e+00 +8.802091095716578550e+00 +8.806991325164124973e+00 +8.811873279535404890e+00 +8.816737003948812657e+00 +8.821582543606796278e+00 +8.826409943793327884e+00 +8.831219249871377741e+00 +8.836010507280427362e+00 +8.840783761533989704e+00 +8.845539058217175565e+00 +8.850276442984245762e+00 +8.854995961556234363e+00 +8.859697659718543505e+00 +8.864381583318611035e+00 +8.869047778263547954e+00 +8.873696290517843366e+00 +8.878327166101067647e+00 +8.882940451085604039e+00 +8.887536191594401558e+00 +8.892114433798742112e+00 +8.896675223916052033e+00 +8.901218608207708272e+00 +8.905744632976871245e+00 +8.910253344566369194e+00 +8.914744789356554122e+00 +8.919219013763225234e+00 +8.923676064235541716e+00 +8.928115987253967489e+00 +8.932538829328247942e+00 +8.936944636995386659e+00 +8.941333456817654124e+00 +8.945705335380630174e+00 +8.950060319291225142e+00 +8.954398455175779148e+00 +8.958719789678132983e+00 +8.963024369457734508e+00 +8.967312241187785915e+00 +8.971583451553380328e+00 +8.975838047249675711e+00 +7.164960604439448488e+00 +7.173166037449657750e+00 +7.181350849444516626e+00 +7.189515005054158081e+00 +7.197658469802592052e+00 +7.205781209986811930e+00 +7.213883192587697835e+00 +7.221964385206129933e+00 +7.230024756018744725e+00 +7.238064273749076349e+00 +7.246082907650549743e+00 +7.254080627498426637e+00 +7.262057403588535465e+00 +7.270013206740918221e+00 +7.277948008307021155e+00 +7.285861780179251568e+00 +7.293754494802085375e+00 +7.301626125184020211e+00 +7.309476644909839393e+00 +7.317306028152835040e+00 +7.325114249686647483e+00 +7.332901284896591321e+00 +7.340667109790228295e+00 +7.348411701007167451e+00 +7.356135035827994884e+00 +7.363837092182313526e+00 +7.371517848655917859e+00 +7.379177284497046685e+00 +7.386815379621831212e+00 +7.394432114618885166e+00 +7.402027470753139937e+00 +7.409601429968924791e+00 +7.417153974892368495e+00 +7.424685088833140156e+00 +7.432194755785607398e+00 +7.439682960429408354e+00 +7.447149688129549361e+00 +7.454594924935991074e+00 +7.462018657582820680e+00 +7.469420873487031542e+00 +7.476801560746912045e+00 +7.484160708140125351e+00 +7.491498305121497836e+00 +7.498814341820482454e+00 +7.506108809038446239e+00 +7.513381698245657603e+00 +7.520633001578124421e+00 +7.527862711834204745e+00 +7.535070822471098495e+00 +7.542257327601125994e+00 +7.549422221987931891e+00 +7.556565501042513233e+00 +7.563687160819188904e+00 +7.570787198011418084e+00 +7.577865609947579628e+00 +7.584922394586625316e+00 +7.591957550513699360e+00 +7.598971076935677971e+00 +7.605962973676646754e+00 +7.612933241173344356e+00 +7.619881880470558144e+00 +7.626808893216459495e+00 +7.633714281657951517e+00 +7.640598048635926176e+00 +7.647460197580544516e+00 +7.654300732506492011e+00 +7.661119658008159305e+00 +7.667916979254897569e+00 +7.674692701986172594e+00 +7.681446832506761524e+00 +7.688179377681947813e+00 +7.694890344932641568e+00 +7.701579742230594050e+00 +7.708247578093516239e+00 +7.714893861580259582e+00 +7.721518602285978972e+00 +7.728121810337269082e+00 +7.734703496387357546e+00 +7.741263671611251951e+00 +7.747802347700922354e+00 +7.754319536860474926e+00 +7.760815251801341574e+00 +7.767289505737471345e+00 +7.773742312380532482e+00 +7.780173685935125150e+00 +7.786583641094001251e+00 +7.792972193033300243e+00 +7.799339357407784945e+00 +7.805685150346109324e+00 +7.812009588446068520e+00 +7.818312688769898600e+00 +7.824594468839563888e+00 +7.830854946632054947e+00 +7.837094140574722090e+00 +7.843312069540619547e+00 +7.849508752843826542e+00 +7.855684210234867848e+00 +7.861838461896036634e+00 +7.867971528436836337e+00 +7.874083430889385227e+00 +7.880174190703849391e+00 +7.886243829743891709e+00 +7.892292370282135039e+00 +7.898319834995662703e+00 +7.904326246961504765e+00 +7.910311629652175824e+00 +7.916276006931200371e+00 +7.922219403048680775e+00 +7.928141842636879488e+00 +7.934043350705804798e+00 +7.939923952638835658e+00 +7.945783674188360735e+00 +7.951622541471417449e+00 +7.957440580965387866e+00 +7.963237819503692805e+00 +7.969014284271496606e+00 +7.974770002801459867e+00 +7.980505002969470851e+00 +7.986219312990471053e+00 +7.991912961414207928e+00 +7.997585977121074663e+00 +8.003238389317964163e+00 +8.008870227534123032e+00 +8.014481521617032200e+00 +8.020072301728314201e+00 +8.025642598339679523e+00 +8.031192442228862305e+00 +8.036721864475589783e+00 +8.042230896457603251e+00 +8.047719569846638166e+00 +8.053187916604496621e+00 +8.058635968979105613e+00 +8.064063759500584183e+00 +8.069471320977358531e+00 +8.074858686492319748e+00 +8.080225889398937156e+00 +8.085572963317460449e+00 +8.090899942131102307e+00 +8.096206859982286730e+00 +8.101493751268872501e+00 +8.106760650640431720e+00 +8.112007592994531890e+00 +8.117234613473067739e+00 +8.122441747458594818e+00 +8.127629030570679092e+00 +8.132796498662298035e+00 +8.137944187816243513e+00 +8.143072134341554857e+00 +8.148180374769978584e+00 +8.153268945852435223e+00 +8.158337884555544761e+00 +8.163387228058136103e+00 +8.168417013747797384e+00 +8.173427279217465369e+00 +8.178418062262000632e+00 +8.183389400874828468e+00 +8.188341333244579801e+00 +8.193273897751748081e+00 +8.198187132965397694e+00 +8.203081077639865271e+00 +8.207955770711512500e+00 +8.212811251295477177e+00 +8.217647558682472209e+00 +8.222464732335577509e+00 +8.227262811887099403e+00 +8.232041837135403384e+00 +8.236801848041819696e+00 +8.241542884727513396e+00 +8.246264987470452112e+00 +8.250968196702327617e+00 +8.255652553005544902e+00 +8.260318097110218361e+00 +8.264964869891191057e+00 +8.269592912365077098e+00 +8.274202265687337743e+00 +8.278792971149362856e+00 +8.283365070175596756e+00 +8.287918604320664073e+00 +8.292453615266548894e+00 +8.296970144819743709e+00 +8.301468234908501387e+00 +8.305947927580024981e+00 +8.310409264997751677e+00 +8.314852289438606547e+00 +8.319277043290307816e+00 +8.323683569048689890e+00 +8.328071909315047705e+00 +8.332442106793497061e+00 +8.336794204288365151e+00 +8.341128244701605965e+00 +8.345444271030237005e+00 +8.349742326363777778e+00 +8.354022453881741583e+00 +8.358284696851137952e+00 +8.362529098623987522e+00 +8.366755702634865344e+00 +8.370964552398474368e+00 +8.375155691507231381e+00 +8.379329163628865373e+00 +8.383485012504067413e+00 +8.387623281944131648e+00 +8.391744015828638936e+00 +8.395847258103154687e+00 +8.399933052776946241e+00 +8.404001443920714465e+00 +8.408052475664376857e+00 +8.412086192194836443e+00 +8.416102637753782645e+00 +8.420101856635531234e+00 +8.424083893184842964e+00 +8.428048791794832795e+00 +8.431996596904800967e+00 +8.435927352998195516e+00 +8.439841104600489530e+00 +8.443737896277172084e+00 +8.447617772631678790e+00 +8.451480778303407604e+00 +8.455326957965713319e+00 +8.459156356323932258e+00 +8.462969018113433606e+00 +8.466764988097684963e+00 +8.470544311066349863e+00 +8.474307031833362203e+00 +8.478053195235096595e+00 +8.481782846128464115e+00 +8.485496029389116401e+00 +8.489192789909598247e+00 +8.492873172597581899e+00 +8.496537222374051623e+00 +8.500184984171557545e+00 +8.503816502932483701e+00 +8.507431823607319643e+00 +8.511030991152939151e+00 +8.514614050530934009e+00 +8.518181046705942450e+00 +8.521732024643975834e+00 +8.525267029310827027e+00 +8.528786105670420170e+00 +8.532289298683236822e+00 +8.535776653304719019e+00 +8.539248214483729171e+00 +8.542704027160986868e+00 +8.546144136267550095e+00 +8.549568586723314212e+00 +8.552977423435512705e+00 +8.556370691297242814e+00 +8.559748434493906544e+00 +8.563110697205900124e+00 +8.566457523607066804e+00 +8.569788957863055501e+00 +8.573105044129782470e+00 +8.576405826551864564e+00 +8.579691349261084454e+00 +8.582961656374861192e+00 +8.586216791994756292e+00 +8.589456800204969156e+00 +8.592681725070892895e+00 +8.595891610637657720e+00 +8.599086500928695642e+00 +8.602266439944324716e+00 +8.605431471660381249e+00 +8.608581640026823578e+00 +8.611716988966392705e+00 +8.614837562373274693e+00 +8.617943404111766625e+00 +8.621034558015010063e+00 +8.624111067883680093e+00 +8.627172977484738325e+00 +8.630220330544602803e+00 +8.633253170738303339e+00 +8.636271541675899499e+00 +8.639275486887269651e+00 +8.642265049806010069e+00 +8.645240273753154625e+00 +8.648201201921144943e+00 +8.651147877358432936e+00 +8.654080342955021266e+00 +8.656998641429066055e+00 +8.659902815314735491e+00 +8.662792906951370497e+00 +8.665668958473974115e+00 +8.668531011805098885e+00 +8.671379108647991885e+00 +8.674213290481112892e+00 +8.677033598553828497e+00 +8.679840073883305251e+00 +8.682632757252507716e+00 +8.685411689209182384e+00 +8.688176910065831038e+00 +8.690928459900479908e+00 +8.693666378558271290e+00 +8.696390705653714193e+00 +8.691610890088881547e+00 +8.617942935664498094e+00 +8.476708302032918141e+00 +8.261860394283889519e+00 +7.963752092611574795e+00 +7.573337952377004356e+00 +7.087713986595520765e+00 +6.516497231640716592e+00 +5.886501284374521248e+00 +5.240670559904087256e+00 +4.628816115950453280e+00 +4.093206132973325140e+00 +3.657092255051899166e+00 +3.322576591959245818e+00 +3.076915620388968264e+00 +2.901328587665888303e+00 +2.777460746752609122e+00 +2.690325009215888574e+00 +2.628797338485783897e+00 +2.585026755961376210e+00 +2.553601505528157123e+00 +2.530819162281360057e+00 +2.514142335400551431e+00 +2.501820430711534371e+00 +2.492634787280837205e+00 +2.485728709460439667e+00 +2.480494040646763931e+00 +2.476494984456038662e+00 +2.473416473908932822e+00 +2.471028822474329090e+00 +2.469163274283619813e+00 +2.467694925881843915e+00 +2.466530685928714384e+00 +2.465600712860563704e+00 +2.464852276491917848e+00 +2.464245324011772098e+00 +2.463749254358171825e+00 +2.463340555922331809e+00 +2.463001065516936983e+00 +2.462716677451059599e+00 +2.462476380800671105e+00 +2.462271537441864666e+00 +2.462095337733716249e+00 +2.461942388012472005e+00 +2.461808396410228195e+00 +2.461689932397673974e+00 +2.461584241881572765e+00 +2.461489104368252967e+00 +2.461402722129228948e+00 +2.461323633824109791e+00 +2.461250646898049954e+00 +2.461182784454064354e+00 +2.461119243332653195e+00 +2.461059360904882976e+00 +2.461002588667634328e+00 +2.460948471170236740e+00 +2.460896629136213321e+00 +2.460846745898913390e+00 +2.460798556465063847e+00 +2.460751838670312441e+00 +2.460706406006619495e+00 +2.460662101791025513e+00 +2.460618794415018851e+00 +2.460576373468157829e+00 +2.460534746572179188e+00 +2.460493836795411227e+00 +2.460453580543738195e+00 +2.460413925845381655e+00 +2.460374830963524051e+00 +2.460336263284190306e+00 +2.460298198437634198e+00 +2.460260619620268319e+00 +2.460223517091358669e+00 +2.460186887824677537e+00 +2.460150735300319802e+00 +2.460115069426120016e+00 +2.460079906581867704e+00 +2.460045269782756616e+00 +2.460011188961553685e+00 +2.459977701371765857e+00 +2.459944852116811020e+00 +2.459912694812896206e+00 +2.459881292396035590e+00 +2.459850718086519894e+00 +2.459821056527157435e+00 +2.459792405114905378e+00 +2.459764875549057095e+00 +2.459738595623111923e+00 +2.459713711291810156e+00 +2.459690389049702386e+00 +2.459668818663078849e+00 +2.459649216303206654e+00 +2.459631828135716347e+00 +2.459616934428708213e+00 +2.459604854250879047e+00 +2.459595950840749001e+00 +2.459590637739128560e+00 +2.459589385789348714e+00 +2.459592731123751541e+00 +2.459601284270635624e+00 +2.459615740533489969e+00 +2.459636891814197757e+00 +2.459665640074210735e+00 +2.459703012652787457e+00 +2.459750179689645933e+00 +2.459808473931196282e+00 +2.459879413235412038e+00 +2.459964726130918766e+00 +2.460066380831710031e+00 +2.460186618160853378e+00 +2.460327988895559592e+00 +2.460493396113214715e+00 +2.460686143194734221e+00 +2.460909988229563083e+00 +2.461169205667788962e+00 +2.461468656181433179e+00 +2.461813865832029435e+00 +2.462211115798438321e+00 +2.462667544101670991e+00 +2.463191260977401154e+00 +2.463791479797851736e+00 +2.464478665740261754e+00 +2.465264704748028279e+00 +2.466163095743534317e+00 +2.467189169541477156e+00 +2.468360338493511552e+00 +2.469696381587485945e+00 +2.471219770549157424e+00 +2.472956043476412624e+00 +2.474934233705320175e+00 +2.477187362997841369e+00 +2.479753009791001439e+00 +2.482673965199117205e+00 +2.485998991758889609e+00 +2.489783702596668480e+00 +2.494091581818117298e+00 +2.498995170501341789e+00 +2.504577446720277933e+00 +2.510933432499738327e+00 +2.518172065403793347e+00 +2.526418377376787650e+00 +2.535816028124452615e+00 +2.546530244142310551e+00 +2.558751216540926965e+00 +2.572698009697675037e+00 +2.588623026488882761e+00 +2.606817061648565748e+00 +2.627614948931682015e+00 +2.651184514404757220e+00 +2.676328303249124296e+00 +2.702828267179202104e+00 +2.730437903901203889e+00 +2.758892799845464427e+00 +2.787921474423532331e+00 +2.817255668626880816e+00 +2.846639388867250098e+00 +2.875836240511893571e+00 +2.904634821552223301e+00 +2.932852159387822955e+00 +2.960335339781204222e+00 +2.986961587355523751e+00 +3.012637113513188858e+00 +3.037295059483353654e+00 +3.060892841662999686e+00 +3.083409165872378566e+00 +3.104840927150027241e+00 +3.125200160175238828e+00 +3.144511157545437197e+00 +3.162807831865301011e+00 +3.180131364090316382e+00 +3.196528154792821041e+00 +3.212048076261581286e+00 +3.226743010539675716e+00 +3.240665650484584326e+00 +3.253868536586763671e+00 +3.266403300629918682e+00 +3.278320087504671854e+00 +3.289667127952373704e+00 +3.300490437225120921e+00 +3.310833617240457993e+00 +3.320737742529535463e+00 +3.330241312953861943e+00 +3.339380258689438996e+00 +3.348187985285297152e+00 +3.356695448666626724e+00 +3.364931251763102704e+00 +3.372921756007729144e+00 +3.380691202286969066e+00 +3.388261837049608260e+00 +3.395654040223065273e+00 +3.402886452364639602e+00 +3.409976099113816161e+00 +3.416938511530827949e+00 +3.423787841324572589e+00 +3.430536970306352629e+00 +3.437197613668851126e+00 +3.443780416894818952e+00 +3.450295046257372267e+00 +3.456750272992795914e+00 +3.463154051314451198e+00 +3.469513590499191835e+00 +3.475835421320704555e+00 +3.482125457131494350e+00 +3.488389049910529671e+00 +3.494631041599360444e+00 +3.500855811048336985e+00 +3.507067316888059949e+00 +3.513269136630912115e+00 +3.519464502294577635e+00 +3.525656332824702588e+00 +3.531847263578218765e+00 +3.538039673112461259e+00 +3.544235707509006961e+00 +3.550437302444968246e+00 +3.556646203208824630e+00 +3.562863982842825905e+00 +3.569092058579637960e+00 +3.575331706727331138e+00 +3.581584076144040285e+00 +3.587850200431750292e+00 +3.594131008967480501e+00 +3.600427336879917561e+00 +3.606739934069964626e+00 +3.613069473364938666e+00 +3.619416557888041730e+00 +3.625781727717340530e+00 +3.632165465901687540e+00 +3.638568203894802178e+00 +3.644990326463059205e+00 +3.651432176117374251e+00 +3.657894057114818409e+00 +3.664376239071334140e+00 +3.670878960223027399e+00 +3.677402430369910213e+00 +3.683946833532815823e+00 +3.690512330351211734e+00 +3.697099060247077240e+00 +3.703707143377550359e+00 +3.710336682396872199e+00 +3.716987764046207232e+00 +3.723660460588091858e+00 +3.730354831100658686e+00 +3.737070922645298054e+00 +3.743808771325137563e+00 +3.750568403305559073e+00 +3.757349835790870785e+00 +3.764153081137123102e+00 +3.770978147843834005e+00 +3.777825041105886683e+00 +3.784693763430865054e+00 +3.791584315320349674e+00 +3.798496696004551865e+00 +3.805430904202558029e+00 +3.812386938858093544e+00 +3.819364799781085118e+00 +3.826364488119361695e+00 +3.833386006600920659e+00 +3.840429359522513408e+00 +3.847494552501487419e+00 +3.854581592039011628e+00 +3.861690484956330049e+00 +3.868821237622195319e+00 +3.875973854988415290e+00 +3.883148339805844174e+00 +3.890344691983261605e+00 +3.897562908057694120e+00 +3.904802980750741170e+00 +3.912064898590334572e+00 +3.919348645638499384e+00 +3.926654201493628538e+00 +3.933981541353660738e+00 +3.941330636105914387e+00 +3.948701452436026216e+00 +3.956093952950007875e+00 +3.963508096304645179e+00 +3.970943837342474136e+00 +3.978401127228432088e+00 +3.985879913585942180e+00 +3.993380140630725883e+00 +4.000901749301121413e+00 +4.008444677383996790e+00 +4.016008859635651795e+00 +4.023594227897323350e+00 +4.031200711205102039e+00 +4.038828235894140306e+00 +4.046476725697249144e+00 +4.054146101837918792e+00 +4.061836283117985502e+00 +4.069547186000129102e+00 +4.077278724685420741e+00 +4.085030811186202371e+00 +4.092803355394529774e+00 +4.100596265146480235e+00 +4.108409446282522914e+00 +4.116242802704286774e+00 +4.124096236427909901e+00 +4.131969647634243792e+00 +4.139862934716120435e+00 +4.147775994322923765e+00 +4.155708721402628925e+00 +4.163661009241536703e+00 +4.171632749501868354e+00 +4.179623832257369997e+00 +4.187634146027116699e+00 +4.195663577807642319e+00 +4.203712013103505285e+00 +4.211779335956462589e+00 +4.219865428973326615e+00 +4.227970173352624705e+00 +4.236093448910171588e+00 +4.244235134103616858e+00 +4.252395106056063412e+00 +4.260573240578853671e+00 +4.268769412193560875e+00 +4.276983494153256515e+00 +4.285215358463142721e+00 +4.293464875900562916e+00 +4.301731916034469805e+00 +4.310016347244379986e+00 +4.318318036738881815e+00 +4.326636850573695625e+00 +4.334972653669360909e+00 +4.343325309828562908e+00 +4.351694681753141225e+00 +4.360080631060785805e+00 +4.368483018301478893e+00 +4.376901702973674091e+00 +4.385336543540272025e+00 +4.393787397444349985e+00 +4.402254121124751229e+00 +4.410736570031468240e+00 +4.419234598640889189e+00 +4.427748060470900526e+00 +4.436276808095849233e+00 +4.444820693161412706e+00 +4.453379566399343403e+00 +4.461953277642127347e+00 +4.470541675837573337e+00 +4.479144609063282267e+00 +4.487761924541112890e+00 +4.496393468651519676e+00 +4.505039086947880023e+00 +4.513698624170761065e+00 +4.522371924262142961e+00 +4.531058830379592450e+00 +4.539759184910431067e+00 +4.548472829485839419e+00 +4.557199604994955244e+00 +4.565939351598949258e+00 +4.574691908745069036e+00 +4.583457115180680219e+00 +4.592234808967265103e+00 +4.601024827494446967e+00 +4.609827007493951356e+00 +4.618641185053606435e+00 +4.627467195631285612e+00 +4.636304874068875037e+00 +4.645154054606203786e+00 +4.654014570894974057e+00 +4.662886256012683361e+00 +4.671768942476517417e+00 +4.680662462257242140e+00 +4.689566646793075222e+00 +4.698481327003536379e+00 +4.707406333303268298e+00 +4.716341495615846924e+00 +4.725286643387566876e+00 +4.734241605601166469e+00 +4.743206210789544741e+00 +4.752180287049418084e+00 +4.761163662054947565e+00 +4.770156163071289868e+00 +4.779157616968087829e+00 +4.788167850232927236e+00 +4.797186688984647951e+00 +4.806213958986629287e+00 +4.815249485659938600e+00 +4.824293094096372414e+00 +4.833344609071389186e+00 +4.842403855056868878e+00 +4.851470656233743739e+00 +4.860544836504450572e+00 +4.869626219505168052e+00 +4.878714628617865756e+00 +4.887809886982118712e+00 +4.896911817506650166e+00 +4.906020242880610560e+00 +4.915134985584558081e+00 +4.924255867901111472e+00 +4.933382711925289321e+00 +4.942515339574464761e+00 +4.951653572499554734e+00 +4.960797231869686463e+00 +4.969946138213577669e+00 +4.979100111309552545e+00 +4.988258970117173341e+00 +4.997422532744232093e+00 +5.006590616443540753e+00 +5.015763037634476618e+00 +5.024939611944626350e+00 +5.034120154267398561e+00 +5.043304478831752924e+00 +5.052492399280744451e+00 +5.061683728755867584e+00 +5.070878279984670556e+00 +5.080075865369414245e+00 +5.089276297075036481e+00 +5.098479387114871031e+00 +5.107684947433032363e+00 +5.116892789982581569e+00 +5.126102726798837494e+00 +5.135314570067459172e+00 +5.144528132187051739e+00 +5.153743225826262986e+00 +5.162959663975390967e+00 +5.172177259992670528e+00 +5.181395827645506102e+00 +5.190615181146856827e+00 +5.199835135187163004e+00 +5.209055504962142535e+00 +5.218276106196794828e+00 +5.227496755165988773e+00 +5.236717268711982065e+00 +5.245937464259249339e+00 +5.255157159826849167e+00 +5.264376174038767786e+00 +5.273594326132428733e+00 +5.282811435965673041e+00 +5.292027324022431145e+00 +5.301241811417352956e+00 +5.310454719899531995e+00 +5.319665871855536743e+00 +5.328875090311888663e+00 +5.338082198937169842e+00 +5.347287022043792248e+00 +5.356489384589612435e+00 +5.365689112179449438e+00 +5.374886031066576031e+00 +5.384079968154228624e+00 +5.393270750997270824e+00 +5.402458207803920942e+00 +5.411642167437676676e+00 +5.420822459419459172e+00 +5.429998913929903637e+00 +5.439171361811942162e+00 +5.448339634573562407e+00 +5.457503564390840722e+00 +5.466662984111181345e+00 +5.475817727256805156e+00 +5.484967628028456943e+00 +5.494112521309332919e+00 +5.503252242669212535e+00 +5.512386628368794561e+00 +5.521515515364207261e+00 +5.530638741311713957e+00 +5.539756144572556273e+00 +5.548867564217963455e+00 +5.557972840034281603e+00 +5.567071812528233465e+00 +5.576164322932285700e+00 +5.585250213210096071e+00 +5.594329326062080554e+00 +5.603401504930992871e+00 +5.612466594007618603e+00 +5.621524438236480847e+00 +5.630574883321600055e+00 +5.639617775732260085e+00 +5.648652962708814229e+00 +5.657680292268464584e+00 +5.666699613211078734e+00 +5.675710775124949592e+00 +5.684713628392583651e+00 +5.693708024196411976e+00 +5.702693814524508298e+00 +5.711670852176244040e+00 +5.720638990767905163e+00 +5.729598084738235286e+00 +5.738547989353972589e+00 +5.747488560715256156e+00 +5.756419655761015441e+00 +5.765341132274265590e+00 +5.774252848887323708e+00 +5.783154665086968294e+00 +5.792046441219485864e+00 +5.800928038495662520e+00 +5.809799318995654716e+00 +5.818660145673794304e+00 +5.827510382363287889e+00 +5.836349893780825582e+00 +5.845178545531080516e+00 +5.853996204111136414e+00 +5.862802736914781043e+00 +5.871598012236717068e+00 +5.880381899276663660e+00 +5.889154268143359516e+00 +5.897914989858445978e+00 +5.906663936360256884e+00 +5.915400980507499185e+00 +5.924125996082825196e+00 +5.932838857796271625e+00 +5.941539441288647083e+00 +5.950227623134749066e+00 +5.958903280846496564e+00 +5.967566292875975620e+00 +5.976217805420086293e+00 +5.984857706621060203e+00 +5.993485886702785592e+00 +6.002102237650547067e+00 +6.010706652958334395e+00 +6.019299027430814242e+00 +6.027879257029587379e+00 +6.036447238755023648e+00 +6.045002870556679397e+00 +6.053546051266582850e+00 +6.062076680550712915e+00 +6.070594658874847838e+00 +6.079099887481721254e+00 +6.087592268377022720e+00 +6.096071704322143958e+00 +6.104538098832190229e+00 +6.112991356177802871e+00 +6.121431381389880855e+00 +6.129858080266343379e+00 +6.138271359380222947e+00 +6.146671126088707027e+00 +6.155057288542584715e+00 +6.163429755695931433e+00 +6.171788437315697706e+00 +6.180133243991088321e+00 +6.188464087142573788e+00 +6.196780879030484357e+00 +6.205083532763078225e+00 +6.213371962304080398e+00 +6.221646082479669104e+00 +6.229905808984884885e+00 +6.238151058389490800e+00 +6.246381748143281953e+00 +6.254597796580871005e+00 +6.262799122925938988e+00 +6.270985647295029608e+00 +6.279157290700853267e+00 +6.287313975055186077e+00 +6.295455623171314130e+00 +6.303582158766134924e+00 +6.311693506461860892e+00 +6.319789591787390748e+00 +6.327870341179378855e+00 +6.335935681982995504e+00 +6.343985542452392323e+00 +6.352019851750947410e+00 +6.360038539951231584e+00 +6.368041538034775684e+00 +6.376028777891594501e+00 +6.384000192319556177e+00 +6.391955715023531326e+00 +6.399895280614380511e+00 +6.407818824607780073e+00 +6.415726283422911180e+00 +6.423617594380958806e+00 +6.431492695703541429e+00 +6.439351526510948887e+00 +6.447194026820318058e+00 +6.455020137543638015e+00 +6.462829800485696552e+00 +6.470622958341895270e+00 +6.478399554695977614e+00 +6.486159534017664541e+00 +6.493902841660196046e+00 +6.501629423857803403e+00 +6.509339227723071275e+00 +6.517032201244250089e+00 +6.524708293282499127e+00 +6.532367453569019489e+00 +6.540009632702165732e+00 +6.547634782144450938e+00 +6.555242854219528681e+00 +6.562833802109073744e+00 +6.570407579849630864e+00 +6.577964142329385311e+00 +6.585503445284924595e+00 +6.593025445297861609e+00 +6.600530099791505734e+00 +6.608017367027391842e+00 +6.615487206101837714e+00 +6.622939576942403761e+00 +6.630374440304315442e+00 +6.637791757766866141e+00 +6.645191491729756095e+00 +6.652573605409369151e+00 +6.659938062835058403e+00 +6.667284828845359002e+00 +6.674613869084152995e+00 +6.681925149996841284e+00 +6.689218638826416097e+00 +6.696494303609554777e+00 +6.703752113172658511e+00 +6.710992037127828880e+00 +6.718214045868876383e+00 +6.725418110567233043e+00 +6.732604203167863233e+00 +6.739772296385153183e+00 +6.746922363698754310e+00 +6.754054379349408777e+00 +6.761168318334737748e+00 +6.768264156405017218e+00 +6.775341870058934290e+00 +6.782401436539267081e+00 +6.789442833828619683e+00 +6.796466040645084306e+00 +6.803471036437878539e+00 +6.810457801382987952e+00 +6.817426316378782047e+00 +6.824376563041571586e+00 +6.831308523701217439e+00 +6.838222181396655941e+00 +6.845117519871442013e+00 +6.851994523569270967e+00 +6.858853177629473663e+00 +6.865693467882506340e+00 +6.872515380845413802e+00 +6.879318903717297928e+00 +6.886104024374763100e+00 +6.892870731367333192e+00 +6.899619013912888121e+00 +6.906348861893057745e+00 +6.913060265848635311e+00 +6.919753216974951826e+00 +6.926427707117264632e+00 +6.933083728766124665e+00 +6.939721275052734839e+00 +6.946340339744311976e+00 +6.952940917239423868e+00 +6.959523002563354765e+00 +6.966086591363408687e+00 +6.972631679904267799e+00 +6.979158265063302835e+00 +6.985666344325910160e+00 +6.992155915780827513e+00 +6.998626978115437325e+00 +7.005079530611105554e+00 +7.011513573138479671e+00 +7.017929106152793750e+00 +7.024326130689209080e+00 +7.030704648358105047e+00 +7.037064661340389549e+00 +7.043406172382823627e+00 +7.049729184793342540e+00 +7.056033702436351973e+00 +7.062319729728057993e+00 +7.068587271631807667e+00 +7.074836333653388820e+00 +7.081066921836383088e+00 +7.087279042757478109e+00 +7.093472703521834788e+00 +7.099647911758408370e+00 +7.105804675615317478e+00 +7.111943003755193615e+00 +7.118062905350548419e+00 +7.124164390079139153e+00 +7.130247468119357279e+00 +7.136312150145609934e+00 +7.142358447323713833e+00 +7.148386371306298059e+00 +7.154395934228222842e+00 +7.160387148702005433e+00 +7.166360027813235334e+00 +7.172314585116030372e+00 +7.178250834628485677e+00 +7.184168790828138640e+00 +7.190068468647453415e+00 +7.195949883469282327e+00 +7.201813051122385900e+00 +7.207657987876940453e+00 +7.213484710440056347e+00 +7.219293235951315779e+00 +7.225083581978317682e+00 +7.230855766512267024e+00 +7.236609807963503727e+00 +7.242345725157134595e+00 +7.248063537328626182e+00 +7.253763264119413634e+00 +7.259444925572555718e+00 +7.265108542128363212e+00 +7.270754134620082354e+00 +7.276381724269565865e+00 +7.281991332682972384e+00 +7.287582981846481900e+00 +7.293156694122023609e+00 +7.298712492243026873e+00 +7.304250399310172170e+00 +7.309770438787191793e+00 +7.315272634496640336e+00 +7.320757010615741578e+00 +7.326223591672203383e+00 +7.331672402540062805e+00 +7.337103468435575593e+00 +7.342516814913093270e+00 +7.347912467860954422e+00 +7.353290453497454138e+00 +7.358650798366728196e+00 +7.363993529334765142e+00 +7.369318673585375734e+00 +7.374626258616178376e+00 +7.379916312234625408e+00 +7.385188862554080913e+00 +7.390443937989822132e+00 +7.395681567255170563e+00 +7.400901779357557331e+00 +7.406104603594682700e+00 +7.411290069550616977e+00 +7.416458207091990218e+00 +7.421609046364165962e+00 +7.426742617787459366e+00 +7.431858952053330469e+00 +7.436958080120660952e+00 +7.442040033212016681e+00 +7.447104842809917358e+00 +7.452152540653161239e+00 +7.457183158733160511e+00 +7.462196729290276664e+00 +7.467193284810209164e+00 +7.472172858020387665e+00 +7.477135481886387325e+00 +7.482081189608363658e+00 +7.487010014617526465e+00 +7.491921990572604884e+00 +7.496817151356369280e+00 +7.501695531072156697e+00 +7.506557164040398078e+00 +7.511402084795216538e+00 +7.516230328081006107e+00 +7.521041928849060199e+00 +7.525836922254184103e+00 +7.530615343651380300e+00 +7.535377228592519572e+00 +7.540122612823047632e+00 +7.544851532278714856e+00 +7.549564023082316666e+00 +7.554260121540478323e+00 +7.558939864140436171e+00 +7.563603287546873943e+00 +7.568250428598728874e+00 +7.572881324306093731e+00 +7.577496011847063784e+00 +7.582094528564674363e+00 +7.586676911963811776e+00 +7.591243199708165079e+00 +7.595793429617211601e+00 +7.600327639663197132e+00 +7.604845867968167639e+00 +7.609348152801015175e+00 +7.613834532574520253e+00 +7.618305045842459933e+00 +7.622759731296703478e+00 +7.627198627764347094e+00 +7.631621774204866426e+00 +7.636029209707295706e+00 +7.640420973487424661e+00 +7.644797104885004302e+00 +7.649157643361016667e+00 +7.653502628494912585e+00 +7.657832099981909835e+00 +7.662146097630312624e+00 +7.666444661358804424e+00 +7.670727831193856261e+00 +7.674995647267046195e+00 +7.679248149812496038e+00 +7.683485379164267215e+00 +7.687707375753804584e+00 +7.691914180107406906e+00 +7.696105832843699091e+00 +7.700282374671143515e+00 +7.704443846385565564e+00 +7.708590288867704032e+00 +7.712721743080763304e+00 +7.716838250068040139e+00 +7.720939850950486516e+00 +7.725026586924400362e+00 +7.729098499259029253e+00 +7.733155629294270028e+00 +7.737198018438364855e+00 +7.741225708165615060e+00 +7.745238740014118051e+00 +7.749237155583534431e+00 +7.753220996532851572e+00 +7.757190304578207574e+00 +7.761145121490693910e+00 +7.765085489094197158e+00 +7.769011449263272695e+00 +7.772923043921025510e+00 +7.776820315036998110e+00 +7.780703304625113503e+00 +7.784572054741602187e+00 +7.788426607482975328e+00 +7.792267004983997936e+00 +7.796093289415697569e+00 +7.799905502983394356e+00 +7.803703687924725685e+00 +7.807487886507715302e+00 +7.811258141028865509e+00 +7.815014493811238694e+00 +7.818756987202583275e+00 +7.822485663573484516e+00 +7.826200565315508229e+00 +7.829901734839374683e+00 +7.833589214573173365e+00 +7.837263046960558199e+00 +7.840923274458987180e+00 +7.844569939537983316e+00 +7.848203084677383146e+00 +7.851822752365652747e+00 +7.855428985098173555e+00 +7.859021825375576142e+00 +7.862601315702084648e+00 +7.866167498583870099e+00 +7.869720416527439255e+00 +7.873260112038028780e+00 +7.876786627618013625e+00 +7.880300005765347393e+00 +7.883800288972013348e+00 +7.887287519722473661e+00 +7.890761740492189702e+00 +7.894222993746078387e+00 +7.897671321937069777e+00 +7.901106767504614936e+00 +7.904529372873263071e+00 +7.907939180451210248e+00 +7.911336232628892517e+00 +7.914720571777596803e+00 +7.918092240248066460e+00 +7.921451279732828255e+00 +7.924797731912121890e+00 +7.928131638452363461e+00 +7.931453041004699500e+00 +7.934761981203532599e+00 +7.938058500665075456e+00 +7.941342640985913803e+00 +7.944614443741585319e+00 +7.947873950485201178e+00 +7.951121202746051608e+00 +7.954356242028241653e+00 +7.957579109809344686e+00 +7.960789847539095021e+00 +7.963988496638052084e+00 +7.967175098496323216e+00 +7.970349694472295354e+00 +7.973512325891368491e+00 +7.976663034044712219e+00 +7.979801860188070251e+00 +7.982928845540527618e+00 +7.986044031283336508e+00 +7.989147458556869807e+00 +7.992239168453073361e+00 +7.995319202004717241e+00 +7.998387600172630840e+00 +8.001444403831671437e+00 +8.004489653756147405e+00 +8.007523390605207680e+00 +8.010545654908577617e+00 +8.013556487052941435e+00 +8.016555927269225279e+00 +8.019544015620859057e+00 +8.022520791993198230e+00 +8.025486296084102023e+00 +8.028440567395747962e+00 +8.031383645227611723e+00 +8.034315568670672647e+00 +8.037236376602736598e+00 +8.040146107684849497e+00 +8.043044800358760682e+00 +8.045932492845333073e+00 +8.048809223143861047e+00 +8.051675029032198339e+00 +8.054529948067637335e+00 +8.057374017588445625e+00 +8.060207274716042036e+00 +8.060079378064195055e+00 +7.994897708758632149e+00 +7.866575082155303988e+00 +7.670045014894467883e+00 +7.396889492902300134e+00 +7.039310938360772596e+00 +6.595273423734228757e+00 +6.074311592781951319e+00 +5.501622204006522132e+00 +4.916767299289515947e+00 +4.364931040492450620e+00 +3.883787908081010265e+00 +3.493421412653623825e+00 +3.194857506457473573e+00 +2.976052585910706760e+00 +2.819865700654979879e+00 +2.709761588922509290e+00 +2.632331508077783155e+00 +2.577661385370596303e+00 +2.538768757640182727e+00 +2.510845283007834272e+00 +2.490602449436890353e+00 +2.475786472145752537e+00 +2.464842114922344507e+00 +2.456686438265857753e+00 +2.450557966840674062e+00 +2.445916024329218619e+00 +2.442373104763419178e+00 +2.439649019284485743e+00 +2.437539490936758924e+00 +2.435894425344775183e+00 +2.434602728489700496e+00 +2.433581600795728495e+00 +2.432768922503328213e+00 +2.432117794082411688e+00 +2.431592592280405363e+00 +2.431166100885580938e+00 +2.430817409403692508e+00 +2.430530364371572993e+00 +2.430292421070210374e+00 +2.430093787192204147e+00 +2.429926780683796750e+00 +2.429785345614849934e+00 +2.429664685297895144e+00 +2.429560982865941465e+00 +2.429471187424666390e+00 +2.429392849616271999e+00 +2.429323994596381375e+00 +2.429263023472236771e+00 +2.429208636491426265e+00 +2.429159772926793082e+00 +2.429115563833494917e+00 +2.429075294772216065e+00 +2.429038376280724165e+00 +2.429004320394083205e+00 +2.428972721905611198e+00 +2.428943243358186788e+00 +2.428915602982286259e+00 +2.428889564970794890e+00 +2.428864931614053368e+00 +2.428841536921568789e+00 +2.428819241436535048e+00 +2.428797928011298346e+00 +2.428777498360288778e+00 +2.428757870244831363e+00 +2.428738975174062453e+00 +2.428720756529712421e+00 +2.428703168041211224e+00 +2.428686172552450451e+00 +2.428669741033460117e+00 +2.428653851799892127e+00 +2.428638489911012943e+00 +2.428623646723306884e+00 +2.428609319582098358e+00 +2.428595511638065751e+00 +2.428582231779285561e+00 +2.428569494672788931e+00 +2.428557320912516637e+00 +2.428545737273248850e+00 +2.428534777072604456e+00 +2.428524480645628092e+00 +2.428514895938882034e+00 +2.428506079233433201e+00 +2.428498096008655072e+00 +2.428491021961500351e+00 +2.428484944198825879e+00 +2.428479962623551369e+00 +2.428476191538956108e+00 +2.428473761499365224e+00 +2.428472821439827900e+00 +2.428473541122302848e+00 +2.428476113941378411e+00 +2.428480760138724381e+00 +2.428487730482452367e+00 +2.428497310475393522e+00 +2.428509825165120706e+00 +2.428525644638498626e+00 +2.428545190294705503e+00 +2.428568942003285436e+00 +2.428597446267929616e+00 +2.428631325532645935e+00 +2.428671288784879145e+00 +2.428718143630355097e+00 +2.428772810037096441e+00 +2.428836335971658045e+00 +2.428909915179453538e+00 +2.428994907393575708e+00 +2.429092861293256966e+00 +2.429205540574730371e+00 +2.429334953544403319e+00 +2.429483386697863345e+00 +2.429653442809327490e+00 +2.429848084125894481e+00 +2.430070681340972705e+00 +2.430325069113170589e+00 +2.430615609003002220e+00 +2.430947260822561518e+00 +2.431325663535913062e+00 +2.431757227014218703e+00 +2.432249236144075066e+00 +2.432809969015745644e+00 +2.433448831186595829e+00 +2.434176508332175359e+00 +2.435005139972715504e+00 +2.435948517408073055e+00 +2.437022309523277031e+00 +2.438244320756601802e+00 +2.439634786272330658e+00 +2.441216710274443980e+00 +2.443016254462757608e+00 +2.445063184901042241e+00 +2.447391387073220237e+00 +2.450039460688511639e+00 +2.453051407902060888e+00 +2.456477431087388474e+00 +2.460374859171465367e+00 +2.464809224853170999e+00 +2.469855518783170112e+00 +2.475599650964399601e+00 +2.482140154156116552e+00 +2.489590168757483291e+00 +2.498079753195654895e+00 +2.507758567728154642e+00 +2.518798981973591644e+00 +2.531399656179114110e+00 +2.545789641431937422e+00 +2.562233032218318662e+00 +2.581034182527549792e+00 +2.602143977366468519e+00 +2.624632600246376679e+00 +2.648304534301964885e+00 +2.672940148927175130e+00 +2.698305020446296609e+00 +2.724159428111106340e+00 +2.750267292991677159e+00 +2.776403979638642383e+00 +2.802362576363419677e+00 +2.827958473192729194e+00 +2.853032237282222106e+00 +2.877450925209953159e+00 +2.901108063078380095e+00 +2.923922571001328130e+00 +2.945836916457872157e+00 +2.966814761763265196e+00 +2.986838335070273853e+00 +3.005905710789940066e+00 +3.024028140760923300e+00 +3.041227536269494713e+00 +3.057534165549575800e+00 +3.072984602625082218e+00 +3.087619941253107569e+00 +3.101484271652536151e+00 +3.114623406737599964e+00 +3.127083837718187098e+00 +3.138911895224237192e+00 +3.150153090721017790e+00 +3.160851613207948496e+00 +3.171049957482320991e+00 +3.180788662177798543e+00 +3.190106138045273987e+00 +3.199038569310754809e+00 +3.207619873273396482e+00 +3.215881705502504850e+00 +3.223853500001146344e+00 +3.231562535499917566e+00 +3.239034020621201382e+00 +3.246291192017632277e+00 +3.253355420752440441e+00 +3.260246323171898108e+00 +3.266981873341261888e+00 +3.273578514795304706e+00 +3.280051269912248380e+00 +3.286413845673240353e+00 +3.292678734934883167e+00 +3.298857312633693528e+00 +3.304959926571453543e+00 +3.310995982609813648e+00 +3.316974024240406216e+00 +3.322901806600928154e+00 +3.328786365084544396e+00 +3.334634078745090768e+00 +3.340450728738265873e+00 +3.346241552063094815e+00 +3.352011290881348859e+00 +3.357764237697852039e+00 +3.363504276683583427e+00 +3.369234921417908701e+00 +3.374959349317265378e+00 +3.380680433006382657e+00 +3.386400768875222678e+00 +3.392122703051108967e+00 +3.397848355001276133e+00 +3.403579638966740983e+00 +3.409318283414369155e+00 +3.415065848680199245e+00 +3.420823742963928105e+00 +3.426593236821892763e+00 +3.432375476293936245e+00 +3.438171494788418325e+00 +3.443982223839125112e+00 +3.449808502838108915e+00 +3.455651087839444191e+00 +3.461510659520529831e+00 +3.467387830379870195e+00 +3.473283151243142797e+00 +3.479197117142897255e+00 +3.485130172631218937e+00 +3.491082716579267498e+00 +3.497055106512592104e+00 +3.503047662526586059e+00 +3.509060670822282901e+00 +3.515094386898956813e+00 +3.521149038436488965e+00 +3.527224827897442516e+00 +3.533321934875813142e+00 +3.539440518217007003e+00 +3.545580717931138715e+00 +3.551742656919727015e+00 +3.557926442533885236e+00 +3.564132167980389454e+00 +3.570359913590420042e+00 +3.576609747964322406e+00 +3.582881729004484761e+00 +3.589175904847225596e+00 +3.595492314703542025e+00 +3.601830991130500870e+00 +3.608191962353448634e+00 +3.614575252529407923e+00 +3.620980882009828594e+00 +3.627408867595381281e+00 +3.633859222777516607e+00 +3.640331958005811774e+00 +3.646827080985358016e+00 +3.653344596995530047e+00 +3.659884509230739269e+00 +3.666446819169469684e+00 +3.673031526980495620e+00 +3.679638631973556340e+00 +3.686268133094376509e+00 +3.692920029449106245e+00 +3.699594320822125582e+00 +3.706291008128802744e+00 +3.713010093731691441e+00 +3.719751581554656461e+00 +3.726515476957362516e+00 +3.733301786372479114e+00 +3.740110516744026725e+00 +3.746941674854406212e+00 +3.753795266796396746e+00 +3.760671297305981042e+00 +3.767569769053314310e+00 +3.774490682111908413e+00 +3.781434033571936748e+00 +3.788399817269432646e+00 +3.795388023607999095e+00 +3.802398639453844265e+00 +3.809431648088290157e+00 +3.816487029204892245e+00 +3.823564758940594110e+00 +3.830664809932430970e+00 +3.837787151392888063e+00 +3.844931749198414295e+00 +3.852098565986714185e+00 +3.859287561259337807e+00 +3.866498691486897954e+00 +3.873731910214799790e+00 +3.880987168167892243e+00 +3.888264413352873206e+00 +3.895563591157565675e+00 +3.902884644446464435e+00 +3.910227513652174469e+00 +3.917592136862459551e+00 +3.924978449902821076e+00 +3.932386386414601809e+00 +3.939815877928620758e+00 +3.947266853934520370e+00 +3.954739241945911310e+00 +3.962232967561550634e+00 +3.969747954522711453e+00 +3.977284124766975015e+00 +3.984841398478648600e+00 +3.992419694136018826e+00 +4.000018928555661546e+00 +4.007639016934010812e+00 +4.015279872886362789e+00 +4.022941408483537984e+00 +4.030623534286353227e+00 +4.038326159378081925e+00 +4.046049191395064248e+00 +4.053792536555604897e+00 +4.061556099687319232e+00 +4.069339784253027226e+00 +4.077143492375343570e+00 +4.084967124860055421e+00 +4.092810581218397026e+00 +4.100673759688325148e+00 +4.108556557254875230e+00 +4.116458869669661347e+00 +4.124380591469641644e+00 +4.132321615995151021e+00 +4.140281835407343181e+00 +4.148261140705010064e+00 +4.156259421740927884e+00 +4.164276567237686244e+00 +4.172312464803113130e+00 +4.180367000945297562e+00 +4.188440061087268518e+00 +4.196531529581347897e+00 +4.204641289723232589e+00 +4.212769223765787885e+00 +4.220915212932648153e+00 +4.229079137431577706e+00 +4.237260876467658477e+00 +4.245460308256312487e+00 +4.253677310036170667e+00 +4.261911758081815549e+00 +4.270163527716402285e+00 +4.278432493324189068e+00 +4.286718528362960079e+00 +4.295021505376385385e+00 +4.303341296006305328e+00 +4.311677771004962523e+00 +4.320030800247181446e+00 +4.328400252742504506e+00 +4.336785996647302355e+00 +4.345187899276842458e+00 +4.353605827117355886e+00 +4.362039645838063251e+00 +4.370489220303215738e+00 +4.378954414584104171e+00 +4.387435091971083168e+00 +4.395931114985581090e+00 +4.404442345392121538e+00 +4.412968644210350178e+00 +4.421509871727057117e+00 +4.430065887508224165e+00 +4.438636550411079185e+00 +4.447221718596147788e+00 +4.455821249539342332e+00 +4.464435000044035817e+00 +4.473062826253181967e+00 +4.481704583661426433e+00 +4.490360127127226875e+00 +4.499029310885015676e+00 +4.507711988557346672e+00 +4.516408013167065860e+00 +4.525117237149492766e+00 +4.533839512364608915e+00 +4.542574690109248081e+00 +4.551322621129299861e+00 +4.560083155631916796e+00 +4.568856143297711725e+00 +4.577641433292965800e+00 +4.586438874281798306e+00 +4.595248314438372006e+00 +4.604069601459038097e+00 +4.612902582574497146e+00 +4.621747104561906738e+00 +4.630603013756959818e+00 +4.639470156065940820e+00 +4.648348376977720520e+00 +4.657237521575701145e+00 +4.666137434549685992e+00 +4.675047960207688647e+00 +4.683968942487649834e+00 +4.692900224969061895e+00 +4.701841650884466262e+00 +4.710793063130840785e+00 +4.719754304280847634e+00 +4.728725216593904435e+00 +4.737705642027099984e+00 +4.746695422245903906e+00 +4.755694398634659592e+00 +4.764702412306847989e+00 +4.773719304115100925e+00 +4.782744914660911562e+00 +4.791779084304089054e+00 +4.800821653171868597e+00 +4.809872461008948719e+00 +4.818931346994006049e+00 +4.827998149603239142e+00 +4.837072706514737419e+00 +4.846154854548286650e+00 +4.855244429635835246e+00 +4.864341266818217768e+00 +4.873445200264113986e+00 +4.882556063307440297e+00 +4.891673688499631467e+00 +4.900797907673583254e+00 +4.909928552016249448e+00 +4.919065452147187933e+00 +4.928208438200736730e+00 +4.937357339909718590e+00 +4.946511986688905793e+00 +4.955672207716881772e+00 +4.964837832015044583e+00 +4.974008688522938648e+00 +4.983184606169185571e+00 +4.992365413937613461e+00 +5.001550940928284561e+00 +5.010741016413311044e+00 +5.019935469887453650e+00 +5.029134131113650596e+00 +5.038336830163579805e+00 +5.047543397453607028e+00 +5.056753663776312635e+00 +5.065967460327988725e+00 +5.075184618732377473e+00 +5.084404971061045941e+00 +5.093628349850698456e+00 +5.102854588117764933e+00 +5.112083519370590246e+00 +5.121314977619524811e+00 +5.130548797385178439e+00 +5.139784813705134070e+00 +5.149022862139316814e+00 +5.158262778774284740e+00 +5.167504400226610173e+00 +5.176747563645514028e+00 +5.185992106714969019e+00 +5.195237867655335684e+00 +5.204484685224716856e+00 +5.213732398720095418e+00 +5.222980847978359265e+00 +5.232229873377304052e+00 +5.241479315836654607e+00 +5.250729016819159156e+00 +5.259978818331832784e+00 +5.269228562927366966e+00 +5.278478093705682994e+00 +5.287727254315747416e+00 +5.296975888957587308e+00 +5.306223842384532929e+00 +5.315470959905722381e+00 +5.324717087388814996e+00 +5.333962071262968507e+00 +5.343205758522032944e+00 +5.352447996727985213e+00 +5.361688634014560861e+00 +5.370927519091115876e+00 +5.380164501246667896e+00 +5.389399430354136378e+00 +5.398632156874735522e+00 +5.407862531862559941e+00 +5.417090406969272465e+00 +5.426315634448972247e+00 +5.435538067163143694e+00 +5.444757558585753721e+00 +5.453973962808392528e+00 +5.463187134545558266e+00 +5.472396929139960342e+00 +5.481603202567926658e+00 +5.490805811444818829e+00 +5.500004613030526457e+00 +5.509199465234953408e+00 +5.518390226623560935e+00 +5.527576756422885929e+00 +5.536758914526094699e+00 +5.545936561498493234e+00 +5.555109558583065876e+00 +5.564277767705961608e+00 +5.573441051481962560e+00 +5.582599273219923219e+00 +5.591752296928176769e+00 +5.600899987319877482e+00 +5.610042209818296932e+00 +5.619178830562099769e+00 +5.628309716410503150e+00 +5.637434734948428172e+00 +5.646553754491549171e+00 +5.655666644091292383e+00 +5.664773273539742249e+00 +5.673873513374498856e+00 +5.682967234883433250e+00 +5.692054310109377901e+00 +5.701134611854712375e+00 +5.710208013685900141e+00 +5.719274389937890390e+00 +5.728333615718479876e+00 +5.737385566912552193e+00 +5.746430120186227342e+00 +5.755467152990938473e+00 +5.764496543567384279e+00 +5.773518170949422768e+00 +5.782531914967844244e+00 +5.791537656254030608e+00 +5.800535276243575566e+00 +5.809524657179736984e+00 +5.818505682116849265e+00 +5.827478234923593625e+00 +5.836442200286212412e+00 +5.845397463711566211e+00 +5.854343911530163425e+00 +5.863281430899020208e+00 +5.872209909804485761e+00 +5.881129237064908644e+00 +5.890039302333258675e+00 +5.898939996099610283e+00 +5.907831209693540586e+00 +5.916712835286450201e+00 +5.925584765893751715e+00 +5.934446895376980002e+00 +5.943299118445812823e+00 +5.952141330659966201e+00 +5.960973428431044496e+00 +5.969795309024227947e+00 +5.978606870559933562e+00 +5.987408012015320580e+00 +5.996198633225758634e+00 +6.004978634886162681e+00 +6.013747918552239113e+00 +6.022506386641661713e+00 +6.031253942435142790e+00 +6.039990490077404850e+00 +6.048715934578080322e+00 +6.057430181812502923e+00 +6.066133138522426194e+00 +6.074824712316650555e+00 +6.083504811671549106e+00 +6.092173345931526818e+00 +6.100830225309378463e+00 +6.109475360886571949e+00 +6.118108664613428616e+00 +6.126730049309253801e+00 +6.135339428662346606e+00 +6.143936717229948385e+00 +6.152521830438102413e+00 +6.161094684581447822e+00 +6.169655196822898091e+00 +6.178203285193289318e+00 +6.186738868590905938e+00 +6.195261866780938931e+00 +6.203772200394910286e+00 +6.212269790929935809e+00 +6.220754560748012807e+00 +6.229226433075144342e+00 +6.237685332000442173e+00 +6.246131182475149757e+00 +6.254563910311585317e+00 +6.262983442181997873e+00 +6.271389705617394839e+00 +6.279782629006250616e+00 +6.288162141593199195e+00 +6.296528173477607737e+00 +6.304880655612114637e+00 +6.313219519801089419e+00 +6.321544698699050002e+00 +6.329856125808973388e+00 +6.338153735480574369e+00 +6.346437462908518512e+00 +6.354707244130565869e+00 +6.362963016025657836e+00 +6.371204716311932970e+00 +6.379432283544712590e+00 +6.387645657114385145e+00 +6.395844777244274582e+00 +6.404029584988427004e+00 +6.412200022229345819e+00 +6.420356031675680697e+00 +6.428497556859847251e+00 +6.436624542135621851e+00 +6.444736932675636965e+00 +6.452834674468876486e+00 +6.460917714318082261e+00 +6.468985999837139289e+00 +6.477039479448382764e+00 +6.485078102379880249e+00 +6.493101818662660563e+00 +6.501110579127884037e+00 +6.509104335403998576e+00 +6.517083039913803333e+00 +6.525046645871510620e+00 +6.532995107279756297e+00 +6.540928378926533782e+00 +6.548846416382145819e+00 +6.556749175996058554e+00 +6.564636614893750277e+00 +6.572508690973513978e+00 +6.580365362903217274e+00 +6.588206590117028583e+00 +6.596032332812088228e+00 +6.603842551945188433e+00 +6.611637209229373369e+00 +6.619416267130526776e+00 +6.627179688863918727e+00 +6.634927438390715082e+00 +6.642659480414490503e+00 +6.650375780377649093e+00 +6.658076304457864580e+00 +6.665761019564474310e+00 +6.673429893334843044e+00 +6.681082894130691230e+00 +6.688719991034419721e+00 +6.696341153845393634e+00 +6.703946353076176479e+00 +6.711535559948787366e+00 +6.719108746390896059e+00 +6.726665885032007353e+00 +6.734206949199643688e+00 +6.741731912915442493e+00 +6.749240750891308593e+00 +6.756733438525500901e+00 +6.764209951898711992e+00 +6.771670267770101503e+00 +6.779114363573370383e+00 +6.786542217412760536e+00 +6.793953808059056243e+00 +6.801349114945569596e+00 +6.808728118164129484e+00 +6.816090798461003075e+00 +6.823437137232859939e+00 +6.830767116522695304e+00 +6.838080719015721343e+00 +6.845377928035288662e+00 +6.852658727538754491e+00 +6.859923102113375748e+00 +6.867171036972152365e+00 +6.874402517949688374e+00 +6.881617531498042339e+00 +6.888816064682540485e+00 +6.895998105177623572e+00 +6.903163641262640482e+00 +6.910312661817680890e+00 +6.917445156319356414e+00 +6.924561114836597753e+00 +6.931660528026464263e+00 +6.938743387129891360e+00 +6.945809683967500092e+00 +6.952859410935360529e+00 +6.959892561000756928e+00 +6.966909127697960002e+00 +6.973909105123986762e+00 +6.980892487934372781e+00 +6.987859271338914269e+00 +6.994809451097438568e+00 +7.001743023515567543e+00 +7.008659985440457874e+00 +7.015560334256566222e+00 +7.022444067881417951e+00 +7.029311184761338538e+00 +7.036161683867240058e+00 +7.042995564690381016e+00 +7.049812827238110202e+00 +7.056613472029646061e+00 +7.063397500091863179e+00 +7.070164912955025471e+00 +7.076915712648606416e+00 +7.083649901697043560e+00 +7.090367483115539216e+00 +7.097068460405848711e+00 +7.103752837552063326e+00 +7.110420619016441179e+00 +7.117071809735193710e+00 +7.123706415114307688e+00 +7.130324441025383209e+00 +7.136925893801432608e+00 +7.143510780232759316e+00 +7.150079107562758551e+00 +7.156630883483817485e+00 +7.163166116133146133e+00 +7.169684814088663316e+00 +7.176186986364871956e+00 +7.182672642408762798e+00 +7.189141792095702144e+00 +7.195594445725349786e+00 +7.202030614017580490e+00 +7.208450308108423243e+00 +7.214853539545991623e+00 +7.221240320286458569e+00 +7.227610662690004517e+00 +7.233964579516811710e+00 +7.240302083923056742e+00 +7.246623189456897762e+00 +7.252927910054511429e+00 +7.259216260036117419e+00 +7.265488254102013599e+00 +7.271743907328650280e+00 +7.277983235164684928e+00 +7.284206253427068845e+00 +7.290412978297158730e+00 +7.296603426316821128e+00 +7.302777614384559968e+00 +7.308935559751661870e+00 +7.315077280018353889e+00 +7.321202793129987896e+00 +7.327312117373205425e+00 +7.333405271372164691e+00 +7.339482274084746294e+00 +7.345543144798805102e+00 +7.351587903128407930e+00 +7.357616569010104968e+00 +7.363629162699227848e+00 +7.369625704766168184e+00 +7.375606216092734257e+00 +7.381570717868440212e+00 +7.387519231586898272e+00 +7.393451779042171879e+00 +7.399368382325157256e+00 +7.405269063820007602e+00 +7.411153846200535966e+00 +7.417022752426678522e+00 +7.422875805740927646e+00 +7.428713029664837819e+00 +7.434534447995488904e+00 +7.440340084802025800e+00 +7.446129964422182113e+00 +7.451904111458819813e+00 +7.457662550776513299e+00 +7.463405307498133467e+00 +7.469132407001438878e+00 +7.474843874915729103e+00 +7.480539737118467869e+00 +7.486220019731939956e+00 +7.491884749119961384e+00 +7.497533951884554071e+00 +7.503167654862684444e+00 +7.508785885122987835e+00 +7.514388669962537293e+00 +7.519976036903633698e+00 +7.525548013690574578e+00 +7.531104628286493963e+00 +7.536645908870202248e+00 +7.542171883833022505e+00 +7.547682581775697841e+00 +7.553178031505252576e+00 +7.558658262031938690e+00 +7.564123302566160945e+00 +7.569573182515414445e+00 +7.575007931481296808e+00 +7.580427579256475923e+00 +7.585832155821719880e+00 +7.591221691342914468e+00 +7.596596216168141069e+00 +7.601955760824745667e+00 +7.607300356016414966e+00 +7.612630032620320009e+00 +7.617944821684234924e+00 +7.623244754423696534e+00 +7.628529862219172841e+00 +7.633800176613272370e+00 +7.639055729307949960e+00 +7.644296552161739200e+00 +7.649522677187018616e+00 +7.654734136547277856e+00 +7.659930962554410527e+00 +7.665113187666040773e+00 +7.670280844482851634e+00 +7.675433965745936504e+00 +7.680572584334180775e+00 +7.685696733261650593e+00 +7.690806445675017144e+00 +7.695901754850979160e+00 +7.700982694193715616e+00 +7.706049297232386408e+00 +7.711101597618583270e+00 +7.716139629123885513e+00 +7.721163425637360689e+00 +7.726173021163134536e+00 +7.731168449817959143e+00 +7.736149745828805990e+00 +7.741116943530471417e+00 +7.746070077363219397e+00 +7.751009181870415432e+00 +7.755934291696211957e+00 +7.760845441583224869e+00 +7.765742666370243796e+00 +7.770626000989976134e+00 +7.775495480466771525e+00 +7.780351139914388980e+00 +7.785193014533795974e+00 +7.790021139610971090e+00 +7.794835550514704892e+00 +7.799636282694466516e+00 +7.804423371678248955e+00 +7.809196853070462296e+00 +7.813956762549810975e+00 +7.818703135867229648e+00 +7.823436008843799527e+00 +7.828155417368725111e+00 +7.832861397397287817e+00 +7.837553984948838703e+00 +7.842233216104810722e+00 +7.846899127006745189e+00 +7.851551753854339566e+00 +7.856191132903502350e+00 +7.860817300464429280e+00 +7.865430292899738163e+00 +7.870030146622534417e+00 +7.874616898094570772e+00 +7.879190583824412286e+00 +7.883751240365580060e+00 +7.888298904314760662e+00 +7.892833612309990698e+00 +7.897355401028899990e+00 +7.901864307186929892e+00 +7.906360367535615552e+00 +7.910843618860825543e+00 +7.915314097981084984e+00 +7.919771841745868457e+00 +7.924216887033924905e+00 +7.928649270751623845e+00 +7.933069029831312236e+00 +7.937476201229680228e+00 +7.941870821926167778e+00 +7.946252928921371250e+00 +7.950622559235442921e+00 +7.954979749906572195e+00 +7.959324537989404647e+00 +7.963656960553540998e+00 +7.967977054682014781e+00 +7.972284857469794872e+00 +7.976580406022318215e+00 +9.847648915468575126e+00 +9.860596695031812686e+00 +9.873515407900667284e+00 +9.886405001164062512e+00 +9.899265423226164984e+00 +9.912096623621732050e+00 +9.924898552880131675e+00 +9.937671162427776039e+00 +9.950414404520717682e+00 +9.963128232200688217e+00 +9.975812599269291425e+00 +9.988467460275899157e+00 +1.000109277051590695e+01 +1.001368848603654449e+01 +1.002625456364807732e+01 +1.003879096093868739e+01 +1.005129763629169837e+01 +1.006377454890409062e+01 +1.007622165880555798e+01 +1.008863892687741881e+01 +1.010102631487107416e+01 +1.011338378542554572e+01 +1.012571130208397285e+01 +1.013800882930889813e+01 +1.015027633249621175e+01 +1.016251377798777611e+01 +1.017472113308267900e+01 +1.018689836604715637e+01 +1.019904544612320052e+01 +1.021116234353592134e+01 +1.022324902949974579e+01 +1.023530547622343079e+01 +1.024733165691408665e+01 +1.025932754578016137e+01 +1.027129311803353318e+01 +1.028322834989074686e+01 +1.029513321857345787e+01 +1.030700770230817653e+01 +1.031885178032530526e+01 +1.033066543285761085e+01 +1.034244864113811424e+01 +1.035420138739749163e+01 +1.036592365486099432e+01 +1.037761542774496171e+01 +1.038927669125294173e+01 +1.040090743157148978e+01 +1.041250763586561945e+01 +1.042407729227397972e+01 +1.043561638990381013e+01 +1.044712491882560279e+01 +1.045860287006761702e+01 +1.047005023561015769e+01 +1.048146700837971501e+01 +1.049285318224294450e+01 +1.050420875200050119e+01 +1.051553371338076381e+01 +1.052682806303343810e+01 +1.053809179852308553e+01 +1.054932491832252950e+01 +1.056052742180622772e+01 +1.057169930924352386e+01 +1.058284058179191511e+01 +1.059395124149016354e+01 +1.060503129125146415e+01 +1.061608073485650650e+01 +1.062709957694652552e+01 +1.063808782301632228e+01 +1.064904547940724910e+01 +1.065997255330018056e+01 +1.067086905270847907e+01 +1.068173498647092501e+01 +1.069257036424464147e+01 +1.070337519649802793e+01 +1.071414949450366016e+01 +1.072489327033121320e+01 +1.073560653684037725e+01 +1.074628930767374868e+01 +1.075694159724978505e+01 +1.076756342075568185e+01 +1.077815479414033639e+01 +1.078871573410726192e+01 +1.079924625810754968e+01 +1.080974638433280610e+01 +1.082021613170814334e+01 +1.083065551988513953e+01 +1.084106456923485240e+01 +1.085144330084081332e+01 +1.086179173649206753e+01 +1.087210989867621436e+01 +1.088239781057245814e+01 +1.089265549604470351e+01 +1.090288297963464181e+01 +1.091308028655488016e+01 +1.092324744268207048e+01 +1.093338447455008300e+01 +1.094349140934316544e+01 +1.095356827488918050e+01 +1.096361509965280767e+01 +1.097363191272879490e+01 +1.098361874383525638e+01 +1.099357562330694016e+01 +1.100350258208857923e+01 +1.101339965172822133e+01 +1.102326686437061554e+01 +1.103310425275060780e+01 +1.104291185018657018e+01 +1.105268969057385853e+01 +1.106243780837827728e+01 +1.107215623862962239e+01 +1.108184501691517454e+01 +1.109150417937330069e+01 +1.110113376268703078e+01 +1.111073380407767708e+01 +1.112030434129849787e+01 +1.112984541262836657e+01 +1.113935705686549227e+01 +1.114883931332114919e+01 +1.115829222181345948e+01 +1.116771582266118301e+01 +1.117711015667755525e+01 +1.118647526516414459e+01 +1.119581118990475588e+01 +1.120511797315934288e+01 +1.121439565765797397e+01 +1.122364428659481561e+01 +1.123286390362215137e+01 +1.124205455284443822e+01 +1.125121627881237885e+01 +1.126034912651705966e+01 +1.126945314138407817e+01 +1.127852836926773961e+01 +1.128757485644525360e+01 +1.129659264961101073e+01 +1.130558179587083067e+01 +1.131454234273629567e+01 +1.132347433811909809e+01 +1.133237783032540591e+01 +1.134125286805029731e+01 +1.135009950037218829e+01 +1.135891777674732772e+01 +1.136770774700431375e+01 +1.137646946133862613e+01 +1.138520297030723150e+01 +1.139390832482318849e+01 +1.140258557615029922e+01 +1.141123477589779611e+01 +1.141985597601506797e+01 +1.142844922878640723e+01 +1.143701458682579286e+01 +1.144555210307173709e+01 +1.145406183078211448e+01 +1.146254382352906909e+01 +1.147099813519394118e+01 +1.147942481996221886e+01 +1.148782393231855359e+01 +1.149619552704176328e+01 +1.150453965919991717e+01 +1.151285638414542767e+01 +1.152114575751018322e+01 +1.152940783520072010e+01 +1.153764267339342808e+01 +1.154585032852977200e+01 +1.155403085731158797e+01 +1.156218431669637248e+01 +1.157031076389262836e+01 +1.157841025635524090e+01 +1.158648285178088777e+01 +1.159452860810348618e+01 +1.160254758348965787e+01 +1.161053983633427045e+01 +1.161850542525595564e+01 +1.162644440909270038e+01 +1.163435684689747873e+01 +1.164224279793387495e+01 +1.165010232167178472e+01 +1.165793547778313410e+01 +1.166574232613762341e+01 +1.167352292679851544e+01 +1.168127734001846108e+01 +1.168900562623534256e+01 +1.169670784606817016e+01 +1.170438406031299827e+01 +1.171203432993888427e+01 +1.171965871608386855e+01 +1.172725728005100265e+01 +1.173483008330439681e+01 +1.174237718746532089e+01 +1.174989865430830527e+01 +1.175739454575731102e+01 +1.176486492388191252e+01 +1.177230985089351023e+01 +1.177972938914159329e+01 +1.178712360111001090e+01 +1.179449254941330238e+01 +1.180183629679304325e+01 +1.180915490611421426e+01 +1.181644844036164343e+01 +1.182371696263642136e+01 +1.183096053615239462e+01 +1.183817922423267710e+01 +1.184537309030619312e+01 +1.185254219790424379e+01 +1.185968661065713015e+01 +1.186680639229077627e+01 +1.187390160662341643e+01 +1.188097231756228211e+01 +1.188801858910033893e+01 +1.189504048531305536e+01 +1.190203807035518935e+01 +1.190901140845761397e+01 +1.191596056392416969e+01 +1.192288560112855755e+01 +1.192978658451123763e+01 +1.193666357857638793e+01 +1.194351664788886680e+01 +1.195034585707122154e+01 +1.195715127080072726e+01 +1.196393295380642030e+01 +1.197069097086623302e+01 +1.197742538680407343e+01 +1.198413626648699726e+01 +1.199082367482237110e+01 +1.199748767675509065e+01 +1.200412833726481132e+01 +1.201074572136320029e+01 +1.201733989409123815e+01 +1.202391092051653665e+01 +1.203045886573068124e+01 +1.203698379484660741e+01 +1.204348577299600898e+01 +1.204996486532674638e+01 +1.205642113700033313e+01 +1.206285465318939210e+01 +1.206926547907519165e+01 +1.207565367984515170e+01 +1.208201932069044382e+01 +1.208836246680355231e+01 +1.209468318337590809e+01 +1.210098153559552969e+01 +1.210725758864468382e+01 +1.211351140769758850e+01 +1.211974305791814288e+01 +1.212595260445765000e+01 +1.213214011245261226e+01 +1.213830564702251813e+01 +1.214444927326766255e+01 +1.215057105626700640e+01 +1.215667106107603601e+01 +1.216274935272466351e+01 +1.216880599621515024e+01 +1.217484105652004089e+01 +1.218085459858010999e+01 +1.218684668730234399e+01 +1.219281738755792333e+01 +1.219876676418025951e+01 +1.220469488196301100e+01 +1.221060180565817355e+01 +1.221648759997415468e+01 +1.222235232957389606e+01 +1.222819605907300478e+01 +1.223401885303792724e+01 +1.223982077598413554e+01 +1.224560189237433150e+01 +1.225136226661670058e+01 +1.225710196306315680e+01 +1.226282104600763923e+01 +1.226851957968441731e+01 +1.227419762826641936e+01 +1.227985525586358939e+01 +1.228549252652127244e+01 +1.229110950421859982e+01 +1.229670625286692065e+01 +1.230228283630824571e+01 +1.230783931831370559e+01 +1.231337576258205146e+01 +1.231889223273814515e+01 +1.232438879233149720e+01 +1.232986550483482269e+01 +1.233532243364259529e+01 +1.234075964206964748e+01 +1.234617719334978325e+01 +1.235157515063439426e+01 +1.235695357699112229e+01 +1.236231253540251984e+01 +1.236765208876474986e+01 +1.237297229988626590e+01 +1.237827323148656866e+01 +1.238355494619493236e+01 +1.238881750654916658e+01 +1.239406097499440662e+01 +1.239928541388190197e+01 +1.240449088546784218e+01 +1.239797501453513995e+01 +1.228382638811189587e+01 +1.206407998115014379e+01 +1.172925724112298340e+01 +1.126424888031416494e+01 +1.065488032343845504e+01 +9.896571663349602588e+00 +9.004315300580977066e+00 +8.019995036846184533e+00 +7.010732289202715961e+00 +6.054411208337529438e+00 +5.217148958770596145e+00 +4.535345099260221780e+00 +4.012331286570152145e+00 +3.628217107926698937e+00 +3.353659660956420652e+00 +3.159971592503610260e+00 +3.023724387925700974e+00 +2.927526078467814319e+00 +2.859100695925156366e+00 +2.809985548477941464e+00 +2.774390472864138868e+00 +2.748346991830051600e+00 +2.729116983152041431e+00 +2.714794193814007883e+00 +2.704038470905886005e+00 +2.695898392044262515e+00 +2.689692134029923576e+00 +2.684926725912916368e+00 +2.681242762542430214e+00 +2.678376162416579831e+00 +2.676131453864721621e+00 +2.674362940484498630e+00 +2.672961306331413489e+00 +2.671844012509812405e+00 +2.670948359836869734e+00 +2.670226441799014694e+00 +2.669641448109667525e+00 +2.669164940234091787e+00 +2.668774831145835247e+00 +2.668453878603649354e+00 +2.668188555166256748e+00 +2.667968196203611697e+00 +2.667784354186064633e+00 +2.667630306855095945e+00 +2.667500680781597744e+00 +2.667391161879374195e+00 +2.667298271764786399e+00 +2.667219194212340216e+00 +2.667151639897712201e+00 +2.667093740533627688e+00 +2.667043965668397298e+00 +2.667001057032223343e+00 +2.666963976527301661e+00 +2.666931864869531932e+00 +2.666904008579206398e+00 +2.666879813541601862e+00 +2.666858783757719564e+00 +2.666840504211037022e+00 +2.666824627011067150e+00 +2.666810860155795382e+00 +2.666798958395453667e+00 +2.666788715789228270e+00 +2.666779959631730534e+00 +2.666772545492756663e+00 +2.666766353166416526e+00 +2.666761283367142799e+00 +2.666757255043019192e+00 +2.666754203203076212e+00 +2.666752077176228308e+00 +2.666750839236479376e+00 +2.666750463542793437e+00 +2.666750935353300989e+00 +2.666752250482879116e+00 +2.666754414980975429e+00 +2.666757445013249406e+00 +2.666761366936423183e+00 +2.666766217560921248e+00 +2.666772044600588476e+00 +2.666778907313240410e+00 +2.666786877340052264e+00 +2.666796039756081704e+00 +2.666806494348499257e+00 +2.666818357143686313e+00 +2.666831762209088019e+00 +2.666846863760935271e+00 +2.666863838614592197e+00 +2.666882889020515179e+00 +2.666904245935757256e+00 +2.666928172788667339e+00 +2.666954969803098763e+00 +2.666984978958165442e+00 +2.667018589670486328e+00 +2.667056245298168538e+00 +2.667098450579593827e+00 +2.667145780135639299e+00 +2.667198888181488314e+00 +2.667258519613882051e+00 +2.667325522661850190e+00 +2.667400863313891257e+00 +2.667485641762613824e+00 +2.667581111139395666e+00 +2.667688698847080708e+00 +2.667810030838640323e+00 +2.667946959234654081e+00 +2.668101593723057885e+00 +2.668276337241694662e+00 +2.668473926508651672e+00 +2.668697478038299487e+00 +2.668950540363576263e+00 +2.669237153278984920e+00 +2.669561915025715049e+00 +2.669930058462476996e+00 +2.670347537405620031e+00 +2.670821124483040432e+00 +2.671358522032003080e+00 +2.671968487785875368e+00 +2.672660977344398781e+00 +2.673447305713092526e+00 +2.674340330537798849e+00 +2.675354660059831247e+00 +2.676506889287525226e+00 +2.677815868435155178e+00 +2.679303008337353020e+00 +2.680992628326603899e+00 +2.682912352987616433e+00 +2.685093565304379482e+00 +2.687571925028090281e+00 +2.690387962657271093e+00 +2.693587761282564497e+00 +2.697223740762018540e+00 +2.701355561319402465e+00 +2.706051166765526261e+00 +2.711387991202139247e+00 +2.717454357351303695e+00 +2.724351099624658268e+00 +2.732193450752625985e+00 +2.741113237242161382e+00 +2.751261436066963384e+00 +2.762811152653415370e+00 +2.775961088079377248e+00 +2.790939570869987563e+00 +2.808009234904870866e+00 +2.827472428269884208e+00 +2.849677436194220537e+00 +2.875025591342069919e+00 +2.903979322264034213e+00 +2.937071149825992045e+00 +2.974568860349878996e+00 +3.014573812255204821e+00 +3.056740864721009920e+00 +3.100679550142870333e+00 +3.145970782516924302e+00 +3.192184056455003471e+00 +3.238893776235292954e+00 +3.285693619906079554e+00 +3.332208197451864251e+00 +3.378101636147817999e+00 +3.423083063508182367e+00 +3.466909222047774186e+00 +3.509384625580405537e+00 +3.550359756960473678e+00 +3.589727826451099446e+00 +3.627420577744041807e+00 +3.663403564669904799e+00 +3.697671242555502502e+00 +3.730242136567337052e+00 +3.761154273521876590e+00 +3.790460998184316921e+00 +3.818227241885515877e+00 +3.844526270349827968e+00 +3.869436907810446691e+00 +3.893041214109272286e+00 +3.915422578692214550e+00 +3.936664188456979296e+00 +3.956847823738160574e+00 +3.976052937034584289e+00 +3.994355971372949288e+00 +4.011829878678679684e+00 +4.028543802615311975e+00 +4.044562894652379725e+00 +4.059948236355038986e+00 +4.074756844883202334e+00 +4.089041742343588304e+00 +4.102852072906985725e+00 +4.116233254472634329e+00 +4.129227154143002565e+00 +4.141872278890529557e+00 +4.154203974585904291e+00 +4.166254628051570208e+00 +4.178053868040926488e+00 +4.189628762058193345e+00 +4.201004006758836340e+00 +4.212202110334985150e+00 +4.223243565820473222e+00 +4.234147014668740994e+00 +4.244929400283385057e+00 +4.255606111432090444e+00 +4.266191115664556222e+00 +4.276697082995115196e+00 +4.287135500211299188e+00 +4.297516776238593295e+00 +4.307850339035679710e+00 +4.318144724519303423e+00 +4.328407658027689564e+00 +4.338646128829987347e+00 +4.348866458179372785e+00 +4.359074361391453323e+00 +4.369275004409406193e+00 +4.379473055294196726e+00 +4.389672731053574140e+00 +4.399877840197815360e+00 +4.410091821384614974e+00 +4.420317778489979865e+00 +4.430558512417297479e+00 +4.440816549932973700e+00 +4.451094169794323818e+00 +4.461393426413962082e+00 +4.471716171284752406e+00 +4.482064072370555152e+00 +4.492438631650349734e+00 +4.502841200987108827e+00 +4.513272996477643240e+00 +4.523735111425777333e+00 +4.534228528068407371e+00 +4.544754128172248997e+00 +4.555312702608333097e+00 +4.565904960001422097e+00 +4.576531534542587210e+00 +4.587192993044917344e+00 +4.597889841314902526e+00 +4.608622529905153087e+00 +4.619391459308047843e+00 +4.630196984644091351e+00 +4.641039419893836282e+00 +4.651919041717441416e+00 +4.662836092901832430e+00 +4.673790785471614306e+00 +4.684783303496340423e+00 +4.695813805623702208e+00 +4.706882427365278510e+00 +4.717989283158935621e+00 +4.729134468229624133e+00 +4.740318060276286438e+00 +4.751540121099136371e+00 +4.762800698157816370e+00 +4.774099826069583941e+00 +4.785437528067653545e+00 +4.796813817445471528e+00 +4.808228699012882856e+00 +4.819682170582292535e+00 +4.831174224484593438e+00 +4.842704849084272567e+00 +4.854274030225200320e+00 +4.865881752505272217e+00 +4.877528000267254527e+00 +4.889212758217525767e+00 +4.900936011640014023e+00 +4.912697746237492780e+00 +4.924497947681787835e+00 +4.936336600975279154e+00 +4.948213689494624035e+00 +4.960129193746828591e+00 +4.972083090437775965e+00 +4.984075351793045172e+00 +4.996105945081380284e+00 +5.008174832299702395e+00 +5.020281969985800785e+00 +5.032427309130938831e+00 +5.044610795169624851e+00 +5.056832368028089775e+00 +5.069091962216429437e+00 +5.081389506952437074e+00 +5.093724926307437784e+00 +5.106098139366514133e+00 +5.118509060397090416e+00 +5.130957599021222393e+00 +5.143443660387996275e+00 +5.155967145343311131e+00 +5.168527950595091625e+00 +5.181125968872470011e+00 +5.193761089077941762e+00 +5.206433196431923704e+00 +5.219142172609354979e+00 +5.231887895868194249e+00 +5.244670241169898439e+00 +5.257489080292025996e+00 +5.270344281933217800e+00 +5.283235711810907453e+00 +5.296163232752093109e+00 +5.309126704777586525e+00 +5.322125985180130137e+00 +5.335160928596824448e+00 +5.348231387076213039e+00 +5.361337210140476373e+00 +5.374478244843110986e+00 +5.387654335822408491e+00 +5.400865325351153601e+00 +5.414111053382822725e+00 +5.427391357594608223e+00 +5.440706073427536538e+00 +5.454055034123987511e+00 +5.467438070762820956e+00 +5.480855012292357387e+00 +5.494305685561437613e+00 +5.507789915348736187e+00 +5.521307524390504540e+00 +5.534858333406937447e+00 +5.548442161127269401e+00 +5.562058824313787397e+00 +5.575708137784835650e+00 +5.589389914436955209e+00 +5.603103965266265973e+00 +5.616850099389156803e+00 +5.630628124062388551e+00 +5.644437844702702378e+00 +5.658279064905963551e+00 +5.672151586465926876e+00 +5.686055209392691268e+00 +5.699989731930873660e+00 +5.713954950577553760e+00 +5.727950660100045610e+00 +5.741976653553494181e+00 +5.756032722298404458e+00 +5.770118656018039971e+00 +5.784234242735787568e+00 +5.798379268832483113e+00 +5.812553519063738960e+00 +5.826756776577241226e+00 +5.840988822930111013e+00 +5.855249438106283399e+00 +5.869538400533933498e+00 +5.883855487102989557e+00 +5.898200473182671821e+00 +5.912573132639163731e+00 +5.926973237853342624e+00 +5.941400559738603704e+00 +5.955854867758803906e+00 +5.970335929946278597e+00 +5.984843512920003050e+00 +5.999377381903830297e+00 +6.013937300744855108e+00 +6.028523031931908527e+00 +6.043134336614143010e+00 +6.057770974619737459e+00 +6.072432704474731935e+00 +6.087119283421963623e+00 +6.101830467440114703e+00 +6.116566011262891678e+00 +6.131325668398289963e+00 +6.146109191147994366e+00 +6.160916330626850623e+00 +6.175746836782492366e+00 +6.190600458414996510e+00 +6.205476943196721606e+00 +6.220376037692156856e+00 +6.235297487377922110e+00 +6.250241036662824712e+00 +6.265206428907985625e+00 +6.280193406447081017e+00 +6.295201710606606937e+00 +6.310231081726236368e+00 +6.325281259179229565e+00 +6.340351981392887026e+00 +6.355442985869043326e+00 +6.370554009204605350e+00 +6.385684787112120731e+00 +6.400835054440333849e+00 +6.416004545194788022e+00 +6.431192992558385058e+00 +6.446400128911964345e+00 +6.461625685854814449e+00 +6.476869394225170495e+00 +6.492130984120645820e+00 +6.507410184918564156e+00 +6.522706725296224306e+00 +6.538020333251044036e+00 +6.553350736120545861e+00 +6.568697660602220267e+00 +6.584060832773158012e+00 +6.599439978109510108e+00 +6.614834821505668927e+00 +6.630245087293193507e+00 +6.645670499259420438e+00 +6.661110780665730147e+00 +6.676565654265424143e+00 +6.692034842321199051e+00 +6.707518066622148112e+00 +6.723015048500270652e+00 +6.738525508846493040e+00 +6.754049168126105229e+00 +6.769585746232470669e+00 +6.785134962133438918e+00 +6.800696533610421923e+00 +6.816270177076964032e+00 +6.831855607465335822e+00 +6.847452538171012293e+00 +6.863060681045984879e+00 +6.878679746432592168e+00 +6.894309443230389078e+00 +6.909949478989188876e+00 +6.925599560022122958e+00 +6.941259391533169065e+00 +6.956928677754357082e+00 +6.972607122088410492e+00 +6.988294427253238794e+00 +7.003990295425376544e+00 +7.019694428379860796e+00 +7.035406527624775919e+00 +7.051126294528929250e+00 +7.066853430441698336e+00 +7.082587636804378306e+00 +7.098328615252611939e+00 +7.114076067709873996e+00 +7.129829696471999156e+00 +7.145589204283067986e+00 +7.161354294402993759e+00 +7.177124670667263118e+00 +7.192900037539381231e+00 +7.208680100156534820e+00 +7.224464564369112551e+00 +7.240253136774624565e+00 +7.256045524746603803e+00 +7.271841436459078878e+00 +7.287640580907105203e+00 +7.303442667923892628e+00 +7.319247408194994975e+00 +7.335054513269961163e+00 +7.350863695571888456e+00 +7.366674668405218895e+00 +7.382487145962086217e+00 +7.398300843327541898e+00 +7.414115476483848610e+00 +7.429930762314171488e+00 +7.445746418605743600e+00 +7.461562164052763180e+00 +7.477377718259136330e+00 +7.493192801741171749e+00 +7.509007135930371390e+00 +7.524820443176363227e+00 +7.540632446750052509e+00 +7.556442870847064341e+00 +7.572251440591527327e+00 +7.588057882040153856e+00 +7.603861922186755606e+00 +7.619663288967094772e+00 +7.635461711264186491e+00 +7.651256918913921012e+00 +7.667048642711135287e+00 +7.682836614416045151e+00 +7.698620566761029238e+00 +7.714400233457785916e+00 +7.730175349204811752e+00 +7.745945649695187285e+00 +7.761710871624694974e+00 +7.777470752700159196e+00 +7.793225031648088219e+00 +7.808973448223509806e+00 +7.824715743219034181e+00 +7.840451658474103525e+00 +7.856180936884401333e+00 +7.871903322411416326e+00 +7.887618560092112929e+00 +7.903326396048749203e+00 +7.919026577498712527e+00 +7.934718852764506281e+00 +7.950402971283720532e+00 +7.966078683619077339e+00 +7.981745741468467159e+00 +7.997403897675027906e+00 +8.013052906237170703e+00 +8.028692522318626956e+00 +8.044322502258417273e+00 +8.059942603580802611e+00 +8.075552585005178585e+00 +8.091152206455884510e+00 +8.106741229071943167e+00 +8.122319415216727734e+00 +8.137886528487515037e+00 +8.153442333724941093e+00 +8.168986597022355411e+00 +8.184519085735052712e+00 +8.200039568489385644e+00 +8.215547815191753145e+00 +8.231043597037444925e+00 +8.246526686519363381e+00 +8.261996857436596287e+00 +8.277453884902831405e+00 +8.292897545354655620e+00 +8.308327616559662232e+00 +8.323743877624432130e+00 +8.339146109002342655e+00 +8.354534092501216591e+00 +8.369907611290807736e+00 +8.385266449910124820e+00 +8.400610394274599102e+00 +8.415939231683047694e+00 +8.431252750824512532e+00 +8.446550741784895067e+00 +8.461832996053427536e+00 +8.477099306528987910e+00 +8.492349467526214113e+00 +8.507583274781447713e+00 +8.522800525458537280e+00 +8.538001018154425026e+00 +8.553184552904564697e+00 +8.568350933120218116e+00 +8.583499965058910774e+00 +8.598631457406753498e+00 +8.613745220951352977e+00 +8.628841068327972152e+00 +8.643918813824694070e+00 +8.658978273234938072e+00 +8.674019263747897668e+00 +8.689041603869107178e+00 +8.704045113364877295e+00 +8.719029613225485420e+00 +8.733994925643024487e+00 +8.748940874000515677e+00 +8.763867282869675535e+00 +8.778773978015117052e+00 +8.793660786403329155e+00 +8.808527536215017051e+00 +8.823374056859767833e+00 +8.838200178992186906e+00 +8.853005734528801796e+00 +8.867790556665323010e+00 +8.882554479893771671e+00 +8.897297340019262535e+00 +8.912018974176200814e+00 +8.926719220843748914e+00 +8.941397919860451182e+00 +8.956054912438004223e+00 +8.970690041174055551e+00 +8.985303150064098077e+00 +8.999894084512423120e+00 +9.014462691342169265e+00 +9.029008818804483028e+00 +9.043532316586833986e+00 +9.058033035820503898e+00 +9.072510829087326201e+00 +9.086965550425688321e+00 +9.101397055335830544e+00 +9.115805200784514284e+00 +9.130189845209075727e+00 +9.144550848520903941e+00 +9.158888072108396727e+00 +9.173201378839410225e+00 +9.187490633063235990e+00 +9.201755700612151756e+00 +9.215996448802558305e+00 +9.230212746435741522e+00 +9.244404463798259641e+00 +9.258571472662010748e+00 +9.272713646283996525e+00 +9.286830859405760918e+00 +9.300922988252573020e+00 +9.314989910532350592e+00 +9.329031505434327798e+00 +9.343047653627499116e+00 +9.357038237258832325e+00 +9.371003139951312733e+00 +9.384942246801713850e+00 +9.398855444378270363e+00 +9.412742620718114850e+00 +9.426603665324552850e+00 +9.440438469164215363e+00 +9.454246924663992857e+00 +9.468028925707875132e+00 +9.481784367633625976e+00 +9.495513147229319273e+00 +9.509215162729759641e+00 +9.522890313812752083e+00 +9.536538501595273942e+00 +9.550159628629522501e+00 +9.563753598898829367e+00 +9.577320317813500239e+00 +9.590859692206516129e+00 +9.604371630329136877e+00 +9.617856041846438941e+00 +9.631312837832691542e+00 +9.644741930766695504e+00 +9.658143234527010179e+00 +9.671516664387072026e+00 +9.684862137010261662e+00 +9.698179570444855457e+00 +9.711468884118914957e+00 +9.724729998835075051e+00 +9.737962836765278851e+00 +9.751167321445411318e+00 +9.764343377769876042e+00 +9.777490931986088540e+00 +9.790609911688907374e+00 +9.803700245814990666e+00 +9.816761864637067347e+00 +9.829794699758199528e+00 +9.842798684105897422e+00 +9.855773751926244941e+00 +9.868719838777929354e+00 +9.881636881526205229e+00 +9.894524818336829952e+00 +9.907383588669908647e+00 +9.920213133273708905e+00 +9.933013394178415112e+00 +9.945784314689824157e+00 +9.958525839382998512e+00 +9.971237914095857136e+00 +9.983920485922734400e+00 +9.996573503207894618e+00 +1.000919691553897550e+01 +1.002179067374041743e+01 +1.003435472986681809e+01 +1.004688903719629245e+01 +1.005939355022373327e+01 +1.007186822465408937e+01 +1.008431301739556751e+01 +1.009672788655280762e+01 +1.010911279142005093e+01 +1.012146769247421041e+01 +1.013379255136797852e+01 +1.014608733092285675e+01 +1.015835199512218168e+01 +1.017058650910409945e+01 +1.018279083915452787e+01 +1.019496495270008474e+01 +1.020710881830100014e+01 +1.021922240564398265e+01 +1.023130568553508546e+01 +1.024335862989253521e+01 +1.025538121173954842e+01 +1.026737340519712305e+01 +1.027933518547679803e+01 +1.029126652887342530e+01 +1.030316741275789738e+01 +1.031503781556986254e+01 +1.032687771681044175e+01 +1.033868709703490474e+01 +1.035046593784537450e+01 +1.036221422188345187e+01 +1.037393193282291115e+01 +1.038561905536230867e+01 +1.039727557521763757e+01 +1.040890147911495234e+01 +1.042049675478298276e+01 +1.043206139094573892e+01 +1.044359537731512866e+01 +1.045509870458355195e+01 +1.046657136441649882e+01 +1.047801334944514018e+01 +1.048942465325892748e+01 +1.050080527039817291e+01 +1.051215519634664375e+01 +1.052347442752415319e+01 +1.053476296127914402e+01 +1.054602079588128838e+01 +1.055724793051408028e+01 +1.056844436526743181e+01 +1.057961010113027811e+01 +1.059074513998317890e+01 +1.060184948459093945e+01 +1.061292313859522274e+01 +1.062396610650718110e+01 +1.063497839370007547e+01 +1.064596000640193729e+01 +1.065691095168820546e+01 +1.066783123747440420e+01 +1.067872087250877655e+01 +1.068957986636500657e+01 +1.070040822943489545e+01 +1.071120597292107135e+01 +1.072197310882969923e+01 +1.073270964996322618e+01 +1.074341560991311795e+01 +1.075409100305262200e+01 +1.076473584452954846e+01 +1.077535015025905629e+01 +1.078593393691647151e+01 +1.079648722193009647e+01 +1.080701002347406714e+01 +1.081750236046121394e+01 +1.082796425253592609e+01 +1.083839572006706931e+01 +1.084879678414088922e+01 +1.085916746655396103e+01 +1.086950778980613741e+01 +1.087981777709353892e+01 +1.089009745230154635e+01 +1.090034683999782317e+01 +1.091056596542537349e+01 +1.092075485449559302e+01 +1.093091353378137320e+01 +1.094104203051021251e+01 +1.095114037255734551e+01 +1.096120858843892698e+01 +1.097124670730520002e+01 +1.098125475893371927e+01 +1.099123277372259189e+01 +1.100118078268373445e+01 +1.101109881743616903e+01 +1.102098691019933874e+01 +1.103084509378646061e+01 +1.104067340159788735e+01 +1.105047186761451350e+01 +1.106024052639119226e+01 +1.106997941305020561e+01 +1.107968856327474860e+01 +1.108936801330242972e+01 +1.109901779991882265e+01 +1.110863796045103413e+01 +1.111822853276131617e+01 +1.112778955524067648e+01 +1.113732106680255995e+01 +1.114682310687652844e+01 +1.115629571540198839e+01 +1.116573893282195407e+01 +1.117515280007680190e+01 +1.118453735859812781e+01 +1.119389265030255487e+01 +1.120321871758564214e+01 +1.121251560331577934e+01 +1.122178335082813483e+01 +1.123102200391863192e+01 +1.124023160683795730e+01 +1.124941220428559596e+01 +1.125856384140390709e+01 +1.126768656377223898e+01 +1.127678041740104931e+01 +1.128584544872609996e+01 +1.129488170460264307e+01 +1.130388923229967091e+01 +1.131286807949418893e+01 +1.132181829426551900e+01 +1.133073992508963634e+01 +1.133963302083355096e+01 +1.134849763074971385e+01 +1.135733380447045526e+01 +1.136614159200246732e+01 +1.137492104372130974e+01 +1.138367221036595822e+01 +1.139239514303338119e+01 +1.140108989317315924e+01 +1.140975651258212764e+01 +1.141839505339906502e+01 +1.142700556809940693e+01 +1.143558810948999849e+01 +1.144414273070388965e+01 +1.145266948519514472e+01 +1.146116842673371217e+01 +1.146963960940030702e+01 +1.147808308758134466e+01 +1.148649891596389416e+01 +1.149488714953068502e+01 +1.150324784355512797e+01 +1.151158105359639450e+01 +1.151988683549450343e+01 +1.152816524536546794e+01 +1.153641633959646207e+01 +1.154464017484102811e+01 +1.155283680801431601e+01 +1.156100629628836174e+01 +1.156914869708739424e+01 +1.157726406808318131e+01 +1.158535246719042000e+01 +1.159341395256212870e+01 +1.160144858258512457e+01 +1.160945641587548316e+01 +1.161743751127407620e+01 +1.162539192784211117e+01 +1.163331972485672239e+01 +1.164122096180660826e+01 +1.164909569838765968e+01 +1.165694399449867902e+01 +1.166476591023708664e+01 +1.167256150589468966e+01 +1.168033084195347548e+01 +1.168807397908143564e+01 +1.169579097812842328e+01 +1.170348190012206580e+01 +1.171114680626367566e+01 +1.171878575792422517e+01 +1.172639881664033545e+01 +1.173398604411031343e+01 +1.174154750219021182e+01 +1.174908325288993183e+01 +1.175659335836934538e+01 +1.176407788093446172e+01 +1.177153688303363133e+01 +1.177897042725376409e+01 +1.178637857631660246e+01 +1.179376139307500893e+01 +1.180111894050929777e+01 +1.180845128172359715e+01 +1.181575847994224127e+01 +1.182304059850619282e+01 +1.183029770086950450e+01 +1.183752985059580176e+01 +1.184473711135481189e+01 +1.185191954691892313e+01 +1.185907722115975105e+01 +1.186621019804476518e+01 +1.187331854163394951e+01 +1.188040231607645758e+01 +1.188746158560734045e+01 +1.189449641454428708e+01 +1.190150686728439133e+01 +1.190849300830095814e+01 +1.191545490214033620e+01 +1.192239261341878453e+01 +1.192930620681936560e+01 +1.193619574708887932e+01 +1.194306129903479885e+01 +1.194990292752227745e+01 +1.195672069747115174e+01 +1.196351467385298761e+01 +1.197028492168815461e+01 +1.197703150604293398e+01 +1.198375449202664456e+01 +1.199045394478881654e+01 +1.199712992951636537e+01 +1.200378251143082942e+01 +1.201041175578560249e+01 +1.201701772786321953e+01 +1.202360049297266364e+01 +1.203016011644669092e+01 +1.203669666363920143e+01 +1.204321019992262087e+01 +1.204970079068532129e+01 +1.205616850132906670e+01 +1.206261339726647641e+01 +1.206903554391853994e+01 +1.207543500671212477e+01 +1.208181185107754807e+01 +1.208816614244613952e+01 +1.209449794624785390e+01 +1.210080732790889790e+01 +1.210709435284936042e+01 +1.211335908648090154e+01 +1.211960159420441663e+01 +1.212582194140778213e+01 +1.213202019346358185e+01 +1.213819641572687758e+01 +1.214435067353300646e+01 +1.215048303219540671e+01 +1.215659355700346111e+01 +1.216268231322037785e+01 +1.216874936608108193e+01 +1.217479478079015642e+01 +1.218081862251978009e+01 +1.218682095640772722e+01 +1.219280184755534968e+01 +1.219876136102562647e+01 +1.220469956184120086e+01 +1.221061651498248324e+01 +1.221651228538572909e+01 +1.222238693794118980e+01 +1.222824053749124928e+01 +1.223407314882860675e+01 +1.223988483669448257e+01 +1.224567566577682598e+01 +1.225144570070857419e+01 +1.225719500606592050e+01 +1.226292364636659293e+01 +1.226863168606817922e+01 +1.227431918956645873e+01 +1.227998622119376826e+01 +1.228563284521735888e+01 +1.229125912583782210e+01 +1.229686512718749469e+01 +1.230245091332891860e+01 +1.230801654825327418e+01 +1.231356209587890582e+01 +1.231908762004979252e+01 +1.232459318453409658e+01 +1.233007885302269102e+01 +1.233554468912774027e+01 +1.234099075638128440e+01 +1.234134741241538258e+01 +1.222991258006834592e+01 +1.200995470923153086e+01 +1.167274838672188331e+01 +1.120380606919894007e+01 +1.058970353005333820e+01 +9.826917400787797519e+00 +8.931813414331328360e+00 +7.947685592475792760e+00 +6.942534101287062498e+00 +5.994040015790364606e+00 +5.166989428662338568e+00 +4.495935427031428233e+00 +3.982667927111601447e+00 +3.606502038462872317e+00 +3.337982149628687889e+00 +3.148687878552931529e+00 +3.015570036863268299e+00 +2.921585333461019118e+00 +2.854729483747474816e+00 +2.806735541820762680e+00 +2.771949336271549491e+00 +2.746495610668715948e+00 +2.727700114181065949e+00 +2.713700642138351160e+00 +2.703187722155952599e+00 +2.695231542387601653e+00 +2.689165674712975296e+00 +2.684508234660043513e+00 +2.680907881470192766e+00 +2.678106454183172058e+00 +2.675912864680019876e+00 +2.674184687444622899e+00 +2.672815064753440772e+00 +2.671723317545410481e+00 +2.670848162571709317e+00 +2.670142777681130397e+00 +2.669571187691489822e+00 +2.669105600665730549e+00 +2.668724432802817681e+00 +2.668410835453837393e+00 +2.668151590503747173e+00 +2.667936277559240565e+00 +2.667756642810124035e+00 +2.667606118328398779e+00 +2.667479454165398334e+00 +2.667372435447302514e+00 +2.667281663830936900e+00 +2.667204387922039288e+00 +2.667138371112498962e+00 +2.667081788142115606e+00 +2.667033143806583961e+00 +2.666991208812545366e+00 +2.666954968964286188e+00 +2.666923584757948440e+00 +2.666896359133085426e+00 +2.666872711643141880e+00 +2.666852157696642855e+00 +2.666834291819594860e+00 +2.666818774119160906e+00 +2.666805319305799671e+00 +2.666793687768238552e+00 +2.666783678302306893e+00 +2.666775122177881485e+00 +2.666767878293440752e+00 +2.666761829218968760e+00 +2.666756877968520456e+00 +2.666752945375859163e+00 +2.666749967972221746e+00 +2.666747896285794450e+00 +2.666746693499034038e+00 +2.666746334413437669e+00 +2.666746804682372129e+00 +2.666748100281717271e+00 +2.666750227195735512e+00 +2.666753201302134002e+00 +2.666757048445962841e+00 +2.666761804697056704e+00 +2.666767516790346182e+00 +2.666774242752713686e+00 +2.666782052724233409e+00 +2.666791029985808414e+00 +2.666801272209450069e+00 +2.666812892951850422e+00 +2.666826023416608127e+00 +2.666840814515516467e+00 +2.666857439264877616e+00 +2.666876095558885940e+00 +2.666897009368943916e+00 +2.666920438425307349e+00 +2.666946676445963504e+00 +2.666976057987157755e+00 +2.667008964000687321e+00 +2.667045828195131030e+00 +2.667087144311755420e+00 +2.667133474441097718e+00 +2.667185458523430253e+00 +2.667243825195679818e+00 +2.667309404169137199e+00 +2.667383140346845316e+00 +2.667466109917116857e+00 +2.667559538690676746e+00 +2.667664822983864426e+00 +2.667783553389641682e+00 +2.667917541822423022e+00 +2.668068852272698077e+00 +2.668239835763702938e+00 +2.668433170066059734e+00 +2.668651904798333696e+00 +2.668899512623125414e+00 +2.669179947341156378e+00 +2.669497709791566642e+00 +2.669857922587492993e+00 +2.670266414854492343e+00 +2.670729818298607672e+00 +2.671255676114554056e+00 +2.671852566457123768e+00 +2.672530242445925186e+00 +2.673299790961473299e+00 +2.674173812827425056e+00 +2.675166627368957606e+00 +2.676294504802494423e+00 +2.677575930461181919e+00 +2.679031905510506739e+00 +2.680686289579520043e+00 +2.682566191649474518e+00 +2.684702416632315458e+00 +2.687129976370683515e+00 +2.689888675339521029e+00 +2.693023783174254948e+00 +2.696586808346620678e+00 +2.700636389918421365e+00 +2.705239327394817650e+00 +2.710471772345833585e+00 +2.716420609742949743e+00 +2.723185061936911566e+00 +2.730878553937140740e+00 +2.739630885162835927e+00 +2.749590760080939056e+00 +2.760928737986231063e+00 +2.773840670314358992e+00 +2.788551701767668423e+00 +2.805320918276673403e+00 +2.824446729003933676e+00 +2.846273069094540364e+00 +2.871196501597495399e+00 +2.899674276584057075e+00 +2.932233367087305531e+00 +2.968789269246732143e+00 +3.007733650333769049e+00 +3.048728479667191849e+00 +3.091393947327951697e+00 +3.135324585065317748e+00 +3.180105694402068028e+00 +3.225328814475312278e+00 +3.270605225349941136e+00 +3.315576821396490015e+00 +3.359924040832861003e+00 +3.403370850248800483e+00 +3.445687024633302009e+00 +3.486688121901790005e+00 +3.526233630065179980e+00 +3.564223779018731886e+00 +3.600595475788766819e+00 +3.635317760175948099e+00 +3.668387102502610908e+00 +3.699822788120862960e+00 +3.729662562030902073e+00 +3.757958645590454783e+00 +3.784774187517574884e+00 +3.810180173131689330e+00 +3.834252787949083974e+00 +3.857071212758074630e+00 +3.878715815415140433e+00 +3.899266698176301560e+00 +3.918802556956618943e+00 +3.937399809288220531e+00 +3.955131949965898563e+00 +3.972069096697119939e+00 +3.988277691972458960e+00 +4.003820331462567772e+00 +4.018755693272366258e+00 +4.033138546179143802e+00 +4.047019818454900886e+00 +4.060446711979314394e+00 +4.073462849076827652e+00 +4.086108441869816588e+00 +4.098420475953581388e+00 +4.110432901899001124e+00 +4.122176829509745843e+00 +4.133680720937294772e+00 +4.144970579722402348e+00 +4.156070133616420748e+00 +4.167001009668533484e+00 +4.177782900569447122e+00 +4.188433721640686613e+00 +4.198969758169377897e+00 +4.209405803027344461e+00 +4.219755284694036490e+00 +4.230030385936082382e+00 +4.240242153491964316e+00 +4.250400599175777394e+00 +4.260514792855937038e+00 +4.270592947788144578e+00 +4.280642498791052297e+00 +4.290670173751568228e+00 +4.300682058937146834e+00 +4.310683658576981436e+00 +4.320679949154635047e+00 +4.330675428832442719e+00 +4.340674162404338787e+00 +4.350679822149174925e+00 +4.360695724931959560e+00 +4.370724865876050913e+00 +4.380769948905642863e+00 +4.390833414435066473e+00 +4.400917464459697115e+00 +4.411024085282702956e+00 +4.421155068092518903e+00 +4.431312027587859248e+00 +4.441496418830215731e+00 +4.451709552488219757e+00 +4.461952608623692917e+00 +4.472226649156013423e+00 +4.482532629129016399e+00 +4.492871406893521602e+00 +4.503243753308175279e+00 +4.513650360051867594e+00 +4.524091847132398314e+00 +4.534568769668162247e+00 +4.545081624012421884e+00 +4.555630853283309634e+00 +4.566216852356593137e+00 +4.576839972373045740e+00 +4.587500524807110125e+00 +4.598198785139363309e+00 +4.608934996171013765e+00 +4.619709371015213506e+00 +4.630522095796508530e+00 +4.641373332086801362e+00 +4.652263219103437208e+00 +4.663191875692525912e+00 +4.674159402118474915e+00 +4.685165881678536870e+00 +4.696211382159502179e+00 +4.707295957151895749e+00 +4.718419647235618797e+00 +4.729582481049563469e+00 +4.740784476256599156e+00 +4.752025640414105467e+00 +4.763305971759349333e+00 +4.774625459991881371e+00 +4.785984087072672644e+00 +4.797381828035280904e+00 +4.808818651818777212e+00 +4.820294522140816440e+00 +4.831809398432656444e+00 +4.843363236854470344e+00 +4.854955991395774717e+00 +4.866587615039771997e+00 +4.878258060933225337e+00 +4.889967283464319969e+00 +4.901715239127469204e+00 +4.913501887063604912e+00 +4.925327189211820667e+00 +4.937191110076341261e+00 +4.949093616174216947e+00 +4.961034675263629623e+00 +4.973014255457554711e+00 +4.985032324017533156e+00 +4.997088846075207869e+00 +5.009183783663940126e+00 +5.021317095001417208e+00 +5.033488733974230023e+00 +5.045698649783935785e+00 +5.057946786721261745e+00 +5.070233084041004368e+00 +5.082557475915269407e+00 +5.094919891446751059e+00 +5.107320254727302888e+00 +5.119758484929858966e+00 +5.132234496424144865e+00 +5.144748198908601466e+00 +5.157299497552489953e+00 +5.169888293143513280e+00 +5.182514482237291276e+00 +5.195177957305959993e+00 +5.207878606883795669e+00 +5.220616315708390687e+00 +5.233390964856291738e+00 +5.246202431872411864e+00 +5.259050590892808685e+00 +5.271935312760557935e+00 +5.284856465134789794e+00 +5.297813912592841845e+00 +5.310807516725835953e+00 +5.323837136227830946e+00 +5.336902626978909048e+00 +5.350003842122484699e+00 +5.363140632137190167e+00 +5.376312844903710975e+00 +5.389520325766881115e+00 +5.402762917593421754e+00 +5.416040460825639613e+00 +5.429352793531404764e+00 +5.442699751450735590e+00 +5.456081168039265350e+00 +5.469496874508854134e+00 +5.482946699865642870e+00 +5.496430470945741220e+00 +5.509948012448797172e+00 +5.523499146969669482e+00 +5.537083695028339747e+00 +5.550701475098307469e+00 +5.564352303633557817e+00 +5.578035995094328570e+00 +5.591752361971730423e+00 +5.605501214811408950e+00 +5.619282362236312167e+00 +5.633095610968698708e+00 +5.646940765851468313e+00 +5.660817629868892809e+00 +5.674726004166846138e+00 +5.688665688072559234e+00 +5.702636479114016055e+00 +5.716638173039004123e+00 +5.730670563833901276e+00 +5.744733443742216394e+00 +5.758826603282967582e+00 +5.772949831268867626e+00 +5.787102914824425071e+00 +5.801285639403948480e+00 +5.815497788809469881e+00 +5.829739145208664652e+00 +5.844009489152707459e+00 +5.858308599594190369e+00 +5.872636253904988557e+00 +5.886992227894230822e+00 +5.901376295826263885e+00 +5.915788230438698392e+00 +5.930227802960507333e+00 +5.944694783130231919e+00 +5.959188939214229208e+00 +5.973710038025046742e+00 +5.988257844939850472e+00 +6.002832123919008112e+00 +6.017432637524727568e+00 +6.032059146939815264e+00 +6.046711411986560591e+00 +6.061389191145696742e+00 +6.076092241575510755e+00 +6.090820319131024618e+00 +6.105573178383325583e+00 +6.120350572638963982e+00 +6.135152253959510915e+00 +6.149977973181174562e+00 +6.164827479934563925e+00 +6.179700522664520079e+00 +6.194596848650084198e+00 +6.209516204024529529e+00 +6.224458333795531928e+00 +6.239422981865386575e+00 +6.254409891051350812e+00 +6.269418803106045601e+00 +6.284449458737965344e+00 +6.299501597632028549e+00 +6.314574958470238641e+00 +6.329669278952383848e+00 +6.344784295816795705e+00 +6.359919744861178614e+00 +6.375075360963483817e+00 +6.390250878102808230e+00 +6.405446029380341244e+00 +6.420660547040320409e+00 +6.435894162491024417e+00 +6.451146606325737665e+00 +6.466417608343762780e+00 +6.481706897571346104e+00 +6.497014202282635154e+00 +6.512339250020561465e+00 +6.527681767617671937e+00 +6.543041481216906874e+00 +6.558418116292243027e+00 +6.573811397669274470e+00 +6.589221049545640696e+00 +6.604646795511305513e+00 +6.620088358568658293e+00 +6.635545461152405622e+00 +6.651017825149269314e+00 +6.666505171917362915e+00 +6.682007222305339056e+00 +6.697523696671158433e+00 +6.713054314900526620e+00 +6.728598796424932971e+00 +6.744156860239234774e+00 +6.759728224918784889e+00 +6.775312608636069100e+00 +6.790909729176789256e+00 +6.806519303679639421e+00 +6.822141048317952539e+00 +6.837774678063047062e+00 +6.853419906518526616e+00 +6.869076445816162391e+00 +6.884744006565027163e+00 +6.900422297846288799e+00 +6.916111027246566678e+00 +6.931809900923349588e+00 +6.947518623696256057e+00 +6.963236899158522064e+00 +6.978964429803514946e+00 +6.994700917161596365e+00 +7.010446061943222062e+00 +7.026199564184691937e+00 +7.041961123393518207e+00 +7.057730438690910546e+00 +7.073507208949342484e+00 +7.089291132923690952e+00 +7.105081909374744598e+00 +7.120879237184327692e+00 +7.136682815461579565e+00 +7.152492343640144412e+00 +7.168307521566330109e+00 +7.184128049578390574e+00 +7.199953628577246079e+00 +7.215783960089119375e+00 +7.231618746320531699e+00 +7.247457690206275061e+00 +7.263300495450840444e+00 +7.279146866564046192e+00 +7.294996508891282261e+00 +7.310849128639066663e+00 +7.326704432896422148e+00 +7.342562129652582925e+00 +7.358421927811553687e+00 +7.374283537203945471e+00 +7.390146668596507595e+00 +7.406011033699769541e+00 +7.421876345174100109e+00 +7.437742316634485817e+00 +7.453608662654351846e+00 +7.469475098768613819e+00 +7.485341341476193122e+00 +7.501207108242187616e+00 +7.517072117499838058e+00 +7.532936088652430584e+00 +7.548798742075250701e+00 +7.564659799117677608e+00 +7.580518982105491688e+00 +7.596376014343482197e+00 +7.612230620118340951e+00 +7.628082524701957468e+00 +7.643931454355072930e+00 +7.659777136331340941e+00 +7.675619298881821706e+00 +7.691457671259843920e+00 +7.707291983726324958e+00 +7.723121967555453438e+00 +7.738947355040778575e+00 +7.754767879501674344e+00 +7.770583275290157133e+00 +7.786393277798028478e+00 +7.802197623464367737e+00 +7.817996049783273449e+00 +7.833788295311933325e+00 +7.849574099678886085e+00 +7.865353203592558629e+00 +7.881125348849984391e+00 +7.896890278345718883e+00 +7.912647736080895555e+00 +7.928397467172448643e+00 +7.944139217862439040e+00 +7.959872735527493859e+00 +7.975597768688308165e+00 +7.991314067019223089e+00 +8.007021381357859013e+00 +8.022719463714750532e+00 +8.038408067283034697e+00 +8.054086946448098416e+00 +8.069755856797238280e+00 +8.085414555129279535e+00 +8.101062799464166631e+00 +8.116700349052488050e+00 +8.132326964384947843e+00 +8.147942407201773207e+00 +8.163546440502010171e+00 +8.179138828552762419e+00 +8.194719336898323547e+00 +8.210287732369183189e+00 +8.225843783090938999e+00 +8.241387258493100276e+00 +8.256917929317729943e+00 +8.272435567627978159e+00 +8.287939946816505810e+00 +8.303430841613701929e+00 +8.318908028095822971e+00 +8.334371283692943777e+00 +8.349820387196777105e+00 +8.365255118768313736e+00 +8.380675259945338240e+00 +8.396080593649760004e+00 +8.411470904194780829e+00 +8.426845977291911538e+00 +8.442205600057805626e+00 +8.457549561020940132e+00 +8.472877650128120663e+00 +8.488189658750785682e+00 +8.503485379691204216e+00 +8.518764607188426652e+00 +8.534027136924112966e+00 +8.549272766028169102e+00 +8.564501293084191502e+00 +8.579712518134771315e+00 +8.594906242686603193e+00 +8.610082269715405801e+00 +8.625240403670701994e+00 +8.640380450480389385e+00 +8.655502217555165245e+00 +8.670605513792748908e+00 +8.685690149581963837e+00 +8.700755936806610080e+00 +8.715802688849205282e+00 +8.730830220594512525e+00 +8.745838348432933174e+00 +8.760826890263698985e+00 +8.775795665497923892e+00 +8.790744495061465713e+00 +8.805673201397631544e+00 +8.820581608469712620e+00 +8.835469541763355750e+00 +8.850336828288776658e+00 +8.865183296582785033e+00 +8.880008776710679896e+00 +8.894813100267978001e+00 +8.909596100381946826e+00 +8.924357611713027438e+00 +8.939097470456069061e+00 +8.953815514341417980e+00 +8.968511582635853685e+00 +8.983185516143347371e+00 +8.997837157205720970e+00 +9.012466349703078805e+00 +9.027072939054164635e+00 +9.041656772216516202e+00 +9.056217697686506085e+00 +9.070755565499203144e+00 +9.085270227228127382e+00 +9.099761535984823624e+00 +9.114229346418326827e+00 +9.128673514714465753e+00 +9.143093898595022750e+00 +9.157490357316785179e+00 +9.171862751670415648e+00 +9.186210943979233434e+00 +9.200534798097828926e+00 +9.214834179410566151e+00 +9.229108954829936096e+00 +9.243358992794796336e+00 +9.257584163268477440e+00 +9.271784337736766801e+00 +9.285959389205755699e+00 +9.300109192199579766e+00 +9.314233622758017361e+00 +9.328332558433997335e+00 +9.342405878290950483e+00 +9.356453462900077511e+00 +9.370475194337483771e+00 +9.384470956181202084e+00 +9.398440633508094777e+00 +9.412384112890672228e+00 +9.426301282393774628e+00 +9.440192031571141840e+00 +9.454056251461908644e+00 +9.467893834586972091e+00 +9.481704674945239830e+00 +9.495488668009816280e+00 +9.509245710724057332e+00 +9.522975701497539802e+00 +9.536678540201920740e+00 +9.550354128166722134e+00 +9.564002368175001934e+00 +9.577623164458932692e+00 +9.591216422695305610e+00 +9.604782050000936877e+00 +9.618319954927963877e+00 +9.631830047459095212e+00 +9.645312239002732824e+00 +9.658766442388060369e+00 +9.672192571859991261e+00 +9.685590543074070524e+00 +9.698960273091307371e+00 +9.712301680372904755e+00 +9.725614684774912533e+00 +9.738899207542829117e+00 +9.752155171306108983e+00 +9.765382500072602667e+00 +9.778581119222938156e+00 +9.791750955504804566e+00 +9.804891937027203852e+00 +9.818003993254617257e+00 +9.831087055001107800e+00 +9.844141054424344617e+00 +9.857165925019602426e+00 +9.870161601613675728e+00 +9.883128020358723731e+00 +9.896065118726086851e+00 +9.908972835500021503e+00 +9.921851110771392257e+00 +9.934699885931300045e+00 +9.947519103664680173e+00 +9.960308707943820394e+00 +9.973068644021847007e+00 +9.985798858426159441e+00 +9.998499298951823988e+00 +1.001116991465490180e+01 +1.002381065584575204e+01 +1.003642147408228880e+01 +1.004900232216318479e+01 +1.006155315412104301e+01 +1.007407392521554179e+01 +1.008656459192651056e+01 +1.009902511194699315e+01 +1.011145544417626851e+01 +1.012385554871284654e+01 +1.013622538684739993e+01 +1.014856492105570140e+01 +1.016087411499151472e+01 +1.017315293347944127e+01 +1.018540134250777029e+01 +1.019761930922126858e+01 +1.020980680191396672e+01 +1.022196379002190447e+01 +1.023409024411587609e+01 +1.024618613589411353e+01 +1.025825143817499274e+01 +1.027028612488968307e+01 +1.028229017107479670e+01 +1.029426355286501327e+01 +1.030620624748568837e+01 +1.031811823324544974e+01 +1.032999948952876323e+01 +1.034184999678849870e+01 +1.035366973653848355e+01 +1.036545869134603493e+01 +1.037721684482447593e+01 +1.038894418162566602e+01 +1.040064068743249059e+01 +1.041230634895136475e+01 +1.042394115390471931e+01 +1.043554509102348149e+01 +1.044711815003955380e+01 +1.045866032167828230e+01 +1.047017159765092309e+01 +1.048165197064710874e+01 +1.049310143432730946e+01 +1.050451998331528891e+01 +1.051590761319057243e+01 +1.052726432048090111e+01 +1.053859010265469465e+01 +1.054988495811351434e+01 +1.056114888618452774e+01 +1.057238188711297866e+01 +1.058358396205466967e+01 +1.059475511306842144e+01 +1.060589534310856941e+01 +1.061700465601746224e+01 +1.062808305651794072e+01 +1.063913055020586107e+01 +1.065014714354259517e+01 +1.066113284384757165e+01 +1.067208765929079384e+01 +1.068301159888539509e+01 +1.069390467248018695e+01 +1.070476689075223220e+01 +1.071559826519942682e+01 +1.072639880813309077e+01 +1.073716853267057658e+01 +1.074790745272789216e+01 +1.075861558301233600e+01 +1.076929293901516083e+01 +1.077993953700422480e+01 +1.079055539401669606e+01 +1.080114052785174295e+01 +1.081169495706327055e+01 +1.082221870095263938e+01 +1.083271177956144626e+01 +1.084317421366428746e+01 +1.085360602476157510e+01 +1.086400723507233401e+01 +1.087437786752706081e+01 +1.088471794576057761e+01 +1.089502749410491589e+01 +1.090530653758222712e+01 +1.091555510189770928e+01 +1.092577321343256003e+01 +1.093596089923695303e+01 +1.094611818702304085e+01 +1.095624510515797567e+01 +1.096634168265697085e+01 +1.097640794917635887e+01 +1.098644393500670979e+01 +1.099644967106595139e+01 +1.100642518889252486e+01 +1.101637052063856892e+01 +1.102628569906312173e+01 +1.103617075752536536e+01 +1.104602572997788812e+01 +1.105585065095997166e+01 +1.106564555559092078e+01 +1.107541047956340918e+01 +1.108514545913686433e+01 +1.109485053113085584e+01 +1.110452573291856559e+01 +1.111417110242023654e+01 +1.112378667809667476e+01 +1.113337249894278536e+01 +1.114292860448112243e+01 +1.115245503475549604e+01 +1.116195183032458083e+01 +1.117141903225558330e+01 +1.118085668211791450e+01 +1.119026482197692296e+01 +1.119964349438763840e+01 +1.120899274238855448e+01 +1.121831260949544351e+01 +1.122760313969521739e+01 +1.123686437743979205e+01 +1.124609636764001408e+01 +1.125529915565960692e+01 +1.126447278730914547e+01 +1.127361730884008040e+01 +1.128273276693879090e+01 +1.129181920872065348e+01 +1.130087668172417636e+01 +1.130990523390513403e+01 +1.131890491363076556e+01 +1.132787576967399445e+01 +1.133681785120767316e+01 +1.134573120779888455e+01 +1.135461588940326116e+01 +1.136347194635934876e+01 +1.137229942938298777e+01 +1.138109838956176034e+01 +1.138986887834943573e+01 +1.139861094756049553e+01 +1.140732464936463764e+01 +1.141601003628136901e+01 +1.142466716117460379e+01 +1.143329607724730401e+01 +1.144189683803615054e+01 +1.145046949740627085e+01 +1.145901410954596678e+01 +1.146753072896150982e+01 +1.147601941047195595e+01 +1.148448020920400126e+01 +1.149291318058686606e+01 +1.150131838034723231e+01 +1.150969586450418980e+01 +1.151804568936424289e+01 +1.152636791151633666e+01 +1.153466258782693288e+01 +1.154292977543510190e+01 +1.155116953174767325e+01 +1.155938191443440566e+01 +1.156756698142318740e+01 +1.157572479089530759e+01 +1.158385540128070623e+01 +1.159195887125331481e+01 +1.160003525972639693e+01 +1.160808462584793865e+01 +1.161610702899607439e+01 +1.162410252877453942e+01 +1.163207118500817216e+01 +1.164001305773842709e+01 +1.164792820721895339e+01 +1.165581669391119846e+01 +1.166367857848001677e+01 +1.167151392178936753e+01 +1.167932278489800169e+01 +1.168710522905520044e+01 +1.169486131569655818e+01 +1.170259110643978318e+01 +1.171029466308053912e+01 +1.171797204758833288e+01 +1.172562332210241109e+01 +1.173324854892771185e+01 +1.174084779053085192e+01 +1.174842110953612995e+01 +1.175596856872158114e+01 +1.176349023101505686e+01 +1.177098615949033622e+01 +1.177845641736328908e+01 +1.178590106798804626e+01 +1.179332017485321593e+01 +1.180071380157814254e+01 +1.180808201190918894e+01 +1.181542486971604156e+01 +1.182274243898807065e+01 +1.183003478383070828e+01 +1.183730196846187255e+01 +1.184454405720839354e+01 +1.185176111450252101e+01 +1.185895320487841964e+01 +1.186612039296871757e+01 +1.187326274350107980e+01 +1.188038032129483312e+01 +1.188747319125758750e+01 +1.189454141838192491e+01 +1.190158506774208824e+01 +1.190860420449073764e+01 +1.191559889385569271e+01 +1.192256920113675811e+01 +1.192951519170252972e+01 +1.193643693098727177e+01 +1.194333448448779755e+01 +1.195020791776039992e+01 +1.195705729641779413e+01 +1.196388268612611050e+01 +1.197068415260190299e+01 +1.197746176160918985e+01 +1.198421557895652967e+01 +1.199094567049412596e+01 +1.199765210211095123e+01 +1.200433493973192434e+01 +1.201099424931507897e+01 +1.201763009684880501e+01 +1.202424254834908623e+01 +1.203083166985678076e+01 +1.203739752743492986e+01 +1.204394018716608805e+01 +1.205045971514968706e+01 +1.205695617749943516e+01 +1.206342964034072374e+01 +4.882508223990890350e+00 +4.882504772892649392e+00 +4.882501316553182313e+00 +4.882497854988590902e+00 +4.882494388214929870e+00 +4.882490916248214852e+00 +4.882487439104411742e+00 +4.882483956799449132e+00 +4.882480469349205876e+00 +4.882476976769520860e+00 +4.882473479076193890e+00 +4.882469976284979474e+00 +4.882466468411596594e+00 +4.882462955471718935e+00 +4.882459437480984654e+00 +4.882455914454992829e+00 +4.882452386409306122e+00 +4.882448853359444563e+00 +4.882445315320898871e+00 +4.882441772309117134e+00 +4.882438224339516353e+00 +4.882434671427476225e+00 +4.882431113588343585e+00 +4.882427550837427965e+00 +4.882423983190012251e+00 +4.882420410661338472e+00 +4.882416833266622902e+00 +4.882413251021047174e+00 +4.882409663939759170e+00 +4.882406072037883682e+00 +4.882402475330507308e+00 +4.882398873832691777e+00 +4.882395267559465957e+00 +4.882391656525833845e+00 +4.882388040746768354e+00 +4.882384420237216638e+00 +4.882380795012092989e+00 +4.882377165086292159e+00 +4.882373530474680479e+00 +4.882369891192093192e+00 +4.882366247253347780e+00 +4.882362598673229748e+00 +4.882358945466498845e+00 +4.882355287647899722e+00 +4.882351625232143277e+00 +4.882347958233921759e+00 +4.882344286667904321e+00 +4.882340610548733473e+00 +4.882336929891033073e+00 +4.882333244709401221e+00 +4.882329555018420919e+00 +4.882325860832645859e+00 +4.882322162166612856e+00 +4.882318459034838298e+00 +4.882314751451816370e+00 +4.882311039432021715e+00 +4.882307322989911214e+00 +4.882303602139920429e+00 +4.882299876896464497e+00 +4.882296147273945230e+00 +4.882292413286739574e+00 +4.882288674949209373e+00 +4.882284932275700484e+00 +4.882281185280537450e+00 +4.882277433978031489e+00 +4.882273678382472504e+00 +4.882269918508137962e+00 +4.882266154369285793e+00 +4.882262385980158825e+00 +4.882258613354985677e+00 +4.882254836507977203e+00 +4.882251055453329158e+00 +4.882247270205224865e+00 +4.882243480777829880e+00 +4.882239687185294663e+00 +4.882235889441758125e+00 +4.882232087561342304e+00 +4.882228281558157690e+00 +4.882224471446300562e+00 +4.882220657239852990e+00 +4.882216838952884608e+00 +4.882213016599449062e+00 +4.882209190193594672e+00 +4.882205359749347551e+00 +4.882201525280729371e+00 +4.882197686801745817e+00 +4.882193844326392806e+00 +4.882189997868650266e+00 +4.882186147442489244e+00 +4.882182293061871015e+00 +4.882178434740743533e+00 +4.882174572493045872e+00 +4.882170706332701116e+00 +4.882166836273630572e+00 +4.882162962329735123e+00 +4.882159084514910319e+00 +4.882155202843043718e+00 +4.882151317328006890e+00 +4.882147427983666965e+00 +4.882143534823880415e+00 +4.882139637862489501e+00 +4.882135737113333818e+00 +4.882131832590240528e+00 +4.882127924307025246e+00 +4.882124012277497371e+00 +4.882120096515459196e+00 +4.882116177034700577e+00 +4.882112253849004269e+00 +4.882108326972144141e+00 +4.882104396417887848e+00 +4.882100462199992386e+00 +4.882096524332208531e+00 +4.882092582828278182e+00 +4.882088637701931688e+00 +4.882084688966900288e+00 +4.882080736636899232e+00 +4.882076780725640219e+00 +4.882072821246827843e+00 +4.882068858214157814e+00 +4.882064891641319626e+00 +4.882060921541994780e+00 +4.882056947929856783e+00 +4.882052970818576476e+00 +4.882048990221812268e+00 +4.882045006153221678e+00 +4.882041018626448903e+00 +4.882037027655139916e+00 +4.882033033252923815e+00 +4.882029035433432362e+00 +4.882025034210286663e+00 +4.882021029597099826e+00 +4.882017021607485852e+00 +4.882013010255045415e+00 +4.882008995553375641e+00 +4.882004977516068323e+00 +4.882000956156708149e+00 +4.881996931488875369e+00 +4.881992903526144900e+00 +4.881988872282081005e+00 +4.881984837770249719e+00 +4.881980800004205534e+00 +4.881976758997500276e+00 +4.881972714763680443e+00 +4.881968667316284538e+00 +4.881964616668846624e+00 +4.881960562834898099e+00 +4.881956505827962367e+00 +4.881952445661560169e+00 +4.881948382349200699e+00 +4.881944315904394927e+00 +4.881940246340648493e+00 +4.881936173671455492e+00 +4.881932097910310020e+00 +4.881928019070702618e+00 +4.881923937166112282e+00 +4.881919852210020672e+00 +4.881915764215901454e+00 +4.881911673197218526e+00 +4.881907579167438449e+00 +4.881903482140019790e+00 +4.881899382128416676e+00 +4.881895279146075239e+00 +4.881891173206443391e+00 +4.881887064322957492e+00 +4.881882952509053908e+00 +4.881878837778163671e+00 +4.881874720143711599e+00 +4.881870599619116291e+00 +4.881866476217794570e+00 +4.881862349953161484e+00 +4.881858220838616980e+00 +4.881854088887568111e+00 +4.881849954113413048e+00 +4.881845816529541970e+00 +4.881841676149344167e+00 +4.881837532986202710e+00 +4.881833387053498896e+00 +4.881829238364605139e+00 +4.881825086932892965e+00 +4.881820932771728572e+00 +4.881816775894471050e+00 +4.881812616314476827e+00 +4.881808454045099666e+00 +4.881804289099687111e+00 +4.881800121491578714e+00 +4.881795951234117581e+00 +4.881791778340631716e+00 +4.881787602824453565e+00 +4.881783424698910245e+00 +4.881779243977317329e+00 +4.881775060672991273e+00 +4.881770874799243209e+00 +4.881766686369381603e+00 +4.881762495396704260e+00 +4.881758301894509877e+00 +4.881754105876090932e+00 +4.881749907354736351e+00 +4.881745706343729729e+00 +4.881741502856344894e+00 +4.881737296905861889e+00 +3.777337663783349342e+00 +3.776869655467304909e+00 +3.776401124096578243e+00 +3.775932072887454360e+00 +3.775462505049393958e+00 +3.774992423785130224e+00 +3.774521832290727019e+00 +3.774050733755720088e+00 +3.773579131363151262e+00 +3.773107028289703901e+00 +3.772634427705768179e+00 +3.772161332775510800e+00 +3.771687746656992246e+00 +3.771213672502215619e+00 +3.770739113457234559e+00 +3.770264072662214083e+00 +3.769788553251506968e+00 +3.769312558353752340e+00 +3.768836091091920526e+00 +3.768359154583408532e+00 +3.767881751940108437e+00 +3.767403886268466451e+00 +3.766925560669571738e+00 +3.766446778239206594e+00 +3.765967542067929941e+00 +3.765487855241127058e+00 +3.765007720839089966e+00 +3.764527141937068944e+00 +3.764046121605349793e+00 +3.763564662909294256e+00 +3.763082768909416842e+00 +3.762600442661436340e+00 +3.762117687216345097e+00 +3.761634505620448543e+00 +3.761150900915423367e+00 +3.760666876138399228e+00 +3.760182434321968081e+00 +3.759697578494276549e+00 +3.759212311679047680e+00 +3.758726636895657336e+00 +3.758240557159165274e+00 +3.757754075480367106e+00 +3.757267194865839155e+00 +3.756779918318010836e+00 +3.756292248835162884e+00 +3.755804189411520611e+00 +3.755315743037255682e+00 +3.754826912698564279e+00 +3.754337701377683523e+00 +3.753848112052943442e+00 +3.753358147698812264e+00 +3.752867811285918176e+00 +3.752377105781105282e+00 +3.751886034147466464e+00 +3.751394599344366032e+00 +3.750902804327497897e+00 +3.750410652048902893e+00 +3.749918145457018959e+00 +3.749425287496687353e+00 +3.748932081109218828e+00 +3.748438529232406502e+00 +3.747944634800552954e+00 +3.747450400744509302e+00 +3.746955829991707621e+00 +3.746460925466176928e+00 +3.745965690088580935e+00 +3.745470126776253128e+00 +3.744974238443190107e+00 +3.744478028000121306e+00 +3.743981498354505888e+00 +3.743484652410563385e+00 +3.742987493069296789e+00 +3.742490023228520535e+00 +3.741992245782880921e+00 +3.741494163623872549e+00 +3.740995779639864516e+00 +3.740497096716118186e+00 +3.739998117734812944e+00 +3.739498845575063068e+00 +3.738999283112922178e+00 +3.738499433221429413e+00 +3.737999298770600998e+00 +3.737498882627457331e+00 +3.736998187656041637e+00 +3.736497216717433290e+00 +3.735995972669767351e+00 +3.735494458368227022e+00 +3.734992676665101818e+00 +3.734490630409747602e+00 +3.733988322448643871e+00 +3.733485755625378211e+00 +3.732982932780684493e+00 +3.732479856752416669e+00 +3.731976530375598955e+00 +3.731472956482407621e+00 +3.730969137902200305e+00 +3.730465077461508905e+00 +3.729960777984066667e+00 +3.729456242290796197e+00 +3.728951473199832112e+00 +3.728446473526529914e+00 +3.727941246083462001e+00 +3.727435793680428322e+00 +3.726930119124468366e+00 +3.726424225219861608e+00 +3.725918114768135059e+00 +3.725411790568061932e+00 +3.724905255415676297e+00 +3.724398512104277970e+00 +3.723891563424416962e+00 +3.723384412163922796e+00 +3.722877061107886298e+00 +3.722369513038676914e+00 +3.721861770735934272e+00 +3.721353836976577512e+00 +3.720845714534805282e+00 +3.720337406182092188e+00 +3.719828914687193233e+00 +3.719320242816138045e+00 +3.718811393332250415e+00 +3.718302368996122542e+00 +3.717793172565618587e+00 +3.717283806795905754e+00 +3.716774274439400116e+00 +3.716264578245807915e+00 +3.715754720962105129e+00 +3.715244705332540587e+00 +3.714734534098622643e+00 +3.714224209999133386e+00 +3.713713735770113100e+00 +3.713203114144856709e+00 +3.712692347853920882e+00 +3.712181439625108048e+00 +3.711670392183464173e+00 +3.711159208251287644e+00 +3.710647890548092409e+00 +3.710136441790643058e+00 +3.709624864692922852e+00 +3.709113161966129724e+00 +3.708601336318681607e+00 +3.708089390456200007e+00 +3.707577327081513552e+00 +3.707065148894639783e+00 +3.706552858592779387e+00 +3.706040458870324628e+00 +3.705527952418829596e+00 +3.705015341927019090e+00 +3.704502630080772629e+00 +3.703989819563118235e+00 +3.703476913054225772e+00 +3.702963913231394955e+00 +3.702450822769053129e+00 +3.701937644338735289e+00 +3.701424380609087184e+00 +3.700911034245845332e+00 +3.700397607911831699e+00 +3.699884104266953244e+00 +3.699370525968170398e+00 +3.698856875669506383e+00 +3.698343156022036116e+00 +3.697829369673851119e+00 +3.697315519270088835e+00 +3.696801607452886884e+00 +3.696287636861389281e+00 +3.695773610131723785e+00 +3.695259529897016115e+00 +3.694745398787341539e+00 +3.694231219429741309e+00 +3.693716994448200008e+00 +3.693202726463633567e+00 +3.692688418093878155e+00 +3.692174071953678194e+00 +3.691659690654677028e+00 +3.691145276805398723e+00 +3.690630833011240508e+00 +3.690116361874448359e+00 +3.689601865994119656e+00 +3.689087347966186758e+00 +3.688572810383394351e+00 +3.688058255835293231e+00 +3.687543686908226537e+00 +3.687029106185311988e+00 +3.686514516246433448e+00 +3.685999919668224933e+00 +3.685485319024056849e+00 +3.684970716884019559e+00 +3.684456115814914501e+00 +3.683941518380230651e+00 +3.683426927140145857e+00 +3.682912344651491754e+00 +3.682397773467754654e+00 +3.681883216139058668e+00 +3.681368675212143060e+00 +3.680854153230357362e+00 +3.680339652733639166e+00 +3.679825176258501251e+00 +3.679310726338020920e+00 +3.678796305501817354e+00 +3.678281916276036068e+00 +3.677767561183341360e+00 diff --git a/humanc/cardiac_pm.py b/humanc/cardiac_pm.py new file mode 100644 index 0000000..49ec96f --- /dev/null +++ b/humanc/cardiac_pm.py @@ -0,0 +1,34 @@ +import numpy as np +import pulsatile_model_functions as pmf +import healthy_params as K +import concore + +#x0 = np.loadtxt('pulsatile_steady.txt') + +rx0 = np.concatenate((np.zeros(4),np.array([-0.25, 1, -0.25, 1]),np.zeros(20),np.array([K.theta0[8],K.Vulv,K.Vurv]))) +dx0 = pmf.generate_historylist() +x0 = np.concatenate((rx0,dx0)) + + +def cardiac_pm(x0,u): + hr, mapp, x0 = pmf.healthy_pm(x0, u) + + return hr,mapp,x0 + +concore.default_maxtime(150) +concore.delay = 0.02 +init_simtime_u = "[0.0, 0.0,0.0]" +init_simtime_ym = "[0.0, 70,0]" +ym = np.array([concore.initval(init_simtime_ym)]).T +while(concore.simtime + + + + + + + + + + + PZ:cardiac_pm.py + + + + + + + + + + + CZ:bangbang.py + + + + + + + + + + + XZ:plotym.py + + + + + + + + + + PYM + + + + + + + + + + + + CU + + + + + + + + + + + + XYM + + + + + + + + 1644943336906 + sanmi + + DEL_NODE + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiXQ== + + + ADD_NODE + WyJQWjpjYXJkaWFjX3BtLnB5Iix7IndpZHRoIjoxNDgsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjQ1LCJ5Ijo4NX0se30sIjU1MDg2NWQxLTI4YTMtNDBhOS05ZTI1LWQzYjY4YWQyNzdkNiJd + + + + 1644943355554 + sanmi + + DEL_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiXQ== + + + ADD_NODE + WyJDWjpkdW1teV9jb250cm9sbGVyLnB5Iix7IndpZHRoIjoxOTMsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjUyLCJ5IjoyNjR9LHt9LCIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiXQ== + + + + 1644943358106 + sanmi + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MTM0LCJ5IjoyNjZ9XQ== + + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTM0LCJ5IjoyNjZ9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1644943359494 + sanmi + + SET_POS + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MjQ1LCJ5Ijo4NX1d + + + SET_POS + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLHsieCI6MjQ1LCJ5Ijo4NX0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1644943362210 + sanmi + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTM0LCJ5IjoyNjZ9LHsieCI6MjUyLCJ5IjoyNjR9XQ== + + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MjUyLCJ5IjoyNjR9LHsieCI6MTM0LCJ5IjoyNjZ9XQ== + + + + 1644943375398 + sanmi + + DEL_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiXQ== + + + ADD_NODE + WyJYWjpwbG90eW0iLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4Ijo1MDcsInkiOjE2MH0se30sIjRiODYwYWFlLTA1YzktNGViNS1iYzQ4LWY4MDAwY2NiNDJhOCJd + + + + 1644943378630 + sanmi + + SET_POS + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NTA3LCJ5IjoxNjB9XQ== + + + SET_POS + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsieCI6NTA3LCJ5IjoxNjB9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1644943386853 + sanmi + + DEL_EDGE + WyI0NzcwODQwZi04OGEwLTQ3NTItOWMxOS0yZTdmODlmOGZhNzkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLCJ0YXJnZXRJRCI6IjRiODYwYWFlLTA1YzktNGViNS1iYzQ4LWY4MDAwY2NiNDJhOCIsImxhYmVsIjoiUFlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjN2M0ZGZmIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjQ3NzA4NDBmLTg4YTAtNDc1Mi05YzE5LTJlN2Y4OWY4ZmE3OSJ9XQ== + + + + 1644943394719 + sanmi + + DEL_EDGE + WyI3ZjJiMWM0Yy04ZjJmLTQyZjQtYjU1Yy0xY2RlNzdiMWU4NTIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLCJ0YXJnZXRJRCI6IjU1MDg2NWQxLTI4YTMtNDBhOS05ZTI1LWQzYjY4YWQyNzdkNiIsImxhYmVsIjoiQ1UiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiN2YyYjFjNGMtOGYyZi00MmY0LWI1NWMtMWNkZTc3YjFlODUyIn1d + + + + 1644943403841 + sanmi + + DEL_EDGE + WyIyZDdlZjk4ZS04Y2E5LTRhZjMtYWQxOS1hYzM0MTQ2ZmZlYmYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLCJ0YXJnZXRJRCI6IjM2YjlmMWRmLTdjODQtNGYwNy04ZmNlLWM0YTZmNjQ2MjkzMSIsImxhYmVsIjoiWFlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjMTU2NWMwIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjJkN2VmOThlLThjYTktNGFmMy1hZDE5LWFjMzQxNDZmZmViZiJ9XQ== + + + + 1644943683422 + sanmi + + UPDATE_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJYWjpwbG90eW0iLHRydWVd + + + UPDATE_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsid2lkdGgiOjExNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJYWjpwbG90eW0ucHkiLHRydWVd + + + + 1662144313252 + sanmi + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpkdW1teV9jb250cm9sbGVyLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nbmJhbmcucHkiLHRydWVd + + + + 1662144436617 + sanmi + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nbmJhbmcucHkiLHRydWVd + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nYmFuZy5weSIsdHJ1ZV0= + + + + \ No newline at end of file diff --git a/humanc/plotym.py b/humanc/plotym.py new file mode 100644 index 0000000..648e401 --- /dev/null +++ b/humanc/plotym.py @@ -0,0 +1,38 @@ +import concore +import numpy as np +import matplotlib.pyplot as plt +import time +print("plotym") + +concore.delay = 0.02 +concore.default_maxtime(150) +init_simtime_u = "[0.0, 0.0, 0.0]" +init_simtime_ym = "[0, 103, 0]" +ymt = [] + +ym = concore.initval(init_simtime_ym) +while(concore.simtime Date: Wed, 7 Sep 2022 14:04:45 -0400 Subject: [PATCH 069/113] hcm_bang to play with --- tools/bangbang.py | 30 + tools/cardiac_pm.dir/healthy_params.py | 149 + .../pulsatile_model_functions.py | 581 ++ tools/cardiac_pm.dir/pulsatile_steady.txt | 6431 +++++++++++++++++ tools/cardiac_pm.py | 34 + tools/hcm_bang.graphml | 232 + 6 files changed, 7457 insertions(+) create mode 100644 tools/bangbang.py create mode 100644 tools/cardiac_pm.dir/healthy_params.py create mode 100644 tools/cardiac_pm.dir/pulsatile_model_functions.py create mode 100644 tools/cardiac_pm.dir/pulsatile_steady.txt create mode 100644 tools/cardiac_pm.py create mode 100644 tools/hcm_bang.graphml diff --git a/tools/bangbang.py b/tools/bangbang.py new file mode 100644 index 0000000..9fcc811 --- /dev/null +++ b/tools/bangbang.py @@ -0,0 +1,30 @@ +import numpy as np +import concore + + +def bangbang_controller(ym): + amp = 0 + if ym[0]>70: + amp = 3 + elif ym[0]<65: + amp = 1 + + + ustar = np.array([amp,30]) + return ustar + + +concore.default_maxtime(150) +concore.delay = 0.02 +init_simtime_u = "[0.0, 0.0,0.0]" +init_simtime_ym = "[0.0, 70.0,91]" +u = np.array([concore.initval(init_simtime_u)]).T +while(concore.simtimefesmin: + output = Gs*np.log(fhist-fesmin+1) + else: + output = 0 + return output + + + + +def generate_historylist(dt = 0.001, ds = K.ds, dv = K.dv): + """ + + Parameters + ---------- + + dt : sampling time + + ds : TYPE, optional + time delay in sympathetic branch. + dv : time delay in parasympathtic branch + + Returns + ------- + Five lists (histories) of firing rates in the sympathetic (3) and vagal (2) + pathways + """ + + sym1 = [20]*int(ds[0]/dt) + sym2 = [3]*int(ds[1]/dt) + sym3 = [3]*int(ds[2]/dt) + + fpara1 = [10]*int(dv/dt) + fpara2 = [10]*int(dv/dt) + return np.array(sym1 + sym2 + sym3 + fpara1 + fpara2) + +def update_historylist(fsym1,fsym2,fsym3, fpara1, fpara2,hs1,hs2,hs3,hp1, hp2): + """ + Updates lists(h) of past firing rates. Discards the earliest and appends the latest. + + Parameters + ---------- + """ + hs1.append(fsym1) + hs1.pop(0) + + hs2.append(fsym2) + hs2.pop(0) + + hs3.append(fsym3) + hs3.pop(0) + + hp1.append(fpara1) + hp1.pop(0) + + hp2.append(fpara2) + hp2.pop(0) + + return(hs1,hs2,hs3,hp1,hp2) + +def split_states(x): + """ + Splits states of the cardiac model into real states and firing histories + + Parameters + ---------- + + """ + real_state = x[0:31] + hs1 = list(x[31:2031]) + hs2 = list(x[2031:4031]) + hs3 = list(x[4031:6031]) + hp1 = list(x[6031:6231]) + hp2 = list(x[6231:6431]) + + return real_state, hs1,hs2,hs3,hp1,hp2 + + +def stimulation(fphys, amplitude, fstim,j): + """ + Describes the effect of VNS stimulation (amplitude and frequency) on + physiological firing rate + + Parameters + ---------- + fphys : physiological firing rate + + amplitude : VNS amplitude + + fstim : VNS frequency + + j : 0 : afferent, 1: efferent + + Returns + ------- + new_freq : effective firing rate after stimulation + + """ + #amplitude_effect + xmid = np.array([0.3, 1.7]) + k = np.array([0.06, 0.35]) + ymin = 0 + ymax = 1 + R = gen_sigmoid(amplitude, xmid[j], ymin, ymax,k[j]) + + #frequency effect + alpha = 1 - (fphys+fstim)/60 + + new_freq = (1-R)*fphys + R*alpha*(fphys + fstim) + return new_freq + + + + +def hcm_pulsatile_dde(x,ustar, hs1,hs2,hs3, hp1,hp2): + """ + + Parameters + ---------- + x : current states (31) + ustar : 2 by 0 array (amplitude and frequency) + hs1...hp2: delayed sympathetic and parasympathetic firing rates + + Returns + ------- + new firing rates (to be stored) + derivatives of the ODEs + """ + + + + u,zeta,dTs, dTv,dEls, dElv, dErs, dErv, dRsp, dRep, dRmp, dVusv,dVuev,\ + dVumv,Ppa,Fpa,Ppp,Ppv,Psa,Fsa,Psp,Pev,Ptv,Pla,Pra,\ + Ptilde,Pl, flr, Vmv,Vlv, Vrv = x + + T = dTs + dTv + K.theta0[0] + Emaxlv = K.theta0[1] + 1/(dEls + dElv) + Emaxrv = K.theta0[2] + 1/(dErs + dErv) + + Rsp = dRsp + K.theta0[3] + Rep = dRep + K.theta0[4] + Rmp = dRmp + K.theta0[5] + + Vusv = dVusv + K.theta0[6] + Vuev = dVuev + K.theta0[7] + Vumv = dVumv + K.theta0[8] + + Rlb = 1/((1/Rmp) + (1/K.Rd)) + + Pthor = thoracic_pressure(zeta) + vlung = K.vlung0-0.1*Pthor + Pabd = abd_pressure(zeta) + Psp_trans = Psp + phi = phi_function(u,T) + + + #left heart + Pmaxlv = phi*Emaxlv*(Vlv-K.Vulv) + (1-phi)*K.Polv*(np.exp(K.Kelv*Vlv)-1) + Rlv = K.KRlv*Pmaxlv + Qol = flow_function(Pmaxlv,Psa,Rlv) + Plv = Pmaxlv - Rlv*Qol + Qil = flow_function(Pla, Plv,K.Rla) + + #right heart + Pmaxrv = phi*Emaxrv*(Vrv-K.Vurv) + (1-phi)*K.Porv*(np.exp(K.Kerv*Vrv)-1) + Rrv = K.KRrv*Pmaxrv + Qor = flow_function(Pmaxrv,Ppa,Rrv) + Prv = Pmaxrv - Rrv*Qor + Qir = flow_function(Pra,Prv,K.Rra) + + Vu = K.Vusa + K.Vusp + K.Vump + K.Vuep + Vusv + Vuev + Vumv + K.Vutv + \ + K.Vura + K.Vupa + K.Vupp + K.Vupv + K.Vula + if Vmv >= Vumv: + + Pmv = ( 1/K.Cmv)*(Vmv-Vumv) + else: + Pmv = K.P0 *(1- (Vmv/Vumv)**(-1.5)) + + Psv = (1/K.Csv)*(K.Vt - K.Csa*Psa - (K.Csp + K.Cep + K.Cmp)*Psp -\ + K.Cev*Pev - K.Cmv*Pmv - K.Ctv*Ptv -K.Cra*Pra -\ + K.Cpa*Ppa - K.Cpp*Ppp -K.Cpv*Ppv - K.Cla*Pla - Vu-Vlv-Vrv) + + if Pmv-Ptv>0: + Vom = (Pmv-Ptv)/K.Rmv + else: + Vom = 0 + + sigmas = np.zeros(9) + for j in range(3): + sigmas[j] = calc_sigma(K.Gs[j],hs1,K.fesmin) + + + dTsdt = (sigmas[0] - dTs)/K.taus[0] + dElsdt = (sigmas[1] - dEls)/K.taus[1] + dErsdt = (sigmas[2] - dErs)/K.taus[2] + + for j in range(3,6): + sigmas[j] = calc_sigma(K.Gs[j],hs2,K.fesmin) + + dRspdt = (sigmas[3] - dRsp)/K.taus[3] + dRepdt = (sigmas[4] - dRep)/K.taus[4] + dRmpdt = (sigmas[5] - dRmp)/K.taus[5] + + for j in range(6,9): + sigmas[j] = calc_sigma(K.Gs[j],hs3,K.fesmin) + dVusvdt = (sigmas[6] - dVusv)/K.taus[6] + dVuevdt = (sigmas[7] - dVuev)/K.taus[7] + dVumvdt = (sigmas[8] - dVumv)/K.taus[8] + + dudt = 1/T + dzetadt = 1/K.Tresp + Ppadt = (1/K.Cpa)*(Qor - Fpa) + Fpadt = (1/K.Lpa)*(Ppa-Ppp - K.Rpa*Fpa) + Pppdt = (1/K.Cpp)*(Fpa - (Ppp - Ppv)/K.Rpp) + Ppvdt = (1/K.Cpv)*((Ppp-Ppv)/K.Rpp -(Ppv - Pla)/K.Rpv) + Psadt = (1/K.Csa)*(Qol - Fsa) + Fsadt = (1/K.Lsa) * (Psa - Psp - K.Rsa*Fsa) + Pspdt = 1/(K.Csp + K.Cep + K.Cmp)*(Fsa - (Psp_trans - (Psv-Pabd))/Rsp - (Psp_trans-Pev)/Rep - (Psp-Pmv)/Rlb) + Pevdt = (1/K.Cev) * ((Psp_trans-Pev)/Rep - (Pev-Ptv)/K.Rev - dVuevdt) + Vmvdt = (Psp_trans-Pmv)/Rlb - Vom + Ptvdt = (1/K.Ctv)*(Vom + (Pev-Ptv)/K.Rev + (Psv-Pabd-Ptv)/K.Rsv - (Ptv-Pra)/K.Rtv) + Pladt = (1/K.Cla)*((Ppv-Pla)/K.Rpv- Qil) + Pradt = (1/K.Cra)* ((Ptv-Pra)/K.Rtv - Qir) + Vlvdt = Qil-Qol + Vrvdt = Qir-Qor + Ptildedt = (1/K.taup)*(Psa + K.tauz*Psadt - Ptilde) + Pldt = (1/K.taucp)*(-Pl + Ppv-Pthor) + flrdt =(1/K.taulung)*(-flr + K.Gal*vlung) + + + #Autonomic regulation + + #sympathetic branch + fbr = gen_sigmoid(Ptilde, K.Pn, K.fbrmin, K.fbrmax,K.ka) + + #Afferent VNS + nfbr = stimulation(fbr , ustar[0],ustar[1],0) + fcpr = cpr(Pl) + + afferent = np.array([nfbr,fcpr,flr]) + f = np.matmul(K.G,afferent) + f[1] -=25 + f_effectors = sympathetic_outflow(f) + + + #parasympathetic branch + frv = np.zeros_like(afferent) + + for i in range(3): + frv[i] = gen_sigmoid(afferent[i],K.midpt[i],K.fmin[i],K.fmax[i],K.k[i]) + + finput = np.matmul(K.kreceptor,frv) + foNa = gen_sigmoid(finput[0],K.foutmidpt[0],K.foutmin[0], K.foutmax[0],K.foutk[0]) + nfoNa= stimulation(foNa , ustar[0], ustar[1],1) + + fDMV = gen_sigmoid(finput[1],K.foutmidpt[1],K.foutmin[1], K.foutmax[1],K.foutk[1]) + fDMV_NActr = fDMV + gen_sigmoid(nfoNa,K.foutmidpt[2],K.foutmin[2], K.foutmax[2],K.foutk[2]) + + + sigmav = np.zeros(3) + sigmav[0] = K.Gv[0] * hp1 + dTvdt = (sigmav[0] - dTv)/K.tauv[0] + + sigmav[1] = K.Gv[1]*hp2 + dElvdt = (sigmav[1] - dElv)/K.tauv[1] + + + sigmav[2] = K.Gv[2]*hp2 + dErvdt = (sigmav[2] - dErv)/K.tauv[2] + + return (f_effectors[0],f_effectors[1],f_effectors[2],nfoNa,fDMV_NActr,\ + np.array((dudt, dzetadt,dTsdt, dTvdt, dElsdt,dElvdt,dErsdt,dErvdt,\ + dRspdt,dRepdt,dRmpdt,dVusvdt,dVuevdt,dVumvdt,Ppadt,Fpadt, \ + Pppdt, Ppvdt, Psadt, Fsadt, Pspdt,Pevdt, Ptvdt, \ + Pladt, Pradt, Ptildedt,Pldt, flrdt,Vmvdt,Vlvdt, Vrvdt))) + + + +def solve_hcm_pulsatile_dde(x,ustar,dt,hs1,hs2,hs3, hp1,hp2): + """ + Solves the ODE system with the Euler method + + Parameters + ---------- + x : current state, array of size 31 + ustar : VNS stimulation (amplitude and frequency) + dt : sampling time + hs1..hp2 : real, Delayed effector firing rates (sympathetic(s) and vagal(p)) + + + + Returns + ------- + fsym1..fpara2 : New firing rates (to be stored) + new system states + + """ + fsym1,fsym2,fsym3, fpara1,fpara2,k1 = hcm_pulsatile_dde(x,ustar,hs1,hs2,hs3, hp1,hp2) + + return (fsym1,fsym2,fsym3 ,fpara1,fpara2, x + dt*k1) + + +def solve_hcm_pulsatile_dde_rk4(x,ustar,dt,hs1,hs2,hs3, hp1,hp2): + """ + Solves the system of ODEs with the RK4 method + Returns new firing rates and new system state + """ + + fsym1,fsym2,fsym3, fpara1,fpara2,k1 = hcm_pulsatile_dde(x,ustar,hs1,hs2,hs3, hp1,hp2) + a1,a2,a3,a4,a5,k2 = hcm_pulsatile_dde(x + 0.5*dt*k1,ustar,hs1,hs2,hs3, hp1,hp2) + a1,a2,a3,a4,a5,k3 = hcm_pulsatile_dde(x + 0.5*dt*k2,ustar,hs1,hs2,hs3, hp1,hp2) + a1,a2,a3,a4,a5,k4 = hcm_pulsatile_dde(x + dt*k3,ustar,hs1,hs2,hs3, hp1,hp2) + return (fsym1,fsym2,fsym3 ,fpara1,fpara2, x + (1/6)*dt*(k1+k2+2*k3 + k4)) + + +def execute_pm(giantX, ustar): + dt = 0.001 + max_time = 2 #arbitrarily large heart period (a cycle is unlikely to last 2 seconds) + nx = 31 # number of system states + x = np.inf * np.ones((nx,int((max_time/dt)+1))) + x0, hs1,hs2,hs3,hp1,hp2 = split_states(giantX) + x[:,0] = x0 + + cycle_pressure = [] #holds arterial pressure values within a cycle + + k = 0 + flag = True + while flag: + + fsym1,fsym2,fsym3, fpara1,fpara2, x[:,k+1] = solve_hcm_pulsatile_dde(x[:,k],ustar, dt, hs1[0],hs2[0],hs3[0],hp1[0],hp2[0]) + cycle_pressure.append(x[18,k+1]) #store instantaneous arterial pressure + + if x[0,k+1]>=1: # check for end of cycle + # ncycle +=1 + # print(ncycle) + + mapp = (max(cycle_pressure) + 2*min(cycle_pressure))/3 #MAP calculation + + hr = 60/ ((k+1)*dt) #hr calculation + + x[0,k+1] = 0 #reset cycle counter + + flag = False + + if x[1,k+1]>=1: #respiratory cycle refresh + x[1,k+1] = 0 + + hs1,hs2,hs3,hp1,hp2 = update_historylist(fsym1,fsym2, fsym3,fpara1,fpara2,hs1,hs2, hs3,hp1,hp2) + giantX = np.concatenate((x[:,k+1], np.array(hs1 + hs2 + hs3 + hp1 + hp2))) + k +=1 + + + return hr,mapp, giantX + + + + + + + +def healthy_pm(giantX,ustar): + """ + Determines hr and mean arterial pressure + Parameters + ---------- + giantX : array, current state of the system (including firing histories) + ustar : VNS stimulation, array (2 by 1), amplitude and frequency) + + Returns + ------- + hr: Heart rate at the end of a cycle + mapp: mean arterial pressure (mmHg) over the cycle + + """ + hr,mapp,giantX = execute_pm(giantX, ustar) + return hr,mapp,giantX + \ No newline at end of file diff --git a/tools/cardiac_pm.dir/pulsatile_steady.txt b/tools/cardiac_pm.dir/pulsatile_steady.txt new file mode 100644 index 0000000..4f04260 --- /dev/null +++ b/tools/cardiac_pm.dir/pulsatile_steady.txt @@ -0,0 +1,6431 @@ +0.000000000000000000e+00 +7.014999999999504965e-01 +-1.601342888573151213e-01 +4.643347422005690284e-01 +-1.601342888596068714e-01 +7.642692091356693140e-01 +-2.709964888377479064e-01 +1.293665441798906857e+00 +8.247914556504674088e-01 +7.749479432226668019e-01 +3.334768331478856318e+00 +-3.784928950220016191e+02 +-1.533081620756027519e+02 +-3.859236241416323310e+01 +1.127327192765920572e+01 +4.644948920886543320e+00 +1.116801874304220910e+01 +7.261184318479795508e+00 +7.872471751171636356e+01 +5.173207151737411635e+00 +7.841463862768100057e+01 +6.016034145863096150e+00 +5.086935244389792388e+00 +7.109477070522475017e+00 +4.875733681130332897e+00 +5.872876907522622503e+01 +1.362514976726293803e+01 +1.463986063910249058e+01 +2.910450115771103583e+02 +1.246021885431882339e+02 +1.310891471639402823e+02 +7.250939153329296616e+00 +7.259689035977567428e+00 +7.268420194415691427e+00 +7.277132592104228692e+00 +7.285826193376571780e+00 +7.294500963316236763e+00 +7.303156867666510621e+00 +7.311793872765653290e+00 +7.320411945502101503e+00 +7.329011053285288568e+00 +7.337591164028518520e+00 +7.346152246140949416e+00 +7.354694268526481338e+00 +7.363217200587639510e+00 +7.371721012233079406e+00 +7.380205673887507700e+00 +7.388671156503182402e+00 +7.397117431572270974e+00 +7.405544471139569040e+00 +7.413952247815126739e+00 +7.422340734786562422e+00 +7.430709905830793716e+00 +7.439059735325052714e+00 +7.447390198257108906e+00 +7.455701270234600386e+00 +7.463992927493483975e+00 +7.472265146905590072e+00 +7.480517905985268001e+00 +7.488751182895180492e+00 +7.496964956451263262e+00 +7.505159206126908344e+00 +7.513333912056353370e+00 +7.521489055037438476e+00 +7.529624616533634907e+00 +7.537740578675524716e+00 +7.545836924261660528e+00 +7.553913636758949224e+00 +7.561970700302531156e+00 +7.570008099695209935e+00 +7.578025820406498525e+00 +7.586023848571285200e+00 +7.594002170988154887e+00 +7.601960775117424518e+00 +7.609899649078867512e+00 +7.617818781649209114e+00 +7.625718162259389032e+00 +7.633597780991596693e+00 +7.641457628576128869e+00 +7.649297696388094536e+00 +7.657117976443926111e+00 +7.664918461397778771e+00 +7.672699144537816096e+00 +7.680460019782330505e+00 +7.688201081675828163e+00 +7.695922325384975338e+00 +7.703623746694482577e+00 +7.711305342002905405e+00 +7.718967108318404158e+00 +7.726609043254402565e+00 +7.734231145025246335e+00 +7.741833412441764040e+00 +7.749415844906838657e+00 +7.756978442410895624e+00 +7.764521205527390890e+00 +7.772044135408265220e+00 +7.779547233779373627e+00 +7.787030502935875731e+00 +7.794493945737643870e+00 +7.801937565604628588e+00 +7.809361366512227676e+00 +7.816765352986640991e+00 +7.824149530100200423e+00 +7.831513903466726489e+00 +7.838858479236858301e+00 +7.846183264093385290e+00 +7.853488265246577171e+00 +7.860773490429521004e+00 +7.868038947893451152e+00 +7.875284646403086342e+00 +7.882510595231979167e+00 +7.889716804157837160e+00 +7.896903283457906042e+00 +7.904070043904301457e+00 +7.911217096759388667e+00 +7.918344453771144487e+00 +7.925452127168551186e+00 +7.932540129656976191e+00 +7.939608474413587302e+00 +7.946657175082753710e+00 +7.953686245771462993e+00 +7.960695701044778971e+00 +7.967685555921271146e+00 +7.974655825868481429e+00 +7.981606526798392665e+00 +7.988537675062923782e+00 +7.995449287449416076e+00 +8.002341381176169222e+00 +8.009213973887954197e+00 +8.016067083651556402e+00 +8.022900728951354310e+00 +8.029714928684880348e+00 +8.036509702158413759e+00 +8.043285069082587668e+00 +8.050041049568024576e+00 +8.056777664120968296e+00 +8.063494933638940765e+00 +8.070192879406432596e+00 +8.076871523090568772e+00 +8.083530886736856047e+00 +8.090170992764877056e+00 +8.096791863964073244e+00 +8.103393523489478056e+00 +8.109975994857515857e+00 +8.116539301941818607e+00 +8.123083468969023002e+00 +8.129608520514629788e+00 +8.136114481498866624e+00 +8.142601377182556277e+00 +8.149069233163029224e+00 +8.155518075370041586e+00 +8.161947930061703715e+00 +8.168358823820460302e+00 +8.174750783549070476e+00 +8.181123836466586141e+00 +8.187478010104401349e+00 +8.193813332302278596e+00 +8.200129831204430175e+00 +8.206427535255574668e+00 +8.212706473197078694e+00 +8.218966674063054256e+00 +8.225208167176527141e+00 +8.231430982145596431e+00 +8.237635148859624223e+00 +8.243820697485460869e+00 +8.249987658463668438e+00 +8.256136062504790374e+00 +8.262265940585610480e+00 +8.268377323945466983e+00 +8.274470244082575476e+00 +8.280544732750371395e+00 +8.286600821953873819e+00 +8.292638543946067031e+00 +8.298657931224335371e+00 +8.304659016526873216e+00 +8.310641832829150033e+00 +8.316606413340389636e+00 +8.322552791500058333e+00 +8.328481000974413462e+00 +8.334391075653019954e+00 +8.340283049645337954e+00 +8.346156957277303334e+00 +8.352012833087943733e+00 +8.357850711826019463e+00 +8.363670628446664423e+00 +8.369472618108092732e+00 +8.375256716168280491e+00 +8.381022958181702620e+00 +8.386771379896075018e+00 +8.392502017249135804e+00 +8.398214906365426557e+00 +8.403910083553123300e+00 +8.409587585300862145e+00 +8.415247448274612907e+00 +8.420889709314556271e+00 +8.426514405431987598e+00 +8.432121573806265147e+00 +8.437711251781745858e+00 +8.443283476864756665e+00 +8.448838286720611990e+00 +8.454375719170615255e+00 +8.459895812189117237e+00 +8.465398603900560204e+00 +8.470884132576593117e+00 +8.476352436633154852e+00 +8.481803554627628472e+00 +8.487237525255979520e+00 +8.492654387349944045e+00 +8.498054179874227287e+00 +8.503436941923716574e+00 +8.508802712720733297e+00 +8.514151531612299095e+00 +8.519483438067414482e+00 +8.524798471674388978e+00 +8.530096672138146374e+00 +8.535378079277601060e+00 +8.540642733023023681e+00 +8.545890673413438776e+00 +8.551121940594050841e+00 +8.556336574813673934e+00 +8.561534616422211030e+00 +8.566716105868122710e+00 +8.571881083695940262e+00 +8.577029590543791215e+00 +8.582161667140949746e+00 +8.587277354305411947e+00 +8.592376692941474658e+00 +8.597459724037358697e+00 +8.602526488662833870e+00 +8.607577027966883065e+00 +8.612611383175368118e+00 +8.617629595588745417e+00 +8.622631706579756639e+00 +8.627617757591195868e+00 +8.632587790133658956e+00 +8.637541845783323069e+00 +8.642479966179754669e+00 +8.647402193023726369e+00 +8.652308568075058659e+00 +8.657199133150491832e+00 +8.662073930121557908e+00 +8.666933000912491636e+00 +8.671776387498139727e+00 +8.676604131901926920e+00 +8.681416276193784753e+00 +8.686212862488158493e+00 +8.690993932942005173e+00 +8.695759529752796979e+00 +8.700509695156579681e+00 +8.705244471426022201e+00 +8.709963900868494591e+00 +8.714668025824154896e+00 +8.719356888664098193e+00 +8.724030531788443454e+00 +8.728688997624530543e+00 +8.733332328625058594e+00 +8.737960567266297218e+00 +8.742573756046287059e+00 +8.747171937483077642e+00 +8.751755154112954571e+00 +8.756323448488711136e+00 +8.760876863177944784e+00 +8.765415440761337607e+00 +8.769939223830979458e+00 +8.774448254988708840e+00 +8.778942576844466217e+00 +8.783422232014657993e+00 +8.787887263120552461e+00 +8.792337712786684634e+00 +8.796773623639277062e+00 +8.801195038304674867e+00 +8.805601999407821623e+00 +8.809994549570719258e+00 +8.814372731410918149e+00 +8.818736587540037419e+00 +8.823086160562281677e+00 +8.827421493072982628e+00 +8.831742627080174657e+00 +8.836049604589897299e+00 +8.840342467604695997e+00 +8.844621258122055352e+00 +8.848886018132878561e+00 +8.853136789619981073e+00 +8.857373614556603769e+00 +8.861596534904913725e+00 +8.865805592614567132e+00 +8.870000829621247362e+00 +8.874182287845254535e+00 +8.878350009190082659e+00 +8.882504035541041176e+00 +8.886644408763880065e+00 +8.890771170703430926e+00 +8.894884363182285369e+00 +8.898984027999466306e+00 +8.903070206929131203e+00 +8.907142941719293106e+00 +8.911202274090548769e+00 +8.915248245734845867e+00 +8.919280898314232431e+00 +8.923300273454998432e+00 +8.927306412738422736e+00 +8.931299357689251650e+00 +8.935279149762786588e+00 +8.939245830331250531e+00 +8.943199440669967970e+00 +8.947140021943756238e+00 +8.951067615193858629e+00 +8.954982261325621806e+00 +8.958884001097077387e+00 +8.962772875108559134e+00 +8.966648923793410830e+00 +8.970512187409820370e+00 +8.974362706033748083e+00 +8.978200519553020342e+00 +8.982025667662453472e+00 +8.985838189860052339e+00 +8.989638125444150418e+00 +8.993425513511514424e+00 +8.997200392956269610e+00 +9.000962802469622659e+00 +9.004712780540293338e+00 +9.008450365455633602e+00 +9.012175595303265396e+00 +9.008038334915134726e+00 +8.931696772293134856e+00 +8.784508758300855646e+00 +8.560108087508345065e+00 +8.248349991456535690e+00 +7.839715445646559644e+00 +7.331121685166317903e+00 +6.732618034998433032e+00 +6.072299228281465844e+00 +5.395198747693561003e+00 +4.753578442651136271e+00 +4.191810846634137278e+00 +3.734331393059610704e+00 +3.383386610245798565e+00 +3.125638222289830015e+00 +2.941402043775770192e+00 +2.811431207104733598e+00 +2.720005973460271953e+00 +2.655456348110695419e+00 +2.609544854214843834e+00 +2.576592635526757658e+00 +2.552714114625852737e+00 +2.535246113228510012e+00 +2.522351076345138665e+00 +2.512749684408943640e+00 +2.505542514848249525e+00 +2.500091019389444558e+00 +2.495937580002476341e+00 +2.492751321871450099e+00 +2.490291011416004618e+00 +2.488379391971249355e+00 +2.486885255756901447e+00 +2.485710803458892837e+00 +2.484782654392075241e+00 +2.484045401096613759e+00 +2.483456953188573735e+00 +2.482985149848622175e+00 +2.482605278762626710e+00 +2.482298247408365022e+00 +2.482049227004524461e+00 +2.481846641128682140e+00 +2.481681407202593448e+00 +2.481546364573215868e+00 +2.481435841053656777e+00 +2.481345322756181027e+00 +2.481271201379984692e+00 +2.481210579869512323e+00 +2.481161122274305075e+00 +2.481120937238173507e+00 +2.481088487191191128e+00 +2.481062517273851409e+00 +2.481041999475546156e+00 +2.481026088553770048e+00 +2.481014087113295741e+00 +2.481005417836606775e+00 +2.480999601319757275e+00 +2.480996238319303160e+00 +2.480994995483982724e+00 +2.480995593850018999e+00 +2.480997799536620363e+00 +2.481001416199947407e+00 +2.481006278898074680e+00 +2.481012249092741762e+00 +2.481019210570909461e+00 +2.481027066113921542e+00 +2.481035734777354840e+00 +2.481045149672454375e+00 +2.481055256162166600e+00 +2.481066010402380950e+00 +2.481077378173099923e+00 +2.481089333955657672e+00 +2.481101860221333499e+00 +2.481114946904307228e+00 +2.481128591038160192e+00 +2.481142796540420914e+00 +2.481157574134131849e+00 +2.481172941399343301e+00 +2.481188922950913867e+00 +2.481205550742168864e+00 +2.481222864496975156e+00 +2.481240912275644028e+00 +2.481259751182961715e+00 +2.481279448229533724e+00 +2.481300081360707122e+00 +2.481321740670530573e+00 +2.481344529821718048e+00 +2.481368567696396799e+00 +2.481393990306612896e+00 +2.481420952998246054e+00 +2.481449632987189347e+00 +2.481480232272490483e+00 +2.481512980977702565e+00 +2.481548141179042322e+00 +2.481586011287254312e+00 +2.481626931059389918e+00 +2.481671287327207764e+00 +2.481719520540714541e+00 +2.481772132238651007e+00 +2.481829693572676909e+00 +2.481892855028842604e+00 +2.481962357508819217e+00 +2.482039044954653662e+00 +2.482123878724721067e+00 +2.482217953955466960e+00 +2.482322518173828652e+00 +2.482438992459360172e+00 +2.482568995493577901e+00 +2.482714370877525667e+00 +2.482877218147754750e+00 +2.483059927976643433e+00 +2.483265222106348702e+00 +2.483496198637819230e+00 +2.483756383378725285e+00 +2.484049788048577678e+00 +2.484380976247900552e+00 +2.484755138223511128e+00 +2.485178175606938211e+00 +2.485656797471394341e+00 +2.486198629249011027e+00 +2.486812336279687230e+00 +2.487507764032360846e+00 +2.488296097356809788e+00 +2.489190041498582584e+00 +2.490204028052988239e+00 +2.491354449559857187e+00 +2.492659927065617786e+00 +2.494141615722628824e+00 +2.495823554381029208e+00 +2.497733066182860284e+00 +2.499901218423775440e+00 +2.502363351440820782e+00 +2.505159688056847411e+00 +2.508336037208591218e+00 +2.511944607854487810e+00 +2.516044952148313030e+00 +2.520705060219212257e+00 +2.526002632748771237e+00 +2.532026561887515292e+00 +2.538878655868914702e+00 +2.546675647849118374e+00 +2.555551534803190972e+00 +2.565660297351929575e+00 +2.577179055536914731e+00 +2.590311717811196512e+00 +2.605293179385727687e+00 +2.622394119430836668e+00 +2.641926431501319783e+00 +2.664249293932555496e+00 +2.689543471366940608e+00 +2.716529324626073993e+00 +2.744974331068542384e+00 +2.774615382083417181e+00 +2.805170043021238513e+00 +2.836348145963502709e+00 +2.867862798050180739e+00 +2.899440066950861095e+00 +2.930826843571081142e+00 +2.961796634226759650e+00 +2.992153261890391214e+00 +3.021732634005273255e+00 +3.050402852754152239e+00 +3.078063004552268556e+00 +3.104640978617150271e+00 +3.130090642864694850e+00 +3.154388662306236046e+00 +3.177531191853717907e+00 +3.199530620447285756e+00 +3.220412492296651941e+00 +3.240212686904986761e+00 +3.258974903684061175e+00 +3.276748469366145056e+00 +3.293586466309305738e+00 +3.309544166044244395e+00 +3.324677743781223160e+00 +3.339043244898397766e+00 +3.352695772622948489e+00 +3.365688866324878070e+00 +3.378074041380408676e+00 +3.389900463900705319e+00 +3.401214736375163916e+00 +3.412060773173231532e+00 +3.422479747700148067e+00 +3.432510095693025676e+00 +3.442187561606833590e+00 +3.451545277242756171e+00 +3.460613863705337856e+00 +3.469421549447338826e+00 +3.477994298589104361e+00 +3.486355944904582227e+00 +3.494528327873501539e+00 +3.502531428033093697e+00 +3.510383499546865238e+00 +3.518101198464262946e+00 +3.525699705593257960e+00 +3.533192843265536176e+00 +3.540593185556409672e+00 +3.547912161741889836e+00 +3.555160152944727869e+00 +3.562346582049411126e+00 +3.569479997060717835e+00 +3.576568148148330906e+00 +3.583618058666691031e+00 +3.590636090469057962e+00 +3.597628003851607303e+00 +3.604599012470075969e+00 +3.611553833570600336e+00 +3.618496733869761783e+00 +3.625431571408217479e+00 +3.632361833688674491e+00 +3.639290672393436843e+00 +3.646220934960238580e+00 +3.653155193277699553e+00 +3.660095769744580174e+00 +3.667044760919790924e+00 +3.674004058973522113e+00 +3.680975371133798468e+00 +3.687960237307527755e+00 +3.694960046040654866e+00 +3.701976048968392163e+00 +3.709009373893892292e+00 +3.716061036621777891e+00 +3.723131951662046024e+00 +3.730222941909654644e+00 +3.737334747395756551e+00 +3.744468033197907886e+00 +3.751623396588684933e+00 +3.758801373494873310e+00 +3.766002444332752663e+00 +3.773227039278967965e+00 +3.780475543030899388e+00 +3.787748299105464511e+00 +3.795045613720609445e+00 +3.802367759299678518e+00 +3.809714977634933941e+00 +3.817087482743167115e+00 +3.824485463443129785e+00 +3.831909085681718174e+00 +3.839358494633320351e+00 +3.846833816594299016e+00 +3.854335160692545337e+00 +3.861862620430085880e+00 +3.869416275074985201e+00 +3.876996190917209262e+00 +3.884602422407168021e+00 +3.892235013254126574e+00 +3.899893997478076635e+00 +3.907579403179486821e+00 +3.915291253594697096e+00 +3.923029567767969183e+00 +3.930794361282534233e+00 +3.938585647051859873e+00 +3.946403436161951994e+00 +3.954247738736468509e+00 +3.962118564771864193e+00 +3.970015924868078638e+00 +3.977939830773622454e+00 +3.985890295681069340e+00 +3.993867334247203971e+00 +4.001870962356637307e+00 +4.009901196681599167e+00 +4.017958054105224441e+00 +4.026041550919465806e+00 +4.034151701816210078e+00 +4.042288519077043674e+00 +4.050452011920953055e+00 +4.058642185976013117e+00 +4.066859042847404737e+00 +4.075102579759391830e+00 +4.083372789302880612e+00 +4.091669659432651152e+00 +4.099993173525634305e+00 +4.108343310468407950e+00 +4.116720044765726172e+00 +4.125123346663571056e+00 +4.133553182281521465e+00 +4.142009513750367411e+00 +4.150492299351811631e+00 +4.159001493657790149e+00 +4.167537047667586592e+00 +4.176098908941373367e+00 +4.184687021729221357e+00 +4.193301327094864028e+00 +4.201941763033837596e+00 +4.210608264585745886e+00 +4.219300763940537990e+00 +4.228019190538884864e+00 +4.236763471166682393e+00 +4.245533530043945625e+00 +4.254329288908239803e+00 +4.263150667092935997e+00 +4.271997581600551541e+00 +4.280869947171440870e+00 +4.289767676348155589e+00 +4.298690679535683401e+00 +4.307638865057928257e+00 +4.316612139210628030e+00 +4.325610406310991252e+00 +4.334633568744293619e+00 +4.343681527007674958e+00 +4.352754179751325836e+00 +4.361851423817299178e+00 +4.370973154276116546e+00 +4.380119264461343143e+00 +4.389289646002326073e+00 +4.398484188855215749e+00 +4.407702781332424991e+00 +4.416945310130666158e+00 +4.426211660357672883e+00 +4.435501715557720104e+00 +4.444815357736065842e+00 +4.454152467382376912e+00 +4.463512923493241580e+00 +4.472896603593870424e+00 +4.482303383759006721e+00 +4.491733138633172473e+00 +4.501185741450263400e+00 +4.510661064052593261e+00 +4.520158976909389281e+00 +4.529679349134841715e+00 +4.539222048505706653e+00 +4.548786941478521584e+00 +4.558373893206481675e+00 +4.567982767555971435e+00 +4.577613427122839695e+00 +4.587265733248393929e+00 +4.596939546035164526e+00 +4.606634724362460354e+00 +4.616351125901752894e+00 +4.626088607131862318e+00 +4.635847023354008556e+00 +4.645626228706747796e+00 +4.655426076180757988e+00 +4.665246417633550635e+00 +4.675087103804068889e+00 +4.684947984327219928e+00 +4.694828907748343383e+00 +4.704729721537608711e+00 +4.714650272104377038e+00 +4.724590404811504385e+00 +4.734549963989630683e+00 +4.744528792951433260e+00 +4.754526734005847466e+00 +4.764543628472299730e+00 +4.774579316694900655e+00 +4.784633638056652316e+00 +4.794706430993641355e+00 +4.804797533009243615e+00 +4.814906780688318122e+00 +4.825034009711423266e+00 +4.835179054869035653e+00 +4.845341750075775167e+00 +4.855521928384646912e+00 +4.865719422001302696e+00 +4.875934062298294513e+00 +4.886165679829374220e+00 +4.896414104343779883e+00 +4.906679164800550552e+00 +4.916960689382850802e+00 +4.927258505512310371e+00 +4.937572439863370022e+00 +4.947902318377642494e+00 +4.958247966278277019e+00 +4.968609208084330930e+00 +4.978985867625151052e+00 +4.989377768054731987e+00 +4.999784731866093068e+00 +5.010206580905639306e+00 +5.020643136387501926e+00 +5.031094218907862015e+00 +5.041559648459251974e+00 +5.052039244444824106e+00 +5.062532825692573901e+00 +5.073040210469518918e+00 +5.083561216495827040e+00 +5.094095660958849692e+00 +5.104643360527111540e+00 +5.115204131364174955e+00 +5.125777789142420104e+00 +5.136364149056700690e+00 +5.146963025837835382e+00 +5.157574233765982896e+00 +5.168197586683811906e+00 +5.178832898009481767e+00 +5.189479980749409194e+00 +5.200138647510780032e+00 +5.210808710513810560e+00 +5.221489981603700592e+00 +5.232182272262277500e+00 +5.242885393619296508e+00 +5.253599156463401698e+00 +5.264323371252671357e+00 +5.275057848015216599e+00 +5.285802396108772783e+00 +5.296556824043195277e+00 +5.307320939356992007e+00 +5.318094548540035049e+00 +5.328877456995623874e+00 +5.339669469035744243e+00 +5.350470387903876635e+00 +5.361280015820270251e+00 +5.372098154045056972e+00 +5.382924602954963333e+00 +5.393759162129921236e+00 +5.404601630446254745e+00 +5.415451806173621208e+00 +5.426309487073208260e+00 +5.437174470495269141e+00 +5.448046553474256370e+00 +5.458925532820336990e+00 +5.469811205206285720e+00 +5.480703367249058822e+00 +5.491601815585612556e+00 +5.502506346942668713e+00 +5.513416758200419210e+00 +5.524332846450162648e+00 +5.535254409046027391e+00 +5.546181243651133741e+00 +5.557113148278359560e+00 +5.568049921326183593e+00 +5.578991361609923594e+00 +5.589937268388785796e+00 +5.600887441389115651e+00 +5.611841680824236178e+00 +5.622799787411279837e+00 +5.633761562385329213e+00 +5.644726807511257327e+00 +5.655695325093555326e+00 +5.666666917984455765e+00 +5.677641389590587728e+00 +5.688618543878493305e+00 +5.699598185379104009e+00 +5.710580119191485338e+00 +5.721564150985943620e+00 +5.732550087006712758e+00 +5.743537734074287471e+00 +5.754526899587574462e+00 +5.765517391525950330e+00 +5.776509018451267963e+00 +5.787501589509925104e+00 +5.798494914435069703e+00 +5.809488803548903846e+00 +5.820483067765219509e+00 +5.831477518592162568e+00 +5.842471968135180660e+00 +5.853466229100295237e+00 +5.864460114797596546e+00 +5.875453439145023715e+00 +5.886446016672395309e+00 +5.897437662525746305e+00 +5.908428192471868456e+00 +5.919417422903158865e+00 +5.930405170842669271e+00 +5.941391253949406703e+00 +5.952375490523830415e+00 +5.963357699513586851e+00 +5.974337700519392946e+00 +5.985315313801129022e+00 +5.996290360284062260e+00 +6.007262661565235362e+00 +6.018232039919972465e+00 +6.029198318308511162e+00 +6.040161320382731347e+00 +6.051120870492958659e+00 +6.062076793694880728e+00 +6.073028915756463419e+00 +6.083977063164988763e+00 +6.094921063134071559e+00 +6.105860743610730168e+00 +6.116795933282467956e+00 +6.127726461584359186e+00 +6.138652158706129569e+00 +6.149572855599242160e+00 +6.160488383983921068e+00 +6.171398576356175170e+00 +6.182303265994798736e+00 +6.193202286968295667e+00 +6.204095474141755773e+00 +6.214982663183716838e+00 +6.225863690572895237e+00 +6.236738393604921882e+00 +6.247606610398946714e+00 +6.258468179904200568e+00 +6.269322941906461111e+00 +6.280170737034445949e+00 +6.291011406766106262e+00 +6.301844793434829839e+00 +6.312670740235553524e+00 +6.323489091230777959e+00 +6.334299691356473971e+00 +6.345102386427896590e+00 +6.355897023145303137e+00 +6.366683449099525660e+00 +6.377461512777495400e+00 +6.388231063567589629e+00 +6.398991951764932296e+00 +6.409744028576536579e+00 +6.420487146126346190e+00 +6.431221157460173643e+00 +6.441945916550508855e+00 +6.452661278301219383e+00 +6.463367098552135204e+00 +6.474063234083503815e+00 +6.484749542620326324e+00 +6.495425882836615372e+00 +6.506091571770529214e+00 +6.516746466311115427e+00 +6.527390425640881233e+00 +6.538023310874164551e+00 +6.548644984771929245e+00 +6.559255311518475295e+00 +6.569854156548222690e+00 +6.580441386412822169e+00 +6.591016868680632967e+00 +6.601580471862147803e+00 +6.612132065356005839e+00 +6.622671519411341023e+00 +6.633198705102941517e+00 +6.643713494316465074e+00 +6.654215759741344272e+00 +6.664705374869619448e+00 +6.675182213999175218e+00 +6.685646152240252604e+00 +6.696097065524268643e+00 +6.706534830614218734e+00 +6.716959325116096835e+00 +6.727370427490843241e+00 +6.737768017066535720e+00 +6.748151974050493607e+00 +6.758522179541150976e+00 +6.768878515539510587e+00 +6.779220864960144866e+00 +6.789549111641569823e+00 +6.799863140356055879e+00 +6.810162836818795640e+00 +6.820448087696405537e+00 +6.830718780614830621e+00 +6.840974804166597423e+00 +6.851216047917478846e+00 +6.861442402412553321e+00 +6.871653759181736376e+00 +6.881850010744761548e+00 +6.892031050615671006e+00 +6.902196773306826572e+00 +6.912347074332474861e+00 +6.922481850211909205e+00 +6.932600998472210563e+00 +6.942704417650650939e+00 +6.952792007296734411e+00 +6.962863667973930859e+00 +6.972919301261073954e+00 +6.982958809753538887e+00 +6.992982097064089686e+00 +7.002989067823527591e+00 +7.012979627681083628e+00 +7.022953683304599792e+00 +7.032911142380511293e+00 +7.042851913613620951e+00 +7.052775906726722610e+00 +7.062683032460011390e+00 +7.072573202570380246e+00 +7.082446329830517584e+00 +7.092302328027898284e+00 +7.102141111963616638e+00 +7.111962597451078949e+00 +7.121766701314619752e+00 +7.131553341387927958e+00 +7.141322436512423266e+00 +7.151073906535488689e+00 +7.160807672308598271e+00 +7.170523655685379083e+00 +7.180221779519520453e+00 +7.189901967662649440e+00 +7.199564144962069534e+00 +7.209208237258446061e+00 +7.218834171383386789e+00 +7.228441875156949692e+00 +7.238031277385079676e+00 +7.247602307856949366e+00 +7.257154897342250166e+00 +7.266688977588392717e+00 +7.276204481317646966e+00 +7.285701342224207622e+00 +7.295179494971206324e+00 +7.304638875187645652e+00 +7.314079419465270959e+00 +7.323501065355394246e+00 +7.332903751365648759e+00 +7.342287416956681412e+00 +7.351652002538799024e+00 +7.360997449468539955e+00 +7.370323700045233295e+00 +7.379630697507440829e+00 +7.388918386029411423e+00 +7.398186710717450154e+00 +7.407435617606223488e+00 +7.416665053655075113e+00 +7.425874966744226313e+00 +7.435065305670976343e+00 +7.444236020145833521e+00 +7.453387060788625007e+00 +7.462518379124531975e+00 +7.471629927580119457e+00 +7.480721659479302232e+00 +7.489793529039268094e+00 +7.498845491366379790e+00 +7.507877502452037888e+00 +7.516889519168469036e+00 +7.525881499264542640e+00 +7.534853401361502279e+00 +7.543805184948679354e+00 +7.552736810379174770e+00 +7.561648238865512184e+00 +7.570539432475241526e+00 +7.579410354126542515e+00 +7.588260967583764227e+00 +7.597091237452975321e+00 +7.605901129177436104e+00 +7.614690609033099022e+00 +7.623459644124038093e+00 +7.632208202377881889e+00 +7.640936252541196794e+00 +7.649643764174882676e+00 +7.658330707649501079e+00 +7.666997054140614054e+00 +7.675642775624094583e+00 +7.684267844871415676e+00 +7.692872235444902174e+00 +7.701455921692994977e+00 +7.710018878745477977e+00 +7.718561082508683668e+00 +7.727082509660700538e+00 +7.735583137646539598e+00 +7.744062944673309801e+00 +7.752521909705370362e+00 +7.760960012459451107e+00 +7.769377233399788807e+00 +7.777773553733245748e+00 +7.786148955404389227e+00 +7.794503421090594131e+00 +7.802836934197117102e+00 +7.811149478852161820e+00 +7.819441039901940727e+00 +7.827711602905729649e+00 +7.835961154130906436e+00 +7.844189680547984267e+00 +7.852397169825650280e+00 +7.860583610325782900e+00 +7.868748991098474477e+00 +7.876893301877036180e+00 +7.885016533073025968e+00 +7.893118675771237491e+00 +7.901199721724719183e+00 +7.909259663349757830e+00 +7.917298493720897667e+00 +7.925316206565925725e+00 +7.933312796260882038e+00 +7.941288257825048547e+00 +7.949242586915948650e+00 +7.957175779824357420e+00 +7.965087833469285172e+00 +7.972978745393005440e+00 +7.980848513756036766e+00 +7.988697137332167131e+00 +7.996524615503455280e+00 +8.004330948255271139e+00 +8.012116136171290037e+00 +8.019880180428531347e+00 +8.027623082792388232e+00 +8.035344845611673392e+00 +8.043045471813652370e+00 +8.050724964899101721e+00 +8.058383328937360091e+00 +8.066020568561405923e+00 +8.073636688962919195e+00 +8.081231695887368005e+00 +8.088805595629107614e+00 +8.096358395026472365e+00 +8.103890101456888928e+00 +8.111400722831994869e+00 +8.118890267592776766e+00 +8.126358744704704762e+00 +8.133806163652891996e+00 +8.141232534437248702e+00 +8.148637867567671833e+00 +8.156022174059225804e+00 +8.163385465427349885e+00 +8.170727753683070915e+00 +8.178049051328224905e+00 +8.185349371350712389e+00 +8.192628727219734230e+00 +8.199887132881084284e+00 +8.207124602752418951e+00 +8.214341151718555167e+00 +8.221536795126795027e+00 +8.228711548782245089e+00 +8.235865428943174749e+00 +8.242998452316360414e+00 +8.250110636052477631e+00 +8.257201997741494992e+00 +8.264272555408068044e+00 +8.271322327506993588e+00 +8.278351332918633787e+00 +8.285359590944390007e+00 +8.292347121302173107e+00 +8.299313944121921693e+00 +8.306260079941097274e+00 +8.313185549700229160e+00 +8.320090374738470018e+00 +8.326974576789165639e+00 +8.333838177975447792e+00 +8.340681200805839524e+00 +8.347503668169895974e+00 +8.354305603333845198e+00 +8.361087029936262738e+00 +8.367847971983760402e+00 +8.374588453846691039e+00 +8.381308500254885274e+00 +8.388008136293404249e+00 +8.394687387398295897e+00 +8.401346279352402746e+00 +8.407984838281169715e+00 +8.414603090648467898e+00 +8.421201063252469865e+00 +8.427778783221503645e+00 +8.434336278009965326e+00 +8.440873575394229889e+00 +8.447390703468593998e+00 +8.453887690641252561e+00 +8.460364565630248634e+00 +8.466821357459517472e+00 +8.473258095454893279e+00 +8.479674809240163924e+00 +8.486071528733145186e+00 +8.492448284141783432e+00 +8.498805105960251183e+00 +8.505142024965111958e+00 +8.511459072211472687e+00 +8.517756279029155664e+00 +8.524033677018941546e+00 +8.530291298048757298e+00 +8.536529174249967156e+00 +8.542747338013626290e+00 +8.548945821986784210e+00 +8.555124659068816584e+00 +8.561283882407764168e+00 +8.567423525396694828e+00 +8.573543621670111747e+00 +8.579644205100354526e+00 +8.585725309794042914e+00 +8.591786970088540087e+00 +8.597829220548435458e+00 +8.603852095962045254e+00 +8.609855631337955728e+00 +8.615839861901577024e+00 +8.621804823091711256e+00 +8.627750550557152565e+00 +8.633677080153338679e+00 +8.639584447938961631e+00 +8.645472690172660180e+00 +8.651341843309708679e+00 +8.657191943998750361e+00 +8.663023029078505743e+00 +8.668835135574575190e+00 +8.674628300696188177e+00 +8.680402561833057362e+00 +8.686157956552170489e+00 +8.691894522594690642e+00 +8.697612297872794329e+00 +8.703311320466605494e+00 +8.708991628621117087e+00 +8.714653260743133956e+00 +8.720296255398260143e+00 +8.725920651307873754e+00 +8.731526487346176424e+00 +8.737113802537209040e+00 +8.742682636051934963e+00 +8.748233027205319701e+00 +8.753765015453453202e+00 +8.759278640390672166e+00 +8.764773941746723196e+00 +8.770250959383947276e+00 +8.775709733294476678e+00 +8.781150303597462070e+00 +8.786572710536328046e+00 +8.791976994476023322e+00 +8.797363195900343769e+00 +8.802731355409225245e+00 +8.808081513716091493e+00 +8.813413711645207371e+00 +8.818727990129080041e+00 +8.824024390205828183e+00 +8.829302953016652467e+00 +8.834563719803252724e+00 +8.839806731905317960e+00 +8.845032030757996822e+00 +8.850239657889435563e+00 +8.855429654918305360e+00 +8.860602063551359819e+00 +8.865756925581015579e+00 +8.870894282882950677e+00 +8.876014177413731332e+00 +8.881116651208451174e+00 +8.886201746378405986e+00 +8.891269505108768456e+00 +8.896319969656307336e+00 +8.901353182347104820e+00 +8.906369185574311231e+00 +8.911368021795919248e+00 +8.916349733532550559e+00 +8.921314363365263844e+00 +8.926261953933401827e+00 +8.931192547932422343e+00 +8.936106188111793358e+00 +8.941002917272873773e+00 +8.945882778266826207e+00 +8.950745813992567079e+00 +8.955592067394693601e+00 +8.960421581461481821e+00 +8.965234399222875794e+00 +8.970030563748483843e+00 +8.974810118145631677e+00 +8.979573105557411949e+00 +8.984319569160749808e+00 +8.989049552164493306e+00 +8.993763097807532247e+00 +8.998460249356922347e+00 +9.003141050106036047e+00 +9.007805543372725765e+00 +9.012453772497526217e+00 +9.017085780841837206e+00 +9.021701611180899860e+00 +9.026301306317508377e+00 +9.030884909080093337e+00 +9.035452462320861855e+00 +9.040004008913960831e+00 +9.044539591753624208e+00 +9.049059253752353982e+00 +9.053563037839120753e+00 +9.058050986957594475e+00 +9.062523144064378755e+00 +9.066979552127255815e+00 +9.071420254123484739e+00 +9.075845293038090844e+00 +9.080254711862194128e+00 +9.084648553591330611e+00 +9.089026861223834075e+00 +9.093389677759203593e+00 +9.097737046196501254e+00 +9.102069009532778310e+00 +9.106385610761506655e+00 +9.110686892871040499e+00 +9.114972898841303461e+00 +9.119243671636187543e+00 +9.123499254192914520e+00 +9.127739689409450463e+00 +9.131965020130717647e+00 +9.136175289134314426e+00 +9.140370539116142723e+00 +9.144550812676413898e+00 +9.148716152306244354e+00 +9.152866600375100248e+00 +9.157002199119194330e+00 +9.161122990630977014e+00 +9.165229016849721688e+00 +9.169320319553305509e+00 +9.173396940351087991e+00 +9.177458920677961984e+00 +9.181506301789479352e+00 +9.185539124758017593e+00 +9.189557430469925237e+00 +9.193561259623630022e+00 +9.197550652728555320e+00 +9.201525650104841247e+00 +9.205486291883797634e+00 +9.209432618008975169e+00 +9.213364668237835176e+00 +9.213761004539117394e+00 +9.136503337359135557e+00 +8.983857242197904824e+00 +8.749756932062449977e+00 +8.424133394790757734e+00 +7.997655515728178344e+00 +7.467869580470630098e+00 +6.846138925739682080e+00 +6.162535631641647527e+00 +5.464298567624965131e+00 +4.805396238633393935e+00 +4.230842421138302001e+00 +3.764649106397596867e+00 +3.408066455435834197e+00 +3.146728992970562189e+00 +2.960175981825020841e+00 +2.828664362901658791e+00 +2.736181680013139772e+00 +2.670887486356584795e+00 +2.624441888883702667e+00 +2.591101378010118861e+00 +2.566937619570139884e+00 +2.549258169917609784e+00 +2.536204990218692057e+00 +2.526484223090360359e+00 +2.519186035624108033e+00 +2.513664377033819175e+00 +2.509456193800769785e+00 +2.506226653809688010e+00 +2.503731628258278885e+00 +2.501791731628763671e+00 +2.500274182644950827e+00 +2.499080012730684253e+00 +2.498134967546057350e+00 +2.497382983202660167e+00 +2.496781473323583800e+00 +2.496297900204095921e+00 +2.495907263537695098e+00 +2.495590249507091407e+00 +2.495331858347584308e+00 +2.495120380807778204e+00 +2.494946630568974921e+00 +2.494803365531106820e+00 +2.494684849234658053e+00 +2.494586516817784538e+00 +2.494504719354722955e+00 +2.494436527258676151e+00 +2.494379578408484122e+00 +2.494331960299557949e+00 +2.494292118197730002e+00 +2.494258783254354128e+00 +2.494230916011431987e+00 +2.494207661822836819e+00 +2.494188315540267542e+00 +2.494172293431901277e+00 +2.494159110770045817e+00 +2.494148363879721053e+00 +2.494139715711231275e+00 +2.494132884207402867e+00 +2.494127632895652535e+00 +2.494123763258179416e+00 +2.494121108528875030e+00 +2.494119528639680894e+00 +2.494118906096959520e+00 +2.494119142613782536e+00 +2.494120156359654672e+00 +2.494121879717388079e+00 +2.494124257459151117e+00 +2.494127245271534399e+00 +2.494130808573747249e+00 +2.494134921584564957e+00 +2.494139566602990410e+00 +2.494144733475278208e+00 +2.494150419227282534e+00 +2.494156627846454199e+00 +2.494163370202334917e+00 +2.494170664098366075e+00 +2.494178534451340745e+00 +2.494187013598036184e+00 +2.494196141731598537e+00 +2.494205967473133168e+00 +2.494216548586874360e+00 +2.494227952850236019e+00 +2.494240259093116752e+00 +2.494253558424110118e+00 +2.494267955664783987e+00 +2.494283571017045453e+00 +2.494300541992858555e+00 +2.494319025640310272e+00 +2.494339201105266302e+00 +2.494361272573781818e+00 +2.494385472647045354e+00 +2.494412066208082646e+00 +2.494441354847838355e+00 +2.494473681927683373e+00 +2.494509438366025567e+00 +2.494549069248672257e+00 +2.494593081376061505e+00 +2.494642051875627597e+00 +2.494696638024654689e+00 +2.494757588448143437e+00 +2.494825755877820850e+00 +2.494902111682735679e+00 +2.494987762409231369e+00 +2.495083968598904800e+00 +2.495192166187897520e+00 +2.495313990830049011e+00 +2.495451305530735908e+00 +2.495606232028328098e+00 +2.495781186417035613e+00 +2.495978919569505905e+00 +2.496202562991125529e+00 +2.496455680822066370e+00 +2.496742328799482546e+00 +2.497067121103051512e+00 +2.497435306134865307e+00 +2.497852852432607573e+00 +2.498326546086827360e+00 +2.498864101233440493e+00 +2.499474285426899645e+00 +2.500167061974468918e+00 +2.500953751635697220e+00 +2.501847216473322533e+00 +2.502862069094073494e+00 +2.504014911054337933e+00 +2.505324604843222058e+00 +2.506812584614375172e+00 +2.508503211741906824e+00 +2.510424182353078404e+00 +2.512606995274083044e+00 +2.515087490353189903e+00 +2.517906468940964260e+00 +2.521110410458117457e+00 +2.524752301519047393e+00 +2.528892597055777181e+00 +2.533600336351367499e+00 +2.538954440881557861e+00 +2.545045225392560617e+00 +2.551976158683702423e+00 +2.559865916018293053e+00 +2.568850770746228029e+00 +2.579087378210335846e+00 +2.590756009699318074e+00 +2.604064297120171290e+00 +2.619251548711913458e+00 +2.636593690359552600e+00 +2.656408872872135341e+00 +2.679063758866384592e+00 +2.704499546705479762e+00 +2.731597158360127509e+00 +2.760121382731293149e+00 +2.789807937169455521e+00 +2.820374684718842229e+00 +2.851533065167320302e+00 +2.882998857968023909e+00 +2.914501578234967472e+00 +2.945792042795071453e+00 +2.976647887865206066e+00 +3.006877037521078488e+00 +3.036319290307945007e+00 +3.064846301617476954e+00 +3.092360294528793130e+00 +3.118791841441425738e+00 +3.144097035770443860e+00 +3.168254329904436339e+00 +3.191261263280245508e+00 +3.213131250815187911e+00 +3.233890552320227041e+00 +3.253575500815825805e+00 +3.272230033034708718e+00 +3.289903538774999969e+00 +3.306649026402973313e+00 +3.322521588589879560e+00 +3.337577144097837234e+00 +3.351871426957403699e+00 +3.365459192694326251e+00 +3.378393611525487561e+00 +3.390725819987661538e+00 +3.402504604778179509e+00 +3.413776195299668359e+00 +3.424584144246927586e+00 +3.434969278374439661e+00 +3.444969704224304152e+00 +3.454620856011442864e+00 +3.463955575024046496e+00 +3.473004211795049923e+00 +3.481794743941439840e+00 +3.490352903969529130e+00 +3.498702312527250058e+00 +3.506864613573413614e+00 +3.514859608752378684e+00 +3.522705388934347148e+00 +3.530418461427592192e+00 +3.538013871809132294e+00 +3.545505319671419908e+00 +3.552905267859961747e+00 +3.560225044993032384e+00 +3.567474941220914353e+00 +3.574664297307801775e+00 +3.581801587212276594e+00 +3.588894494408846114e+00 +3.595949982238593634e+00 +3.602974358606153338e+00 +3.609973335356501778e+00 +3.616952082671486934e+00 +3.623915278824886954e+00 +3.630867155628174636e+00 +3.637811539888406109e+00 +3.644751891186163384e+00 +3.651691336266029708e+00 +3.658632700315626263e+00 +3.665578535392086668e+00 +3.672531146237731026e+00 +3.679492613709725912e+00 +3.686464816032017033e+00 +3.693449448061939755e+00 +3.700448038748828772e+00 +3.707461966947569909e+00 +3.714492475736673960e+00 +3.721540685377769719e+00 +3.728607605041769801e+00 +3.735694143416060875e+00 +3.742801118296990026e+00 +3.749929265262699651e+00 +3.757079245512763954e+00 +3.764251652953304550e+00 +3.771447020599042244e+00 +3.778665826357182844e+00 +3.785908498252048560e+00 +3.793175419143877125e+00 +3.800466930990192616e+00 +3.807783338693679909e+00 +3.815124913576266152e+00 +3.822491896515447074e+00 +3.829884500775386780e+00 +3.837302914562321199e+00 +3.844747303330920740e+00 +3.852217811865751962e+00 +3.859714566159699878e+00 +3.867237675109030715e+00 +3.874787232042960383e+00 +3.882363316103793593e+00 +3.889965993492217500e+00 +3.897595318590861169e+00 +3.905251334978009581e+00 +3.912934077803204236e+00 +3.920643576194290603e+00 +3.928379853660252330e+00 +3.936142928478916225e+00 +3.943932814063864090e+00 +3.951749519306741121e+00 +3.959593048944100246e+00 +3.967463403955595602e+00 +3.975360581984547892e+00 +3.983284577782781000e+00 +3.991235383688400251e+00 +3.999212990148114599e+00 +4.007217386293699946e+00 +4.015248560573157377e+00 +4.023306501419202874e+00 +4.031391197912140179e+00 +4.039502640367144792e+00 +4.047640820760027403e+00 +4.055805732912673101e+00 +4.063997372392982754e+00 +4.072215736132086761e+00 +4.080460821805042215e+00 +4.088732627073464521e+00 +4.097031148952234858e+00 +4.105356382997248588e+00 +4.113708322442683141e+00 +4.122086957553497300e+00 +4.130492275152059634e+00 +4.138924258284791158e+00 +4.147382886000650082e+00 +4.155868133218268312e+00 +4.164379970662622554e+00 +4.172918364855702222e+00 +4.181483278148430571e+00 +4.190074668783564604e+00 +4.198692490981285275e+00 +4.207336695040807761e+00 +4.216007227452749362e+00 +4.224704031018045924e+00 +4.233427044970179409e+00 +4.242176205098186159e+00 +4.250951443868508761e+00 +4.259752690544271303e+00 +4.268579871300940631e+00 +4.277432909337614220e+00 +4.286311724983482563e+00 +4.295216235799152571e+00 +4.304146356672695184e+00 +4.313101999910420759e+00 +4.322083075322405321e+00 +4.331089490302955980e+00 +4.340121149906134512e+00 +4.349177956916621568e+00 +4.358259811916091131e+00 +4.367366613345393667e+00 +4.376498257562776217e+00 +4.385654638898403235e+00 +4.394835649705422398e+00 +4.404041180407830325e+00 +4.413271119545354892e+00 +4.422525353815603744e+00 +4.431803768113666386e+00 +4.441106245569388378e+00 +4.450432667582497004e+00 +4.459782913855764974e+00 +4.469156862426364896e+00 +4.478554389695581506e+00 +4.487975370457006008e+00 +4.497419677923367942e+00 +4.506887183752098736e+00 +4.516377758069767268e+00 +4.525891269495474489e+00 +4.535427585163292363e+00 +4.544986570743871468e+00 +4.554568090465235031e+00 +4.564172007132920150e+00 +4.573798182149432456e+00 +4.583446475533171416e+00 +4.593116745936812961e+00 +4.602808850665228491e+00 +4.612522645692994416e+00 +4.622257985681525128e+00 +4.632014723995856009e+00 +4.641792712721152903e+00 +4.651591802678924026e+00 +4.661411843443016068e+00 +4.671252683355390900e+00 +4.681114169541709558e+00 +4.690996147926780324e+00 +4.700898463249821191e+00 +4.710820959079640602e+00 +4.720763477829679644e+00 +4.730725860772986735e+00 +4.740707948057092835e+00 +4.750709578718844917e+00 +4.760730590699155940e+00 +4.770770820857746841e+00 +4.780830104987829898e+00 +4.790908277830768114e+00 +4.801005173090733713e+00 +4.811120623449335554e+00 +4.821254460580259860e+00 +4.831406515163896742e+00 +4.841576616901981822e+00 +4.851764594532239627e+00 +4.861970275843054523e+00 +4.872193487688136315e+00 +4.882434056001230260e+00 +4.892691805810832406e+00 +4.902966561254924471e+00 +4.913258145595750470e+00 +4.923566381234618206e+00 +4.933891089726699875e+00 +4.944232091795905504e+00 +4.954589207349741287e+00 +4.964962255494230092e+00 +4.975351054548832863e+00 +4.985755422061415310e+00 +4.996175174823227039e+00 +5.006610128883912658e+00 +5.017060099566547748e+00 +5.027524901482685493e+00 +5.038004348547429068e+00 +5.048498253994516460e+00 +5.059006430391418618e+00 +5.069528689654449138e+00 +5.080064843063881064e+00 +5.090614701279058352e+00 +5.101178074353499348e+00 +5.111754771750010917e+00 +5.122344602355767051e+00 +5.132947374497385695e+00 +5.143562895955959391e+00 +5.154190973982056612e+00 +5.164831415310688456e+00 +5.175484026176208729e+00 +5.186148612327160734e+00 +5.196824979041034354e+00 +5.207512931138946755e+00 +5.218212273000226276e+00 +5.228922808576868420e+00 +5.239644341407860395e+00 +5.250376674633359109e+00 +5.261119611008705732e+00 +5.271872952918243982e+00 +5.282636502388921684e+00 +5.293410061103668518e+00 +5.304193430414507304e+00 +5.314986411355394402e+00 +5.325788804654732367e+00 +5.336600410747555756e+00 +5.347421029787387425e+00 +5.358250461657677377e+00 +5.369088505791350663e+00 +5.379934960949935174e+00 +5.390789625059476897e+00 +5.401652295095699330e+00 +5.412522767011956226e+00 +5.423400835704164535e+00 +5.434286295007431988e+00 +5.445178937719495238e+00 +5.456078555646402428e+00 +5.466984939666140519e+00 +5.477897879806333137e+00 +5.488817165332341652e+00 +5.499742584842564064e+00 +5.510673926368080622e+00 +5.521610977474099791e+00 +5.532553525361173286e+00 +5.543501356964374516e+00 +5.554454259049089515e+00 +5.565412018302310138e+00 +5.576374421418643479e+00 +5.587341255180494848e+00 +5.598312306532096549e+00 +5.609287362647227937e+00 +5.620266210990655154e+00 +5.631248639373408693e+00 +5.642234436002111053e+00 +5.653223389522686659e+00 +5.664215289058763148e+00 +5.675209924245187665e+00 +5.686207085257013460e+00 +5.697206562834431054e+00 +5.708208148303981488e+00 +5.719211633596493982e+00 +5.730216811262136112e+00 +5.741223474482898048e+00 +5.752231417082898091e+00 +5.763240433536794605e+00 +5.774250318976591245e+00 +5.785260869197140110e+00 +5.796271880660519571e+00 +5.807283150499564783e+00 +5.818294476520675218e+00 +5.829305657206139912e+00 +5.840316491716052383e+00 +5.851326779890003493e+00 +5.862336322248624221e+00 +5.873344919995086677e+00 +5.884352375016636216e+00 +5.895358489886216802e+00 +5.906363067864257133e+00 +5.917365912900646840e+00 +5.928366829636921409e+00 +5.939365623408717099e+00 +5.950362100248480779e+00 +5.961356066888461314e+00 +5.972347330763987827e+00 +5.983335700017025083e+00 +5.994320983500017519e+00 +6.005302990780009509e+00 +6.016281532143036515e+00 +6.027256418598762266e+00 +6.038227461885386838e+00 +6.049194474474765215e+00 +6.060157269577747030e+00 +6.071115661149740106e+00 +6.082069463896427663e+00 +6.093018493279708458e+00 +6.103962565523728401e+00 +6.114901497621115567e+00 +6.125835107339307584e+00 +6.136763213226995362e+00 +6.147685634620659201e+00 +6.158602191651207036e+00 +6.169512705250657092e+00 +6.180416997158889814e+00 +6.191314889930424670e+00 +6.202206206941260902e+00 +6.213090772395702288e+00 +6.223968411333210327e+00 +6.234838949635253869e+00 +6.245702214032132105e+00 +6.256558032109790446e+00 +6.267406232316622194e+00 +6.278246643970184948e+00 +6.289079097263925888e+00 +6.299903423273825354e+00 +6.310719453964985348e+00 +6.321527022198143442e+00 +6.332325961736165354e+00 +6.343116107250384772e+00 +6.353897294326937839e+00 +6.364669359472962640e+00 +6.375432140122720526e+00 +6.386185474643649940e+00 +6.396929202342301224e+00 +6.407663163470161294e+00 +6.418387199229410811e+00 +6.429101151778541023e+00 +6.439804864237897775e+00 +6.450498180695076300e+00 +6.461180946210241416e+00 +6.471853006821321586e+00 +6.482514209549069761e+00 +6.493164402402030078e+00 +6.503803434381385529e+00 +6.514431155485674196e+00 +6.525047416715398896e+00 +6.535652070077491160e+00 +6.546244968589695290e+00 +6.556825966284790752e+00 +6.567394918214706223e+00 +6.577951680454519945e+00 +6.588496110106328629e+00 +6.599028065302979584e+00 +6.609547405211715798e+00 +6.620053990037645164e+00 +6.630547681027143980e+00 +6.641028340471093472e+00 +6.651495831708009732e+00 +6.661950019127058198e+00 +6.672390768170931352e+00 +6.682817945338612731e+00 +6.693231418188020143e+00 +6.703631055338522771e+00 +6.714016726473349905e+00 +6.724388302341862911e+00 +6.734745654761717049e+00 +6.745088656620907841e+00 +6.755417181879691313e+00 +6.765731105572397652e+00 +6.776030303809116973e+00 +6.786314653777278494e+00 +6.796584033743096498e+00 +6.806838323052936346e+00 +6.817077402134538389e+00 +6.827301152498129966e+00 +6.837509456737434377e+00 +6.847702198530575046e+00 +6.857879262640850015e+00 +6.868040534917419393e+00 +6.878185902295861354e+00 +6.888315252798633992e+00 +6.898428475535434146e+00 +6.908525460703437204e+00 +6.918606099587439218e+00 +6.928670284559901305e+00 +6.938717909080873270e+00 +6.948748867697830178e+00 +6.958763056045402351e+00 +6.968760370845016539e+00 +6.978740709904402095e+00 +6.988703972117047414e+00 +6.998650057461523133e+00 +7.008578867000720081e+00 +7.018490302881005505e+00 +7.028384268331247853e+00 +7.038260667661806025e+00 +7.048119406263364084e+00 +7.057960390605707346e+00 +7.067783528236427415e+00 +7.077588727779488664e+00 +7.087375898933741425e+00 +7.097144952471348134e+00 +7.106895800236099348e+00 +7.116628355141678242e+00 +7.126342531169811423e+00 +7.136038243368346912e+00 +7.145715407849261069e+00 +7.155373941786571379e+00 +7.165013763414172843e+00 +7.174634792023597996e+00 +7.184236947961709419e+00 +7.193820152628280340e+00 +7.203384328473550369e+00 +7.212929398995671093e+00 +7.222455288738077073e+00 +7.231961923286815974e+00 +7.241449229267777454e+00 +7.250917134343865200e+00 +7.260365567212090809e+00 +7.269794457600616155e+00 +7.279203736265710489e+00 +7.288593334988661354e+00 +7.297963186572594907e+00 +7.307313224839266041e+00 +7.316643384625750812e+00 +7.325953601781108659e+00 +7.335243813162955817e+00 +7.344513956634008522e+00 +7.353763971058540960e+00 +7.362993796298809457e+00 +7.372203373211394961e+00 +7.381392643643517104e+00 +7.390561550429284310e+00 +7.399710037385869299e+00 +7.408838049309668605e+00 +7.417945531972391038e+00 +7.427032432117101735e+00 +7.436098697454195161e+00 +7.445144276657361004e+00 +7.454169119359486118e+00 +7.463173176148488963e+00 +7.472156398563123858e+00 +7.481118739088769232e+00 +7.490060151153116408e+00 +7.498980589121870821e+00 +7.507880008294383956e+00 +7.516758364899235545e+00 +7.525615616089813997e+00 +7.534451719939816883e+00 +7.543266635438749645e+00 +7.552060322487355037e+00 +7.560832741893039000e+00 +7.569583855365237923e+00 +7.578313625510764595e+00 +7.587022015829134602e+00 +7.595708990707805697e+00 +7.604374515417479330e+00 +7.613018556107268964e+00 +7.621641079799925222e+00 +7.630242054386988215e+00 +7.638821448623913213e+00 +7.647379232125189219e+00 +7.655915375359418462e+00 +7.664429849644385229e+00 +7.672922627142067853e+00 +7.681393680853668471e+00 +7.689842984614612575e+00 +7.698270513089491729e+00 +7.706676241767029367e+00 +7.715060146955014631e+00 +7.723422205775198890e+00 +7.731762396158192274e+00 +7.740080696838354868e+00 +7.748377087348625736e+00 +7.756651548015398134e+00 +7.764904059953325444e+00 +7.773134605060150193e+00 +7.781343166011494006e+00 +7.789529726255658204e+00 +7.797694270008388884e+00 +7.805836782247654426e+00 +7.813957248708391035e+00 +7.822055655877255376e+00 +7.830131990987355906e+00 +7.838186242012989524e+00 +7.846218397664353361e+00 +7.854228447382267220e+00 +7.862216381332874704e+00 +7.870182190402346123e+00 +7.878125866191590276e+00 +7.886047401010921831e+00 +7.893946787874773108e+00 +7.901824020496368561e+00 +7.909679093282420581e+00 +7.917512001327796867e+00 +7.925322740410209121e+00 +7.933111306984907074e+00 +7.940877698179331645e+00 +7.948621911787821404e+00 +7.956343946266281719e+00 +7.964043800726875233e+00 +7.971721474932701668e+00 +7.979376969292500732e+00 +7.987010284855326603e+00 +7.994621423305257935e+00 +8.002210386956102539e+00 +8.009777178746080750e+00 +8.017321802232570960e+00 +8.024844261586789429e+00 +8.032344561588558918e+00 +8.039822707620986719e+00 +8.047278705665249277e+00 +8.054712562295318179e+00 +8.062124284672700369e+00 +8.069513880541233419e+00 +8.076881358221836393e+00 +8.084226726607294466e+00 +8.091549995157054198e+00 +8.098851173892024136e+00 +8.106130273389396734e+00 +8.113387304777450737e+00 +8.120622279730417503e+00 +8.127835210463310034e+00 +8.135026109726789301e+00 +8.142194990802035903e+00 +8.149341867495644820e+00 +8.156466754134520158e+00 +8.163569665560792998e+00 +8.170650617126746340e+00 +8.177709624689770251e+00 +8.184746704607304579e+00 +8.191761873731833177e+00 +8.198755149405860365e+00 +8.205726549456915819e+00 +8.212676092192587873e+00 +8.219603796395563933e+00 +8.226509681318669109e+00 +8.233393766679963477e+00 +8.240256072657816233e+00 +8.247096619886015390e+00 +8.253915429448912988e+00 +8.260712522876547226e+00 +8.267487922139819645e+00 +8.274241649645679431e+00 +8.280973728232320141e+00 +8.287684181164399533e+00 +8.294373032128293133e+00 +8.301040305227338933e+00 +8.307686024977137151e+00 +8.314310216300825118e+00 +8.320912904524435660e+00 +8.327494115372203964e+00 +8.334053874961956154e+00 +8.340592209800480106e+00 +8.347109146778944222e+00 +8.353604713168309104e+00 +8.360078936614794287e+00 +8.366531845135334322e+00 +8.372963467113081037e+00 +8.379373831292920016e+00 +8.385762966777001282e+00 +8.392130903020307287e+00 +8.398477669826226233e+00 +8.404803297342171575e+00 +8.411107816055201525e+00 +8.417391256787665199e+00 +8.423653650692898509e+00 +8.429895029250898730e+00 +8.436115424264063023e+00 +8.442314867852926952e+00 +8.448493392451924322e+00 +8.454651030805210965e+00 +8.460787815962442338e+00 +8.466903781274643492e+00 +8.472998960390061285e+00 +8.479073387250050331e+00 +8.485127096084999820e+00 +8.491160121410255002e+00 +8.497172498022090181e+00 +8.503164260993697710e+00 +8.509135445671182296e+00 +8.515086087669615722e+00 +8.521016222869087997e+00 +8.526925887410785165e+00 +8.532815117693123952e+00 +8.538683950367852660e+00 +8.544532422336235555e+00 +8.550360570745230149e+00 +8.556168432983689343e+00 +8.561956046678611543e+00 +8.567723449691378335e+00 +8.573470680114063214e+00 +8.579197776265717224e+00 +8.584904776688718542e+00 +8.590591720145132726e+00 +8.596258645613078286e+00 +8.601905592283168644e+00 +8.607532599554916786e+00 +8.613139707033205639e+00 +8.618726954524779771e+00 +8.624294382034747741e+00 +8.629842029763116429e+00 +8.635369938101359111e+00 +8.640878147628995976e+00 +8.646366699110197729e+00 +8.651835633490430055e+00 +8.657284991893119397e+00 +8.662714815616320507e+00 +8.668125146129442626e+00 +8.673516025069975655e+00 +8.678887494240260736e+00 +8.684239595604262618e+00 +8.689572371284389973e+00 +8.694885863558322825e+00 +8.700180114855877278e+00 +8.705455167755893342e+00 +8.710711064983128082e+00 +8.715947849405210945e+00 +8.721165564029586648e+00 +8.726364252000502475e+00 +8.731543956596022227e+00 +8.736704721225036607e+00 +8.741846589424355329e+00 +8.746969604855749481e+00 +8.752073811303082707e+00 +8.757159252669429961e+00 +8.762225972974226451e+00 +8.767274016350455668e+00 +8.772303427041848067e+00 +8.777314249400090418e+00 +8.782306527882097313e+00 +8.787280307047275585e+00 +8.792235631554808251e+00 +8.797172546160995310e+00 +8.802091095716578550e+00 +8.806991325164124973e+00 +8.811873279535404890e+00 +8.816737003948812657e+00 +8.821582543606796278e+00 +8.826409943793327884e+00 +8.831219249871377741e+00 +8.836010507280427362e+00 +8.840783761533989704e+00 +8.845539058217175565e+00 +8.850276442984245762e+00 +8.854995961556234363e+00 +8.859697659718543505e+00 +8.864381583318611035e+00 +8.869047778263547954e+00 +8.873696290517843366e+00 +8.878327166101067647e+00 +8.882940451085604039e+00 +8.887536191594401558e+00 +8.892114433798742112e+00 +8.896675223916052033e+00 +8.901218608207708272e+00 +8.905744632976871245e+00 +8.910253344566369194e+00 +8.914744789356554122e+00 +8.919219013763225234e+00 +8.923676064235541716e+00 +8.928115987253967489e+00 +8.932538829328247942e+00 +8.936944636995386659e+00 +8.941333456817654124e+00 +8.945705335380630174e+00 +8.950060319291225142e+00 +8.954398455175779148e+00 +8.958719789678132983e+00 +8.963024369457734508e+00 +8.967312241187785915e+00 +8.971583451553380328e+00 +8.975838047249675711e+00 +7.164960604439448488e+00 +7.173166037449657750e+00 +7.181350849444516626e+00 +7.189515005054158081e+00 +7.197658469802592052e+00 +7.205781209986811930e+00 +7.213883192587697835e+00 +7.221964385206129933e+00 +7.230024756018744725e+00 +7.238064273749076349e+00 +7.246082907650549743e+00 +7.254080627498426637e+00 +7.262057403588535465e+00 +7.270013206740918221e+00 +7.277948008307021155e+00 +7.285861780179251568e+00 +7.293754494802085375e+00 +7.301626125184020211e+00 +7.309476644909839393e+00 +7.317306028152835040e+00 +7.325114249686647483e+00 +7.332901284896591321e+00 +7.340667109790228295e+00 +7.348411701007167451e+00 +7.356135035827994884e+00 +7.363837092182313526e+00 +7.371517848655917859e+00 +7.379177284497046685e+00 +7.386815379621831212e+00 +7.394432114618885166e+00 +7.402027470753139937e+00 +7.409601429968924791e+00 +7.417153974892368495e+00 +7.424685088833140156e+00 +7.432194755785607398e+00 +7.439682960429408354e+00 +7.447149688129549361e+00 +7.454594924935991074e+00 +7.462018657582820680e+00 +7.469420873487031542e+00 +7.476801560746912045e+00 +7.484160708140125351e+00 +7.491498305121497836e+00 +7.498814341820482454e+00 +7.506108809038446239e+00 +7.513381698245657603e+00 +7.520633001578124421e+00 +7.527862711834204745e+00 +7.535070822471098495e+00 +7.542257327601125994e+00 +7.549422221987931891e+00 +7.556565501042513233e+00 +7.563687160819188904e+00 +7.570787198011418084e+00 +7.577865609947579628e+00 +7.584922394586625316e+00 +7.591957550513699360e+00 +7.598971076935677971e+00 +7.605962973676646754e+00 +7.612933241173344356e+00 +7.619881880470558144e+00 +7.626808893216459495e+00 +7.633714281657951517e+00 +7.640598048635926176e+00 +7.647460197580544516e+00 +7.654300732506492011e+00 +7.661119658008159305e+00 +7.667916979254897569e+00 +7.674692701986172594e+00 +7.681446832506761524e+00 +7.688179377681947813e+00 +7.694890344932641568e+00 +7.701579742230594050e+00 +7.708247578093516239e+00 +7.714893861580259582e+00 +7.721518602285978972e+00 +7.728121810337269082e+00 +7.734703496387357546e+00 +7.741263671611251951e+00 +7.747802347700922354e+00 +7.754319536860474926e+00 +7.760815251801341574e+00 +7.767289505737471345e+00 +7.773742312380532482e+00 +7.780173685935125150e+00 +7.786583641094001251e+00 +7.792972193033300243e+00 +7.799339357407784945e+00 +7.805685150346109324e+00 +7.812009588446068520e+00 +7.818312688769898600e+00 +7.824594468839563888e+00 +7.830854946632054947e+00 +7.837094140574722090e+00 +7.843312069540619547e+00 +7.849508752843826542e+00 +7.855684210234867848e+00 +7.861838461896036634e+00 +7.867971528436836337e+00 +7.874083430889385227e+00 +7.880174190703849391e+00 +7.886243829743891709e+00 +7.892292370282135039e+00 +7.898319834995662703e+00 +7.904326246961504765e+00 +7.910311629652175824e+00 +7.916276006931200371e+00 +7.922219403048680775e+00 +7.928141842636879488e+00 +7.934043350705804798e+00 +7.939923952638835658e+00 +7.945783674188360735e+00 +7.951622541471417449e+00 +7.957440580965387866e+00 +7.963237819503692805e+00 +7.969014284271496606e+00 +7.974770002801459867e+00 +7.980505002969470851e+00 +7.986219312990471053e+00 +7.991912961414207928e+00 +7.997585977121074663e+00 +8.003238389317964163e+00 +8.008870227534123032e+00 +8.014481521617032200e+00 +8.020072301728314201e+00 +8.025642598339679523e+00 +8.031192442228862305e+00 +8.036721864475589783e+00 +8.042230896457603251e+00 +8.047719569846638166e+00 +8.053187916604496621e+00 +8.058635968979105613e+00 +8.064063759500584183e+00 +8.069471320977358531e+00 +8.074858686492319748e+00 +8.080225889398937156e+00 +8.085572963317460449e+00 +8.090899942131102307e+00 +8.096206859982286730e+00 +8.101493751268872501e+00 +8.106760650640431720e+00 +8.112007592994531890e+00 +8.117234613473067739e+00 +8.122441747458594818e+00 +8.127629030570679092e+00 +8.132796498662298035e+00 +8.137944187816243513e+00 +8.143072134341554857e+00 +8.148180374769978584e+00 +8.153268945852435223e+00 +8.158337884555544761e+00 +8.163387228058136103e+00 +8.168417013747797384e+00 +8.173427279217465369e+00 +8.178418062262000632e+00 +8.183389400874828468e+00 +8.188341333244579801e+00 +8.193273897751748081e+00 +8.198187132965397694e+00 +8.203081077639865271e+00 +8.207955770711512500e+00 +8.212811251295477177e+00 +8.217647558682472209e+00 +8.222464732335577509e+00 +8.227262811887099403e+00 +8.232041837135403384e+00 +8.236801848041819696e+00 +8.241542884727513396e+00 +8.246264987470452112e+00 +8.250968196702327617e+00 +8.255652553005544902e+00 +8.260318097110218361e+00 +8.264964869891191057e+00 +8.269592912365077098e+00 +8.274202265687337743e+00 +8.278792971149362856e+00 +8.283365070175596756e+00 +8.287918604320664073e+00 +8.292453615266548894e+00 +8.296970144819743709e+00 +8.301468234908501387e+00 +8.305947927580024981e+00 +8.310409264997751677e+00 +8.314852289438606547e+00 +8.319277043290307816e+00 +8.323683569048689890e+00 +8.328071909315047705e+00 +8.332442106793497061e+00 +8.336794204288365151e+00 +8.341128244701605965e+00 +8.345444271030237005e+00 +8.349742326363777778e+00 +8.354022453881741583e+00 +8.358284696851137952e+00 +8.362529098623987522e+00 +8.366755702634865344e+00 +8.370964552398474368e+00 +8.375155691507231381e+00 +8.379329163628865373e+00 +8.383485012504067413e+00 +8.387623281944131648e+00 +8.391744015828638936e+00 +8.395847258103154687e+00 +8.399933052776946241e+00 +8.404001443920714465e+00 +8.408052475664376857e+00 +8.412086192194836443e+00 +8.416102637753782645e+00 +8.420101856635531234e+00 +8.424083893184842964e+00 +8.428048791794832795e+00 +8.431996596904800967e+00 +8.435927352998195516e+00 +8.439841104600489530e+00 +8.443737896277172084e+00 +8.447617772631678790e+00 +8.451480778303407604e+00 +8.455326957965713319e+00 +8.459156356323932258e+00 +8.462969018113433606e+00 +8.466764988097684963e+00 +8.470544311066349863e+00 +8.474307031833362203e+00 +8.478053195235096595e+00 +8.481782846128464115e+00 +8.485496029389116401e+00 +8.489192789909598247e+00 +8.492873172597581899e+00 +8.496537222374051623e+00 +8.500184984171557545e+00 +8.503816502932483701e+00 +8.507431823607319643e+00 +8.511030991152939151e+00 +8.514614050530934009e+00 +8.518181046705942450e+00 +8.521732024643975834e+00 +8.525267029310827027e+00 +8.528786105670420170e+00 +8.532289298683236822e+00 +8.535776653304719019e+00 +8.539248214483729171e+00 +8.542704027160986868e+00 +8.546144136267550095e+00 +8.549568586723314212e+00 +8.552977423435512705e+00 +8.556370691297242814e+00 +8.559748434493906544e+00 +8.563110697205900124e+00 +8.566457523607066804e+00 +8.569788957863055501e+00 +8.573105044129782470e+00 +8.576405826551864564e+00 +8.579691349261084454e+00 +8.582961656374861192e+00 +8.586216791994756292e+00 +8.589456800204969156e+00 +8.592681725070892895e+00 +8.595891610637657720e+00 +8.599086500928695642e+00 +8.602266439944324716e+00 +8.605431471660381249e+00 +8.608581640026823578e+00 +8.611716988966392705e+00 +8.614837562373274693e+00 +8.617943404111766625e+00 +8.621034558015010063e+00 +8.624111067883680093e+00 +8.627172977484738325e+00 +8.630220330544602803e+00 +8.633253170738303339e+00 +8.636271541675899499e+00 +8.639275486887269651e+00 +8.642265049806010069e+00 +8.645240273753154625e+00 +8.648201201921144943e+00 +8.651147877358432936e+00 +8.654080342955021266e+00 +8.656998641429066055e+00 +8.659902815314735491e+00 +8.662792906951370497e+00 +8.665668958473974115e+00 +8.668531011805098885e+00 +8.671379108647991885e+00 +8.674213290481112892e+00 +8.677033598553828497e+00 +8.679840073883305251e+00 +8.682632757252507716e+00 +8.685411689209182384e+00 +8.688176910065831038e+00 +8.690928459900479908e+00 +8.693666378558271290e+00 +8.696390705653714193e+00 +8.691610890088881547e+00 +8.617942935664498094e+00 +8.476708302032918141e+00 +8.261860394283889519e+00 +7.963752092611574795e+00 +7.573337952377004356e+00 +7.087713986595520765e+00 +6.516497231640716592e+00 +5.886501284374521248e+00 +5.240670559904087256e+00 +4.628816115950453280e+00 +4.093206132973325140e+00 +3.657092255051899166e+00 +3.322576591959245818e+00 +3.076915620388968264e+00 +2.901328587665888303e+00 +2.777460746752609122e+00 +2.690325009215888574e+00 +2.628797338485783897e+00 +2.585026755961376210e+00 +2.553601505528157123e+00 +2.530819162281360057e+00 +2.514142335400551431e+00 +2.501820430711534371e+00 +2.492634787280837205e+00 +2.485728709460439667e+00 +2.480494040646763931e+00 +2.476494984456038662e+00 +2.473416473908932822e+00 +2.471028822474329090e+00 +2.469163274283619813e+00 +2.467694925881843915e+00 +2.466530685928714384e+00 +2.465600712860563704e+00 +2.464852276491917848e+00 +2.464245324011772098e+00 +2.463749254358171825e+00 +2.463340555922331809e+00 +2.463001065516936983e+00 +2.462716677451059599e+00 +2.462476380800671105e+00 +2.462271537441864666e+00 +2.462095337733716249e+00 +2.461942388012472005e+00 +2.461808396410228195e+00 +2.461689932397673974e+00 +2.461584241881572765e+00 +2.461489104368252967e+00 +2.461402722129228948e+00 +2.461323633824109791e+00 +2.461250646898049954e+00 +2.461182784454064354e+00 +2.461119243332653195e+00 +2.461059360904882976e+00 +2.461002588667634328e+00 +2.460948471170236740e+00 +2.460896629136213321e+00 +2.460846745898913390e+00 +2.460798556465063847e+00 +2.460751838670312441e+00 +2.460706406006619495e+00 +2.460662101791025513e+00 +2.460618794415018851e+00 +2.460576373468157829e+00 +2.460534746572179188e+00 +2.460493836795411227e+00 +2.460453580543738195e+00 +2.460413925845381655e+00 +2.460374830963524051e+00 +2.460336263284190306e+00 +2.460298198437634198e+00 +2.460260619620268319e+00 +2.460223517091358669e+00 +2.460186887824677537e+00 +2.460150735300319802e+00 +2.460115069426120016e+00 +2.460079906581867704e+00 +2.460045269782756616e+00 +2.460011188961553685e+00 +2.459977701371765857e+00 +2.459944852116811020e+00 +2.459912694812896206e+00 +2.459881292396035590e+00 +2.459850718086519894e+00 +2.459821056527157435e+00 +2.459792405114905378e+00 +2.459764875549057095e+00 +2.459738595623111923e+00 +2.459713711291810156e+00 +2.459690389049702386e+00 +2.459668818663078849e+00 +2.459649216303206654e+00 +2.459631828135716347e+00 +2.459616934428708213e+00 +2.459604854250879047e+00 +2.459595950840749001e+00 +2.459590637739128560e+00 +2.459589385789348714e+00 +2.459592731123751541e+00 +2.459601284270635624e+00 +2.459615740533489969e+00 +2.459636891814197757e+00 +2.459665640074210735e+00 +2.459703012652787457e+00 +2.459750179689645933e+00 +2.459808473931196282e+00 +2.459879413235412038e+00 +2.459964726130918766e+00 +2.460066380831710031e+00 +2.460186618160853378e+00 +2.460327988895559592e+00 +2.460493396113214715e+00 +2.460686143194734221e+00 +2.460909988229563083e+00 +2.461169205667788962e+00 +2.461468656181433179e+00 +2.461813865832029435e+00 +2.462211115798438321e+00 +2.462667544101670991e+00 +2.463191260977401154e+00 +2.463791479797851736e+00 +2.464478665740261754e+00 +2.465264704748028279e+00 +2.466163095743534317e+00 +2.467189169541477156e+00 +2.468360338493511552e+00 +2.469696381587485945e+00 +2.471219770549157424e+00 +2.472956043476412624e+00 +2.474934233705320175e+00 +2.477187362997841369e+00 +2.479753009791001439e+00 +2.482673965199117205e+00 +2.485998991758889609e+00 +2.489783702596668480e+00 +2.494091581818117298e+00 +2.498995170501341789e+00 +2.504577446720277933e+00 +2.510933432499738327e+00 +2.518172065403793347e+00 +2.526418377376787650e+00 +2.535816028124452615e+00 +2.546530244142310551e+00 +2.558751216540926965e+00 +2.572698009697675037e+00 +2.588623026488882761e+00 +2.606817061648565748e+00 +2.627614948931682015e+00 +2.651184514404757220e+00 +2.676328303249124296e+00 +2.702828267179202104e+00 +2.730437903901203889e+00 +2.758892799845464427e+00 +2.787921474423532331e+00 +2.817255668626880816e+00 +2.846639388867250098e+00 +2.875836240511893571e+00 +2.904634821552223301e+00 +2.932852159387822955e+00 +2.960335339781204222e+00 +2.986961587355523751e+00 +3.012637113513188858e+00 +3.037295059483353654e+00 +3.060892841662999686e+00 +3.083409165872378566e+00 +3.104840927150027241e+00 +3.125200160175238828e+00 +3.144511157545437197e+00 +3.162807831865301011e+00 +3.180131364090316382e+00 +3.196528154792821041e+00 +3.212048076261581286e+00 +3.226743010539675716e+00 +3.240665650484584326e+00 +3.253868536586763671e+00 +3.266403300629918682e+00 +3.278320087504671854e+00 +3.289667127952373704e+00 +3.300490437225120921e+00 +3.310833617240457993e+00 +3.320737742529535463e+00 +3.330241312953861943e+00 +3.339380258689438996e+00 +3.348187985285297152e+00 +3.356695448666626724e+00 +3.364931251763102704e+00 +3.372921756007729144e+00 +3.380691202286969066e+00 +3.388261837049608260e+00 +3.395654040223065273e+00 +3.402886452364639602e+00 +3.409976099113816161e+00 +3.416938511530827949e+00 +3.423787841324572589e+00 +3.430536970306352629e+00 +3.437197613668851126e+00 +3.443780416894818952e+00 +3.450295046257372267e+00 +3.456750272992795914e+00 +3.463154051314451198e+00 +3.469513590499191835e+00 +3.475835421320704555e+00 +3.482125457131494350e+00 +3.488389049910529671e+00 +3.494631041599360444e+00 +3.500855811048336985e+00 +3.507067316888059949e+00 +3.513269136630912115e+00 +3.519464502294577635e+00 +3.525656332824702588e+00 +3.531847263578218765e+00 +3.538039673112461259e+00 +3.544235707509006961e+00 +3.550437302444968246e+00 +3.556646203208824630e+00 +3.562863982842825905e+00 +3.569092058579637960e+00 +3.575331706727331138e+00 +3.581584076144040285e+00 +3.587850200431750292e+00 +3.594131008967480501e+00 +3.600427336879917561e+00 +3.606739934069964626e+00 +3.613069473364938666e+00 +3.619416557888041730e+00 +3.625781727717340530e+00 +3.632165465901687540e+00 +3.638568203894802178e+00 +3.644990326463059205e+00 +3.651432176117374251e+00 +3.657894057114818409e+00 +3.664376239071334140e+00 +3.670878960223027399e+00 +3.677402430369910213e+00 +3.683946833532815823e+00 +3.690512330351211734e+00 +3.697099060247077240e+00 +3.703707143377550359e+00 +3.710336682396872199e+00 +3.716987764046207232e+00 +3.723660460588091858e+00 +3.730354831100658686e+00 +3.737070922645298054e+00 +3.743808771325137563e+00 +3.750568403305559073e+00 +3.757349835790870785e+00 +3.764153081137123102e+00 +3.770978147843834005e+00 +3.777825041105886683e+00 +3.784693763430865054e+00 +3.791584315320349674e+00 +3.798496696004551865e+00 +3.805430904202558029e+00 +3.812386938858093544e+00 +3.819364799781085118e+00 +3.826364488119361695e+00 +3.833386006600920659e+00 +3.840429359522513408e+00 +3.847494552501487419e+00 +3.854581592039011628e+00 +3.861690484956330049e+00 +3.868821237622195319e+00 +3.875973854988415290e+00 +3.883148339805844174e+00 +3.890344691983261605e+00 +3.897562908057694120e+00 +3.904802980750741170e+00 +3.912064898590334572e+00 +3.919348645638499384e+00 +3.926654201493628538e+00 +3.933981541353660738e+00 +3.941330636105914387e+00 +3.948701452436026216e+00 +3.956093952950007875e+00 +3.963508096304645179e+00 +3.970943837342474136e+00 +3.978401127228432088e+00 +3.985879913585942180e+00 +3.993380140630725883e+00 +4.000901749301121413e+00 +4.008444677383996790e+00 +4.016008859635651795e+00 +4.023594227897323350e+00 +4.031200711205102039e+00 +4.038828235894140306e+00 +4.046476725697249144e+00 +4.054146101837918792e+00 +4.061836283117985502e+00 +4.069547186000129102e+00 +4.077278724685420741e+00 +4.085030811186202371e+00 +4.092803355394529774e+00 +4.100596265146480235e+00 +4.108409446282522914e+00 +4.116242802704286774e+00 +4.124096236427909901e+00 +4.131969647634243792e+00 +4.139862934716120435e+00 +4.147775994322923765e+00 +4.155708721402628925e+00 +4.163661009241536703e+00 +4.171632749501868354e+00 +4.179623832257369997e+00 +4.187634146027116699e+00 +4.195663577807642319e+00 +4.203712013103505285e+00 +4.211779335956462589e+00 +4.219865428973326615e+00 +4.227970173352624705e+00 +4.236093448910171588e+00 +4.244235134103616858e+00 +4.252395106056063412e+00 +4.260573240578853671e+00 +4.268769412193560875e+00 +4.276983494153256515e+00 +4.285215358463142721e+00 +4.293464875900562916e+00 +4.301731916034469805e+00 +4.310016347244379986e+00 +4.318318036738881815e+00 +4.326636850573695625e+00 +4.334972653669360909e+00 +4.343325309828562908e+00 +4.351694681753141225e+00 +4.360080631060785805e+00 +4.368483018301478893e+00 +4.376901702973674091e+00 +4.385336543540272025e+00 +4.393787397444349985e+00 +4.402254121124751229e+00 +4.410736570031468240e+00 +4.419234598640889189e+00 +4.427748060470900526e+00 +4.436276808095849233e+00 +4.444820693161412706e+00 +4.453379566399343403e+00 +4.461953277642127347e+00 +4.470541675837573337e+00 +4.479144609063282267e+00 +4.487761924541112890e+00 +4.496393468651519676e+00 +4.505039086947880023e+00 +4.513698624170761065e+00 +4.522371924262142961e+00 +4.531058830379592450e+00 +4.539759184910431067e+00 +4.548472829485839419e+00 +4.557199604994955244e+00 +4.565939351598949258e+00 +4.574691908745069036e+00 +4.583457115180680219e+00 +4.592234808967265103e+00 +4.601024827494446967e+00 +4.609827007493951356e+00 +4.618641185053606435e+00 +4.627467195631285612e+00 +4.636304874068875037e+00 +4.645154054606203786e+00 +4.654014570894974057e+00 +4.662886256012683361e+00 +4.671768942476517417e+00 +4.680662462257242140e+00 +4.689566646793075222e+00 +4.698481327003536379e+00 +4.707406333303268298e+00 +4.716341495615846924e+00 +4.725286643387566876e+00 +4.734241605601166469e+00 +4.743206210789544741e+00 +4.752180287049418084e+00 +4.761163662054947565e+00 +4.770156163071289868e+00 +4.779157616968087829e+00 +4.788167850232927236e+00 +4.797186688984647951e+00 +4.806213958986629287e+00 +4.815249485659938600e+00 +4.824293094096372414e+00 +4.833344609071389186e+00 +4.842403855056868878e+00 +4.851470656233743739e+00 +4.860544836504450572e+00 +4.869626219505168052e+00 +4.878714628617865756e+00 +4.887809886982118712e+00 +4.896911817506650166e+00 +4.906020242880610560e+00 +4.915134985584558081e+00 +4.924255867901111472e+00 +4.933382711925289321e+00 +4.942515339574464761e+00 +4.951653572499554734e+00 +4.960797231869686463e+00 +4.969946138213577669e+00 +4.979100111309552545e+00 +4.988258970117173341e+00 +4.997422532744232093e+00 +5.006590616443540753e+00 +5.015763037634476618e+00 +5.024939611944626350e+00 +5.034120154267398561e+00 +5.043304478831752924e+00 +5.052492399280744451e+00 +5.061683728755867584e+00 +5.070878279984670556e+00 +5.080075865369414245e+00 +5.089276297075036481e+00 +5.098479387114871031e+00 +5.107684947433032363e+00 +5.116892789982581569e+00 +5.126102726798837494e+00 +5.135314570067459172e+00 +5.144528132187051739e+00 +5.153743225826262986e+00 +5.162959663975390967e+00 +5.172177259992670528e+00 +5.181395827645506102e+00 +5.190615181146856827e+00 +5.199835135187163004e+00 +5.209055504962142535e+00 +5.218276106196794828e+00 +5.227496755165988773e+00 +5.236717268711982065e+00 +5.245937464259249339e+00 +5.255157159826849167e+00 +5.264376174038767786e+00 +5.273594326132428733e+00 +5.282811435965673041e+00 +5.292027324022431145e+00 +5.301241811417352956e+00 +5.310454719899531995e+00 +5.319665871855536743e+00 +5.328875090311888663e+00 +5.338082198937169842e+00 +5.347287022043792248e+00 +5.356489384589612435e+00 +5.365689112179449438e+00 +5.374886031066576031e+00 +5.384079968154228624e+00 +5.393270750997270824e+00 +5.402458207803920942e+00 +5.411642167437676676e+00 +5.420822459419459172e+00 +5.429998913929903637e+00 +5.439171361811942162e+00 +5.448339634573562407e+00 +5.457503564390840722e+00 +5.466662984111181345e+00 +5.475817727256805156e+00 +5.484967628028456943e+00 +5.494112521309332919e+00 +5.503252242669212535e+00 +5.512386628368794561e+00 +5.521515515364207261e+00 +5.530638741311713957e+00 +5.539756144572556273e+00 +5.548867564217963455e+00 +5.557972840034281603e+00 +5.567071812528233465e+00 +5.576164322932285700e+00 +5.585250213210096071e+00 +5.594329326062080554e+00 +5.603401504930992871e+00 +5.612466594007618603e+00 +5.621524438236480847e+00 +5.630574883321600055e+00 +5.639617775732260085e+00 +5.648652962708814229e+00 +5.657680292268464584e+00 +5.666699613211078734e+00 +5.675710775124949592e+00 +5.684713628392583651e+00 +5.693708024196411976e+00 +5.702693814524508298e+00 +5.711670852176244040e+00 +5.720638990767905163e+00 +5.729598084738235286e+00 +5.738547989353972589e+00 +5.747488560715256156e+00 +5.756419655761015441e+00 +5.765341132274265590e+00 +5.774252848887323708e+00 +5.783154665086968294e+00 +5.792046441219485864e+00 +5.800928038495662520e+00 +5.809799318995654716e+00 +5.818660145673794304e+00 +5.827510382363287889e+00 +5.836349893780825582e+00 +5.845178545531080516e+00 +5.853996204111136414e+00 +5.862802736914781043e+00 +5.871598012236717068e+00 +5.880381899276663660e+00 +5.889154268143359516e+00 +5.897914989858445978e+00 +5.906663936360256884e+00 +5.915400980507499185e+00 +5.924125996082825196e+00 +5.932838857796271625e+00 +5.941539441288647083e+00 +5.950227623134749066e+00 +5.958903280846496564e+00 +5.967566292875975620e+00 +5.976217805420086293e+00 +5.984857706621060203e+00 +5.993485886702785592e+00 +6.002102237650547067e+00 +6.010706652958334395e+00 +6.019299027430814242e+00 +6.027879257029587379e+00 +6.036447238755023648e+00 +6.045002870556679397e+00 +6.053546051266582850e+00 +6.062076680550712915e+00 +6.070594658874847838e+00 +6.079099887481721254e+00 +6.087592268377022720e+00 +6.096071704322143958e+00 +6.104538098832190229e+00 +6.112991356177802871e+00 +6.121431381389880855e+00 +6.129858080266343379e+00 +6.138271359380222947e+00 +6.146671126088707027e+00 +6.155057288542584715e+00 +6.163429755695931433e+00 +6.171788437315697706e+00 +6.180133243991088321e+00 +6.188464087142573788e+00 +6.196780879030484357e+00 +6.205083532763078225e+00 +6.213371962304080398e+00 +6.221646082479669104e+00 +6.229905808984884885e+00 +6.238151058389490800e+00 +6.246381748143281953e+00 +6.254597796580871005e+00 +6.262799122925938988e+00 +6.270985647295029608e+00 +6.279157290700853267e+00 +6.287313975055186077e+00 +6.295455623171314130e+00 +6.303582158766134924e+00 +6.311693506461860892e+00 +6.319789591787390748e+00 +6.327870341179378855e+00 +6.335935681982995504e+00 +6.343985542452392323e+00 +6.352019851750947410e+00 +6.360038539951231584e+00 +6.368041538034775684e+00 +6.376028777891594501e+00 +6.384000192319556177e+00 +6.391955715023531326e+00 +6.399895280614380511e+00 +6.407818824607780073e+00 +6.415726283422911180e+00 +6.423617594380958806e+00 +6.431492695703541429e+00 +6.439351526510948887e+00 +6.447194026820318058e+00 +6.455020137543638015e+00 +6.462829800485696552e+00 +6.470622958341895270e+00 +6.478399554695977614e+00 +6.486159534017664541e+00 +6.493902841660196046e+00 +6.501629423857803403e+00 +6.509339227723071275e+00 +6.517032201244250089e+00 +6.524708293282499127e+00 +6.532367453569019489e+00 +6.540009632702165732e+00 +6.547634782144450938e+00 +6.555242854219528681e+00 +6.562833802109073744e+00 +6.570407579849630864e+00 +6.577964142329385311e+00 +6.585503445284924595e+00 +6.593025445297861609e+00 +6.600530099791505734e+00 +6.608017367027391842e+00 +6.615487206101837714e+00 +6.622939576942403761e+00 +6.630374440304315442e+00 +6.637791757766866141e+00 +6.645191491729756095e+00 +6.652573605409369151e+00 +6.659938062835058403e+00 +6.667284828845359002e+00 +6.674613869084152995e+00 +6.681925149996841284e+00 +6.689218638826416097e+00 +6.696494303609554777e+00 +6.703752113172658511e+00 +6.710992037127828880e+00 +6.718214045868876383e+00 +6.725418110567233043e+00 +6.732604203167863233e+00 +6.739772296385153183e+00 +6.746922363698754310e+00 +6.754054379349408777e+00 +6.761168318334737748e+00 +6.768264156405017218e+00 +6.775341870058934290e+00 +6.782401436539267081e+00 +6.789442833828619683e+00 +6.796466040645084306e+00 +6.803471036437878539e+00 +6.810457801382987952e+00 +6.817426316378782047e+00 +6.824376563041571586e+00 +6.831308523701217439e+00 +6.838222181396655941e+00 +6.845117519871442013e+00 +6.851994523569270967e+00 +6.858853177629473663e+00 +6.865693467882506340e+00 +6.872515380845413802e+00 +6.879318903717297928e+00 +6.886104024374763100e+00 +6.892870731367333192e+00 +6.899619013912888121e+00 +6.906348861893057745e+00 +6.913060265848635311e+00 +6.919753216974951826e+00 +6.926427707117264632e+00 +6.933083728766124665e+00 +6.939721275052734839e+00 +6.946340339744311976e+00 +6.952940917239423868e+00 +6.959523002563354765e+00 +6.966086591363408687e+00 +6.972631679904267799e+00 +6.979158265063302835e+00 +6.985666344325910160e+00 +6.992155915780827513e+00 +6.998626978115437325e+00 +7.005079530611105554e+00 +7.011513573138479671e+00 +7.017929106152793750e+00 +7.024326130689209080e+00 +7.030704648358105047e+00 +7.037064661340389549e+00 +7.043406172382823627e+00 +7.049729184793342540e+00 +7.056033702436351973e+00 +7.062319729728057993e+00 +7.068587271631807667e+00 +7.074836333653388820e+00 +7.081066921836383088e+00 +7.087279042757478109e+00 +7.093472703521834788e+00 +7.099647911758408370e+00 +7.105804675615317478e+00 +7.111943003755193615e+00 +7.118062905350548419e+00 +7.124164390079139153e+00 +7.130247468119357279e+00 +7.136312150145609934e+00 +7.142358447323713833e+00 +7.148386371306298059e+00 +7.154395934228222842e+00 +7.160387148702005433e+00 +7.166360027813235334e+00 +7.172314585116030372e+00 +7.178250834628485677e+00 +7.184168790828138640e+00 +7.190068468647453415e+00 +7.195949883469282327e+00 +7.201813051122385900e+00 +7.207657987876940453e+00 +7.213484710440056347e+00 +7.219293235951315779e+00 +7.225083581978317682e+00 +7.230855766512267024e+00 +7.236609807963503727e+00 +7.242345725157134595e+00 +7.248063537328626182e+00 +7.253763264119413634e+00 +7.259444925572555718e+00 +7.265108542128363212e+00 +7.270754134620082354e+00 +7.276381724269565865e+00 +7.281991332682972384e+00 +7.287582981846481900e+00 +7.293156694122023609e+00 +7.298712492243026873e+00 +7.304250399310172170e+00 +7.309770438787191793e+00 +7.315272634496640336e+00 +7.320757010615741578e+00 +7.326223591672203383e+00 +7.331672402540062805e+00 +7.337103468435575593e+00 +7.342516814913093270e+00 +7.347912467860954422e+00 +7.353290453497454138e+00 +7.358650798366728196e+00 +7.363993529334765142e+00 +7.369318673585375734e+00 +7.374626258616178376e+00 +7.379916312234625408e+00 +7.385188862554080913e+00 +7.390443937989822132e+00 +7.395681567255170563e+00 +7.400901779357557331e+00 +7.406104603594682700e+00 +7.411290069550616977e+00 +7.416458207091990218e+00 +7.421609046364165962e+00 +7.426742617787459366e+00 +7.431858952053330469e+00 +7.436958080120660952e+00 +7.442040033212016681e+00 +7.447104842809917358e+00 +7.452152540653161239e+00 +7.457183158733160511e+00 +7.462196729290276664e+00 +7.467193284810209164e+00 +7.472172858020387665e+00 +7.477135481886387325e+00 +7.482081189608363658e+00 +7.487010014617526465e+00 +7.491921990572604884e+00 +7.496817151356369280e+00 +7.501695531072156697e+00 +7.506557164040398078e+00 +7.511402084795216538e+00 +7.516230328081006107e+00 +7.521041928849060199e+00 +7.525836922254184103e+00 +7.530615343651380300e+00 +7.535377228592519572e+00 +7.540122612823047632e+00 +7.544851532278714856e+00 +7.549564023082316666e+00 +7.554260121540478323e+00 +7.558939864140436171e+00 +7.563603287546873943e+00 +7.568250428598728874e+00 +7.572881324306093731e+00 +7.577496011847063784e+00 +7.582094528564674363e+00 +7.586676911963811776e+00 +7.591243199708165079e+00 +7.595793429617211601e+00 +7.600327639663197132e+00 +7.604845867968167639e+00 +7.609348152801015175e+00 +7.613834532574520253e+00 +7.618305045842459933e+00 +7.622759731296703478e+00 +7.627198627764347094e+00 +7.631621774204866426e+00 +7.636029209707295706e+00 +7.640420973487424661e+00 +7.644797104885004302e+00 +7.649157643361016667e+00 +7.653502628494912585e+00 +7.657832099981909835e+00 +7.662146097630312624e+00 +7.666444661358804424e+00 +7.670727831193856261e+00 +7.674995647267046195e+00 +7.679248149812496038e+00 +7.683485379164267215e+00 +7.687707375753804584e+00 +7.691914180107406906e+00 +7.696105832843699091e+00 +7.700282374671143515e+00 +7.704443846385565564e+00 +7.708590288867704032e+00 +7.712721743080763304e+00 +7.716838250068040139e+00 +7.720939850950486516e+00 +7.725026586924400362e+00 +7.729098499259029253e+00 +7.733155629294270028e+00 +7.737198018438364855e+00 +7.741225708165615060e+00 +7.745238740014118051e+00 +7.749237155583534431e+00 +7.753220996532851572e+00 +7.757190304578207574e+00 +7.761145121490693910e+00 +7.765085489094197158e+00 +7.769011449263272695e+00 +7.772923043921025510e+00 +7.776820315036998110e+00 +7.780703304625113503e+00 +7.784572054741602187e+00 +7.788426607482975328e+00 +7.792267004983997936e+00 +7.796093289415697569e+00 +7.799905502983394356e+00 +7.803703687924725685e+00 +7.807487886507715302e+00 +7.811258141028865509e+00 +7.815014493811238694e+00 +7.818756987202583275e+00 +7.822485663573484516e+00 +7.826200565315508229e+00 +7.829901734839374683e+00 +7.833589214573173365e+00 +7.837263046960558199e+00 +7.840923274458987180e+00 +7.844569939537983316e+00 +7.848203084677383146e+00 +7.851822752365652747e+00 +7.855428985098173555e+00 +7.859021825375576142e+00 +7.862601315702084648e+00 +7.866167498583870099e+00 +7.869720416527439255e+00 +7.873260112038028780e+00 +7.876786627618013625e+00 +7.880300005765347393e+00 +7.883800288972013348e+00 +7.887287519722473661e+00 +7.890761740492189702e+00 +7.894222993746078387e+00 +7.897671321937069777e+00 +7.901106767504614936e+00 +7.904529372873263071e+00 +7.907939180451210248e+00 +7.911336232628892517e+00 +7.914720571777596803e+00 +7.918092240248066460e+00 +7.921451279732828255e+00 +7.924797731912121890e+00 +7.928131638452363461e+00 +7.931453041004699500e+00 +7.934761981203532599e+00 +7.938058500665075456e+00 +7.941342640985913803e+00 +7.944614443741585319e+00 +7.947873950485201178e+00 +7.951121202746051608e+00 +7.954356242028241653e+00 +7.957579109809344686e+00 +7.960789847539095021e+00 +7.963988496638052084e+00 +7.967175098496323216e+00 +7.970349694472295354e+00 +7.973512325891368491e+00 +7.976663034044712219e+00 +7.979801860188070251e+00 +7.982928845540527618e+00 +7.986044031283336508e+00 +7.989147458556869807e+00 +7.992239168453073361e+00 +7.995319202004717241e+00 +7.998387600172630840e+00 +8.001444403831671437e+00 +8.004489653756147405e+00 +8.007523390605207680e+00 +8.010545654908577617e+00 +8.013556487052941435e+00 +8.016555927269225279e+00 +8.019544015620859057e+00 +8.022520791993198230e+00 +8.025486296084102023e+00 +8.028440567395747962e+00 +8.031383645227611723e+00 +8.034315568670672647e+00 +8.037236376602736598e+00 +8.040146107684849497e+00 +8.043044800358760682e+00 +8.045932492845333073e+00 +8.048809223143861047e+00 +8.051675029032198339e+00 +8.054529948067637335e+00 +8.057374017588445625e+00 +8.060207274716042036e+00 +8.060079378064195055e+00 +7.994897708758632149e+00 +7.866575082155303988e+00 +7.670045014894467883e+00 +7.396889492902300134e+00 +7.039310938360772596e+00 +6.595273423734228757e+00 +6.074311592781951319e+00 +5.501622204006522132e+00 +4.916767299289515947e+00 +4.364931040492450620e+00 +3.883787908081010265e+00 +3.493421412653623825e+00 +3.194857506457473573e+00 +2.976052585910706760e+00 +2.819865700654979879e+00 +2.709761588922509290e+00 +2.632331508077783155e+00 +2.577661385370596303e+00 +2.538768757640182727e+00 +2.510845283007834272e+00 +2.490602449436890353e+00 +2.475786472145752537e+00 +2.464842114922344507e+00 +2.456686438265857753e+00 +2.450557966840674062e+00 +2.445916024329218619e+00 +2.442373104763419178e+00 +2.439649019284485743e+00 +2.437539490936758924e+00 +2.435894425344775183e+00 +2.434602728489700496e+00 +2.433581600795728495e+00 +2.432768922503328213e+00 +2.432117794082411688e+00 +2.431592592280405363e+00 +2.431166100885580938e+00 +2.430817409403692508e+00 +2.430530364371572993e+00 +2.430292421070210374e+00 +2.430093787192204147e+00 +2.429926780683796750e+00 +2.429785345614849934e+00 +2.429664685297895144e+00 +2.429560982865941465e+00 +2.429471187424666390e+00 +2.429392849616271999e+00 +2.429323994596381375e+00 +2.429263023472236771e+00 +2.429208636491426265e+00 +2.429159772926793082e+00 +2.429115563833494917e+00 +2.429075294772216065e+00 +2.429038376280724165e+00 +2.429004320394083205e+00 +2.428972721905611198e+00 +2.428943243358186788e+00 +2.428915602982286259e+00 +2.428889564970794890e+00 +2.428864931614053368e+00 +2.428841536921568789e+00 +2.428819241436535048e+00 +2.428797928011298346e+00 +2.428777498360288778e+00 +2.428757870244831363e+00 +2.428738975174062453e+00 +2.428720756529712421e+00 +2.428703168041211224e+00 +2.428686172552450451e+00 +2.428669741033460117e+00 +2.428653851799892127e+00 +2.428638489911012943e+00 +2.428623646723306884e+00 +2.428609319582098358e+00 +2.428595511638065751e+00 +2.428582231779285561e+00 +2.428569494672788931e+00 +2.428557320912516637e+00 +2.428545737273248850e+00 +2.428534777072604456e+00 +2.428524480645628092e+00 +2.428514895938882034e+00 +2.428506079233433201e+00 +2.428498096008655072e+00 +2.428491021961500351e+00 +2.428484944198825879e+00 +2.428479962623551369e+00 +2.428476191538956108e+00 +2.428473761499365224e+00 +2.428472821439827900e+00 +2.428473541122302848e+00 +2.428476113941378411e+00 +2.428480760138724381e+00 +2.428487730482452367e+00 +2.428497310475393522e+00 +2.428509825165120706e+00 +2.428525644638498626e+00 +2.428545190294705503e+00 +2.428568942003285436e+00 +2.428597446267929616e+00 +2.428631325532645935e+00 +2.428671288784879145e+00 +2.428718143630355097e+00 +2.428772810037096441e+00 +2.428836335971658045e+00 +2.428909915179453538e+00 +2.428994907393575708e+00 +2.429092861293256966e+00 +2.429205540574730371e+00 +2.429334953544403319e+00 +2.429483386697863345e+00 +2.429653442809327490e+00 +2.429848084125894481e+00 +2.430070681340972705e+00 +2.430325069113170589e+00 +2.430615609003002220e+00 +2.430947260822561518e+00 +2.431325663535913062e+00 +2.431757227014218703e+00 +2.432249236144075066e+00 +2.432809969015745644e+00 +2.433448831186595829e+00 +2.434176508332175359e+00 +2.435005139972715504e+00 +2.435948517408073055e+00 +2.437022309523277031e+00 +2.438244320756601802e+00 +2.439634786272330658e+00 +2.441216710274443980e+00 +2.443016254462757608e+00 +2.445063184901042241e+00 +2.447391387073220237e+00 +2.450039460688511639e+00 +2.453051407902060888e+00 +2.456477431087388474e+00 +2.460374859171465367e+00 +2.464809224853170999e+00 +2.469855518783170112e+00 +2.475599650964399601e+00 +2.482140154156116552e+00 +2.489590168757483291e+00 +2.498079753195654895e+00 +2.507758567728154642e+00 +2.518798981973591644e+00 +2.531399656179114110e+00 +2.545789641431937422e+00 +2.562233032218318662e+00 +2.581034182527549792e+00 +2.602143977366468519e+00 +2.624632600246376679e+00 +2.648304534301964885e+00 +2.672940148927175130e+00 +2.698305020446296609e+00 +2.724159428111106340e+00 +2.750267292991677159e+00 +2.776403979638642383e+00 +2.802362576363419677e+00 +2.827958473192729194e+00 +2.853032237282222106e+00 +2.877450925209953159e+00 +2.901108063078380095e+00 +2.923922571001328130e+00 +2.945836916457872157e+00 +2.966814761763265196e+00 +2.986838335070273853e+00 +3.005905710789940066e+00 +3.024028140760923300e+00 +3.041227536269494713e+00 +3.057534165549575800e+00 +3.072984602625082218e+00 +3.087619941253107569e+00 +3.101484271652536151e+00 +3.114623406737599964e+00 +3.127083837718187098e+00 +3.138911895224237192e+00 +3.150153090721017790e+00 +3.160851613207948496e+00 +3.171049957482320991e+00 +3.180788662177798543e+00 +3.190106138045273987e+00 +3.199038569310754809e+00 +3.207619873273396482e+00 +3.215881705502504850e+00 +3.223853500001146344e+00 +3.231562535499917566e+00 +3.239034020621201382e+00 +3.246291192017632277e+00 +3.253355420752440441e+00 +3.260246323171898108e+00 +3.266981873341261888e+00 +3.273578514795304706e+00 +3.280051269912248380e+00 +3.286413845673240353e+00 +3.292678734934883167e+00 +3.298857312633693528e+00 +3.304959926571453543e+00 +3.310995982609813648e+00 +3.316974024240406216e+00 +3.322901806600928154e+00 +3.328786365084544396e+00 +3.334634078745090768e+00 +3.340450728738265873e+00 +3.346241552063094815e+00 +3.352011290881348859e+00 +3.357764237697852039e+00 +3.363504276683583427e+00 +3.369234921417908701e+00 +3.374959349317265378e+00 +3.380680433006382657e+00 +3.386400768875222678e+00 +3.392122703051108967e+00 +3.397848355001276133e+00 +3.403579638966740983e+00 +3.409318283414369155e+00 +3.415065848680199245e+00 +3.420823742963928105e+00 +3.426593236821892763e+00 +3.432375476293936245e+00 +3.438171494788418325e+00 +3.443982223839125112e+00 +3.449808502838108915e+00 +3.455651087839444191e+00 +3.461510659520529831e+00 +3.467387830379870195e+00 +3.473283151243142797e+00 +3.479197117142897255e+00 +3.485130172631218937e+00 +3.491082716579267498e+00 +3.497055106512592104e+00 +3.503047662526586059e+00 +3.509060670822282901e+00 +3.515094386898956813e+00 +3.521149038436488965e+00 +3.527224827897442516e+00 +3.533321934875813142e+00 +3.539440518217007003e+00 +3.545580717931138715e+00 +3.551742656919727015e+00 +3.557926442533885236e+00 +3.564132167980389454e+00 +3.570359913590420042e+00 +3.576609747964322406e+00 +3.582881729004484761e+00 +3.589175904847225596e+00 +3.595492314703542025e+00 +3.601830991130500870e+00 +3.608191962353448634e+00 +3.614575252529407923e+00 +3.620980882009828594e+00 +3.627408867595381281e+00 +3.633859222777516607e+00 +3.640331958005811774e+00 +3.646827080985358016e+00 +3.653344596995530047e+00 +3.659884509230739269e+00 +3.666446819169469684e+00 +3.673031526980495620e+00 +3.679638631973556340e+00 +3.686268133094376509e+00 +3.692920029449106245e+00 +3.699594320822125582e+00 +3.706291008128802744e+00 +3.713010093731691441e+00 +3.719751581554656461e+00 +3.726515476957362516e+00 +3.733301786372479114e+00 +3.740110516744026725e+00 +3.746941674854406212e+00 +3.753795266796396746e+00 +3.760671297305981042e+00 +3.767569769053314310e+00 +3.774490682111908413e+00 +3.781434033571936748e+00 +3.788399817269432646e+00 +3.795388023607999095e+00 +3.802398639453844265e+00 +3.809431648088290157e+00 +3.816487029204892245e+00 +3.823564758940594110e+00 +3.830664809932430970e+00 +3.837787151392888063e+00 +3.844931749198414295e+00 +3.852098565986714185e+00 +3.859287561259337807e+00 +3.866498691486897954e+00 +3.873731910214799790e+00 +3.880987168167892243e+00 +3.888264413352873206e+00 +3.895563591157565675e+00 +3.902884644446464435e+00 +3.910227513652174469e+00 +3.917592136862459551e+00 +3.924978449902821076e+00 +3.932386386414601809e+00 +3.939815877928620758e+00 +3.947266853934520370e+00 +3.954739241945911310e+00 +3.962232967561550634e+00 +3.969747954522711453e+00 +3.977284124766975015e+00 +3.984841398478648600e+00 +3.992419694136018826e+00 +4.000018928555661546e+00 +4.007639016934010812e+00 +4.015279872886362789e+00 +4.022941408483537984e+00 +4.030623534286353227e+00 +4.038326159378081925e+00 +4.046049191395064248e+00 +4.053792536555604897e+00 +4.061556099687319232e+00 +4.069339784253027226e+00 +4.077143492375343570e+00 +4.084967124860055421e+00 +4.092810581218397026e+00 +4.100673759688325148e+00 +4.108556557254875230e+00 +4.116458869669661347e+00 +4.124380591469641644e+00 +4.132321615995151021e+00 +4.140281835407343181e+00 +4.148261140705010064e+00 +4.156259421740927884e+00 +4.164276567237686244e+00 +4.172312464803113130e+00 +4.180367000945297562e+00 +4.188440061087268518e+00 +4.196531529581347897e+00 +4.204641289723232589e+00 +4.212769223765787885e+00 +4.220915212932648153e+00 +4.229079137431577706e+00 +4.237260876467658477e+00 +4.245460308256312487e+00 +4.253677310036170667e+00 +4.261911758081815549e+00 +4.270163527716402285e+00 +4.278432493324189068e+00 +4.286718528362960079e+00 +4.295021505376385385e+00 +4.303341296006305328e+00 +4.311677771004962523e+00 +4.320030800247181446e+00 +4.328400252742504506e+00 +4.336785996647302355e+00 +4.345187899276842458e+00 +4.353605827117355886e+00 +4.362039645838063251e+00 +4.370489220303215738e+00 +4.378954414584104171e+00 +4.387435091971083168e+00 +4.395931114985581090e+00 +4.404442345392121538e+00 +4.412968644210350178e+00 +4.421509871727057117e+00 +4.430065887508224165e+00 +4.438636550411079185e+00 +4.447221718596147788e+00 +4.455821249539342332e+00 +4.464435000044035817e+00 +4.473062826253181967e+00 +4.481704583661426433e+00 +4.490360127127226875e+00 +4.499029310885015676e+00 +4.507711988557346672e+00 +4.516408013167065860e+00 +4.525117237149492766e+00 +4.533839512364608915e+00 +4.542574690109248081e+00 +4.551322621129299861e+00 +4.560083155631916796e+00 +4.568856143297711725e+00 +4.577641433292965800e+00 +4.586438874281798306e+00 +4.595248314438372006e+00 +4.604069601459038097e+00 +4.612902582574497146e+00 +4.621747104561906738e+00 +4.630603013756959818e+00 +4.639470156065940820e+00 +4.648348376977720520e+00 +4.657237521575701145e+00 +4.666137434549685992e+00 +4.675047960207688647e+00 +4.683968942487649834e+00 +4.692900224969061895e+00 +4.701841650884466262e+00 +4.710793063130840785e+00 +4.719754304280847634e+00 +4.728725216593904435e+00 +4.737705642027099984e+00 +4.746695422245903906e+00 +4.755694398634659592e+00 +4.764702412306847989e+00 +4.773719304115100925e+00 +4.782744914660911562e+00 +4.791779084304089054e+00 +4.800821653171868597e+00 +4.809872461008948719e+00 +4.818931346994006049e+00 +4.827998149603239142e+00 +4.837072706514737419e+00 +4.846154854548286650e+00 +4.855244429635835246e+00 +4.864341266818217768e+00 +4.873445200264113986e+00 +4.882556063307440297e+00 +4.891673688499631467e+00 +4.900797907673583254e+00 +4.909928552016249448e+00 +4.919065452147187933e+00 +4.928208438200736730e+00 +4.937357339909718590e+00 +4.946511986688905793e+00 +4.955672207716881772e+00 +4.964837832015044583e+00 +4.974008688522938648e+00 +4.983184606169185571e+00 +4.992365413937613461e+00 +5.001550940928284561e+00 +5.010741016413311044e+00 +5.019935469887453650e+00 +5.029134131113650596e+00 +5.038336830163579805e+00 +5.047543397453607028e+00 +5.056753663776312635e+00 +5.065967460327988725e+00 +5.075184618732377473e+00 +5.084404971061045941e+00 +5.093628349850698456e+00 +5.102854588117764933e+00 +5.112083519370590246e+00 +5.121314977619524811e+00 +5.130548797385178439e+00 +5.139784813705134070e+00 +5.149022862139316814e+00 +5.158262778774284740e+00 +5.167504400226610173e+00 +5.176747563645514028e+00 +5.185992106714969019e+00 +5.195237867655335684e+00 +5.204484685224716856e+00 +5.213732398720095418e+00 +5.222980847978359265e+00 +5.232229873377304052e+00 +5.241479315836654607e+00 +5.250729016819159156e+00 +5.259978818331832784e+00 +5.269228562927366966e+00 +5.278478093705682994e+00 +5.287727254315747416e+00 +5.296975888957587308e+00 +5.306223842384532929e+00 +5.315470959905722381e+00 +5.324717087388814996e+00 +5.333962071262968507e+00 +5.343205758522032944e+00 +5.352447996727985213e+00 +5.361688634014560861e+00 +5.370927519091115876e+00 +5.380164501246667896e+00 +5.389399430354136378e+00 +5.398632156874735522e+00 +5.407862531862559941e+00 +5.417090406969272465e+00 +5.426315634448972247e+00 +5.435538067163143694e+00 +5.444757558585753721e+00 +5.453973962808392528e+00 +5.463187134545558266e+00 +5.472396929139960342e+00 +5.481603202567926658e+00 +5.490805811444818829e+00 +5.500004613030526457e+00 +5.509199465234953408e+00 +5.518390226623560935e+00 +5.527576756422885929e+00 +5.536758914526094699e+00 +5.545936561498493234e+00 +5.555109558583065876e+00 +5.564277767705961608e+00 +5.573441051481962560e+00 +5.582599273219923219e+00 +5.591752296928176769e+00 +5.600899987319877482e+00 +5.610042209818296932e+00 +5.619178830562099769e+00 +5.628309716410503150e+00 +5.637434734948428172e+00 +5.646553754491549171e+00 +5.655666644091292383e+00 +5.664773273539742249e+00 +5.673873513374498856e+00 +5.682967234883433250e+00 +5.692054310109377901e+00 +5.701134611854712375e+00 +5.710208013685900141e+00 +5.719274389937890390e+00 +5.728333615718479876e+00 +5.737385566912552193e+00 +5.746430120186227342e+00 +5.755467152990938473e+00 +5.764496543567384279e+00 +5.773518170949422768e+00 +5.782531914967844244e+00 +5.791537656254030608e+00 +5.800535276243575566e+00 +5.809524657179736984e+00 +5.818505682116849265e+00 +5.827478234923593625e+00 +5.836442200286212412e+00 +5.845397463711566211e+00 +5.854343911530163425e+00 +5.863281430899020208e+00 +5.872209909804485761e+00 +5.881129237064908644e+00 +5.890039302333258675e+00 +5.898939996099610283e+00 +5.907831209693540586e+00 +5.916712835286450201e+00 +5.925584765893751715e+00 +5.934446895376980002e+00 +5.943299118445812823e+00 +5.952141330659966201e+00 +5.960973428431044496e+00 +5.969795309024227947e+00 +5.978606870559933562e+00 +5.987408012015320580e+00 +5.996198633225758634e+00 +6.004978634886162681e+00 +6.013747918552239113e+00 +6.022506386641661713e+00 +6.031253942435142790e+00 +6.039990490077404850e+00 +6.048715934578080322e+00 +6.057430181812502923e+00 +6.066133138522426194e+00 +6.074824712316650555e+00 +6.083504811671549106e+00 +6.092173345931526818e+00 +6.100830225309378463e+00 +6.109475360886571949e+00 +6.118108664613428616e+00 +6.126730049309253801e+00 +6.135339428662346606e+00 +6.143936717229948385e+00 +6.152521830438102413e+00 +6.161094684581447822e+00 +6.169655196822898091e+00 +6.178203285193289318e+00 +6.186738868590905938e+00 +6.195261866780938931e+00 +6.203772200394910286e+00 +6.212269790929935809e+00 +6.220754560748012807e+00 +6.229226433075144342e+00 +6.237685332000442173e+00 +6.246131182475149757e+00 +6.254563910311585317e+00 +6.262983442181997873e+00 +6.271389705617394839e+00 +6.279782629006250616e+00 +6.288162141593199195e+00 +6.296528173477607737e+00 +6.304880655612114637e+00 +6.313219519801089419e+00 +6.321544698699050002e+00 +6.329856125808973388e+00 +6.338153735480574369e+00 +6.346437462908518512e+00 +6.354707244130565869e+00 +6.362963016025657836e+00 +6.371204716311932970e+00 +6.379432283544712590e+00 +6.387645657114385145e+00 +6.395844777244274582e+00 +6.404029584988427004e+00 +6.412200022229345819e+00 +6.420356031675680697e+00 +6.428497556859847251e+00 +6.436624542135621851e+00 +6.444736932675636965e+00 +6.452834674468876486e+00 +6.460917714318082261e+00 +6.468985999837139289e+00 +6.477039479448382764e+00 +6.485078102379880249e+00 +6.493101818662660563e+00 +6.501110579127884037e+00 +6.509104335403998576e+00 +6.517083039913803333e+00 +6.525046645871510620e+00 +6.532995107279756297e+00 +6.540928378926533782e+00 +6.548846416382145819e+00 +6.556749175996058554e+00 +6.564636614893750277e+00 +6.572508690973513978e+00 +6.580365362903217274e+00 +6.588206590117028583e+00 +6.596032332812088228e+00 +6.603842551945188433e+00 +6.611637209229373369e+00 +6.619416267130526776e+00 +6.627179688863918727e+00 +6.634927438390715082e+00 +6.642659480414490503e+00 +6.650375780377649093e+00 +6.658076304457864580e+00 +6.665761019564474310e+00 +6.673429893334843044e+00 +6.681082894130691230e+00 +6.688719991034419721e+00 +6.696341153845393634e+00 +6.703946353076176479e+00 +6.711535559948787366e+00 +6.719108746390896059e+00 +6.726665885032007353e+00 +6.734206949199643688e+00 +6.741731912915442493e+00 +6.749240750891308593e+00 +6.756733438525500901e+00 +6.764209951898711992e+00 +6.771670267770101503e+00 +6.779114363573370383e+00 +6.786542217412760536e+00 +6.793953808059056243e+00 +6.801349114945569596e+00 +6.808728118164129484e+00 +6.816090798461003075e+00 +6.823437137232859939e+00 +6.830767116522695304e+00 +6.838080719015721343e+00 +6.845377928035288662e+00 +6.852658727538754491e+00 +6.859923102113375748e+00 +6.867171036972152365e+00 +6.874402517949688374e+00 +6.881617531498042339e+00 +6.888816064682540485e+00 +6.895998105177623572e+00 +6.903163641262640482e+00 +6.910312661817680890e+00 +6.917445156319356414e+00 +6.924561114836597753e+00 +6.931660528026464263e+00 +6.938743387129891360e+00 +6.945809683967500092e+00 +6.952859410935360529e+00 +6.959892561000756928e+00 +6.966909127697960002e+00 +6.973909105123986762e+00 +6.980892487934372781e+00 +6.987859271338914269e+00 +6.994809451097438568e+00 +7.001743023515567543e+00 +7.008659985440457874e+00 +7.015560334256566222e+00 +7.022444067881417951e+00 +7.029311184761338538e+00 +7.036161683867240058e+00 +7.042995564690381016e+00 +7.049812827238110202e+00 +7.056613472029646061e+00 +7.063397500091863179e+00 +7.070164912955025471e+00 +7.076915712648606416e+00 +7.083649901697043560e+00 +7.090367483115539216e+00 +7.097068460405848711e+00 +7.103752837552063326e+00 +7.110420619016441179e+00 +7.117071809735193710e+00 +7.123706415114307688e+00 +7.130324441025383209e+00 +7.136925893801432608e+00 +7.143510780232759316e+00 +7.150079107562758551e+00 +7.156630883483817485e+00 +7.163166116133146133e+00 +7.169684814088663316e+00 +7.176186986364871956e+00 +7.182672642408762798e+00 +7.189141792095702144e+00 +7.195594445725349786e+00 +7.202030614017580490e+00 +7.208450308108423243e+00 +7.214853539545991623e+00 +7.221240320286458569e+00 +7.227610662690004517e+00 +7.233964579516811710e+00 +7.240302083923056742e+00 +7.246623189456897762e+00 +7.252927910054511429e+00 +7.259216260036117419e+00 +7.265488254102013599e+00 +7.271743907328650280e+00 +7.277983235164684928e+00 +7.284206253427068845e+00 +7.290412978297158730e+00 +7.296603426316821128e+00 +7.302777614384559968e+00 +7.308935559751661870e+00 +7.315077280018353889e+00 +7.321202793129987896e+00 +7.327312117373205425e+00 +7.333405271372164691e+00 +7.339482274084746294e+00 +7.345543144798805102e+00 +7.351587903128407930e+00 +7.357616569010104968e+00 +7.363629162699227848e+00 +7.369625704766168184e+00 +7.375606216092734257e+00 +7.381570717868440212e+00 +7.387519231586898272e+00 +7.393451779042171879e+00 +7.399368382325157256e+00 +7.405269063820007602e+00 +7.411153846200535966e+00 +7.417022752426678522e+00 +7.422875805740927646e+00 +7.428713029664837819e+00 +7.434534447995488904e+00 +7.440340084802025800e+00 +7.446129964422182113e+00 +7.451904111458819813e+00 +7.457662550776513299e+00 +7.463405307498133467e+00 +7.469132407001438878e+00 +7.474843874915729103e+00 +7.480539737118467869e+00 +7.486220019731939956e+00 +7.491884749119961384e+00 +7.497533951884554071e+00 +7.503167654862684444e+00 +7.508785885122987835e+00 +7.514388669962537293e+00 +7.519976036903633698e+00 +7.525548013690574578e+00 +7.531104628286493963e+00 +7.536645908870202248e+00 +7.542171883833022505e+00 +7.547682581775697841e+00 +7.553178031505252576e+00 +7.558658262031938690e+00 +7.564123302566160945e+00 +7.569573182515414445e+00 +7.575007931481296808e+00 +7.580427579256475923e+00 +7.585832155821719880e+00 +7.591221691342914468e+00 +7.596596216168141069e+00 +7.601955760824745667e+00 +7.607300356016414966e+00 +7.612630032620320009e+00 +7.617944821684234924e+00 +7.623244754423696534e+00 +7.628529862219172841e+00 +7.633800176613272370e+00 +7.639055729307949960e+00 +7.644296552161739200e+00 +7.649522677187018616e+00 +7.654734136547277856e+00 +7.659930962554410527e+00 +7.665113187666040773e+00 +7.670280844482851634e+00 +7.675433965745936504e+00 +7.680572584334180775e+00 +7.685696733261650593e+00 +7.690806445675017144e+00 +7.695901754850979160e+00 +7.700982694193715616e+00 +7.706049297232386408e+00 +7.711101597618583270e+00 +7.716139629123885513e+00 +7.721163425637360689e+00 +7.726173021163134536e+00 +7.731168449817959143e+00 +7.736149745828805990e+00 +7.741116943530471417e+00 +7.746070077363219397e+00 +7.751009181870415432e+00 +7.755934291696211957e+00 +7.760845441583224869e+00 +7.765742666370243796e+00 +7.770626000989976134e+00 +7.775495480466771525e+00 +7.780351139914388980e+00 +7.785193014533795974e+00 +7.790021139610971090e+00 +7.794835550514704892e+00 +7.799636282694466516e+00 +7.804423371678248955e+00 +7.809196853070462296e+00 +7.813956762549810975e+00 +7.818703135867229648e+00 +7.823436008843799527e+00 +7.828155417368725111e+00 +7.832861397397287817e+00 +7.837553984948838703e+00 +7.842233216104810722e+00 +7.846899127006745189e+00 +7.851551753854339566e+00 +7.856191132903502350e+00 +7.860817300464429280e+00 +7.865430292899738163e+00 +7.870030146622534417e+00 +7.874616898094570772e+00 +7.879190583824412286e+00 +7.883751240365580060e+00 +7.888298904314760662e+00 +7.892833612309990698e+00 +7.897355401028899990e+00 +7.901864307186929892e+00 +7.906360367535615552e+00 +7.910843618860825543e+00 +7.915314097981084984e+00 +7.919771841745868457e+00 +7.924216887033924905e+00 +7.928649270751623845e+00 +7.933069029831312236e+00 +7.937476201229680228e+00 +7.941870821926167778e+00 +7.946252928921371250e+00 +7.950622559235442921e+00 +7.954979749906572195e+00 +7.959324537989404647e+00 +7.963656960553540998e+00 +7.967977054682014781e+00 +7.972284857469794872e+00 +7.976580406022318215e+00 +9.847648915468575126e+00 +9.860596695031812686e+00 +9.873515407900667284e+00 +9.886405001164062512e+00 +9.899265423226164984e+00 +9.912096623621732050e+00 +9.924898552880131675e+00 +9.937671162427776039e+00 +9.950414404520717682e+00 +9.963128232200688217e+00 +9.975812599269291425e+00 +9.988467460275899157e+00 +1.000109277051590695e+01 +1.001368848603654449e+01 +1.002625456364807732e+01 +1.003879096093868739e+01 +1.005129763629169837e+01 +1.006377454890409062e+01 +1.007622165880555798e+01 +1.008863892687741881e+01 +1.010102631487107416e+01 +1.011338378542554572e+01 +1.012571130208397285e+01 +1.013800882930889813e+01 +1.015027633249621175e+01 +1.016251377798777611e+01 +1.017472113308267900e+01 +1.018689836604715637e+01 +1.019904544612320052e+01 +1.021116234353592134e+01 +1.022324902949974579e+01 +1.023530547622343079e+01 +1.024733165691408665e+01 +1.025932754578016137e+01 +1.027129311803353318e+01 +1.028322834989074686e+01 +1.029513321857345787e+01 +1.030700770230817653e+01 +1.031885178032530526e+01 +1.033066543285761085e+01 +1.034244864113811424e+01 +1.035420138739749163e+01 +1.036592365486099432e+01 +1.037761542774496171e+01 +1.038927669125294173e+01 +1.040090743157148978e+01 +1.041250763586561945e+01 +1.042407729227397972e+01 +1.043561638990381013e+01 +1.044712491882560279e+01 +1.045860287006761702e+01 +1.047005023561015769e+01 +1.048146700837971501e+01 +1.049285318224294450e+01 +1.050420875200050119e+01 +1.051553371338076381e+01 +1.052682806303343810e+01 +1.053809179852308553e+01 +1.054932491832252950e+01 +1.056052742180622772e+01 +1.057169930924352386e+01 +1.058284058179191511e+01 +1.059395124149016354e+01 +1.060503129125146415e+01 +1.061608073485650650e+01 +1.062709957694652552e+01 +1.063808782301632228e+01 +1.064904547940724910e+01 +1.065997255330018056e+01 +1.067086905270847907e+01 +1.068173498647092501e+01 +1.069257036424464147e+01 +1.070337519649802793e+01 +1.071414949450366016e+01 +1.072489327033121320e+01 +1.073560653684037725e+01 +1.074628930767374868e+01 +1.075694159724978505e+01 +1.076756342075568185e+01 +1.077815479414033639e+01 +1.078871573410726192e+01 +1.079924625810754968e+01 +1.080974638433280610e+01 +1.082021613170814334e+01 +1.083065551988513953e+01 +1.084106456923485240e+01 +1.085144330084081332e+01 +1.086179173649206753e+01 +1.087210989867621436e+01 +1.088239781057245814e+01 +1.089265549604470351e+01 +1.090288297963464181e+01 +1.091308028655488016e+01 +1.092324744268207048e+01 +1.093338447455008300e+01 +1.094349140934316544e+01 +1.095356827488918050e+01 +1.096361509965280767e+01 +1.097363191272879490e+01 +1.098361874383525638e+01 +1.099357562330694016e+01 +1.100350258208857923e+01 +1.101339965172822133e+01 +1.102326686437061554e+01 +1.103310425275060780e+01 +1.104291185018657018e+01 +1.105268969057385853e+01 +1.106243780837827728e+01 +1.107215623862962239e+01 +1.108184501691517454e+01 +1.109150417937330069e+01 +1.110113376268703078e+01 +1.111073380407767708e+01 +1.112030434129849787e+01 +1.112984541262836657e+01 +1.113935705686549227e+01 +1.114883931332114919e+01 +1.115829222181345948e+01 +1.116771582266118301e+01 +1.117711015667755525e+01 +1.118647526516414459e+01 +1.119581118990475588e+01 +1.120511797315934288e+01 +1.121439565765797397e+01 +1.122364428659481561e+01 +1.123286390362215137e+01 +1.124205455284443822e+01 +1.125121627881237885e+01 +1.126034912651705966e+01 +1.126945314138407817e+01 +1.127852836926773961e+01 +1.128757485644525360e+01 +1.129659264961101073e+01 +1.130558179587083067e+01 +1.131454234273629567e+01 +1.132347433811909809e+01 +1.133237783032540591e+01 +1.134125286805029731e+01 +1.135009950037218829e+01 +1.135891777674732772e+01 +1.136770774700431375e+01 +1.137646946133862613e+01 +1.138520297030723150e+01 +1.139390832482318849e+01 +1.140258557615029922e+01 +1.141123477589779611e+01 +1.141985597601506797e+01 +1.142844922878640723e+01 +1.143701458682579286e+01 +1.144555210307173709e+01 +1.145406183078211448e+01 +1.146254382352906909e+01 +1.147099813519394118e+01 +1.147942481996221886e+01 +1.148782393231855359e+01 +1.149619552704176328e+01 +1.150453965919991717e+01 +1.151285638414542767e+01 +1.152114575751018322e+01 +1.152940783520072010e+01 +1.153764267339342808e+01 +1.154585032852977200e+01 +1.155403085731158797e+01 +1.156218431669637248e+01 +1.157031076389262836e+01 +1.157841025635524090e+01 +1.158648285178088777e+01 +1.159452860810348618e+01 +1.160254758348965787e+01 +1.161053983633427045e+01 +1.161850542525595564e+01 +1.162644440909270038e+01 +1.163435684689747873e+01 +1.164224279793387495e+01 +1.165010232167178472e+01 +1.165793547778313410e+01 +1.166574232613762341e+01 +1.167352292679851544e+01 +1.168127734001846108e+01 +1.168900562623534256e+01 +1.169670784606817016e+01 +1.170438406031299827e+01 +1.171203432993888427e+01 +1.171965871608386855e+01 +1.172725728005100265e+01 +1.173483008330439681e+01 +1.174237718746532089e+01 +1.174989865430830527e+01 +1.175739454575731102e+01 +1.176486492388191252e+01 +1.177230985089351023e+01 +1.177972938914159329e+01 +1.178712360111001090e+01 +1.179449254941330238e+01 +1.180183629679304325e+01 +1.180915490611421426e+01 +1.181644844036164343e+01 +1.182371696263642136e+01 +1.183096053615239462e+01 +1.183817922423267710e+01 +1.184537309030619312e+01 +1.185254219790424379e+01 +1.185968661065713015e+01 +1.186680639229077627e+01 +1.187390160662341643e+01 +1.188097231756228211e+01 +1.188801858910033893e+01 +1.189504048531305536e+01 +1.190203807035518935e+01 +1.190901140845761397e+01 +1.191596056392416969e+01 +1.192288560112855755e+01 +1.192978658451123763e+01 +1.193666357857638793e+01 +1.194351664788886680e+01 +1.195034585707122154e+01 +1.195715127080072726e+01 +1.196393295380642030e+01 +1.197069097086623302e+01 +1.197742538680407343e+01 +1.198413626648699726e+01 +1.199082367482237110e+01 +1.199748767675509065e+01 +1.200412833726481132e+01 +1.201074572136320029e+01 +1.201733989409123815e+01 +1.202391092051653665e+01 +1.203045886573068124e+01 +1.203698379484660741e+01 +1.204348577299600898e+01 +1.204996486532674638e+01 +1.205642113700033313e+01 +1.206285465318939210e+01 +1.206926547907519165e+01 +1.207565367984515170e+01 +1.208201932069044382e+01 +1.208836246680355231e+01 +1.209468318337590809e+01 +1.210098153559552969e+01 +1.210725758864468382e+01 +1.211351140769758850e+01 +1.211974305791814288e+01 +1.212595260445765000e+01 +1.213214011245261226e+01 +1.213830564702251813e+01 +1.214444927326766255e+01 +1.215057105626700640e+01 +1.215667106107603601e+01 +1.216274935272466351e+01 +1.216880599621515024e+01 +1.217484105652004089e+01 +1.218085459858010999e+01 +1.218684668730234399e+01 +1.219281738755792333e+01 +1.219876676418025951e+01 +1.220469488196301100e+01 +1.221060180565817355e+01 +1.221648759997415468e+01 +1.222235232957389606e+01 +1.222819605907300478e+01 +1.223401885303792724e+01 +1.223982077598413554e+01 +1.224560189237433150e+01 +1.225136226661670058e+01 +1.225710196306315680e+01 +1.226282104600763923e+01 +1.226851957968441731e+01 +1.227419762826641936e+01 +1.227985525586358939e+01 +1.228549252652127244e+01 +1.229110950421859982e+01 +1.229670625286692065e+01 +1.230228283630824571e+01 +1.230783931831370559e+01 +1.231337576258205146e+01 +1.231889223273814515e+01 +1.232438879233149720e+01 +1.232986550483482269e+01 +1.233532243364259529e+01 +1.234075964206964748e+01 +1.234617719334978325e+01 +1.235157515063439426e+01 +1.235695357699112229e+01 +1.236231253540251984e+01 +1.236765208876474986e+01 +1.237297229988626590e+01 +1.237827323148656866e+01 +1.238355494619493236e+01 +1.238881750654916658e+01 +1.239406097499440662e+01 +1.239928541388190197e+01 +1.240449088546784218e+01 +1.239797501453513995e+01 +1.228382638811189587e+01 +1.206407998115014379e+01 +1.172925724112298340e+01 +1.126424888031416494e+01 +1.065488032343845504e+01 +9.896571663349602588e+00 +9.004315300580977066e+00 +8.019995036846184533e+00 +7.010732289202715961e+00 +6.054411208337529438e+00 +5.217148958770596145e+00 +4.535345099260221780e+00 +4.012331286570152145e+00 +3.628217107926698937e+00 +3.353659660956420652e+00 +3.159971592503610260e+00 +3.023724387925700974e+00 +2.927526078467814319e+00 +2.859100695925156366e+00 +2.809985548477941464e+00 +2.774390472864138868e+00 +2.748346991830051600e+00 +2.729116983152041431e+00 +2.714794193814007883e+00 +2.704038470905886005e+00 +2.695898392044262515e+00 +2.689692134029923576e+00 +2.684926725912916368e+00 +2.681242762542430214e+00 +2.678376162416579831e+00 +2.676131453864721621e+00 +2.674362940484498630e+00 +2.672961306331413489e+00 +2.671844012509812405e+00 +2.670948359836869734e+00 +2.670226441799014694e+00 +2.669641448109667525e+00 +2.669164940234091787e+00 +2.668774831145835247e+00 +2.668453878603649354e+00 +2.668188555166256748e+00 +2.667968196203611697e+00 +2.667784354186064633e+00 +2.667630306855095945e+00 +2.667500680781597744e+00 +2.667391161879374195e+00 +2.667298271764786399e+00 +2.667219194212340216e+00 +2.667151639897712201e+00 +2.667093740533627688e+00 +2.667043965668397298e+00 +2.667001057032223343e+00 +2.666963976527301661e+00 +2.666931864869531932e+00 +2.666904008579206398e+00 +2.666879813541601862e+00 +2.666858783757719564e+00 +2.666840504211037022e+00 +2.666824627011067150e+00 +2.666810860155795382e+00 +2.666798958395453667e+00 +2.666788715789228270e+00 +2.666779959631730534e+00 +2.666772545492756663e+00 +2.666766353166416526e+00 +2.666761283367142799e+00 +2.666757255043019192e+00 +2.666754203203076212e+00 +2.666752077176228308e+00 +2.666750839236479376e+00 +2.666750463542793437e+00 +2.666750935353300989e+00 +2.666752250482879116e+00 +2.666754414980975429e+00 +2.666757445013249406e+00 +2.666761366936423183e+00 +2.666766217560921248e+00 +2.666772044600588476e+00 +2.666778907313240410e+00 +2.666786877340052264e+00 +2.666796039756081704e+00 +2.666806494348499257e+00 +2.666818357143686313e+00 +2.666831762209088019e+00 +2.666846863760935271e+00 +2.666863838614592197e+00 +2.666882889020515179e+00 +2.666904245935757256e+00 +2.666928172788667339e+00 +2.666954969803098763e+00 +2.666984978958165442e+00 +2.667018589670486328e+00 +2.667056245298168538e+00 +2.667098450579593827e+00 +2.667145780135639299e+00 +2.667198888181488314e+00 +2.667258519613882051e+00 +2.667325522661850190e+00 +2.667400863313891257e+00 +2.667485641762613824e+00 +2.667581111139395666e+00 +2.667688698847080708e+00 +2.667810030838640323e+00 +2.667946959234654081e+00 +2.668101593723057885e+00 +2.668276337241694662e+00 +2.668473926508651672e+00 +2.668697478038299487e+00 +2.668950540363576263e+00 +2.669237153278984920e+00 +2.669561915025715049e+00 +2.669930058462476996e+00 +2.670347537405620031e+00 +2.670821124483040432e+00 +2.671358522032003080e+00 +2.671968487785875368e+00 +2.672660977344398781e+00 +2.673447305713092526e+00 +2.674340330537798849e+00 +2.675354660059831247e+00 +2.676506889287525226e+00 +2.677815868435155178e+00 +2.679303008337353020e+00 +2.680992628326603899e+00 +2.682912352987616433e+00 +2.685093565304379482e+00 +2.687571925028090281e+00 +2.690387962657271093e+00 +2.693587761282564497e+00 +2.697223740762018540e+00 +2.701355561319402465e+00 +2.706051166765526261e+00 +2.711387991202139247e+00 +2.717454357351303695e+00 +2.724351099624658268e+00 +2.732193450752625985e+00 +2.741113237242161382e+00 +2.751261436066963384e+00 +2.762811152653415370e+00 +2.775961088079377248e+00 +2.790939570869987563e+00 +2.808009234904870866e+00 +2.827472428269884208e+00 +2.849677436194220537e+00 +2.875025591342069919e+00 +2.903979322264034213e+00 +2.937071149825992045e+00 +2.974568860349878996e+00 +3.014573812255204821e+00 +3.056740864721009920e+00 +3.100679550142870333e+00 +3.145970782516924302e+00 +3.192184056455003471e+00 +3.238893776235292954e+00 +3.285693619906079554e+00 +3.332208197451864251e+00 +3.378101636147817999e+00 +3.423083063508182367e+00 +3.466909222047774186e+00 +3.509384625580405537e+00 +3.550359756960473678e+00 +3.589727826451099446e+00 +3.627420577744041807e+00 +3.663403564669904799e+00 +3.697671242555502502e+00 +3.730242136567337052e+00 +3.761154273521876590e+00 +3.790460998184316921e+00 +3.818227241885515877e+00 +3.844526270349827968e+00 +3.869436907810446691e+00 +3.893041214109272286e+00 +3.915422578692214550e+00 +3.936664188456979296e+00 +3.956847823738160574e+00 +3.976052937034584289e+00 +3.994355971372949288e+00 +4.011829878678679684e+00 +4.028543802615311975e+00 +4.044562894652379725e+00 +4.059948236355038986e+00 +4.074756844883202334e+00 +4.089041742343588304e+00 +4.102852072906985725e+00 +4.116233254472634329e+00 +4.129227154143002565e+00 +4.141872278890529557e+00 +4.154203974585904291e+00 +4.166254628051570208e+00 +4.178053868040926488e+00 +4.189628762058193345e+00 +4.201004006758836340e+00 +4.212202110334985150e+00 +4.223243565820473222e+00 +4.234147014668740994e+00 +4.244929400283385057e+00 +4.255606111432090444e+00 +4.266191115664556222e+00 +4.276697082995115196e+00 +4.287135500211299188e+00 +4.297516776238593295e+00 +4.307850339035679710e+00 +4.318144724519303423e+00 +4.328407658027689564e+00 +4.338646128829987347e+00 +4.348866458179372785e+00 +4.359074361391453323e+00 +4.369275004409406193e+00 +4.379473055294196726e+00 +4.389672731053574140e+00 +4.399877840197815360e+00 +4.410091821384614974e+00 +4.420317778489979865e+00 +4.430558512417297479e+00 +4.440816549932973700e+00 +4.451094169794323818e+00 +4.461393426413962082e+00 +4.471716171284752406e+00 +4.482064072370555152e+00 +4.492438631650349734e+00 +4.502841200987108827e+00 +4.513272996477643240e+00 +4.523735111425777333e+00 +4.534228528068407371e+00 +4.544754128172248997e+00 +4.555312702608333097e+00 +4.565904960001422097e+00 +4.576531534542587210e+00 +4.587192993044917344e+00 +4.597889841314902526e+00 +4.608622529905153087e+00 +4.619391459308047843e+00 +4.630196984644091351e+00 +4.641039419893836282e+00 +4.651919041717441416e+00 +4.662836092901832430e+00 +4.673790785471614306e+00 +4.684783303496340423e+00 +4.695813805623702208e+00 +4.706882427365278510e+00 +4.717989283158935621e+00 +4.729134468229624133e+00 +4.740318060276286438e+00 +4.751540121099136371e+00 +4.762800698157816370e+00 +4.774099826069583941e+00 +4.785437528067653545e+00 +4.796813817445471528e+00 +4.808228699012882856e+00 +4.819682170582292535e+00 +4.831174224484593438e+00 +4.842704849084272567e+00 +4.854274030225200320e+00 +4.865881752505272217e+00 +4.877528000267254527e+00 +4.889212758217525767e+00 +4.900936011640014023e+00 +4.912697746237492780e+00 +4.924497947681787835e+00 +4.936336600975279154e+00 +4.948213689494624035e+00 +4.960129193746828591e+00 +4.972083090437775965e+00 +4.984075351793045172e+00 +4.996105945081380284e+00 +5.008174832299702395e+00 +5.020281969985800785e+00 +5.032427309130938831e+00 +5.044610795169624851e+00 +5.056832368028089775e+00 +5.069091962216429437e+00 +5.081389506952437074e+00 +5.093724926307437784e+00 +5.106098139366514133e+00 +5.118509060397090416e+00 +5.130957599021222393e+00 +5.143443660387996275e+00 +5.155967145343311131e+00 +5.168527950595091625e+00 +5.181125968872470011e+00 +5.193761089077941762e+00 +5.206433196431923704e+00 +5.219142172609354979e+00 +5.231887895868194249e+00 +5.244670241169898439e+00 +5.257489080292025996e+00 +5.270344281933217800e+00 +5.283235711810907453e+00 +5.296163232752093109e+00 +5.309126704777586525e+00 +5.322125985180130137e+00 +5.335160928596824448e+00 +5.348231387076213039e+00 +5.361337210140476373e+00 +5.374478244843110986e+00 +5.387654335822408491e+00 +5.400865325351153601e+00 +5.414111053382822725e+00 +5.427391357594608223e+00 +5.440706073427536538e+00 +5.454055034123987511e+00 +5.467438070762820956e+00 +5.480855012292357387e+00 +5.494305685561437613e+00 +5.507789915348736187e+00 +5.521307524390504540e+00 +5.534858333406937447e+00 +5.548442161127269401e+00 +5.562058824313787397e+00 +5.575708137784835650e+00 +5.589389914436955209e+00 +5.603103965266265973e+00 +5.616850099389156803e+00 +5.630628124062388551e+00 +5.644437844702702378e+00 +5.658279064905963551e+00 +5.672151586465926876e+00 +5.686055209392691268e+00 +5.699989731930873660e+00 +5.713954950577553760e+00 +5.727950660100045610e+00 +5.741976653553494181e+00 +5.756032722298404458e+00 +5.770118656018039971e+00 +5.784234242735787568e+00 +5.798379268832483113e+00 +5.812553519063738960e+00 +5.826756776577241226e+00 +5.840988822930111013e+00 +5.855249438106283399e+00 +5.869538400533933498e+00 +5.883855487102989557e+00 +5.898200473182671821e+00 +5.912573132639163731e+00 +5.926973237853342624e+00 +5.941400559738603704e+00 +5.955854867758803906e+00 +5.970335929946278597e+00 +5.984843512920003050e+00 +5.999377381903830297e+00 +6.013937300744855108e+00 +6.028523031931908527e+00 +6.043134336614143010e+00 +6.057770974619737459e+00 +6.072432704474731935e+00 +6.087119283421963623e+00 +6.101830467440114703e+00 +6.116566011262891678e+00 +6.131325668398289963e+00 +6.146109191147994366e+00 +6.160916330626850623e+00 +6.175746836782492366e+00 +6.190600458414996510e+00 +6.205476943196721606e+00 +6.220376037692156856e+00 +6.235297487377922110e+00 +6.250241036662824712e+00 +6.265206428907985625e+00 +6.280193406447081017e+00 +6.295201710606606937e+00 +6.310231081726236368e+00 +6.325281259179229565e+00 +6.340351981392887026e+00 +6.355442985869043326e+00 +6.370554009204605350e+00 +6.385684787112120731e+00 +6.400835054440333849e+00 +6.416004545194788022e+00 +6.431192992558385058e+00 +6.446400128911964345e+00 +6.461625685854814449e+00 +6.476869394225170495e+00 +6.492130984120645820e+00 +6.507410184918564156e+00 +6.522706725296224306e+00 +6.538020333251044036e+00 +6.553350736120545861e+00 +6.568697660602220267e+00 +6.584060832773158012e+00 +6.599439978109510108e+00 +6.614834821505668927e+00 +6.630245087293193507e+00 +6.645670499259420438e+00 +6.661110780665730147e+00 +6.676565654265424143e+00 +6.692034842321199051e+00 +6.707518066622148112e+00 +6.723015048500270652e+00 +6.738525508846493040e+00 +6.754049168126105229e+00 +6.769585746232470669e+00 +6.785134962133438918e+00 +6.800696533610421923e+00 +6.816270177076964032e+00 +6.831855607465335822e+00 +6.847452538171012293e+00 +6.863060681045984879e+00 +6.878679746432592168e+00 +6.894309443230389078e+00 +6.909949478989188876e+00 +6.925599560022122958e+00 +6.941259391533169065e+00 +6.956928677754357082e+00 +6.972607122088410492e+00 +6.988294427253238794e+00 +7.003990295425376544e+00 +7.019694428379860796e+00 +7.035406527624775919e+00 +7.051126294528929250e+00 +7.066853430441698336e+00 +7.082587636804378306e+00 +7.098328615252611939e+00 +7.114076067709873996e+00 +7.129829696471999156e+00 +7.145589204283067986e+00 +7.161354294402993759e+00 +7.177124670667263118e+00 +7.192900037539381231e+00 +7.208680100156534820e+00 +7.224464564369112551e+00 +7.240253136774624565e+00 +7.256045524746603803e+00 +7.271841436459078878e+00 +7.287640580907105203e+00 +7.303442667923892628e+00 +7.319247408194994975e+00 +7.335054513269961163e+00 +7.350863695571888456e+00 +7.366674668405218895e+00 +7.382487145962086217e+00 +7.398300843327541898e+00 +7.414115476483848610e+00 +7.429930762314171488e+00 +7.445746418605743600e+00 +7.461562164052763180e+00 +7.477377718259136330e+00 +7.493192801741171749e+00 +7.509007135930371390e+00 +7.524820443176363227e+00 +7.540632446750052509e+00 +7.556442870847064341e+00 +7.572251440591527327e+00 +7.588057882040153856e+00 +7.603861922186755606e+00 +7.619663288967094772e+00 +7.635461711264186491e+00 +7.651256918913921012e+00 +7.667048642711135287e+00 +7.682836614416045151e+00 +7.698620566761029238e+00 +7.714400233457785916e+00 +7.730175349204811752e+00 +7.745945649695187285e+00 +7.761710871624694974e+00 +7.777470752700159196e+00 +7.793225031648088219e+00 +7.808973448223509806e+00 +7.824715743219034181e+00 +7.840451658474103525e+00 +7.856180936884401333e+00 +7.871903322411416326e+00 +7.887618560092112929e+00 +7.903326396048749203e+00 +7.919026577498712527e+00 +7.934718852764506281e+00 +7.950402971283720532e+00 +7.966078683619077339e+00 +7.981745741468467159e+00 +7.997403897675027906e+00 +8.013052906237170703e+00 +8.028692522318626956e+00 +8.044322502258417273e+00 +8.059942603580802611e+00 +8.075552585005178585e+00 +8.091152206455884510e+00 +8.106741229071943167e+00 +8.122319415216727734e+00 +8.137886528487515037e+00 +8.153442333724941093e+00 +8.168986597022355411e+00 +8.184519085735052712e+00 +8.200039568489385644e+00 +8.215547815191753145e+00 +8.231043597037444925e+00 +8.246526686519363381e+00 +8.261996857436596287e+00 +8.277453884902831405e+00 +8.292897545354655620e+00 +8.308327616559662232e+00 +8.323743877624432130e+00 +8.339146109002342655e+00 +8.354534092501216591e+00 +8.369907611290807736e+00 +8.385266449910124820e+00 +8.400610394274599102e+00 +8.415939231683047694e+00 +8.431252750824512532e+00 +8.446550741784895067e+00 +8.461832996053427536e+00 +8.477099306528987910e+00 +8.492349467526214113e+00 +8.507583274781447713e+00 +8.522800525458537280e+00 +8.538001018154425026e+00 +8.553184552904564697e+00 +8.568350933120218116e+00 +8.583499965058910774e+00 +8.598631457406753498e+00 +8.613745220951352977e+00 +8.628841068327972152e+00 +8.643918813824694070e+00 +8.658978273234938072e+00 +8.674019263747897668e+00 +8.689041603869107178e+00 +8.704045113364877295e+00 +8.719029613225485420e+00 +8.733994925643024487e+00 +8.748940874000515677e+00 +8.763867282869675535e+00 +8.778773978015117052e+00 +8.793660786403329155e+00 +8.808527536215017051e+00 +8.823374056859767833e+00 +8.838200178992186906e+00 +8.853005734528801796e+00 +8.867790556665323010e+00 +8.882554479893771671e+00 +8.897297340019262535e+00 +8.912018974176200814e+00 +8.926719220843748914e+00 +8.941397919860451182e+00 +8.956054912438004223e+00 +8.970690041174055551e+00 +8.985303150064098077e+00 +8.999894084512423120e+00 +9.014462691342169265e+00 +9.029008818804483028e+00 +9.043532316586833986e+00 +9.058033035820503898e+00 +9.072510829087326201e+00 +9.086965550425688321e+00 +9.101397055335830544e+00 +9.115805200784514284e+00 +9.130189845209075727e+00 +9.144550848520903941e+00 +9.158888072108396727e+00 +9.173201378839410225e+00 +9.187490633063235990e+00 +9.201755700612151756e+00 +9.215996448802558305e+00 +9.230212746435741522e+00 +9.244404463798259641e+00 +9.258571472662010748e+00 +9.272713646283996525e+00 +9.286830859405760918e+00 +9.300922988252573020e+00 +9.314989910532350592e+00 +9.329031505434327798e+00 +9.343047653627499116e+00 +9.357038237258832325e+00 +9.371003139951312733e+00 +9.384942246801713850e+00 +9.398855444378270363e+00 +9.412742620718114850e+00 +9.426603665324552850e+00 +9.440438469164215363e+00 +9.454246924663992857e+00 +9.468028925707875132e+00 +9.481784367633625976e+00 +9.495513147229319273e+00 +9.509215162729759641e+00 +9.522890313812752083e+00 +9.536538501595273942e+00 +9.550159628629522501e+00 +9.563753598898829367e+00 +9.577320317813500239e+00 +9.590859692206516129e+00 +9.604371630329136877e+00 +9.617856041846438941e+00 +9.631312837832691542e+00 +9.644741930766695504e+00 +9.658143234527010179e+00 +9.671516664387072026e+00 +9.684862137010261662e+00 +9.698179570444855457e+00 +9.711468884118914957e+00 +9.724729998835075051e+00 +9.737962836765278851e+00 +9.751167321445411318e+00 +9.764343377769876042e+00 +9.777490931986088540e+00 +9.790609911688907374e+00 +9.803700245814990666e+00 +9.816761864637067347e+00 +9.829794699758199528e+00 +9.842798684105897422e+00 +9.855773751926244941e+00 +9.868719838777929354e+00 +9.881636881526205229e+00 +9.894524818336829952e+00 +9.907383588669908647e+00 +9.920213133273708905e+00 +9.933013394178415112e+00 +9.945784314689824157e+00 +9.958525839382998512e+00 +9.971237914095857136e+00 +9.983920485922734400e+00 +9.996573503207894618e+00 +1.000919691553897550e+01 +1.002179067374041743e+01 +1.003435472986681809e+01 +1.004688903719629245e+01 +1.005939355022373327e+01 +1.007186822465408937e+01 +1.008431301739556751e+01 +1.009672788655280762e+01 +1.010911279142005093e+01 +1.012146769247421041e+01 +1.013379255136797852e+01 +1.014608733092285675e+01 +1.015835199512218168e+01 +1.017058650910409945e+01 +1.018279083915452787e+01 +1.019496495270008474e+01 +1.020710881830100014e+01 +1.021922240564398265e+01 +1.023130568553508546e+01 +1.024335862989253521e+01 +1.025538121173954842e+01 +1.026737340519712305e+01 +1.027933518547679803e+01 +1.029126652887342530e+01 +1.030316741275789738e+01 +1.031503781556986254e+01 +1.032687771681044175e+01 +1.033868709703490474e+01 +1.035046593784537450e+01 +1.036221422188345187e+01 +1.037393193282291115e+01 +1.038561905536230867e+01 +1.039727557521763757e+01 +1.040890147911495234e+01 +1.042049675478298276e+01 +1.043206139094573892e+01 +1.044359537731512866e+01 +1.045509870458355195e+01 +1.046657136441649882e+01 +1.047801334944514018e+01 +1.048942465325892748e+01 +1.050080527039817291e+01 +1.051215519634664375e+01 +1.052347442752415319e+01 +1.053476296127914402e+01 +1.054602079588128838e+01 +1.055724793051408028e+01 +1.056844436526743181e+01 +1.057961010113027811e+01 +1.059074513998317890e+01 +1.060184948459093945e+01 +1.061292313859522274e+01 +1.062396610650718110e+01 +1.063497839370007547e+01 +1.064596000640193729e+01 +1.065691095168820546e+01 +1.066783123747440420e+01 +1.067872087250877655e+01 +1.068957986636500657e+01 +1.070040822943489545e+01 +1.071120597292107135e+01 +1.072197310882969923e+01 +1.073270964996322618e+01 +1.074341560991311795e+01 +1.075409100305262200e+01 +1.076473584452954846e+01 +1.077535015025905629e+01 +1.078593393691647151e+01 +1.079648722193009647e+01 +1.080701002347406714e+01 +1.081750236046121394e+01 +1.082796425253592609e+01 +1.083839572006706931e+01 +1.084879678414088922e+01 +1.085916746655396103e+01 +1.086950778980613741e+01 +1.087981777709353892e+01 +1.089009745230154635e+01 +1.090034683999782317e+01 +1.091056596542537349e+01 +1.092075485449559302e+01 +1.093091353378137320e+01 +1.094104203051021251e+01 +1.095114037255734551e+01 +1.096120858843892698e+01 +1.097124670730520002e+01 +1.098125475893371927e+01 +1.099123277372259189e+01 +1.100118078268373445e+01 +1.101109881743616903e+01 +1.102098691019933874e+01 +1.103084509378646061e+01 +1.104067340159788735e+01 +1.105047186761451350e+01 +1.106024052639119226e+01 +1.106997941305020561e+01 +1.107968856327474860e+01 +1.108936801330242972e+01 +1.109901779991882265e+01 +1.110863796045103413e+01 +1.111822853276131617e+01 +1.112778955524067648e+01 +1.113732106680255995e+01 +1.114682310687652844e+01 +1.115629571540198839e+01 +1.116573893282195407e+01 +1.117515280007680190e+01 +1.118453735859812781e+01 +1.119389265030255487e+01 +1.120321871758564214e+01 +1.121251560331577934e+01 +1.122178335082813483e+01 +1.123102200391863192e+01 +1.124023160683795730e+01 +1.124941220428559596e+01 +1.125856384140390709e+01 +1.126768656377223898e+01 +1.127678041740104931e+01 +1.128584544872609996e+01 +1.129488170460264307e+01 +1.130388923229967091e+01 +1.131286807949418893e+01 +1.132181829426551900e+01 +1.133073992508963634e+01 +1.133963302083355096e+01 +1.134849763074971385e+01 +1.135733380447045526e+01 +1.136614159200246732e+01 +1.137492104372130974e+01 +1.138367221036595822e+01 +1.139239514303338119e+01 +1.140108989317315924e+01 +1.140975651258212764e+01 +1.141839505339906502e+01 +1.142700556809940693e+01 +1.143558810948999849e+01 +1.144414273070388965e+01 +1.145266948519514472e+01 +1.146116842673371217e+01 +1.146963960940030702e+01 +1.147808308758134466e+01 +1.148649891596389416e+01 +1.149488714953068502e+01 +1.150324784355512797e+01 +1.151158105359639450e+01 +1.151988683549450343e+01 +1.152816524536546794e+01 +1.153641633959646207e+01 +1.154464017484102811e+01 +1.155283680801431601e+01 +1.156100629628836174e+01 +1.156914869708739424e+01 +1.157726406808318131e+01 +1.158535246719042000e+01 +1.159341395256212870e+01 +1.160144858258512457e+01 +1.160945641587548316e+01 +1.161743751127407620e+01 +1.162539192784211117e+01 +1.163331972485672239e+01 +1.164122096180660826e+01 +1.164909569838765968e+01 +1.165694399449867902e+01 +1.166476591023708664e+01 +1.167256150589468966e+01 +1.168033084195347548e+01 +1.168807397908143564e+01 +1.169579097812842328e+01 +1.170348190012206580e+01 +1.171114680626367566e+01 +1.171878575792422517e+01 +1.172639881664033545e+01 +1.173398604411031343e+01 +1.174154750219021182e+01 +1.174908325288993183e+01 +1.175659335836934538e+01 +1.176407788093446172e+01 +1.177153688303363133e+01 +1.177897042725376409e+01 +1.178637857631660246e+01 +1.179376139307500893e+01 +1.180111894050929777e+01 +1.180845128172359715e+01 +1.181575847994224127e+01 +1.182304059850619282e+01 +1.183029770086950450e+01 +1.183752985059580176e+01 +1.184473711135481189e+01 +1.185191954691892313e+01 +1.185907722115975105e+01 +1.186621019804476518e+01 +1.187331854163394951e+01 +1.188040231607645758e+01 +1.188746158560734045e+01 +1.189449641454428708e+01 +1.190150686728439133e+01 +1.190849300830095814e+01 +1.191545490214033620e+01 +1.192239261341878453e+01 +1.192930620681936560e+01 +1.193619574708887932e+01 +1.194306129903479885e+01 +1.194990292752227745e+01 +1.195672069747115174e+01 +1.196351467385298761e+01 +1.197028492168815461e+01 +1.197703150604293398e+01 +1.198375449202664456e+01 +1.199045394478881654e+01 +1.199712992951636537e+01 +1.200378251143082942e+01 +1.201041175578560249e+01 +1.201701772786321953e+01 +1.202360049297266364e+01 +1.203016011644669092e+01 +1.203669666363920143e+01 +1.204321019992262087e+01 +1.204970079068532129e+01 +1.205616850132906670e+01 +1.206261339726647641e+01 +1.206903554391853994e+01 +1.207543500671212477e+01 +1.208181185107754807e+01 +1.208816614244613952e+01 +1.209449794624785390e+01 +1.210080732790889790e+01 +1.210709435284936042e+01 +1.211335908648090154e+01 +1.211960159420441663e+01 +1.212582194140778213e+01 +1.213202019346358185e+01 +1.213819641572687758e+01 +1.214435067353300646e+01 +1.215048303219540671e+01 +1.215659355700346111e+01 +1.216268231322037785e+01 +1.216874936608108193e+01 +1.217479478079015642e+01 +1.218081862251978009e+01 +1.218682095640772722e+01 +1.219280184755534968e+01 +1.219876136102562647e+01 +1.220469956184120086e+01 +1.221061651498248324e+01 +1.221651228538572909e+01 +1.222238693794118980e+01 +1.222824053749124928e+01 +1.223407314882860675e+01 +1.223988483669448257e+01 +1.224567566577682598e+01 +1.225144570070857419e+01 +1.225719500606592050e+01 +1.226292364636659293e+01 +1.226863168606817922e+01 +1.227431918956645873e+01 +1.227998622119376826e+01 +1.228563284521735888e+01 +1.229125912583782210e+01 +1.229686512718749469e+01 +1.230245091332891860e+01 +1.230801654825327418e+01 +1.231356209587890582e+01 +1.231908762004979252e+01 +1.232459318453409658e+01 +1.233007885302269102e+01 +1.233554468912774027e+01 +1.234099075638128440e+01 +1.234134741241538258e+01 +1.222991258006834592e+01 +1.200995470923153086e+01 +1.167274838672188331e+01 +1.120380606919894007e+01 +1.058970353005333820e+01 +9.826917400787797519e+00 +8.931813414331328360e+00 +7.947685592475792760e+00 +6.942534101287062498e+00 +5.994040015790364606e+00 +5.166989428662338568e+00 +4.495935427031428233e+00 +3.982667927111601447e+00 +3.606502038462872317e+00 +3.337982149628687889e+00 +3.148687878552931529e+00 +3.015570036863268299e+00 +2.921585333461019118e+00 +2.854729483747474816e+00 +2.806735541820762680e+00 +2.771949336271549491e+00 +2.746495610668715948e+00 +2.727700114181065949e+00 +2.713700642138351160e+00 +2.703187722155952599e+00 +2.695231542387601653e+00 +2.689165674712975296e+00 +2.684508234660043513e+00 +2.680907881470192766e+00 +2.678106454183172058e+00 +2.675912864680019876e+00 +2.674184687444622899e+00 +2.672815064753440772e+00 +2.671723317545410481e+00 +2.670848162571709317e+00 +2.670142777681130397e+00 +2.669571187691489822e+00 +2.669105600665730549e+00 +2.668724432802817681e+00 +2.668410835453837393e+00 +2.668151590503747173e+00 +2.667936277559240565e+00 +2.667756642810124035e+00 +2.667606118328398779e+00 +2.667479454165398334e+00 +2.667372435447302514e+00 +2.667281663830936900e+00 +2.667204387922039288e+00 +2.667138371112498962e+00 +2.667081788142115606e+00 +2.667033143806583961e+00 +2.666991208812545366e+00 +2.666954968964286188e+00 +2.666923584757948440e+00 +2.666896359133085426e+00 +2.666872711643141880e+00 +2.666852157696642855e+00 +2.666834291819594860e+00 +2.666818774119160906e+00 +2.666805319305799671e+00 +2.666793687768238552e+00 +2.666783678302306893e+00 +2.666775122177881485e+00 +2.666767878293440752e+00 +2.666761829218968760e+00 +2.666756877968520456e+00 +2.666752945375859163e+00 +2.666749967972221746e+00 +2.666747896285794450e+00 +2.666746693499034038e+00 +2.666746334413437669e+00 +2.666746804682372129e+00 +2.666748100281717271e+00 +2.666750227195735512e+00 +2.666753201302134002e+00 +2.666757048445962841e+00 +2.666761804697056704e+00 +2.666767516790346182e+00 +2.666774242752713686e+00 +2.666782052724233409e+00 +2.666791029985808414e+00 +2.666801272209450069e+00 +2.666812892951850422e+00 +2.666826023416608127e+00 +2.666840814515516467e+00 +2.666857439264877616e+00 +2.666876095558885940e+00 +2.666897009368943916e+00 +2.666920438425307349e+00 +2.666946676445963504e+00 +2.666976057987157755e+00 +2.667008964000687321e+00 +2.667045828195131030e+00 +2.667087144311755420e+00 +2.667133474441097718e+00 +2.667185458523430253e+00 +2.667243825195679818e+00 +2.667309404169137199e+00 +2.667383140346845316e+00 +2.667466109917116857e+00 +2.667559538690676746e+00 +2.667664822983864426e+00 +2.667783553389641682e+00 +2.667917541822423022e+00 +2.668068852272698077e+00 +2.668239835763702938e+00 +2.668433170066059734e+00 +2.668651904798333696e+00 +2.668899512623125414e+00 +2.669179947341156378e+00 +2.669497709791566642e+00 +2.669857922587492993e+00 +2.670266414854492343e+00 +2.670729818298607672e+00 +2.671255676114554056e+00 +2.671852566457123768e+00 +2.672530242445925186e+00 +2.673299790961473299e+00 +2.674173812827425056e+00 +2.675166627368957606e+00 +2.676294504802494423e+00 +2.677575930461181919e+00 +2.679031905510506739e+00 +2.680686289579520043e+00 +2.682566191649474518e+00 +2.684702416632315458e+00 +2.687129976370683515e+00 +2.689888675339521029e+00 +2.693023783174254948e+00 +2.696586808346620678e+00 +2.700636389918421365e+00 +2.705239327394817650e+00 +2.710471772345833585e+00 +2.716420609742949743e+00 +2.723185061936911566e+00 +2.730878553937140740e+00 +2.739630885162835927e+00 +2.749590760080939056e+00 +2.760928737986231063e+00 +2.773840670314358992e+00 +2.788551701767668423e+00 +2.805320918276673403e+00 +2.824446729003933676e+00 +2.846273069094540364e+00 +2.871196501597495399e+00 +2.899674276584057075e+00 +2.932233367087305531e+00 +2.968789269246732143e+00 +3.007733650333769049e+00 +3.048728479667191849e+00 +3.091393947327951697e+00 +3.135324585065317748e+00 +3.180105694402068028e+00 +3.225328814475312278e+00 +3.270605225349941136e+00 +3.315576821396490015e+00 +3.359924040832861003e+00 +3.403370850248800483e+00 +3.445687024633302009e+00 +3.486688121901790005e+00 +3.526233630065179980e+00 +3.564223779018731886e+00 +3.600595475788766819e+00 +3.635317760175948099e+00 +3.668387102502610908e+00 +3.699822788120862960e+00 +3.729662562030902073e+00 +3.757958645590454783e+00 +3.784774187517574884e+00 +3.810180173131689330e+00 +3.834252787949083974e+00 +3.857071212758074630e+00 +3.878715815415140433e+00 +3.899266698176301560e+00 +3.918802556956618943e+00 +3.937399809288220531e+00 +3.955131949965898563e+00 +3.972069096697119939e+00 +3.988277691972458960e+00 +4.003820331462567772e+00 +4.018755693272366258e+00 +4.033138546179143802e+00 +4.047019818454900886e+00 +4.060446711979314394e+00 +4.073462849076827652e+00 +4.086108441869816588e+00 +4.098420475953581388e+00 +4.110432901899001124e+00 +4.122176829509745843e+00 +4.133680720937294772e+00 +4.144970579722402348e+00 +4.156070133616420748e+00 +4.167001009668533484e+00 +4.177782900569447122e+00 +4.188433721640686613e+00 +4.198969758169377897e+00 +4.209405803027344461e+00 +4.219755284694036490e+00 +4.230030385936082382e+00 +4.240242153491964316e+00 +4.250400599175777394e+00 +4.260514792855937038e+00 +4.270592947788144578e+00 +4.280642498791052297e+00 +4.290670173751568228e+00 +4.300682058937146834e+00 +4.310683658576981436e+00 +4.320679949154635047e+00 +4.330675428832442719e+00 +4.340674162404338787e+00 +4.350679822149174925e+00 +4.360695724931959560e+00 +4.370724865876050913e+00 +4.380769948905642863e+00 +4.390833414435066473e+00 +4.400917464459697115e+00 +4.411024085282702956e+00 +4.421155068092518903e+00 +4.431312027587859248e+00 +4.441496418830215731e+00 +4.451709552488219757e+00 +4.461952608623692917e+00 +4.472226649156013423e+00 +4.482532629129016399e+00 +4.492871406893521602e+00 +4.503243753308175279e+00 +4.513650360051867594e+00 +4.524091847132398314e+00 +4.534568769668162247e+00 +4.545081624012421884e+00 +4.555630853283309634e+00 +4.566216852356593137e+00 +4.576839972373045740e+00 +4.587500524807110125e+00 +4.598198785139363309e+00 +4.608934996171013765e+00 +4.619709371015213506e+00 +4.630522095796508530e+00 +4.641373332086801362e+00 +4.652263219103437208e+00 +4.663191875692525912e+00 +4.674159402118474915e+00 +4.685165881678536870e+00 +4.696211382159502179e+00 +4.707295957151895749e+00 +4.718419647235618797e+00 +4.729582481049563469e+00 +4.740784476256599156e+00 +4.752025640414105467e+00 +4.763305971759349333e+00 +4.774625459991881371e+00 +4.785984087072672644e+00 +4.797381828035280904e+00 +4.808818651818777212e+00 +4.820294522140816440e+00 +4.831809398432656444e+00 +4.843363236854470344e+00 +4.854955991395774717e+00 +4.866587615039771997e+00 +4.878258060933225337e+00 +4.889967283464319969e+00 +4.901715239127469204e+00 +4.913501887063604912e+00 +4.925327189211820667e+00 +4.937191110076341261e+00 +4.949093616174216947e+00 +4.961034675263629623e+00 +4.973014255457554711e+00 +4.985032324017533156e+00 +4.997088846075207869e+00 +5.009183783663940126e+00 +5.021317095001417208e+00 +5.033488733974230023e+00 +5.045698649783935785e+00 +5.057946786721261745e+00 +5.070233084041004368e+00 +5.082557475915269407e+00 +5.094919891446751059e+00 +5.107320254727302888e+00 +5.119758484929858966e+00 +5.132234496424144865e+00 +5.144748198908601466e+00 +5.157299497552489953e+00 +5.169888293143513280e+00 +5.182514482237291276e+00 +5.195177957305959993e+00 +5.207878606883795669e+00 +5.220616315708390687e+00 +5.233390964856291738e+00 +5.246202431872411864e+00 +5.259050590892808685e+00 +5.271935312760557935e+00 +5.284856465134789794e+00 +5.297813912592841845e+00 +5.310807516725835953e+00 +5.323837136227830946e+00 +5.336902626978909048e+00 +5.350003842122484699e+00 +5.363140632137190167e+00 +5.376312844903710975e+00 +5.389520325766881115e+00 +5.402762917593421754e+00 +5.416040460825639613e+00 +5.429352793531404764e+00 +5.442699751450735590e+00 +5.456081168039265350e+00 +5.469496874508854134e+00 +5.482946699865642870e+00 +5.496430470945741220e+00 +5.509948012448797172e+00 +5.523499146969669482e+00 +5.537083695028339747e+00 +5.550701475098307469e+00 +5.564352303633557817e+00 +5.578035995094328570e+00 +5.591752361971730423e+00 +5.605501214811408950e+00 +5.619282362236312167e+00 +5.633095610968698708e+00 +5.646940765851468313e+00 +5.660817629868892809e+00 +5.674726004166846138e+00 +5.688665688072559234e+00 +5.702636479114016055e+00 +5.716638173039004123e+00 +5.730670563833901276e+00 +5.744733443742216394e+00 +5.758826603282967582e+00 +5.772949831268867626e+00 +5.787102914824425071e+00 +5.801285639403948480e+00 +5.815497788809469881e+00 +5.829739145208664652e+00 +5.844009489152707459e+00 +5.858308599594190369e+00 +5.872636253904988557e+00 +5.886992227894230822e+00 +5.901376295826263885e+00 +5.915788230438698392e+00 +5.930227802960507333e+00 +5.944694783130231919e+00 +5.959188939214229208e+00 +5.973710038025046742e+00 +5.988257844939850472e+00 +6.002832123919008112e+00 +6.017432637524727568e+00 +6.032059146939815264e+00 +6.046711411986560591e+00 +6.061389191145696742e+00 +6.076092241575510755e+00 +6.090820319131024618e+00 +6.105573178383325583e+00 +6.120350572638963982e+00 +6.135152253959510915e+00 +6.149977973181174562e+00 +6.164827479934563925e+00 +6.179700522664520079e+00 +6.194596848650084198e+00 +6.209516204024529529e+00 +6.224458333795531928e+00 +6.239422981865386575e+00 +6.254409891051350812e+00 +6.269418803106045601e+00 +6.284449458737965344e+00 +6.299501597632028549e+00 +6.314574958470238641e+00 +6.329669278952383848e+00 +6.344784295816795705e+00 +6.359919744861178614e+00 +6.375075360963483817e+00 +6.390250878102808230e+00 +6.405446029380341244e+00 +6.420660547040320409e+00 +6.435894162491024417e+00 +6.451146606325737665e+00 +6.466417608343762780e+00 +6.481706897571346104e+00 +6.497014202282635154e+00 +6.512339250020561465e+00 +6.527681767617671937e+00 +6.543041481216906874e+00 +6.558418116292243027e+00 +6.573811397669274470e+00 +6.589221049545640696e+00 +6.604646795511305513e+00 +6.620088358568658293e+00 +6.635545461152405622e+00 +6.651017825149269314e+00 +6.666505171917362915e+00 +6.682007222305339056e+00 +6.697523696671158433e+00 +6.713054314900526620e+00 +6.728598796424932971e+00 +6.744156860239234774e+00 +6.759728224918784889e+00 +6.775312608636069100e+00 +6.790909729176789256e+00 +6.806519303679639421e+00 +6.822141048317952539e+00 +6.837774678063047062e+00 +6.853419906518526616e+00 +6.869076445816162391e+00 +6.884744006565027163e+00 +6.900422297846288799e+00 +6.916111027246566678e+00 +6.931809900923349588e+00 +6.947518623696256057e+00 +6.963236899158522064e+00 +6.978964429803514946e+00 +6.994700917161596365e+00 +7.010446061943222062e+00 +7.026199564184691937e+00 +7.041961123393518207e+00 +7.057730438690910546e+00 +7.073507208949342484e+00 +7.089291132923690952e+00 +7.105081909374744598e+00 +7.120879237184327692e+00 +7.136682815461579565e+00 +7.152492343640144412e+00 +7.168307521566330109e+00 +7.184128049578390574e+00 +7.199953628577246079e+00 +7.215783960089119375e+00 +7.231618746320531699e+00 +7.247457690206275061e+00 +7.263300495450840444e+00 +7.279146866564046192e+00 +7.294996508891282261e+00 +7.310849128639066663e+00 +7.326704432896422148e+00 +7.342562129652582925e+00 +7.358421927811553687e+00 +7.374283537203945471e+00 +7.390146668596507595e+00 +7.406011033699769541e+00 +7.421876345174100109e+00 +7.437742316634485817e+00 +7.453608662654351846e+00 +7.469475098768613819e+00 +7.485341341476193122e+00 +7.501207108242187616e+00 +7.517072117499838058e+00 +7.532936088652430584e+00 +7.548798742075250701e+00 +7.564659799117677608e+00 +7.580518982105491688e+00 +7.596376014343482197e+00 +7.612230620118340951e+00 +7.628082524701957468e+00 +7.643931454355072930e+00 +7.659777136331340941e+00 +7.675619298881821706e+00 +7.691457671259843920e+00 +7.707291983726324958e+00 +7.723121967555453438e+00 +7.738947355040778575e+00 +7.754767879501674344e+00 +7.770583275290157133e+00 +7.786393277798028478e+00 +7.802197623464367737e+00 +7.817996049783273449e+00 +7.833788295311933325e+00 +7.849574099678886085e+00 +7.865353203592558629e+00 +7.881125348849984391e+00 +7.896890278345718883e+00 +7.912647736080895555e+00 +7.928397467172448643e+00 +7.944139217862439040e+00 +7.959872735527493859e+00 +7.975597768688308165e+00 +7.991314067019223089e+00 +8.007021381357859013e+00 +8.022719463714750532e+00 +8.038408067283034697e+00 +8.054086946448098416e+00 +8.069755856797238280e+00 +8.085414555129279535e+00 +8.101062799464166631e+00 +8.116700349052488050e+00 +8.132326964384947843e+00 +8.147942407201773207e+00 +8.163546440502010171e+00 +8.179138828552762419e+00 +8.194719336898323547e+00 +8.210287732369183189e+00 +8.225843783090938999e+00 +8.241387258493100276e+00 +8.256917929317729943e+00 +8.272435567627978159e+00 +8.287939946816505810e+00 +8.303430841613701929e+00 +8.318908028095822971e+00 +8.334371283692943777e+00 +8.349820387196777105e+00 +8.365255118768313736e+00 +8.380675259945338240e+00 +8.396080593649760004e+00 +8.411470904194780829e+00 +8.426845977291911538e+00 +8.442205600057805626e+00 +8.457549561020940132e+00 +8.472877650128120663e+00 +8.488189658750785682e+00 +8.503485379691204216e+00 +8.518764607188426652e+00 +8.534027136924112966e+00 +8.549272766028169102e+00 +8.564501293084191502e+00 +8.579712518134771315e+00 +8.594906242686603193e+00 +8.610082269715405801e+00 +8.625240403670701994e+00 +8.640380450480389385e+00 +8.655502217555165245e+00 +8.670605513792748908e+00 +8.685690149581963837e+00 +8.700755936806610080e+00 +8.715802688849205282e+00 +8.730830220594512525e+00 +8.745838348432933174e+00 +8.760826890263698985e+00 +8.775795665497923892e+00 +8.790744495061465713e+00 +8.805673201397631544e+00 +8.820581608469712620e+00 +8.835469541763355750e+00 +8.850336828288776658e+00 +8.865183296582785033e+00 +8.880008776710679896e+00 +8.894813100267978001e+00 +8.909596100381946826e+00 +8.924357611713027438e+00 +8.939097470456069061e+00 +8.953815514341417980e+00 +8.968511582635853685e+00 +8.983185516143347371e+00 +8.997837157205720970e+00 +9.012466349703078805e+00 +9.027072939054164635e+00 +9.041656772216516202e+00 +9.056217697686506085e+00 +9.070755565499203144e+00 +9.085270227228127382e+00 +9.099761535984823624e+00 +9.114229346418326827e+00 +9.128673514714465753e+00 +9.143093898595022750e+00 +9.157490357316785179e+00 +9.171862751670415648e+00 +9.186210943979233434e+00 +9.200534798097828926e+00 +9.214834179410566151e+00 +9.229108954829936096e+00 +9.243358992794796336e+00 +9.257584163268477440e+00 +9.271784337736766801e+00 +9.285959389205755699e+00 +9.300109192199579766e+00 +9.314233622758017361e+00 +9.328332558433997335e+00 +9.342405878290950483e+00 +9.356453462900077511e+00 +9.370475194337483771e+00 +9.384470956181202084e+00 +9.398440633508094777e+00 +9.412384112890672228e+00 +9.426301282393774628e+00 +9.440192031571141840e+00 +9.454056251461908644e+00 +9.467893834586972091e+00 +9.481704674945239830e+00 +9.495488668009816280e+00 +9.509245710724057332e+00 +9.522975701497539802e+00 +9.536678540201920740e+00 +9.550354128166722134e+00 +9.564002368175001934e+00 +9.577623164458932692e+00 +9.591216422695305610e+00 +9.604782050000936877e+00 +9.618319954927963877e+00 +9.631830047459095212e+00 +9.645312239002732824e+00 +9.658766442388060369e+00 +9.672192571859991261e+00 +9.685590543074070524e+00 +9.698960273091307371e+00 +9.712301680372904755e+00 +9.725614684774912533e+00 +9.738899207542829117e+00 +9.752155171306108983e+00 +9.765382500072602667e+00 +9.778581119222938156e+00 +9.791750955504804566e+00 +9.804891937027203852e+00 +9.818003993254617257e+00 +9.831087055001107800e+00 +9.844141054424344617e+00 +9.857165925019602426e+00 +9.870161601613675728e+00 +9.883128020358723731e+00 +9.896065118726086851e+00 +9.908972835500021503e+00 +9.921851110771392257e+00 +9.934699885931300045e+00 +9.947519103664680173e+00 +9.960308707943820394e+00 +9.973068644021847007e+00 +9.985798858426159441e+00 +9.998499298951823988e+00 +1.001116991465490180e+01 +1.002381065584575204e+01 +1.003642147408228880e+01 +1.004900232216318479e+01 +1.006155315412104301e+01 +1.007407392521554179e+01 +1.008656459192651056e+01 +1.009902511194699315e+01 +1.011145544417626851e+01 +1.012385554871284654e+01 +1.013622538684739993e+01 +1.014856492105570140e+01 +1.016087411499151472e+01 +1.017315293347944127e+01 +1.018540134250777029e+01 +1.019761930922126858e+01 +1.020980680191396672e+01 +1.022196379002190447e+01 +1.023409024411587609e+01 +1.024618613589411353e+01 +1.025825143817499274e+01 +1.027028612488968307e+01 +1.028229017107479670e+01 +1.029426355286501327e+01 +1.030620624748568837e+01 +1.031811823324544974e+01 +1.032999948952876323e+01 +1.034184999678849870e+01 +1.035366973653848355e+01 +1.036545869134603493e+01 +1.037721684482447593e+01 +1.038894418162566602e+01 +1.040064068743249059e+01 +1.041230634895136475e+01 +1.042394115390471931e+01 +1.043554509102348149e+01 +1.044711815003955380e+01 +1.045866032167828230e+01 +1.047017159765092309e+01 +1.048165197064710874e+01 +1.049310143432730946e+01 +1.050451998331528891e+01 +1.051590761319057243e+01 +1.052726432048090111e+01 +1.053859010265469465e+01 +1.054988495811351434e+01 +1.056114888618452774e+01 +1.057238188711297866e+01 +1.058358396205466967e+01 +1.059475511306842144e+01 +1.060589534310856941e+01 +1.061700465601746224e+01 +1.062808305651794072e+01 +1.063913055020586107e+01 +1.065014714354259517e+01 +1.066113284384757165e+01 +1.067208765929079384e+01 +1.068301159888539509e+01 +1.069390467248018695e+01 +1.070476689075223220e+01 +1.071559826519942682e+01 +1.072639880813309077e+01 +1.073716853267057658e+01 +1.074790745272789216e+01 +1.075861558301233600e+01 +1.076929293901516083e+01 +1.077993953700422480e+01 +1.079055539401669606e+01 +1.080114052785174295e+01 +1.081169495706327055e+01 +1.082221870095263938e+01 +1.083271177956144626e+01 +1.084317421366428746e+01 +1.085360602476157510e+01 +1.086400723507233401e+01 +1.087437786752706081e+01 +1.088471794576057761e+01 +1.089502749410491589e+01 +1.090530653758222712e+01 +1.091555510189770928e+01 +1.092577321343256003e+01 +1.093596089923695303e+01 +1.094611818702304085e+01 +1.095624510515797567e+01 +1.096634168265697085e+01 +1.097640794917635887e+01 +1.098644393500670979e+01 +1.099644967106595139e+01 +1.100642518889252486e+01 +1.101637052063856892e+01 +1.102628569906312173e+01 +1.103617075752536536e+01 +1.104602572997788812e+01 +1.105585065095997166e+01 +1.106564555559092078e+01 +1.107541047956340918e+01 +1.108514545913686433e+01 +1.109485053113085584e+01 +1.110452573291856559e+01 +1.111417110242023654e+01 +1.112378667809667476e+01 +1.113337249894278536e+01 +1.114292860448112243e+01 +1.115245503475549604e+01 +1.116195183032458083e+01 +1.117141903225558330e+01 +1.118085668211791450e+01 +1.119026482197692296e+01 +1.119964349438763840e+01 +1.120899274238855448e+01 +1.121831260949544351e+01 +1.122760313969521739e+01 +1.123686437743979205e+01 +1.124609636764001408e+01 +1.125529915565960692e+01 +1.126447278730914547e+01 +1.127361730884008040e+01 +1.128273276693879090e+01 +1.129181920872065348e+01 +1.130087668172417636e+01 +1.130990523390513403e+01 +1.131890491363076556e+01 +1.132787576967399445e+01 +1.133681785120767316e+01 +1.134573120779888455e+01 +1.135461588940326116e+01 +1.136347194635934876e+01 +1.137229942938298777e+01 +1.138109838956176034e+01 +1.138986887834943573e+01 +1.139861094756049553e+01 +1.140732464936463764e+01 +1.141601003628136901e+01 +1.142466716117460379e+01 +1.143329607724730401e+01 +1.144189683803615054e+01 +1.145046949740627085e+01 +1.145901410954596678e+01 +1.146753072896150982e+01 +1.147601941047195595e+01 +1.148448020920400126e+01 +1.149291318058686606e+01 +1.150131838034723231e+01 +1.150969586450418980e+01 +1.151804568936424289e+01 +1.152636791151633666e+01 +1.153466258782693288e+01 +1.154292977543510190e+01 +1.155116953174767325e+01 +1.155938191443440566e+01 +1.156756698142318740e+01 +1.157572479089530759e+01 +1.158385540128070623e+01 +1.159195887125331481e+01 +1.160003525972639693e+01 +1.160808462584793865e+01 +1.161610702899607439e+01 +1.162410252877453942e+01 +1.163207118500817216e+01 +1.164001305773842709e+01 +1.164792820721895339e+01 +1.165581669391119846e+01 +1.166367857848001677e+01 +1.167151392178936753e+01 +1.167932278489800169e+01 +1.168710522905520044e+01 +1.169486131569655818e+01 +1.170259110643978318e+01 +1.171029466308053912e+01 +1.171797204758833288e+01 +1.172562332210241109e+01 +1.173324854892771185e+01 +1.174084779053085192e+01 +1.174842110953612995e+01 +1.175596856872158114e+01 +1.176349023101505686e+01 +1.177098615949033622e+01 +1.177845641736328908e+01 +1.178590106798804626e+01 +1.179332017485321593e+01 +1.180071380157814254e+01 +1.180808201190918894e+01 +1.181542486971604156e+01 +1.182274243898807065e+01 +1.183003478383070828e+01 +1.183730196846187255e+01 +1.184454405720839354e+01 +1.185176111450252101e+01 +1.185895320487841964e+01 +1.186612039296871757e+01 +1.187326274350107980e+01 +1.188038032129483312e+01 +1.188747319125758750e+01 +1.189454141838192491e+01 +1.190158506774208824e+01 +1.190860420449073764e+01 +1.191559889385569271e+01 +1.192256920113675811e+01 +1.192951519170252972e+01 +1.193643693098727177e+01 +1.194333448448779755e+01 +1.195020791776039992e+01 +1.195705729641779413e+01 +1.196388268612611050e+01 +1.197068415260190299e+01 +1.197746176160918985e+01 +1.198421557895652967e+01 +1.199094567049412596e+01 +1.199765210211095123e+01 +1.200433493973192434e+01 +1.201099424931507897e+01 +1.201763009684880501e+01 +1.202424254834908623e+01 +1.203083166985678076e+01 +1.203739752743492986e+01 +1.204394018716608805e+01 +1.205045971514968706e+01 +1.205695617749943516e+01 +1.206342964034072374e+01 +4.882508223990890350e+00 +4.882504772892649392e+00 +4.882501316553182313e+00 +4.882497854988590902e+00 +4.882494388214929870e+00 +4.882490916248214852e+00 +4.882487439104411742e+00 +4.882483956799449132e+00 +4.882480469349205876e+00 +4.882476976769520860e+00 +4.882473479076193890e+00 +4.882469976284979474e+00 +4.882466468411596594e+00 +4.882462955471718935e+00 +4.882459437480984654e+00 +4.882455914454992829e+00 +4.882452386409306122e+00 +4.882448853359444563e+00 +4.882445315320898871e+00 +4.882441772309117134e+00 +4.882438224339516353e+00 +4.882434671427476225e+00 +4.882431113588343585e+00 +4.882427550837427965e+00 +4.882423983190012251e+00 +4.882420410661338472e+00 +4.882416833266622902e+00 +4.882413251021047174e+00 +4.882409663939759170e+00 +4.882406072037883682e+00 +4.882402475330507308e+00 +4.882398873832691777e+00 +4.882395267559465957e+00 +4.882391656525833845e+00 +4.882388040746768354e+00 +4.882384420237216638e+00 +4.882380795012092989e+00 +4.882377165086292159e+00 +4.882373530474680479e+00 +4.882369891192093192e+00 +4.882366247253347780e+00 +4.882362598673229748e+00 +4.882358945466498845e+00 +4.882355287647899722e+00 +4.882351625232143277e+00 +4.882347958233921759e+00 +4.882344286667904321e+00 +4.882340610548733473e+00 +4.882336929891033073e+00 +4.882333244709401221e+00 +4.882329555018420919e+00 +4.882325860832645859e+00 +4.882322162166612856e+00 +4.882318459034838298e+00 +4.882314751451816370e+00 +4.882311039432021715e+00 +4.882307322989911214e+00 +4.882303602139920429e+00 +4.882299876896464497e+00 +4.882296147273945230e+00 +4.882292413286739574e+00 +4.882288674949209373e+00 +4.882284932275700484e+00 +4.882281185280537450e+00 +4.882277433978031489e+00 +4.882273678382472504e+00 +4.882269918508137962e+00 +4.882266154369285793e+00 +4.882262385980158825e+00 +4.882258613354985677e+00 +4.882254836507977203e+00 +4.882251055453329158e+00 +4.882247270205224865e+00 +4.882243480777829880e+00 +4.882239687185294663e+00 +4.882235889441758125e+00 +4.882232087561342304e+00 +4.882228281558157690e+00 +4.882224471446300562e+00 +4.882220657239852990e+00 +4.882216838952884608e+00 +4.882213016599449062e+00 +4.882209190193594672e+00 +4.882205359749347551e+00 +4.882201525280729371e+00 +4.882197686801745817e+00 +4.882193844326392806e+00 +4.882189997868650266e+00 +4.882186147442489244e+00 +4.882182293061871015e+00 +4.882178434740743533e+00 +4.882174572493045872e+00 +4.882170706332701116e+00 +4.882166836273630572e+00 +4.882162962329735123e+00 +4.882159084514910319e+00 +4.882155202843043718e+00 +4.882151317328006890e+00 +4.882147427983666965e+00 +4.882143534823880415e+00 +4.882139637862489501e+00 +4.882135737113333818e+00 +4.882131832590240528e+00 +4.882127924307025246e+00 +4.882124012277497371e+00 +4.882120096515459196e+00 +4.882116177034700577e+00 +4.882112253849004269e+00 +4.882108326972144141e+00 +4.882104396417887848e+00 +4.882100462199992386e+00 +4.882096524332208531e+00 +4.882092582828278182e+00 +4.882088637701931688e+00 +4.882084688966900288e+00 +4.882080736636899232e+00 +4.882076780725640219e+00 +4.882072821246827843e+00 +4.882068858214157814e+00 +4.882064891641319626e+00 +4.882060921541994780e+00 +4.882056947929856783e+00 +4.882052970818576476e+00 +4.882048990221812268e+00 +4.882045006153221678e+00 +4.882041018626448903e+00 +4.882037027655139916e+00 +4.882033033252923815e+00 +4.882029035433432362e+00 +4.882025034210286663e+00 +4.882021029597099826e+00 +4.882017021607485852e+00 +4.882013010255045415e+00 +4.882008995553375641e+00 +4.882004977516068323e+00 +4.882000956156708149e+00 +4.881996931488875369e+00 +4.881992903526144900e+00 +4.881988872282081005e+00 +4.881984837770249719e+00 +4.881980800004205534e+00 +4.881976758997500276e+00 +4.881972714763680443e+00 +4.881968667316284538e+00 +4.881964616668846624e+00 +4.881960562834898099e+00 +4.881956505827962367e+00 +4.881952445661560169e+00 +4.881948382349200699e+00 +4.881944315904394927e+00 +4.881940246340648493e+00 +4.881936173671455492e+00 +4.881932097910310020e+00 +4.881928019070702618e+00 +4.881923937166112282e+00 +4.881919852210020672e+00 +4.881915764215901454e+00 +4.881911673197218526e+00 +4.881907579167438449e+00 +4.881903482140019790e+00 +4.881899382128416676e+00 +4.881895279146075239e+00 +4.881891173206443391e+00 +4.881887064322957492e+00 +4.881882952509053908e+00 +4.881878837778163671e+00 +4.881874720143711599e+00 +4.881870599619116291e+00 +4.881866476217794570e+00 +4.881862349953161484e+00 +4.881858220838616980e+00 +4.881854088887568111e+00 +4.881849954113413048e+00 +4.881845816529541970e+00 +4.881841676149344167e+00 +4.881837532986202710e+00 +4.881833387053498896e+00 +4.881829238364605139e+00 +4.881825086932892965e+00 +4.881820932771728572e+00 +4.881816775894471050e+00 +4.881812616314476827e+00 +4.881808454045099666e+00 +4.881804289099687111e+00 +4.881800121491578714e+00 +4.881795951234117581e+00 +4.881791778340631716e+00 +4.881787602824453565e+00 +4.881783424698910245e+00 +4.881779243977317329e+00 +4.881775060672991273e+00 +4.881770874799243209e+00 +4.881766686369381603e+00 +4.881762495396704260e+00 +4.881758301894509877e+00 +4.881754105876090932e+00 +4.881749907354736351e+00 +4.881745706343729729e+00 +4.881741502856344894e+00 +4.881737296905861889e+00 +3.777337663783349342e+00 +3.776869655467304909e+00 +3.776401124096578243e+00 +3.775932072887454360e+00 +3.775462505049393958e+00 +3.774992423785130224e+00 +3.774521832290727019e+00 +3.774050733755720088e+00 +3.773579131363151262e+00 +3.773107028289703901e+00 +3.772634427705768179e+00 +3.772161332775510800e+00 +3.771687746656992246e+00 +3.771213672502215619e+00 +3.770739113457234559e+00 +3.770264072662214083e+00 +3.769788553251506968e+00 +3.769312558353752340e+00 +3.768836091091920526e+00 +3.768359154583408532e+00 +3.767881751940108437e+00 +3.767403886268466451e+00 +3.766925560669571738e+00 +3.766446778239206594e+00 +3.765967542067929941e+00 +3.765487855241127058e+00 +3.765007720839089966e+00 +3.764527141937068944e+00 +3.764046121605349793e+00 +3.763564662909294256e+00 +3.763082768909416842e+00 +3.762600442661436340e+00 +3.762117687216345097e+00 +3.761634505620448543e+00 +3.761150900915423367e+00 +3.760666876138399228e+00 +3.760182434321968081e+00 +3.759697578494276549e+00 +3.759212311679047680e+00 +3.758726636895657336e+00 +3.758240557159165274e+00 +3.757754075480367106e+00 +3.757267194865839155e+00 +3.756779918318010836e+00 +3.756292248835162884e+00 +3.755804189411520611e+00 +3.755315743037255682e+00 +3.754826912698564279e+00 +3.754337701377683523e+00 +3.753848112052943442e+00 +3.753358147698812264e+00 +3.752867811285918176e+00 +3.752377105781105282e+00 +3.751886034147466464e+00 +3.751394599344366032e+00 +3.750902804327497897e+00 +3.750410652048902893e+00 +3.749918145457018959e+00 +3.749425287496687353e+00 +3.748932081109218828e+00 +3.748438529232406502e+00 +3.747944634800552954e+00 +3.747450400744509302e+00 +3.746955829991707621e+00 +3.746460925466176928e+00 +3.745965690088580935e+00 +3.745470126776253128e+00 +3.744974238443190107e+00 +3.744478028000121306e+00 +3.743981498354505888e+00 +3.743484652410563385e+00 +3.742987493069296789e+00 +3.742490023228520535e+00 +3.741992245782880921e+00 +3.741494163623872549e+00 +3.740995779639864516e+00 +3.740497096716118186e+00 +3.739998117734812944e+00 +3.739498845575063068e+00 +3.738999283112922178e+00 +3.738499433221429413e+00 +3.737999298770600998e+00 +3.737498882627457331e+00 +3.736998187656041637e+00 +3.736497216717433290e+00 +3.735995972669767351e+00 +3.735494458368227022e+00 +3.734992676665101818e+00 +3.734490630409747602e+00 +3.733988322448643871e+00 +3.733485755625378211e+00 +3.732982932780684493e+00 +3.732479856752416669e+00 +3.731976530375598955e+00 +3.731472956482407621e+00 +3.730969137902200305e+00 +3.730465077461508905e+00 +3.729960777984066667e+00 +3.729456242290796197e+00 +3.728951473199832112e+00 +3.728446473526529914e+00 +3.727941246083462001e+00 +3.727435793680428322e+00 +3.726930119124468366e+00 +3.726424225219861608e+00 +3.725918114768135059e+00 +3.725411790568061932e+00 +3.724905255415676297e+00 +3.724398512104277970e+00 +3.723891563424416962e+00 +3.723384412163922796e+00 +3.722877061107886298e+00 +3.722369513038676914e+00 +3.721861770735934272e+00 +3.721353836976577512e+00 +3.720845714534805282e+00 +3.720337406182092188e+00 +3.719828914687193233e+00 +3.719320242816138045e+00 +3.718811393332250415e+00 +3.718302368996122542e+00 +3.717793172565618587e+00 +3.717283806795905754e+00 +3.716774274439400116e+00 +3.716264578245807915e+00 +3.715754720962105129e+00 +3.715244705332540587e+00 +3.714734534098622643e+00 +3.714224209999133386e+00 +3.713713735770113100e+00 +3.713203114144856709e+00 +3.712692347853920882e+00 +3.712181439625108048e+00 +3.711670392183464173e+00 +3.711159208251287644e+00 +3.710647890548092409e+00 +3.710136441790643058e+00 +3.709624864692922852e+00 +3.709113161966129724e+00 +3.708601336318681607e+00 +3.708089390456200007e+00 +3.707577327081513552e+00 +3.707065148894639783e+00 +3.706552858592779387e+00 +3.706040458870324628e+00 +3.705527952418829596e+00 +3.705015341927019090e+00 +3.704502630080772629e+00 +3.703989819563118235e+00 +3.703476913054225772e+00 +3.702963913231394955e+00 +3.702450822769053129e+00 +3.701937644338735289e+00 +3.701424380609087184e+00 +3.700911034245845332e+00 +3.700397607911831699e+00 +3.699884104266953244e+00 +3.699370525968170398e+00 +3.698856875669506383e+00 +3.698343156022036116e+00 +3.697829369673851119e+00 +3.697315519270088835e+00 +3.696801607452886884e+00 +3.696287636861389281e+00 +3.695773610131723785e+00 +3.695259529897016115e+00 +3.694745398787341539e+00 +3.694231219429741309e+00 +3.693716994448200008e+00 +3.693202726463633567e+00 +3.692688418093878155e+00 +3.692174071953678194e+00 +3.691659690654677028e+00 +3.691145276805398723e+00 +3.690630833011240508e+00 +3.690116361874448359e+00 +3.689601865994119656e+00 +3.689087347966186758e+00 +3.688572810383394351e+00 +3.688058255835293231e+00 +3.687543686908226537e+00 +3.687029106185311988e+00 +3.686514516246433448e+00 +3.685999919668224933e+00 +3.685485319024056849e+00 +3.684970716884019559e+00 +3.684456115814914501e+00 +3.683941518380230651e+00 +3.683426927140145857e+00 +3.682912344651491754e+00 +3.682397773467754654e+00 +3.681883216139058668e+00 +3.681368675212143060e+00 +3.680854153230357362e+00 +3.680339652733639166e+00 +3.679825176258501251e+00 +3.679310726338020920e+00 +3.678796305501817354e+00 +3.678281916276036068e+00 +3.677767561183341360e+00 diff --git a/tools/cardiac_pm.py b/tools/cardiac_pm.py new file mode 100644 index 0000000..49ec96f --- /dev/null +++ b/tools/cardiac_pm.py @@ -0,0 +1,34 @@ +import numpy as np +import pulsatile_model_functions as pmf +import healthy_params as K +import concore + +#x0 = np.loadtxt('pulsatile_steady.txt') + +rx0 = np.concatenate((np.zeros(4),np.array([-0.25, 1, -0.25, 1]),np.zeros(20),np.array([K.theta0[8],K.Vulv,K.Vurv]))) +dx0 = pmf.generate_historylist() +x0 = np.concatenate((rx0,dx0)) + + +def cardiac_pm(x0,u): + hr, mapp, x0 = pmf.healthy_pm(x0, u) + + return hr,mapp,x0 + +concore.default_maxtime(150) +concore.delay = 0.02 +init_simtime_u = "[0.0, 0.0,0.0]" +init_simtime_ym = "[0.0, 70,0]" +ym = np.array([concore.initval(init_simtime_ym)]).T +while(concore.simtime + + + + + + + + + + + PZ:cardiac_pm.py + + + + + + + + + + + CZ:bangbang.py + + + + + + + + + + + XZ:plotym.py + + + + + + + + + + PYM + + + + + + + + + + + + CU + + + + + + + + + + + + XYM + + + + + + + + 1644943336906 + sanmi + + DEL_NODE + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiXQ== + + + ADD_NODE + WyJQWjpjYXJkaWFjX3BtLnB5Iix7IndpZHRoIjoxNDgsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjQ1LCJ5Ijo4NX0se30sIjU1MDg2NWQxLTI4YTMtNDBhOS05ZTI1LWQzYjY4YWQyNzdkNiJd + + + + 1644943355554 + sanmi + + DEL_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiXQ== + + + ADD_NODE + WyJDWjpkdW1teV9jb250cm9sbGVyLnB5Iix7IndpZHRoIjoxOTMsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjUyLCJ5IjoyNjR9LHt9LCIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiXQ== + + + + 1644943358106 + sanmi + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MTM0LCJ5IjoyNjZ9XQ== + + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTM0LCJ5IjoyNjZ9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1644943359494 + sanmi + + SET_POS + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MjQ1LCJ5Ijo4NX1d + + + SET_POS + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLHsieCI6MjQ1LCJ5Ijo4NX0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1644943362210 + sanmi + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTM0LCJ5IjoyNjZ9LHsieCI6MjUyLCJ5IjoyNjR9XQ== + + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MjUyLCJ5IjoyNjR9LHsieCI6MTM0LCJ5IjoyNjZ9XQ== + + + + 1644943375398 + sanmi + + DEL_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiXQ== + + + ADD_NODE + WyJYWjpwbG90eW0iLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4Ijo1MDcsInkiOjE2MH0se30sIjRiODYwYWFlLTA1YzktNGViNS1iYzQ4LWY4MDAwY2NiNDJhOCJd + + + + 1644943378630 + sanmi + + SET_POS + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NTA3LCJ5IjoxNjB9XQ== + + + SET_POS + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsieCI6NTA3LCJ5IjoxNjB9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1644943386853 + sanmi + + DEL_EDGE + WyI0NzcwODQwZi04OGEwLTQ3NTItOWMxOS0yZTdmODlmOGZhNzkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLCJ0YXJnZXRJRCI6IjRiODYwYWFlLTA1YzktNGViNS1iYzQ4LWY4MDAwY2NiNDJhOCIsImxhYmVsIjoiUFlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjN2M0ZGZmIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjQ3NzA4NDBmLTg4YTAtNDc1Mi05YzE5LTJlN2Y4OWY4ZmE3OSJ9XQ== + + + + 1644943394719 + sanmi + + DEL_EDGE + WyI3ZjJiMWM0Yy04ZjJmLTQyZjQtYjU1Yy0xY2RlNzdiMWU4NTIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLCJ0YXJnZXRJRCI6IjU1MDg2NWQxLTI4YTMtNDBhOS05ZTI1LWQzYjY4YWQyNzdkNiIsImxhYmVsIjoiQ1UiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiN2YyYjFjNGMtOGYyZi00MmY0LWI1NWMtMWNkZTc3YjFlODUyIn1d + + + + 1644943403841 + sanmi + + DEL_EDGE + WyIyZDdlZjk4ZS04Y2E5LTRhZjMtYWQxOS1hYzM0MTQ2ZmZlYmYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLCJ0YXJnZXRJRCI6IjM2YjlmMWRmLTdjODQtNGYwNy04ZmNlLWM0YTZmNjQ2MjkzMSIsImxhYmVsIjoiWFlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjMTU2NWMwIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjJkN2VmOThlLThjYTktNGFmMy1hZDE5LWFjMzQxNDZmZmViZiJ9XQ== + + + + 1644943683422 + sanmi + + UPDATE_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJYWjpwbG90eW0iLHRydWVd + + + UPDATE_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsid2lkdGgiOjExNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJYWjpwbG90eW0ucHkiLHRydWVd + + + + 1662144313252 + sanmi + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpkdW1teV9jb250cm9sbGVyLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nbmJhbmcucHkiLHRydWVd + + + + 1662144436617 + sanmi + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nbmJhbmcucHkiLHRydWVd + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nYmFuZy5weSIsdHJ1ZV0= + + + + \ No newline at end of file From 7c9d8b318b29ad1c97ffbd7731e1927827ca1c28 Mon Sep 17 00:00:00 2001 From: shanferns12 Date: Wed, 7 Sep 2022 17:13:31 -0400 Subject: [PATCH 070/113] pretending bangbang is pid --- tools/pid.graphml | 244 ++++++++++++++++++++++++++++++++++++++++++++++ tools/shannon.py | 32 ++++++ 2 files changed, 276 insertions(+) create mode 100644 tools/pid.graphml create mode 100644 tools/shannon.py diff --git a/tools/pid.graphml b/tools/pid.graphml new file mode 100644 index 0000000..c6229f9 --- /dev/null +++ b/tools/pid.graphml @@ -0,0 +1,244 @@ + + + + + + + + + + + + PZ:cardiac_pm.py + + + + + + + + + + + CZ:shannon.py + + + + + + + + + + + XZ:plotym.py + + + + + + + + + + PYM + + + + + + + + + + + + CU + + + + + + + + + + + + XYM + + + + + + + + 1644943336906 + sanmi + + DEL_NODE + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiXQ== + + + ADD_NODE + WyJQWjpjYXJkaWFjX3BtLnB5Iix7IndpZHRoIjoxNDgsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjQ1LCJ5Ijo4NX0se30sIjU1MDg2NWQxLTI4YTMtNDBhOS05ZTI1LWQzYjY4YWQyNzdkNiJd + + + + 1644943355554 + sanmi + + DEL_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiXQ== + + + ADD_NODE + WyJDWjpkdW1teV9jb250cm9sbGVyLnB5Iix7IndpZHRoIjoxOTMsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjUyLCJ5IjoyNjR9LHt9LCIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiXQ== + + + + 1644943358106 + sanmi + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MTM0LCJ5IjoyNjZ9XQ== + + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTM0LCJ5IjoyNjZ9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1644943359494 + sanmi + + SET_POS + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MjQ1LCJ5Ijo4NX1d + + + SET_POS + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLHsieCI6MjQ1LCJ5Ijo4NX0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1644943362210 + sanmi + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTM0LCJ5IjoyNjZ9LHsieCI6MjUyLCJ5IjoyNjR9XQ== + + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MjUyLCJ5IjoyNjR9LHsieCI6MTM0LCJ5IjoyNjZ9XQ== + + + + 1644943375398 + sanmi + + DEL_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiXQ== + + + ADD_NODE + WyJYWjpwbG90eW0iLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4Ijo1MDcsInkiOjE2MH0se30sIjRiODYwYWFlLTA1YzktNGViNS1iYzQ4LWY4MDAwY2NiNDJhOCJd + + + + 1644943378630 + sanmi + + SET_POS + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NTA3LCJ5IjoxNjB9XQ== + + + SET_POS + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsieCI6NTA3LCJ5IjoxNjB9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1644943386853 + sanmi + + DEL_EDGE + WyI0NzcwODQwZi04OGEwLTQ3NTItOWMxOS0yZTdmODlmOGZhNzkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLCJ0YXJnZXRJRCI6IjRiODYwYWFlLTA1YzktNGViNS1iYzQ4LWY4MDAwY2NiNDJhOCIsImxhYmVsIjoiUFlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjN2M0ZGZmIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjQ3NzA4NDBmLTg4YTAtNDc1Mi05YzE5LTJlN2Y4OWY4ZmE3OSJ9XQ== + + + + 1644943394719 + sanmi + + DEL_EDGE + WyI3ZjJiMWM0Yy04ZjJmLTQyZjQtYjU1Yy0xY2RlNzdiMWU4NTIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLCJ0YXJnZXRJRCI6IjU1MDg2NWQxLTI4YTMtNDBhOS05ZTI1LWQzYjY4YWQyNzdkNiIsImxhYmVsIjoiQ1UiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiN2YyYjFjNGMtOGYyZi00MmY0LWI1NWMtMWNkZTc3YjFlODUyIn1d + + + + 1644943403841 + sanmi + + DEL_EDGE + WyIyZDdlZjk4ZS04Y2E5LTRhZjMtYWQxOS1hYzM0MTQ2ZmZlYmYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLCJ0YXJnZXRJRCI6IjM2YjlmMWRmLTdjODQtNGYwNy04ZmNlLWM0YTZmNjQ2MjkzMSIsImxhYmVsIjoiWFlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjMTU2NWMwIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjJkN2VmOThlLThjYTktNGFmMy1hZDE5LWFjMzQxNDZmZmViZiJ9XQ== + + + + 1644943683422 + sanmi + + UPDATE_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJYWjpwbG90eW0iLHRydWVd + + + UPDATE_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsid2lkdGgiOjExNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJYWjpwbG90eW0ucHkiLHRydWVd + + + + 1662144313252 + sanmi + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpkdW1teV9jb250cm9sbGVyLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nbmJhbmcucHkiLHRydWVd + + + + 1662144436617 + sanmi + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nbmJhbmcucHkiLHRydWVd + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nYmFuZy5weSIsdHJ1ZV0= + + + + 1662583658804 + Shannon + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nYmFuZy5weSIsdHJ1ZV0= + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpzaGFubm9uLnB5Iix0cnVlXQ== + + + + \ No newline at end of file diff --git a/tools/shannon.py b/tools/shannon.py new file mode 100644 index 0000000..af07332 --- /dev/null +++ b/tools/shannon.py @@ -0,0 +1,32 @@ +import numpy as np +import concore +setpoint = 67.5 + + +def bangbang_controller(ym): + amp = 0 + if ym[0]>setpoint +2.5: + amp = 3 + elif ym[0] Date: Wed, 14 Sep 2022 15:21:09 -0400 Subject: [PATCH 071/113] Update shannon.py --- tools/shannon.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/tools/shannon.py b/tools/shannon.py index af07332..666238a 100644 --- a/tools/shannon.py +++ b/tools/shannon.py @@ -1,16 +1,23 @@ import numpy as np import concore setpoint = 67.5 +Kp = 0.1 +Ki = 0.01 +Kd = 0.01 +dT = 0.1 +global Prev_Error, I +Prev_Error = 0 +I = 0 -def bangbang_controller(ym): - amp = 0 - if ym[0]>setpoint +2.5: - amp = 3 - elif ym[0] Date: Fri, 16 Sep 2022 14:25:00 -0400 Subject: [PATCH 072/113] HR<->MAP in tools match ratc (change still needed in humanc) --- tools/bangbang.py | 4 +- tools/cardiac_pm.py | 6 +- tools/pid2.graphml | 256 ++++++++++++++++++++++++++++++++++++++++++++ tools/pid2.py | 64 +++++++++++ tools/shannon.py | 2 +- 5 files changed, 327 insertions(+), 5 deletions(-) create mode 100644 tools/pid2.graphml create mode 100644 tools/pid2.py diff --git a/tools/bangbang.py b/tools/bangbang.py index 9fcc811..eed72b8 100644 --- a/tools/bangbang.py +++ b/tools/bangbang.py @@ -4,9 +4,9 @@ def bangbang_controller(ym): amp = 0 - if ym[0]>70: + if ym[1]>70: amp = 3 - elif ym[0]<65: + elif ym[1]<65: amp = 1 diff --git a/tools/cardiac_pm.py b/tools/cardiac_pm.py index 49ec96f..d3edb30 100644 --- a/tools/cardiac_pm.py +++ b/tools/cardiac_pm.py @@ -27,8 +27,10 @@ def cardiac_pm(x0,u): hr,mapp,x0 = cardiac_pm(x0,u) - dummy = np.array([hr,mapp]) + #dummy = np.array([hr,mapp]) + dummy = np.array([mapp,hr]) print(str(concore.simtime) + " u="+str(u) + "ym=" + str(dummy)) - concore.write(1,"ym",list(np.array([hr,mapp])),delta=1) + #concore.write(1,"ym",list(np.array([hr,mapp])),delta=1) + concore.write(1,"ym",list(np.array([mapp,hr])),delta=1) diff --git a/tools/pid2.graphml b/tools/pid2.graphml new file mode 100644 index 0000000..283a66c --- /dev/null +++ b/tools/pid2.graphml @@ -0,0 +1,256 @@ + + + + + + + + + + + + PZ:cardiac_pm.py + + + + + + + + + + + CZ:pid2.py + + + + + + + + + + + XZ:plotym.py + + + + + + + + + + PYM + + + + + + + + + + + + CU + + + + + + + + + + + + XYM + + + + + + + + 1644943336906 + sanmi + + DEL_NODE + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiXQ== + + + ADD_NODE + WyJQWjpjYXJkaWFjX3BtLnB5Iix7IndpZHRoIjoxNDgsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjQ1LCJ5Ijo4NX0se30sIjU1MDg2NWQxLTI4YTMtNDBhOS05ZTI1LWQzYjY4YWQyNzdkNiJd + + + + 1644943355554 + sanmi + + DEL_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiXQ== + + + ADD_NODE + WyJDWjpkdW1teV9jb250cm9sbGVyLnB5Iix7IndpZHRoIjoxOTMsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjUyLCJ5IjoyNjR9LHt9LCIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiXQ== + + + + 1644943358106 + sanmi + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MTM0LCJ5IjoyNjZ9XQ== + + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTM0LCJ5IjoyNjZ9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1644943359494 + sanmi + + SET_POS + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MjQ1LCJ5Ijo4NX1d + + + SET_POS + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLHsieCI6MjQ1LCJ5Ijo4NX0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1644943362210 + sanmi + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTM0LCJ5IjoyNjZ9LHsieCI6MjUyLCJ5IjoyNjR9XQ== + + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MjUyLCJ5IjoyNjR9LHsieCI6MTM0LCJ5IjoyNjZ9XQ== + + + + 1644943375398 + sanmi + + DEL_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiXQ== + + + ADD_NODE + WyJYWjpwbG90eW0iLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4Ijo1MDcsInkiOjE2MH0se30sIjRiODYwYWFlLTA1YzktNGViNS1iYzQ4LWY4MDAwY2NiNDJhOCJd + + + + 1644943378630 + sanmi + + SET_POS + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NTA3LCJ5IjoxNjB9XQ== + + + SET_POS + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsieCI6NTA3LCJ5IjoxNjB9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1644943386853 + sanmi + + DEL_EDGE + WyI0NzcwODQwZi04OGEwLTQ3NTItOWMxOS0yZTdmODlmOGZhNzkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLCJ0YXJnZXRJRCI6IjRiODYwYWFlLTA1YzktNGViNS1iYzQ4LWY4MDAwY2NiNDJhOCIsImxhYmVsIjoiUFlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjN2M0ZGZmIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjQ3NzA4NDBmLTg4YTAtNDc1Mi05YzE5LTJlN2Y4OWY4ZmE3OSJ9XQ== + + + + 1644943394719 + sanmi + + DEL_EDGE + WyI3ZjJiMWM0Yy04ZjJmLTQyZjQtYjU1Yy0xY2RlNzdiMWU4NTIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLCJ0YXJnZXRJRCI6IjU1MDg2NWQxLTI4YTMtNDBhOS05ZTI1LWQzYjY4YWQyNzdkNiIsImxhYmVsIjoiQ1UiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiN2YyYjFjNGMtOGYyZi00MmY0LWI1NWMtMWNkZTc3YjFlODUyIn1d + + + + 1644943403841 + sanmi + + DEL_EDGE + WyIyZDdlZjk4ZS04Y2E5LTRhZjMtYWQxOS1hYzM0MTQ2ZmZlYmYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLCJ0YXJnZXRJRCI6IjM2YjlmMWRmLTdjODQtNGYwNy04ZmNlLWM0YTZmNjQ2MjkzMSIsImxhYmVsIjoiWFlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjMTU2NWMwIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjJkN2VmOThlLThjYTktNGFmMy1hZDE5LWFjMzQxNDZmZmViZiJ9XQ== + + + + 1644943683422 + sanmi + + UPDATE_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJYWjpwbG90eW0iLHRydWVd + + + UPDATE_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsid2lkdGgiOjExNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJYWjpwbG90eW0ucHkiLHRydWVd + + + + 1662144313252 + sanmi + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpkdW1teV9jb250cm9sbGVyLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nbmJhbmcucHkiLHRydWVd + + + + 1662144436617 + sanmi + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nbmJhbmcucHkiLHRydWVd + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nYmFuZy5weSIsdHJ1ZV0= + + + + 1662583658804 + Shannon + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nYmFuZy5weSIsdHJ1ZV0= + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpzaGFubm9uLnB5Iix0cnVlXQ== + + + + 1663351448627 + mark + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpzaGFubm9uLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpwaWQyLnB5Iix0cnVlXQ== + + + + \ No newline at end of file diff --git a/tools/pid2.py b/tools/pid2.py new file mode 100644 index 0000000..6f88285 --- /dev/null +++ b/tools/pid2.py @@ -0,0 +1,64 @@ +import numpy as np +import concore +setpoint = 67.5 +setpointF = 75.0 +KpF = 0.1 +KiF = 0.01 +KdF = 0.01 +Kp = 0.1 +Ki = 0.01 +Kd = 0.01 +dT = 0.1 +global Prev_Error, I +Prev_Error = 0 +I = 0 +global Prev_ErrorF, IF +Prev_ErrorF = 0 +IF = 0 + + +def pid_controller(ym): + global Prev_Error, I + global Prev_ErrorF, IF + Error = setpoint- ym[1] + dT = 60.0/ym[1] + P = Error + I = I + Error*dT + D = (Error - Prev_Error )/dT + amp = Kp*P + Ki*I + Kd*D + if amp>3: + amp = 3 + if amp<0: + amp = 0 + Prev_Error = Error + + ErrorF = setpointF- ym[0] + PF = ErrorF + IF = IF + ErrorF*dT + DF = (ErrorF - Prev_ErrorF )/dT + freq= KpF*PF + KiF*IF + KdF*DF + if freq>30: + freq = 30 + if freq<10: + freq = 10 + Prev_ErrorF = ErrorF + ustar = np.array([amp,30]) + return ustar + + +concore.default_maxtime(150) +concore.delay = 0.02 +init_simtime_u = "[0.0, 0.0,0.0]" +init_simtime_ym = "[0.0, 70.0,91]" +u = np.array([concore.initval(init_simtime_u)]).T +print("Shannon's PID controller: setpoint is "+str(setpoint)) +while(concore.simtime Date: Fri, 16 Sep 2022 15:37:01 -0400 Subject: [PATCH 073/113] HR MAP switched --- humanc/bangbang.py | 4 ++-- humanc/cardiac_pm.py | 6 ++++-- humanc/plotym.py | 42 ++++++++++++++++++++++-------------------- 3 files changed, 28 insertions(+), 24 deletions(-) diff --git a/humanc/bangbang.py b/humanc/bangbang.py index 9fcc811..eed72b8 100644 --- a/humanc/bangbang.py +++ b/humanc/bangbang.py @@ -4,9 +4,9 @@ def bangbang_controller(ym): amp = 0 - if ym[0]>70: + if ym[1]>70: amp = 3 - elif ym[0]<65: + elif ym[1]<65: amp = 1 diff --git a/humanc/cardiac_pm.py b/humanc/cardiac_pm.py index 49ec96f..d3edb30 100644 --- a/humanc/cardiac_pm.py +++ b/humanc/cardiac_pm.py @@ -27,8 +27,10 @@ def cardiac_pm(x0,u): hr,mapp,x0 = cardiac_pm(x0,u) - dummy = np.array([hr,mapp]) + #dummy = np.array([hr,mapp]) + dummy = np.array([mapp,hr]) print(str(concore.simtime) + " u="+str(u) + "ym=" + str(dummy)) - concore.write(1,"ym",list(np.array([hr,mapp])),delta=1) + #concore.write(1,"ym",list(np.array([hr,mapp])),delta=1) + concore.write(1,"ym",list(np.array([mapp,hr])),delta=1) diff --git a/humanc/plotym.py b/humanc/plotym.py index 648e401..815f96c 100644 --- a/humanc/plotym.py +++ b/humanc/plotym.py @@ -2,37 +2,39 @@ import numpy as np import matplotlib.pyplot as plt import time -print("plotym") +print("plot ym") -concore.delay = 0.02 +concore.delay = 0.005 concore.default_maxtime(150) -init_simtime_u = "[0.0, 0.0, 0.0]" -init_simtime_ym = "[0, 103, 0]" +init_simtime_u = "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0, 0.0]" +ut = [] ymt = [] - ym = concore.initval(init_simtime_ym) while(concore.simtime Date: Fri, 16 Sep 2022 16:00:16 -0400 Subject: [PATCH 074/113] Update editgraph --- editgraph | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/editgraph b/editgraph index 65934b3..330f833 100755 --- a/editgraph +++ b/editgraph @@ -2,12 +2,12 @@ which open if [ $? == 0 ] then - open https://controlcore-project.github.io/DHGWorkflow/ + open https://controlcore-project.github.io/concore-editor/ else which xdg-open if [ $? == 0 ] then - xdg-open https://controlcore-project.github.io/DHGWorkflow/ + xdg-open https://controlcore-project.github.io/concore-editor/ else echo "unable to open browser for DHGWorkflow" fi From b590728e5fbffa10dc3dc679aad89b49650ac902 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Fri, 16 Sep 2022 16:00:45 -0400 Subject: [PATCH 075/113] Update editgraph --- editgraph | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editgraph b/editgraph index 330f833..b78757f 100755 --- a/editgraph +++ b/editgraph @@ -9,6 +9,6 @@ else then xdg-open https://controlcore-project.github.io/concore-editor/ else - echo "unable to open browser for DHGWorkflow" + echo "unable to open browser for the concore editor." fi fi From 42401773d565bca2e8510b037e1714f427e0a97e Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Fri, 16 Sep 2022 16:01:05 -0400 Subject: [PATCH 076/113] Update editgraph.bat --- editgraph.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/editgraph.bat b/editgraph.bat index b34be4d..8643ff7 100644 --- a/editgraph.bat +++ b/editgraph.bat @@ -1,2 +1,2 @@ -start https://controlcore-project.github.io/DHGWorkflow/ +start https://controlcore-project.github.io/concore-editor/ From ceb133e13a1e2ef9f1487e28c5a90414c74a5493 Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Sun, 18 Sep 2022 17:59:38 -0400 Subject: [PATCH 077/113] concore.params and pidsig.py that uses it --- concore.py | 7 +- concoredocker.py | 5 + mkconcore.py | 61 ++++++++++- tools/pids.graphml | 268 +++++++++++++++++++++++++++++++++++++++++++++ tools/pidsig.py | 76 +++++++++++++ tools/plotym.py | 2 +- 6 files changed, 416 insertions(+), 3 deletions(-) create mode 100644 tools/pids.graphml create mode 100644 tools/pidsig.py diff --git a/concore.py b/concore.py index 3587ace..4af04d3 100644 --- a/concore.py +++ b/concore.py @@ -21,7 +21,6 @@ oport = dict() - s = '' olds = '' delay = 1 @@ -29,6 +28,12 @@ inpath = "./in" #must be rel path for local outpath = "./out" +#9/17/22 +try: + params = literal_eval(open(inpath+"1/concore.params").read()) +except: + params = dict() + #9/12/21 def default_maxtime(default): global maxtime diff --git a/concoredocker.py b/concoredocker.py index ef503cd..cc7e6a9 100644 --- a/concoredocker.py +++ b/concoredocker.py @@ -18,6 +18,11 @@ inpath = "/in" #must be abs path for docker outpath = "/out" +#9/17/22 +try: + params = literal_eval(open(inpath+"1/concore.params").read()) +except: + params = dict() #9/12/21 def default_maxtime(default): global maxtime diff --git a/mkconcore.py b/mkconcore.py index 40aa885..b0ae9f0 100644 --- a/mkconcore.py +++ b/mkconcore.py @@ -6,7 +6,7 @@ import shutil import stat -MKCONCORE_VER = "21-12-06" +MKCONCORE_VER = "22-09-18" GRAPHML_FILE = sys.argv[1] TRIMMED_LOGS = True CONCOREPATH = "." @@ -84,6 +84,7 @@ fclear = open("clear.bat", "w") fmaxtime = open("maxtime.bat", "w") # 9/12/21 funlock = open("unlock.bat", "w") # 12/4/21 + fparams = open("params.bat", "w") # 9/18/22 else: fbuild = open("build","w") frun = open("run", "w") @@ -92,6 +93,7 @@ fclear = open("clear", "w") fmaxtime = open("maxtime", "w") # 9/12/21 funlock = open("unlock", "w") # 12/4/21 + fparams = open("params", "w") # 9/18/22 os.mkdir("src") os.chdir("..") @@ -537,6 +539,45 @@ fmaxtime.write('rm Dockerfile\n') fmaxtime.write('rm concore.maxtime\n') fmaxtime.close() + + fparams.write('echo "$1" >concore.params\n') + fparams.write('echo "FROM alpine:3.8" > Dockerfile\n') + fparams.write('sudo docker build -t docker-concore .\n') + fparams.write('sudo docker run --name=concore') + # -v VCZ:/VCZ -v VPZ:/VPZ + i=0 # 9/12/21 + for node in nodes_dict: + containername,sourcecode = nodes_dict[node].split(':') + if len(sourcecode)!=0: + dockername = sourcecode.split(".")[0] #3/28/21 + writeedges = volswr[i] + while writeedges.find(":") != -1: + fparams.write(' -v ') + fparams.write(writeedges.split(":")[0].split("-v ")[1]+":/") + fparams.write(writeedges.split(":")[0].split("-v ")[1]) + writeedges = writeedges[writeedges.find(":")+1:] + i=i+1 + fparams.write(' docker-concore >/dev/null &\n') + fparams.write('sleep 3\n') # 12/6/21 + fparams.write('echo "copying concore.params=$1"\n') + i=0 # 9/12/21 + for node in nodes_dict: + containername,sourcecode = nodes_dict[node].split(':') + if len(sourcecode)!=0: + dockername = sourcecode.split(".")[0] #3/28/21 + writeedges = volswr[i] + while writeedges.find(":") != -1: + fparams.write('sudo docker cp concore.params concore:/') + fparams.write(writeedges.split(":")[0].split("-v ")[1]+"/concore.params\n") + writeedges = writeedges[writeedges.find(":")+1:] + i=i+1 + fparams.write('sudo docker stop concore \n') + fparams.write('sudo docker rm concore\n') + fparams.write('sudo docker rmi docker-concore\n') + fparams.write('rm Dockerfile\n') + fparams.write('rm concore.params\n') + fparams.close() + funlock.write('echo "FROM alpine:3.8" > Dockerfile\n') funlock.write('sudo docker build -t docker-concore .\n') @@ -589,6 +630,7 @@ os.chmod(outdir+"/stop",stat.S_IRWXU) os.chmod(outdir+"/clear",stat.S_IRWXU) os.chmod(outdir+"/maxtime",stat.S_IRWXU) + os.chmod(outdir+"/params",stat.S_IRWXU) os.chmod(outdir+"/unlock",stat.S_IRWXU) quit() @@ -812,6 +854,21 @@ i=i+1 fmaxtime.close() +i=0 # 9/18/22 +for node in nodes_dict: + containername,sourcecode = nodes_dict[node].split(':') + if len(sourcecode)!=0: + dockername = sourcecode.split(".")[0] #3/28/21 + writeedges = volswr[i] + while writeedges.find(":") != -1: + if concoretype=="windows": + fparams.write('echo %1 >' + writeedges.split(":")[0].split("-v")[1]+ "\\concore.params\n") + else: + fparams.write('echo "$1" >' + writeedges.split(":")[0].split("-v")[1]+ "/concore.params\n") + writeedges = writeedges[writeedges.find(":")+1:] + i=i+1 +fparams.close() + i=0 # 9/12/21 for node in nodes_dict: containername,sourcecode = nodes_dict[node].split(':') @@ -834,6 +891,7 @@ fstop.close() fclear.close() fmaxtime.close() +fparams.close() if concoretype != "windows": os.chmod(outdir+"/build",stat.S_IRWXU) os.chmod(outdir+"/run",stat.S_IRWXU) @@ -841,5 +899,6 @@ os.chmod(outdir+"/stop",stat.S_IRWXU) os.chmod(outdir+"/clear",stat.S_IRWXU) os.chmod(outdir+"/maxtime",stat.S_IRWXU) + os.chmod(outdir+"/params",stat.S_IRWXU) os.chmod(outdir+"/unlock",stat.S_IRWXU) diff --git a/tools/pids.graphml b/tools/pids.graphml new file mode 100644 index 0000000..7d09532 --- /dev/null +++ b/tools/pids.graphml @@ -0,0 +1,268 @@ + + + + + + + + + + + + PZ:cardiac_pm.py + + + + + + + + + + + CZ:pidsig.py + + + + + + + + + + + XZ:plotym.py + + + + + + + + + + PYM + + + + + + + + + + + + CU + + + + + + + + + + + + XYM + + + + + + + + 1644943336906 + sanmi + + DEL_NODE + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiXQ== + + + ADD_NODE + WyJQWjpjYXJkaWFjX3BtLnB5Iix7IndpZHRoIjoxNDgsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjQ1LCJ5Ijo4NX0se30sIjU1MDg2NWQxLTI4YTMtNDBhOS05ZTI1LWQzYjY4YWQyNzdkNiJd + + + + 1644943355554 + sanmi + + DEL_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiXQ== + + + ADD_NODE + WyJDWjpkdW1teV9jb250cm9sbGVyLnB5Iix7IndpZHRoIjoxOTMsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjUyLCJ5IjoyNjR9LHt9LCIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiXQ== + + + + 1644943358106 + sanmi + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MTM0LCJ5IjoyNjZ9XQ== + + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTM0LCJ5IjoyNjZ9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1644943359494 + sanmi + + SET_POS + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MjQ1LCJ5Ijo4NX1d + + + SET_POS + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLHsieCI6MjQ1LCJ5Ijo4NX0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1644943362210 + sanmi + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTM0LCJ5IjoyNjZ9LHsieCI6MjUyLCJ5IjoyNjR9XQ== + + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MjUyLCJ5IjoyNjR9LHsieCI6MTM0LCJ5IjoyNjZ9XQ== + + + + 1644943375398 + sanmi + + DEL_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiXQ== + + + ADD_NODE + WyJYWjpwbG90eW0iLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4Ijo1MDcsInkiOjE2MH0se30sIjRiODYwYWFlLTA1YzktNGViNS1iYzQ4LWY4MDAwY2NiNDJhOCJd + + + + 1644943378630 + sanmi + + SET_POS + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NTA3LCJ5IjoxNjB9XQ== + + + SET_POS + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsieCI6NTA3LCJ5IjoxNjB9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1644943386853 + sanmi + + DEL_EDGE + WyI0NzcwODQwZi04OGEwLTQ3NTItOWMxOS0yZTdmODlmOGZhNzkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLCJ0YXJnZXRJRCI6IjRiODYwYWFlLTA1YzktNGViNS1iYzQ4LWY4MDAwY2NiNDJhOCIsImxhYmVsIjoiUFlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjN2M0ZGZmIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjQ3NzA4NDBmLTg4YTAtNDc1Mi05YzE5LTJlN2Y4OWY4ZmE3OSJ9XQ== + + + + 1644943394719 + sanmi + + DEL_EDGE + WyI3ZjJiMWM0Yy04ZjJmLTQyZjQtYjU1Yy0xY2RlNzdiMWU4NTIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLCJ0YXJnZXRJRCI6IjU1MDg2NWQxLTI4YTMtNDBhOS05ZTI1LWQzYjY4YWQyNzdkNiIsImxhYmVsIjoiQ1UiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiN2YyYjFjNGMtOGYyZi00MmY0LWI1NWMtMWNkZTc3YjFlODUyIn1d + + + + 1644943403841 + sanmi + + DEL_EDGE + WyIyZDdlZjk4ZS04Y2E5LTRhZjMtYWQxOS1hYzM0MTQ2ZmZlYmYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLCJ0YXJnZXRJRCI6IjM2YjlmMWRmLTdjODQtNGYwNy04ZmNlLWM0YTZmNjQ2MjkzMSIsImxhYmVsIjoiWFlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjMTU2NWMwIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjJkN2VmOThlLThjYTktNGFmMy1hZDE5LWFjMzQxNDZmZmViZiJ9XQ== + + + + 1644943683422 + sanmi + + UPDATE_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJYWjpwbG90eW0iLHRydWVd + + + UPDATE_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsid2lkdGgiOjExNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJYWjpwbG90eW0ucHkiLHRydWVd + + + + 1662144313252 + sanmi + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpkdW1teV9jb250cm9sbGVyLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nbmJhbmcucHkiLHRydWVd + + + + 1662144436617 + sanmi + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nbmJhbmcucHkiLHRydWVd + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nYmFuZy5weSIsdHJ1ZV0= + + + + 1662583658804 + Shannon + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nYmFuZy5weSIsdHJ1ZV0= + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpzaGFubm9uLnB5Iix0cnVlXQ== + + + + 1663351448627 + mark + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpzaGFubm9uLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpwaWQyLnB5Iix0cnVlXQ== + + + + 1663444756220 + mark + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpwaWQyLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpwaWRzaWcucHkiLHRydWVd + + + + \ No newline at end of file diff --git a/tools/pidsig.py b/tools/pidsig.py new file mode 100644 index 0000000..32b4538 --- /dev/null +++ b/tools/pidsig.py @@ -0,0 +1,76 @@ +import numpy as np +import math +import concore +dT = 0.1 +global Prev_Error, I, freq +Prev_Error = 0 +I = 0 + +try: + sp = concore.params['sp'] +except: + sp = 67.5 +try: + Kp = concore.params['Kp'] +except: + Kp = 0.1 +try: + Ki = concore.params['Ki'] +except: + Ki = 0.01 +try: + Kd = concore.params['Kd'] +except: + Kd = 0.03 +try: + freq = concore.params['freq'] +except: + freq = 30 +try: + sigout = concore.params['sigout'] +except: + sigout = True + +def pid_controller(ym): + global Prev_Error, I, freq + Error = sp - ym[1] + P = Error + I = I + Error*dT + D = (Error - Prev_Error )/dT + amp = Kp*P + Ki*I + Kd*D + Prev_Error = Error + if sigout: + amp = 3.0/(1.0 + math.exp(amp)) + ustar = np.array([amp,freq]) + return ustar + + +concore.default_maxtime(150) +concore.delay = 0.02 +init_simtime_u = "[0.0, 0.0,0.0]" +init_simtime_ym = "[0.0, 70.0,91]" +u = np.array([concore.initval(init_simtime_u)]).T +print("Shannon's PID controller: sp is "+str(sp)) +print(concore.params) +while(concore.simtime Date: Sun, 18 Sep 2022 22:41:38 -0400 Subject: [PATCH 078/113] pidsig allows control input,cin ('map' or 'hr'), as param --- tools/pidsig.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tools/pidsig.py b/tools/pidsig.py index 32b4538..b89a917 100644 --- a/tools/pidsig.py +++ b/tools/pidsig.py @@ -30,10 +30,20 @@ sigout = concore.params['sigout'] except: sigout = True +try: + cin = concore.params['cin'] +except: + cin = 'hr' def pid_controller(ym): global Prev_Error, I, freq - Error = sp - ym[1] + if cin == 'hr': + Error = sp - ym[1] + elif cin == 'map': + Error = sp - ym[0] + else: + print('invalid control input '+cin) + quit() P = Error I = I + Error*dT D = (Error - Prev_Error )/dT From 2d697162cd40c365925341aff9061b4b25cbddf0 Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Tue, 20 Sep 2022 15:07:04 -0400 Subject: [PATCH 079/113] check for bad params --- concore.py | 6 +++++- concoredocker.py | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/concore.py b/concore.py index 4af04d3..31e39a5 100644 --- a/concore.py +++ b/concore.py @@ -30,7 +30,11 @@ #9/17/22 try: - params = literal_eval(open(inpath+"1/concore.params").read()) + sparams = open(inpath+"1/concore.params").read() + try: + params = literal_eval(sparams) + except: + print("bad params: "+sparams) except: params = dict() diff --git a/concoredocker.py b/concoredocker.py index cc7e6a9..007600d 100644 --- a/concoredocker.py +++ b/concoredocker.py @@ -20,7 +20,11 @@ #9/17/22 try: - params = literal_eval(open(inpath+"1/concore.params").read()) + sparams = open(inpath+"1/concore.params").read() + try: + params = literal_eval(sparams) + except: + print("bad params: "+sparams) except: params = dict() #9/12/21 From 15041568c71bf74a784bc2a523fde755d79270cb Mon Sep 17 00:00:00 2001 From: markgarnold Date: Tue, 20 Sep 2022 13:43:13 -0600 Subject: [PATCH 080/113] fixed concore.params for windows --- concore.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/concore.py b/concore.py index 31e39a5..eab693d 100644 --- a/concore.py +++ b/concore.py @@ -33,6 +33,8 @@ sparams = open(inpath+"1/concore.params").read() try: params = literal_eval(sparams) + if isinstance(params,str): #windows keeps "" need to reeval + params = literal_eval(params) except: print("bad params: "+sparams) except: From 277742be281c13fa682206fd7a4bced8d100f90a Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 20 Sep 2022 19:30:12 -0400 Subject: [PATCH 081/113] Update CONTRIBUTING.md --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 88a2d19..d0f9ec6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -30,4 +30,4 @@ New contributors are encouraged to submit pull requests, rather than directly co The CONTROL-CORE project has tremendously benefitted from open-source. We have been a part of the Google Summer of Code (GSoC), via the Department of Biomedical Informatics, Emory University as the mentoring organization. DHGWorkflow (which is adopted as the _concore_ Editor) was developed by the GSoC 2021 contributor. For GSoC 2022, we have 2 contributors - one working on _concore_ Editor and the other one on the _concore_ itself. -Please use the GitHub discussion forums for user-queries. For GSoC and similar open-source contributions, as well as for other real-time user queries, feel free to join the Emory BMI slack workspace using the link - http://bit.ly/emory-bmi and find the channel "concore." +Please use the GitHub discussion forums for user-queries. For GSoC and similar open-source contributions, as well as for other real-time user queries, feel free to join the GSoC Emory BMI slack workspace using the link - http://bit.ly/emory-bmi and find the channel "concore." From 1d0298efc9d8aa2ea69b39a9d187ed387b5b6a94 Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Wed, 21 Sep 2022 12:29:11 -0400 Subject: [PATCH 082/113] concore.params fixed win fix --- concore.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/concore.py b/concore.py index eab693d..b18c835 100644 --- a/concore.py +++ b/concore.py @@ -31,10 +31,12 @@ #9/17/22 try: sparams = open(inpath+"1/concore.params").read() + if sparams[0] == '"': #windows keeps "" need to remove + sparams = sparams[1:-1] try: params = literal_eval(sparams) - if isinstance(params,str): #windows keeps "" need to reeval - params = literal_eval(params) + #if isinstance(params,str): #windows keeps "" need to reeval + # params = literal_eval(params) except: print("bad params: "+sparams) except: From 347e23e2f9d6bedfc4131e864ac0b0cdea434cd2 Mon Sep 17 00:00:00 2001 From: markgarnold Date: Wed, 21 Sep 2022 10:54:37 -0600 Subject: [PATCH 083/113] windows fix for concore.params --- concore.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/concore.py b/concore.py index b18c835..5db6500 100644 --- a/concore.py +++ b/concore.py @@ -32,7 +32,8 @@ try: sparams = open(inpath+"1/concore.params").read() if sparams[0] == '"': #windows keeps "" need to remove - sparams = sparams[1:-1] + sparams = sparams[1:] + sparams = sparams[0:sparams.find('"')] try: params = literal_eval(sparams) #if isinstance(params,str): #windows keeps "" need to reeval From 26304e564f99c5868379d63c330288d022a314be Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Wed, 21 Sep 2022 13:33:20 -0400 Subject: [PATCH 084/113] convert param=val to dict --- concore.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/concore.py b/concore.py index 5db6500..eb252ef 100644 --- a/concore.py +++ b/concore.py @@ -2,6 +2,7 @@ import os from ast import literal_eval import sys +import re #if windows, create script to kill this process # because batch files don't provide easy way to know pid of last command @@ -34,10 +35,11 @@ if sparams[0] == '"': #windows keeps "" need to remove sparams = sparams[1:] sparams = sparams[0:sparams.find('"')] + if sparams != '{': + print("converting sparams: "+sparams) + sparams = "{'"+re.sub(',',",'",re.sub('=',"':",sparams))+"}" try: params = literal_eval(sparams) - #if isinstance(params,str): #windows keeps "" need to reeval - # params = literal_eval(params) except: print("bad params: "+sparams) except: From bc351818280f0600f55e0ec746d0d7acda6ff66a Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Wed, 21 Sep 2022 13:42:39 -0400 Subject: [PATCH 085/113] param=val in concoredocker --- concore.py | 2 +- concoredocker.py | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/concore.py b/concore.py index eb252ef..7bfb0d9 100644 --- a/concore.py +++ b/concore.py @@ -29,7 +29,7 @@ inpath = "./in" #must be rel path for local outpath = "./out" -#9/17/22 +#9/21/22 try: sparams = open(inpath+"1/concore.params").read() if sparams[0] == '"': #windows keeps "" need to remove diff --git a/concoredocker.py b/concoredocker.py index 007600d..5f83848 100644 --- a/concoredocker.py +++ b/concoredocker.py @@ -18,15 +18,22 @@ inpath = "/in" #must be abs path for docker outpath = "/out" -#9/17/22 +#9/21/22 try: sparams = open(inpath+"1/concore.params").read() + if sparams[0] == '"': #windows keeps "" need to remove + sparams = sparams[1:] + sparams = sparams[0:sparams.find('"')] + if sparams != '{': + print("converting sparams: "+sparams) + sparams = "{'"+re.sub(',',",'",re.sub('=',"':",sparams))+"}" try: params = literal_eval(sparams) except: print("bad params: "+sparams) except: params = dict() + #9/12/21 def default_maxtime(default): global maxtime From cf50b003f1d23f215f11a7dc6d5c8fbaa12b165e Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Wed, 21 Sep 2022 14:00:43 -0400 Subject: [PATCH 086/113] deblank param=val --- concore.py | 2 +- concoredocker.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/concore.py b/concore.py index 7bfb0d9..53302a5 100644 --- a/concore.py +++ b/concore.py @@ -37,7 +37,7 @@ sparams = sparams[0:sparams.find('"')] if sparams != '{': print("converting sparams: "+sparams) - sparams = "{'"+re.sub(',',",'",re.sub('=',"':",sparams))+"}" + sparams = "{'"+re.sub(',',",'",re.sub('=',"':",re.sub(' ','',sparams)))+"}" try: params = literal_eval(sparams) except: diff --git a/concoredocker.py b/concoredocker.py index 5f83848..58ec43e 100644 --- a/concoredocker.py +++ b/concoredocker.py @@ -26,7 +26,7 @@ sparams = sparams[0:sparams.find('"')] if sparams != '{': print("converting sparams: "+sparams) - sparams = "{'"+re.sub(',',",'",re.sub('=',"':",sparams))+"}" + sparams = "{'"+re.sub(',',",'",re.sub('=',"':",re.sub(' ','',sparams)))+"}" try: params = literal_eval(sparams) except: From 10f8bd8a0bb7d6c7994838ce7fe7ebdc61909fff Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 21 Sep 2022 16:41:01 -0400 Subject: [PATCH 087/113] Fix docker version for concore.params --- concore.py | 1 + concoredocker.py | 2 ++ makedocker | 0 3 files changed, 3 insertions(+) mode change 100644 => 100755 makedocker diff --git a/concore.py b/concore.py index 53302a5..6471e0b 100644 --- a/concore.py +++ b/concore.py @@ -38,6 +38,7 @@ if sparams != '{': print("converting sparams: "+sparams) sparams = "{'"+re.sub(',',",'",re.sub('=',"':",re.sub(' ','',sparams)))+"}" + print("converted sparams: " + sparams) try: params = literal_eval(sparams) except: diff --git a/concoredocker.py b/concoredocker.py index 58ec43e..49e561e 100644 --- a/concoredocker.py +++ b/concoredocker.py @@ -1,5 +1,6 @@ import time from ast import literal_eval +import re try: iport = literal_eval(open("concore.iport").read()) @@ -27,6 +28,7 @@ if sparams != '{': print("converting sparams: "+sparams) sparams = "{'"+re.sub(',',",'",re.sub('=',"':",re.sub(' ','',sparams)))+"}" + print("converted sparams: " + sparams) try: params = literal_eval(sparams) except: diff --git a/makedocker b/makedocker old mode 100644 new mode 100755 From 971d62a4e5a32292bb50d57855b78c10797e471a Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Thu, 22 Sep 2022 18:48:11 -0400 Subject: [PATCH 088/113] testC3max --- testsou/pmpymax.py | 1 + testsou/testC3max.graphml | 112 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 testsou/testC3max.graphml diff --git a/testsou/pmpymax.py b/testsou/pmpymax.py index 6fef781..a3a0055 100644 --- a/testsou/pmpymax.py +++ b/testsou/pmpymax.py @@ -12,5 +12,6 @@ ym[0] = u[0]+10000 print("ym="+str(ym[0])+" u="+str(u[0])); concore.write(1,"ym",ym,delta=1) + input() #concore.write(1,"ym",init_simtime_ym) print("retry="+str(concore.retrycount)) diff --git a/testsou/testC3max.graphml b/testsou/testC3max.graphml new file mode 100644 index 0000000..9a26ce6 --- /dev/null +++ b/testsou/testC3max.graphml @@ -0,0 +1,112 @@ + + + + + + + + + + + + XZ:powermeter.cpp + + + + + + + + + + + PZ:pmpymax.py + + + + + + + + + + + CZ:cpymax.py + + + + + + + + + + VXP + + + + + + + + + + + + VP + + + + + + + + + + + + VC + + + + + + + + + + + + VXC + + + + + + + + 1663886583689 + mark + + UPDATE_NODE + WyJuMCIseyJ3aWR0aCI6MTIzLjM1OTM3NSwiaGVpZ2h0IjozMCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjRkZGRjAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJYWjpwb3dlcm1ldGVybWF4LnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyJuMCIseyJ3aWR0aCI6MTkwLCJoZWlnaHQiOjMwLCJvcGFjaXR5IjoxLCJzaGFwZSI6InJlY3RhbmdsZSIsImJhY2tncm91bmRDb2xvciI6IiNGRkZGMDAiLCJib3JkZXJDb2xvciI6IiMwMDAwMDAiLCJib3JkZXJXaWR0aCI6MX0sIlhaOnBvd2VybWV0ZXJtYXguY3BwIix0cnVlXQ== + + + + 1663886679396 + mark + + UPDATE_NODE + WyJuMCIseyJ3aWR0aCI6MTkwLCJoZWlnaHQiOjMwLCJvcGFjaXR5IjoxLCJzaGFwZSI6InJlY3RhbmdsZSIsImJhY2tncm91bmRDb2xvciI6IiNGRkZGMDAiLCJib3JkZXJDb2xvciI6IiMwMDAwMDAiLCJib3JkZXJXaWR0aCI6MX0sIlhaOnBvd2VybWV0ZXJtYXguY3BwIix0cnVlXQ== + + + UPDATE_NODE + WyJuMCIseyJ3aWR0aCI6MTkwLCJoZWlnaHQiOjMwLCJvcGFjaXR5IjoxLCJzaGFwZSI6InJlY3RhbmdsZSIsImJhY2tncm91bmRDb2xvciI6IiNGRkZGMDAiLCJib3JkZXJDb2xvciI6IiMwMDAwMDAiLCJib3JkZXJXaWR0aCI6MX0sIlhaOnBvd2VybWV0ZXIuY3BwIix0cnVlXQ== + + + + \ No newline at end of file From c645444f8b780a0d80418825c3a8da0ac28d606a Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Thu, 22 Sep 2022 19:10:45 -0400 Subject: [PATCH 089/113] powermeter.cpp 2 instances of concore --- testsou/powermeter.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/testsou/powermeter.cpp b/testsou/powermeter.cpp index 9afc1e5..7e6e6ec 100644 --- a/testsou/powermeter.cpp +++ b/testsou/powermeter.cpp @@ -9,7 +9,9 @@ int main(){ cout<<"powermeter"< oldsimtime: + ut[int(concore.simtime)] = np.array(u).T + ymt[int(concore.simtime)] = np.array(ym).T + fout.write(str(u)+str(ym)+'\n') + oldsimtime = concore.simtime +print("retry="+str(concore.retrycount)) +fout.close() + +################# +# plot inputs and outputs + +if GENERATE_PLOT == 1: + u1 = [x[0].item() for x in ut] + u2 = [x[1].item() for x in ut] + u3 = [x[2].item() for x in ut] + u4 = [x[3].item() for x in ut] + u5 = [x[4].item() for x in ut] + u6 = [x[5].item() for x in ut] + Nsim = len(u1) + plt.figure() + plt.subplot(321) + plt.plot(range(Nsim), u1) + plt.ylabel('Pw1 (s)') + plt.subplot(322) + plt.plot(range(Nsim), u2) + plt.ylabel('Pf1 (Hz)') + plt.subplot(323) + plt.plot(range(Nsim), u3) + plt.xlabel('Learn Cycles') + plt.ylabel('Pw2 (s)') + plt.subplot(324) + plt.plot(range(Nsim), u4) + plt.ylabel('Pf2 (Hz)') + plt.subplot(325) + plt.plot(range(Nsim), u5) + plt.ylabel('Pw3 (s)') + plt.subplot(326) + plt.plot(range(Nsim), u6) + plt.xlabel('Learn Cycles') + plt.ylabel('Pf3 (Hz)') + plt.savefig("stim.pdf") + plt.tight_layout() + + ym1 = [x[0].item() for x in ymt] + ym2 = [x[1].item() for x in ymt] + Nsim = len(ym1) + plt.figure() + plt.subplot(211) + plt.plot(range(Nsim), ym1) + plt.ylabel('MAP (mmHg)') + plt.legend(['Learn MAP'], loc=0) + plt.subplot(212) + plt.plot(range(Nsim), ym2) + plt.xlabel('Cycles') + plt.ylabel('HR (bpm)') + plt.legend(['Learn HR'], loc=0) + plt.savefig("hrmap.pdf") + plt.show() diff --git a/ratc/learn3.dir/concore2.py b/ratc/learn3.dir/concore2.py new file mode 100644 index 0000000..6471e0b --- /dev/null +++ b/ratc/learn3.dir/concore2.py @@ -0,0 +1,106 @@ +import time +import os +from ast import literal_eval +import sys +import re + +#if windows, create script to kill this process +# because batch files don't provide easy way to know pid of last command +# ignored for posix!=windows, because "concorepid" is handled by script +# ignored for docker (linux!=windows), because handled by docker stop +if hasattr(sys, 'getwindowsversion'): + with open("concorekill.bat","w") as fpid: + fpid.write("taskkill /F /PID "+str(os.getpid())+"\n") + +try: + iport = literal_eval(open("concore.iport").read()) +except: + iport = dict() +try: + oport = literal_eval(open("concore.oport").read()) +except: + oport = dict() + + +s = '' +olds = '' +delay = 1 +retrycount = 0 +inpath = "./in" #must be rel path for local +outpath = "./out" + +#9/21/22 +try: + sparams = open(inpath+"1/concore.params").read() + if sparams[0] == '"': #windows keeps "" need to remove + sparams = sparams[1:] + sparams = sparams[0:sparams.find('"')] + if sparams != '{': + print("converting sparams: "+sparams) + sparams = "{'"+re.sub(',',",'",re.sub('=',"':",re.sub(' ','',sparams)))+"}" + print("converted sparams: " + sparams) + try: + params = literal_eval(sparams) + except: + print("bad params: "+sparams) +except: + params = dict() + +#9/12/21 +def default_maxtime(default): + global maxtime + try: + maxtime = literal_eval(open(inpath+"1/concore.maxtime").read()) + except: + maxtime = default +default_maxtime(100) + +def unchanged(): + global olds,s + if olds==s: + s = '' + return True + else: + olds = s + return False + +def read(port, name, initstr): + global s,simtime,retrycount + time.sleep(delay) + try: + infile = open(inpath+str(port)+"/"+name); + ins = infile.read() + except: + ins = initstr + while len(ins)==0: + time.sleep(delay) + ins = infile.read() + retrycount += 1 + s += ins + inval = literal_eval(ins) + simtime = max(simtime,inval[0]) + return inval[1:] + +def write(port, name, val, delta=0): + global outpath,simtime + if isinstance(val,str): + time.sleep(2*delay) + elif isinstance(val,list)==False: + print("mywrite must have list or str") + quit() + try: + with open(outpath+str(port)+"/"+name,"w") as outfile: + if isinstance(val,list): + outfile.write(str([simtime+delta]+val)) + simtime += delta + else: + outfile.write(val) + except: + print("skipping"+outpath+str(port)+"/"+name); + +def initval(simtime_val): + global simtime + val = literal_eval(simtime_val) + simtime = val[0] + return val[1:] + diff --git a/ratc/learn3.py b/ratc/learn3.py new file mode 100644 index 0000000..44710dd --- /dev/null +++ b/ratc/learn3.py @@ -0,0 +1,81 @@ +import concore +import concore2 +import numpy as np +import matplotlib.pyplot as plt +import time +GENERATE_PLOT = 1 +concore.delay = 0.002 +concore2.delay = 0.002 +concore2.inpath = concore.inpath +concore2.outpath = concore.outpath +concore2.simtime = 0 + +fout=open(concore.outpath+'1/history.txt','w') +concore.default_maxtime(150) +init_simtime_u = "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0, 0.0]" +u = concore.initval(init_simtime_u) +ym = concore.initval(init_simtime_ym) +ut = (concore.maxtime+1)*[np.array(u).T] +ymt = (concore.maxtime+1)*[np.array(ym).T] +while(concore.simtime + + + + + + + + + + + CZ:cvxpymatcore.py + + + + + + + + + + + PZ:pmcvxpymatcore.py + + + + + + + + + + + LZ:learn2.py + + + + + + + + + + + OUT: + + + + + + + + + + VCY + + + + + + + + + + + + VPY + + + + + + + + + + + + VCY + + + + + + + + + + + + VPY + + + + + + + + + + + + HIST + + + + + + + + 1631987765505 + mark + + DEL_NODE + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiXQ== + + + ADD_NODE + WyJDWjpjdnhweW1hdGNvcmUucHkiLHsid2lkdGgiOjE2NiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjozNzcuODMwMjYwNTA1NjQ3NzQsInkiOjg3LjAzOTk4Nzg0ODEzMzA3fSx7fSwiMmEzZmY1MjItMWFmOS00MzhhLTgxMDctYWIwOTYyYTIzMzY2Il0= + + + + 1631987810303 + mark + + DEL_NODE + WyJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiXQ== + + + ADD_NODE + WyJQWjpwbWN2eHB5bWF0Y29yZS5weSIseyJ3aWR0aCI6MTg3LCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjM4MS4zNTAyNTQ0Mjk3MTQyNSwieSI6MjgwLjEwMDE1OTQ5MzI1Mzd9LHt9LCJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiXQ== + + + + 1631987820341 + mark + + SET_POS + WyJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MzgxLjM1MDI1NDQyOTcxNDI1LCJ5IjoyODAuMTAwMTU5NDkzMjUzN31d + + + SET_POS + WyJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLHsieCI6MzgxLjM1MDI1NDQyOTcxNDI1LCJ5IjoyODAuMTAwMTU5NDkzMjUzN30seyJ4IjoxMTAsInkiOjExMH1d + + + + 1631987826074 + mark + + SET_POS + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6Mzc3LjgzMDI2MDUwNTY0Nzc0LCJ5Ijo4Ny4wMzk5ODc4NDgxMzMwN31d + + + SET_POS + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLHsieCI6Mzc3LjgzMDI2MDUwNTY0Nzc0LCJ5Ijo4Ny4wMzk5ODc4NDgxMzMwN30seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1631987833719 + mark + + DEL_EDGE + WyI3ZDhlYmJiMS00MGQ2LTQyNDAtOWE1MC03YjZlYjU4YzU5YmIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLCJ0YXJnZXRJRCI6ImJkNmFhMjA2LTQxZGQtNDE1ZS05MzUzLTJlMmZhZmRlN2RjMiIsImxhYmVsIjoiVkNZIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjNjA3ZDhiIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjdkOGViYmIxLTQwZDYtNDI0MC05YTUwLTdiNmViNThjNTliYiJ9XQ== + + + + 1631987844901 + mark + + DEL_EDGE + WyI1MThlZWFjYy01YmNkLTRjZDMtODYxYy03MjljMDIxZGQ0OGIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLCJ0YXJnZXRJRCI6IjJhM2ZmNTIyLTFhZjktNDM4YS04MTA3LWFiMDk2MmEyMzM2NiIsImxhYmVsIjoiVlBZIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjOWMyN2IwIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjUxOGVlYWNjLTViY2QtNGNkMy04NjFjLTcyOWMwMjFkZDQ4YiJ9XQ== + + + + 1631988057648 + mark + + DEL_NODE + WyI1M2I3NjVmMi04YjU5LTQwMTgtOTAzOC0zNDAxY2M5ODNlNWMiXQ== + + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7fSwiNTNiNzY1ZjItOGI1OS00MDE4LTkwMzgtMzQwMWNjOTgzZTVjIl0= + + + + 1631988067297 + mark + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7ImlkIjoiNTNiNzY1ZjItOGI1OS00MDE4LTkwMzgtMzQwMWNjOTgzZTVjIiwibGFiZWwiOiJ5dXl1QyIsInR5cGUiOiJvcmRpbiIsInN0eWxlIjp7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfX0sIjUzYjc2NWYyLThiNTktNDAxOC05MDM4LTM0MDFjYzk4M2U1YyJd + + + DEL_NODE + WyI1M2I3NjVmMi04YjU5LTQwMTgtOTAzOC0zNDAxY2M5ODNlNWMiXQ== + + + + 1631988274563 + mark + + DEL_NODE + WyI2NzdjZTExZi1kNzZmLTQ2NDMtOWRkMS1jOGZhMjZiY2YyNzMiXQ== + + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7fSwiNjc3Y2UxMWYtZDc2Zi00NjQzLTlkZDEtYzhmYTI2YmNmMjczIl0= + + + + 1631988279632 + mark + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7ImlkIjoiNjc3Y2UxMWYtZDc2Zi00NjQzLTlkZDEtYzhmYTI2YmNmMjczIiwibGFiZWwiOiJ5dXl1QyIsInR5cGUiOiJvcmRpbiIsInN0eWxlIjp7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfX0sIjY3N2NlMTFmLWQ3NmYtNDY0My05ZGQxLWM4ZmEyNmJjZjI3MyJd + + + DEL_NODE + WyI2NzdjZTExZi1kNzZmLTQ2NDMtOWRkMS1jOGZhMjZiY2YyNzMiXQ== + + + + 1660317542808 + mark + + DEL_NODE + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiXQ== + + + ADD_NODE + WyJMWjpsZWFybi5weSIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjE2MSwieSI6MTc0fSx7fSwiZmVhNzU5ZWQtZWFkNi00M2IxLWEzY2YtOTY5MDgxMmE2ZjA5Il0= + + + + 1660317548640 + mark + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTYxLCJ5IjoxNzR9XQ== + + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6MTYxLCJ5IjoxNzR9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1660317557559 + mark + + DEL_EDGE + WyI3MDFiMmUwZS0wNzQxLTQ5NTMtYTk3Yy1mZWY0YTI2YTQzYTQiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLCJ0YXJnZXRJRCI6ImZlYTc1OWVkLWVhZDYtNDNiMS1hM2NmLTk2OTA4MTJhNmYwOSIsImlkIjoiNzAxYjJlMGUtMDc0MS00OTUzLWE5N2MtZmVmNGEyNmE0M2E0In1d + + + + 1660317565265 + mark + + DEL_EDGE + WyI5NjQxNWIxYy0yOGY4LTQzNjktYjViMi00YzE0OTQ4OWRjOTAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLCJ0YXJnZXRJRCI6ImZlYTc1OWVkLWVhZDYtNDNiMS1hM2NmLTk2OTA4MTJhNmYwOSIsImlkIjoiOTY0MTViMWMtMjhmOC00MzY5LWI1YjItNGMxNDk0ODlkYzkwIn1d + + + + 1663951088018 + mark + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6MTYxLCJ5IjoxNzR9LHsieCI6NjkyLCJ5IjoxNzh9XQ== + + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6NjkyLCJ5IjoxNzh9LHsieCI6MTYxLCJ5IjoxNzR9XQ== + + + + 1663951097443 + mark + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6NjkyLCJ5IjoxNzh9LHsieCI6NjA5LCJ5IjoxNzR9XQ== + + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6NjA5LCJ5IjoxNzR9LHsieCI6NjkyLCJ5IjoxNzh9XQ== + + + + 1663951162441 + mark + + DEL_NODE + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiXQ== + + + ADD_NODE + WyJPVVQ6Iix7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6ODMxLCJ5IjoxNzN9LHt9LCIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiXQ== + + + + 1663951172201 + mark + + SET_POS + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6ODI5LCJ5IjoxNzV9XQ== + + + SET_POS + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiLHsieCI6ODI5LCJ5IjoxNzV9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1663951177586 + mark + + DEL_EDGE + WyIwN2VlMmM4NC00OGY2LTQzZGEtOThiMS05NjhlMjRjOWQ5MDEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLCJ0YXJnZXRJRCI6IjJmZWIwZGFkLWJiM2QtNDRmZC1iNjIwLTgwMzk4Njg0MTAwMiIsImxhYmVsIjoiSElTVCIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmNmQwMCIsInNoYXBlIjoic29saWQifSwiaWQiOiIwN2VlMmM4NC00OGY2LTQzZGEtOThiMS05NjhlMjRjOWQ5MDEifV0= + + + + 1663951200362 + mark + + SET_POS + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiLHsieCI6ODI5LCJ5IjoxNzV9LHsieCI6ODMxLCJ5IjoxNzN9XQ== + + + SET_POS + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiLHsieCI6ODMxLCJ5IjoxNzN9LHsieCI6ODI5LCJ5IjoxNzV9XQ== + + + + 1663951224767 + mark + + UPDATE_NODE + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJMWjpsZWFybi5weSIsdHJ1ZV0= + + + UPDATE_NODE + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsid2lkdGgiOjEwOSwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJMWjpsZWFybjIucHkiLHRydWVd + + + + \ No newline at end of file diff --git a/ratc/yuyu3learn.graphml b/ratc/yuyu3learn.graphml new file mode 100644 index 0000000..8c49295 --- /dev/null +++ b/ratc/yuyu3learn.graphml @@ -0,0 +1,375 @@ + + + + + + + + + + + + CZ:cvxpymatcore.py + + + + + + + + + + + PZ:pmcvxpymatcore.py + + + + + + + + + + + LZ:learn3.py + + + + + + + + + + + OUT: + + + + + + + + + + VCY + + + + + + + + + + + + VPY + + + + + + + + + + + + VCY + + + + + + + + + + + + VPY + + + + + + + + + + + + HIST + + + + + + + + 1631987765505 + mark + + DEL_NODE + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiXQ== + + + ADD_NODE + WyJDWjpjdnhweW1hdGNvcmUucHkiLHsid2lkdGgiOjE2NiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjozNzcuODMwMjYwNTA1NjQ3NzQsInkiOjg3LjAzOTk4Nzg0ODEzMzA3fSx7fSwiMmEzZmY1MjItMWFmOS00MzhhLTgxMDctYWIwOTYyYTIzMzY2Il0= + + + + 1631987810303 + mark + + DEL_NODE + WyJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiXQ== + + + ADD_NODE + WyJQWjpwbWN2eHB5bWF0Y29yZS5weSIseyJ3aWR0aCI6MTg3LCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjM4MS4zNTAyNTQ0Mjk3MTQyNSwieSI6MjgwLjEwMDE1OTQ5MzI1Mzd9LHt9LCJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiXQ== + + + + 1631987820341 + mark + + SET_POS + WyJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MzgxLjM1MDI1NDQyOTcxNDI1LCJ5IjoyODAuMTAwMTU5NDkzMjUzN31d + + + SET_POS + WyJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLHsieCI6MzgxLjM1MDI1NDQyOTcxNDI1LCJ5IjoyODAuMTAwMTU5NDkzMjUzN30seyJ4IjoxMTAsInkiOjExMH1d + + + + 1631987826074 + mark + + SET_POS + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6Mzc3LjgzMDI2MDUwNTY0Nzc0LCJ5Ijo4Ny4wMzk5ODc4NDgxMzMwN31d + + + SET_POS + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLHsieCI6Mzc3LjgzMDI2MDUwNTY0Nzc0LCJ5Ijo4Ny4wMzk5ODc4NDgxMzMwN30seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1631987833719 + mark + + DEL_EDGE + WyI3ZDhlYmJiMS00MGQ2LTQyNDAtOWE1MC03YjZlYjU4YzU5YmIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLCJ0YXJnZXRJRCI6ImJkNmFhMjA2LTQxZGQtNDE1ZS05MzUzLTJlMmZhZmRlN2RjMiIsImxhYmVsIjoiVkNZIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjNjA3ZDhiIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjdkOGViYmIxLTQwZDYtNDI0MC05YTUwLTdiNmViNThjNTliYiJ9XQ== + + + + 1631987844901 + mark + + DEL_EDGE + WyI1MThlZWFjYy01YmNkLTRjZDMtODYxYy03MjljMDIxZGQ0OGIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLCJ0YXJnZXRJRCI6IjJhM2ZmNTIyLTFhZjktNDM4YS04MTA3LWFiMDk2MmEyMzM2NiIsImxhYmVsIjoiVlBZIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjOWMyN2IwIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjUxOGVlYWNjLTViY2QtNGNkMy04NjFjLTcyOWMwMjFkZDQ4YiJ9XQ== + + + + 1631988057648 + mark + + DEL_NODE + WyI1M2I3NjVmMi04YjU5LTQwMTgtOTAzOC0zNDAxY2M5ODNlNWMiXQ== + + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7fSwiNTNiNzY1ZjItOGI1OS00MDE4LTkwMzgtMzQwMWNjOTgzZTVjIl0= + + + + 1631988067297 + mark + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7ImlkIjoiNTNiNzY1ZjItOGI1OS00MDE4LTkwMzgtMzQwMWNjOTgzZTVjIiwibGFiZWwiOiJ5dXl1QyIsInR5cGUiOiJvcmRpbiIsInN0eWxlIjp7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfX0sIjUzYjc2NWYyLThiNTktNDAxOC05MDM4LTM0MDFjYzk4M2U1YyJd + + + DEL_NODE + WyI1M2I3NjVmMi04YjU5LTQwMTgtOTAzOC0zNDAxY2M5ODNlNWMiXQ== + + + + 1631988274563 + mark + + DEL_NODE + WyI2NzdjZTExZi1kNzZmLTQ2NDMtOWRkMS1jOGZhMjZiY2YyNzMiXQ== + + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7fSwiNjc3Y2UxMWYtZDc2Zi00NjQzLTlkZDEtYzhmYTI2YmNmMjczIl0= + + + + 1631988279632 + mark + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7ImlkIjoiNjc3Y2UxMWYtZDc2Zi00NjQzLTlkZDEtYzhmYTI2YmNmMjczIiwibGFiZWwiOiJ5dXl1QyIsInR5cGUiOiJvcmRpbiIsInN0eWxlIjp7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfX0sIjY3N2NlMTFmLWQ3NmYtNDY0My05ZGQxLWM4ZmEyNmJjZjI3MyJd + + + DEL_NODE + WyI2NzdjZTExZi1kNzZmLTQ2NDMtOWRkMS1jOGZhMjZiY2YyNzMiXQ== + + + + 1660317542808 + mark + + DEL_NODE + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiXQ== + + + ADD_NODE + WyJMWjpsZWFybi5weSIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjE2MSwieSI6MTc0fSx7fSwiZmVhNzU5ZWQtZWFkNi00M2IxLWEzY2YtOTY5MDgxMmE2ZjA5Il0= + + + + 1660317548640 + mark + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTYxLCJ5IjoxNzR9XQ== + + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6MTYxLCJ5IjoxNzR9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1660317557559 + mark + + DEL_EDGE + WyI3MDFiMmUwZS0wNzQxLTQ5NTMtYTk3Yy1mZWY0YTI2YTQzYTQiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLCJ0YXJnZXRJRCI6ImZlYTc1OWVkLWVhZDYtNDNiMS1hM2NmLTk2OTA4MTJhNmYwOSIsImlkIjoiNzAxYjJlMGUtMDc0MS00OTUzLWE5N2MtZmVmNGEyNmE0M2E0In1d + + + + 1660317565265 + mark + + DEL_EDGE + WyI5NjQxNWIxYy0yOGY4LTQzNjktYjViMi00YzE0OTQ4OWRjOTAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLCJ0YXJnZXRJRCI6ImZlYTc1OWVkLWVhZDYtNDNiMS1hM2NmLTk2OTA4MTJhNmYwOSIsImlkIjoiOTY0MTViMWMtMjhmOC00MzY5LWI1YjItNGMxNDk0ODlkYzkwIn1d + + + + 1663951088018 + mark + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6MTYxLCJ5IjoxNzR9LHsieCI6NjkyLCJ5IjoxNzh9XQ== + + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6NjkyLCJ5IjoxNzh9LHsieCI6MTYxLCJ5IjoxNzR9XQ== + + + + 1663951097443 + mark + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6NjkyLCJ5IjoxNzh9LHsieCI6NjA5LCJ5IjoxNzR9XQ== + + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6NjA5LCJ5IjoxNzR9LHsieCI6NjkyLCJ5IjoxNzh9XQ== + + + + 1663951162441 + mark + + DEL_NODE + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiXQ== + + + ADD_NODE + WyJPVVQ6Iix7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6ODMxLCJ5IjoxNzN9LHt9LCIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiXQ== + + + + 1663951172201 + mark + + SET_POS + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6ODI5LCJ5IjoxNzV9XQ== + + + SET_POS + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiLHsieCI6ODI5LCJ5IjoxNzV9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1663951177586 + mark + + DEL_EDGE + WyIwN2VlMmM4NC00OGY2LTQzZGEtOThiMS05NjhlMjRjOWQ5MDEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLCJ0YXJnZXRJRCI6IjJmZWIwZGFkLWJiM2QtNDRmZC1iNjIwLTgwMzk4Njg0MTAwMiIsImxhYmVsIjoiSElTVCIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmNmQwMCIsInNoYXBlIjoic29saWQifSwiaWQiOiIwN2VlMmM4NC00OGY2LTQzZGEtOThiMS05NjhlMjRjOWQ5MDEifV0= + + + + 1663951200362 + mark + + SET_POS + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiLHsieCI6ODI5LCJ5IjoxNzV9LHsieCI6ODMxLCJ5IjoxNzN9XQ== + + + SET_POS + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiLHsieCI6ODMxLCJ5IjoxNzN9LHsieCI6ODI5LCJ5IjoxNzV9XQ== + + + + 1663951224767 + mark + + UPDATE_NODE + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJMWjpsZWFybi5weSIsdHJ1ZV0= + + + UPDATE_NODE + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsid2lkdGgiOjEwOSwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJMWjpsZWFybjIucHkiLHRydWVd + + + + 1663956664191 + mark + + UPDATE_NODE + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsid2lkdGgiOjEwOSwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJMWjpsZWFybjIucHkiLHRydWVd + + + UPDATE_NODE + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsid2lkdGgiOjEwOSwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJMWjpsZWFybjMucHkiLHRydWVd + + + + \ No newline at end of file diff --git a/testsou/cpymax2.py b/testsou/cpymax2.py new file mode 100644 index 0000000..5c767ea --- /dev/null +++ b/testsou/cpymax2.py @@ -0,0 +1,29 @@ +import concore +import time +concore.delay = 0.01 +#Nsim = 100 +init_simtime_u = "[0.0, 0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0, 0.0]" +minElasped = 10000000 +maxElasped = 0 +sumElasped = 0 +u = concore.initval(init_simtime_u) +wallclock1 = time.perf_counter() +while(concore.simtime + + + + + + + + + + + C1:cpymax.py + + + + + + + + + + + C2:cpymax2.py + + + + + + + + + + + MZ:mix.py + + + + + + + + + + + PZ:pmpymax.py + + + + + + + + + + U1 + + + + + + + + + + + + U2 + + + + + + + + + + + + U + + + + + + + + + + + + YM + + + + + + + + + + + + YM + + + + + + + + 1663958264662 + mark + + DEL_NODE + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiXQ== + + + ADD_NODE + WyJDMTpwaWQucHkiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4Ijo2MywieSI6OTd9LHt9LCI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiXQ== + + + + 1663958319960 + mark + + DEL_NODE + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciXQ== + + + ADD_NODE + WyJDMjpwaWQyLnB5Iix7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6Mzg0LCJ5Ijo5OX0se30sIjRmMGI3OTM0LTg5ODYtNDIwOS1iMjA0LWE4ZWFmYTA0NjhhNyJd + + + + 1663958325104 + mark + + SET_POS + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MzA1LCJ5IjoxMDB9XQ== + + + SET_POS + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsieCI6MzA1LCJ5IjoxMDB9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1663958345496 + mark + + DEL_NODE + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiXQ== + + + ADD_NODE + WyJNOm1lcmdlLnB5Iix7IndpZHRoIjoxMDQsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjM3LCJ5IjoyMjh9LHt9LCIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiXQ== + + + + 1663958350889 + mark + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MjAwLCJ5IjoyMDZ9XQ== + + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MjAwLCJ5IjoyMDZ9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1663958464656 + mark + + DEL_EDGE + WyI3YTFhYzQ2Yi1kZDNiLTQ0MGMtYTcyOS0xM2QxMmIxNjVlNGQiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLCJ0YXJnZXRJRCI6IjE1OWJlOGY3LTNiZmUtNGU5Mi05ZjBlLTdkMTdkMzUyYjBlYyIsImxhYmVsIjoiVTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiMxNTY1YzAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiN2ExYWM0NmItZGQzYi00NDBjLWE3MjktMTNkMTJiMTY1ZTRkIn1d + + + + 1663958477703 + mark + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MjAwLCJ5IjoyMDZ9LHsieCI6MjA4LCJ5IjoyMzF9XQ== + + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MjA4LCJ5IjoyMzF9LHsieCI6MjAwLCJ5IjoyMDZ9XQ== + + + + 1663958482030 + mark + + DEL_EDGE + WyI5MzczOTBiYS1kM2ZlLTQyOWItYjhhNi04ZTg4Yzg4ZWRhMjAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLCJ0YXJnZXRJRCI6IjE1OWJlOGY3LTNiZmUtNGU5Mi05ZjBlLTdkMTdkMzUyYjBlYyIsImxhYmVsIjoiVTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiMwMDAwMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiOTM3MzkwYmEtZDNmZS00MjliLWI4YTYtOGU4OGM4OGVkYTIwIn1d + + + + 1663958503353 + mark + + DEL_NODE + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiXQ== + + + ADD_NODE + WyJQOnBtLnB5Iix7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjM3LCJ5IjozOTl9LHt9LCIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiXQ== + + + + 1663958510890 + mark + + SET_POS + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MjA1LCJ5IjozNjd9XQ== + + + SET_POS + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLHsieCI6MjA1LCJ5IjozNjd9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1663958518892 + mark + + DEL_EDGE + WyJkOGE4OWZiZi00MTZkLTQwOTYtOWMyZS0yZTlhMjRmYjE4N2MiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLCJ0YXJnZXRJRCI6IjM1ODk5M2M1LWU1OTQtNDljMi1iMzMzLWNiYmM0YjQxOTA3YiIsImxhYmVsIjoiVSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzAwMDAwMCIsInNoYXBlIjoic29saWQifSwiaWQiOiJkOGE4OWZiZi00MTZkLTQwOTYtOWMyZS0yZTlhMjRmYjE4N2MifV0= + + + + 1663958553669 + mark + + DEL_EDGE + WyIyY2NmNWZhYy1mMmI3LTQ5ZjgtOTMxMi0xODc1NTlhMzkyZWIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLCJ0YXJnZXRJRCI6IjYzZTVkZDMxLTBlOGItNDM1Ni1iZWNhLTZlMGFhZmE2MDA4OSIsImxhYmVsIjoiWU0iLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM4Mjc3MTciLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiMmNjZjVmYWMtZjJiNy00OWY4LTkzMTItMTg3NTU5YTM5MmViIn1d + + + + 1663958562546 + mark + + SET_POS + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NjMsInkiOjk3fV0= + + + SET_POS + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLHsieCI6NjMsInkiOjk3fSx7IngiOjEwMCwieSI6MTAwfV0= + + + + 1663958566565 + mark + + SET_POS + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsieCI6MzA1LCJ5IjoxMDB9LHsieCI6Mzg0LCJ5Ijo5OX1d + + + SET_POS + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsieCI6Mzg0LCJ5Ijo5OX0seyJ4IjozMDUsInkiOjEwMH1d + + + + 1663958569231 + mark + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MjA4LCJ5IjoyMzF9LHsieCI6MjM3LCJ5IjoyMjh9XQ== + + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MjM3LCJ5IjoyMjh9LHsieCI6MjA4LCJ5IjoyMzF9XQ== + + + + 1663958576068 + mark + + SET_POS + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLHsieCI6MjA1LCJ5IjozNjd9LHsieCI6MjM3LCJ5IjozOTl9XQ== + + + SET_POS + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLHsieCI6MjM3LCJ5IjozOTl9LHsieCI6MjA1LCJ5IjozNjd9XQ== + + + + 1663958581389 + mark + + DEL_EDGE + WyIxZDQ4OWY1NC1jMzJjLTRlOGMtYTc4Ny04NTcyMjEzZmVjYmYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLCJ0YXJnZXRJRCI6IjRmMGI3OTM0LTg5ODYtNDIwOS1iMjA0LWE4ZWFmYTA0NjhhNyIsImlkIjoiMWQ0ODlmNTQtYzMyYy00ZThjLWE3ODctODU3MjIxM2ZlY2JmIn1d + + + + 1663958602527 + mark + + UPDATE_NODE + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMTpwaWQucHkiLHRydWVd + + + UPDATE_NODE + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMTpwaWQxLnB5Iix0cnVlXQ== + + + + 1664052212399 + mark + + UPDATE_NODE + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJNOm1lcmdlLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsid2lkdGgiOjExNCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJNWjptaXgucHkiLHRydWVd + + + + 1664052244289 + mark + + UPDATE_NODE + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMTpwaWQxLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLHsid2lkdGgiOjE0OSwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMTpjcHltYXRjb3JlLnB5Iix0cnVlXQ== + + + + 1664052286521 + mark + + UPDATE_NODE + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLHsid2lkdGgiOjE0OSwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMTpjcHltYXRjb3JlLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLHsid2lkdGgiOjE0OSwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMTpjcHltYXgucHkiLHRydWVd + + + + 1664052312273 + mark + + UPDATE_NODE + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMjpwaWQyLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsid2lkdGgiOjEzMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMjpjcHltYXgyLnB5Iix0cnVlXQ== + + + + 1664052355943 + mark + + UPDATE_NODE + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsid2lkdGgiOjEzMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMjpjcHltYXgyLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsid2lkdGgiOjE0MCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMjoucG1weW1heC5weSIsdHJ1ZV0= + + + + 1664052375019 + mark + + UPDATE_NODE + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsid2lkdGgiOjE0MCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMjoucG1weW1heC5weSIsdHJ1ZV0= + + + UPDATE_NODE + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsid2lkdGgiOjE0MCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMjouY3B5bWF4LnB5Iix0cnVlXQ== + + + + 1664052387175 + mark + + UPDATE_NODE + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJQOnBtLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLHsid2lkdGgiOjEyNiwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJQOnBtcHltYXgucHkiLHRydWVd + + + + 1664052406639 + mark + + UPDATE_NODE + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLHsid2lkdGgiOjEyNiwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJQOnBtcHltYXgucHkiLHRydWVd + + + UPDATE_NODE + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLHsid2lkdGgiOjEzNiwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJQWjpwbXB5bWF4LnB5Iix0cnVlXQ== + + + + 1664052424822 + mark + + UPDATE_NODE + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsid2lkdGgiOjE0MCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMjouY3B5bWF4LnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsid2lkdGgiOjE0MCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMjpjcHltYXgyLnB5Iix0cnVlXQ== + + + + \ No newline at end of file diff --git a/testsou/test4.graphml b/testsou/test4.graphml new file mode 100644 index 0000000..249ef02 --- /dev/null +++ b/testsou/test4.graphml @@ -0,0 +1,291 @@ + + + + + + + + + + + + CZ:cpymax.py + + + + + + + + + + + PZ:pmpymax.py + + + + + + + + + + + OUT: + + + + + + + + + + + IN: + + + + + + + + + + VCY + + + + + + + + + + + + VPY + + + + + + + + + + + + INC + + + + + + + + + + + + OUTC + + + + + + + + 1663949967711 + mark + + DEL_NODE + WyI4NjI2MzU1My0wZGUzLTRhOWYtYTg1YS1mM2U3Y2I2YjFkOGIiXQ== + + + ADD_NODE + WyJDWjpjcHltYXgucHkiLHsid2lkdGgiOjEyMiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjozMzksInkiOjEwN30se30sIjg2MjYzNTUzLTBkZTMtNGE5Zi1hODVhLWYzZTdjYjZiMWQ4YiJd + + + + 1663949982953 + mark + + DEL_NODE + WyI0OGQxOWM5NC01MjE5LTQyYWMtOGViYi0wMzJjMDg0ZWJiODYiXQ== + + + ADD_NODE + WyJQWjpwbXB5bWF4LnB5Iix7IndpZHRoIjoxMzYsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzQ0LCJ5IjoyNjR9LHt9LCI0OGQxOWM5NC01MjE5LTQyYWMtOGViYi0wMzJjMDg0ZWJiODYiXQ== + + + + 1663949987866 + mark + + SET_POS + WyI0OGQxOWM5NC01MjE5LTQyYWMtOGViYi0wMzJjMDg0ZWJiODYiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MzQxLCJ5IjoyMjB9XQ== + + + SET_POS + WyI0OGQxOWM5NC01MjE5LTQyYWMtOGViYi0wMzJjMDg0ZWJiODYiLHsieCI6MzQxLCJ5IjoyMjB9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1663949991370 + mark + + SET_POS + WyI4NjI2MzU1My0wZGUzLTRhOWYtYTg1YS1mM2U3Y2I2YjFkOGIiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MzM5LCJ5IjoxMDd9XQ== + + + SET_POS + WyI4NjI2MzU1My0wZGUzLTRhOWYtYTg1YS1mM2U3Y2I2YjFkOGIiLHsieCI6MzM5LCJ5IjoxMDd9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1663950005067 + mark + + DEL_NODE + WyI1MmYwNjcxZS03NDY0LTQxMjktYjhhZS05ZTRiOTMyMWE0ZjEiXQ== + + + ADD_NODE + WyJJTjoiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjoxMDAsInkiOjEwMH0se30sIjUyZjA2NzFlLTc0NjQtNDEyOS1iOGFlLTllNGI5MzIxYTRmMSJd + + + + 1663950014785 + mark + + DEL_NODE + WyIyNGViOTUwYy03N2IwLTQ4M2YtODA1My03NWUwYjU0YmU5NTIiXQ== + + + ADD_NODE + WyJPVVQ6Iix7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6NTQ5LCJ5IjoxMDZ9LHt9LCIyNGViOTUwYy03N2IwLTQ4M2YtODA1My03NWUwYjU0YmU5NTIiXQ== + + + + 1663950020034 + mark + + SET_POS + WyIyNGViOTUwYy03N2IwLTQ4M2YtODA1My03NWUwYjU0YmU5NTIiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6NTQ5LCJ5IjoxMDZ9XQ== + + + SET_POS + WyIyNGViOTUwYy03N2IwLTQ4M2YtODA1My03NWUwYjU0YmU5NTIiLHsieCI6NTQ5LCJ5IjoxMDZ9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1663950026545 + mark + + DEL_EDGE + WyI2Y2FhZTc0ZS1iOWQ3LTRlMDQtYmY1Mi1jYjAyMzYyMGY5MmYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI4NjI2MzU1My0wZGUzLTRhOWYtYTg1YS1mM2U3Y2I2YjFkOGIiLCJ0YXJnZXRJRCI6IjQ4ZDE5Yzk0LTUyMTktNDJhYy04ZWJiLTAzMmMwODRlYmI4NiIsImxhYmVsIjoiVkNZIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjMDA5Njg4Iiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjZjYWFlNzRlLWI5ZDctNGUwNC1iZjUyLWNiMDIzNjIwZjkyZiJ9XQ== + + + + 1663950043846 + mark + + SET_POS + WyI0OGQxOWM5NC01MjE5LTQyYWMtOGViYi0wMzJjMDg0ZWJiODYiLHsieCI6MzQxLCJ5IjoyMjB9LHsieCI6MzQ0LCJ5IjoyNjR9XQ== + + + SET_POS + WyI0OGQxOWM5NC01MjE5LTQyYWMtOGViYi0wMzJjMDg0ZWJiODYiLHsieCI6MzQ0LCJ5IjoyNjR9LHsieCI6MzQxLCJ5IjoyMjB9XQ== + + + + 1663950047652 + mark + + DEL_EDGE + WyIzMDg0OGE3MS03ZjA2LTQwMDctOWI4MS0xOWExYjE3MWUyZmUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI0OGQxOWM5NC01MjE5LTQyYWMtOGViYi0wMzJjMDg0ZWJiODYiLCJ0YXJnZXRJRCI6Ijg2MjYzNTUzLTBkZTMtNGE5Zi1hODVhLWYzZTdjYjZiMWQ4YiIsImxhYmVsIjoiVlBZIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmY2ZDAwIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjMwODQ4YTcxLTdmMDYtNDAwNy05YjgxLTE5YTFiMTcxZTJmZSJ9XQ== + + + + 1663950061658 + mark + + DEL_EDGE + WyJjNGZiY2I4YS03Zjg1LTQ2ODktYWY1ZC1kNTFhMmJhZGE2OTMiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI1MmYwNjcxZS03NDY0LTQxMjktYjhhZS05ZTRiOTMyMWE0ZjEiLCJ0YXJnZXRJRCI6Ijg2MjYzNTUzLTBkZTMtNGE5Zi1hODVhLWYzZTdjYjZiMWQ4YiIsImxhYmVsIjoiaW5wdXQiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiYzRmYmNiOGEtN2Y4NS00Njg5LWFmNWQtZDUxYTJiYWRhNjkzIn1d + + + + 1663950139190 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiI1MmYwNjcxZS03NDY0LTQxMjktYjhhZS05ZTRiOTMyMWE0ZjEiLCJ0YXJnZXRJRCI6Ijg2MjYzNTUzLTBkZTMtNGE5Zi1hODVhLWYzZTdjYjZiMWQ4YiIsImxhYmVsIjoiaW5wdXQiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sInR5cGUiOiJvcmRpbiIsInNvdXJjZSI6IjNiNjc1MzdkLWQwZjctNGQ3My1hYmFlLTM5ZjJkZTI5OGJiZCIsInRhcmdldCI6Ijg2MjYzNTUzLTBkZTMtNGE5Zi1hODVhLWYzZTdjYjZiMWQ4YiIsImJlbmREYXRhIjp7ImJlbmREaXN0YW5jZSI6LTYuNTcyNTIwMzA1NzgwOTI3ZS0xNCwiYmVuZFdlaWdodCI6MC41LCJiZW5kUG9pbnQiOnsieCI6MjQ0LjUsInkiOjEwNC4yMzIyMTc1NzMyMjE3Mn19LCJpZCI6ImM0ZmJjYjhhLTdmODUtNDY4OS1hZjVkLWQ1MWEyYmFkYTY5MyJ9XQ== + + + DEL_EDGE + WyJjNGZiY2I4YS03Zjg1LTQ2ODktYWY1ZC1kNTFhMmJhZGE2OTMiXQ== + + + + 1663950149420 + mark + + DEL_EDGE + WyI0ZGM5ZDk5NC02NjYyLTQxY2YtYjBlZi1kZTNkZjk2MWMxMmQiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI1MmYwNjcxZS03NDY0LTQxMjktYjhhZS05ZTRiOTMyMWE0ZjEiLCJ0YXJnZXRJRCI6Ijg2MjYzNTUzLTBkZTMtNGE5Zi1hODVhLWYzZTdjYjZiMWQ4YiIsImxhYmVsIjoiSU5QIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjOWMyN2IwIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjRkYzlkOTk0LTY2NjItNDFjZi1iMGVmLWRlM2RmOTYxYzEyZCJ9XQ== + + + + 1663950175662 + mark + + DEL_EDGE + WyJkNGNjMWFmOC05ZWNkLTQwZjgtOWM4Mi1kYTg1Mjk0NmY3NWUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI4NjI2MzU1My0wZGUzLTRhOWYtYTg1YS1mM2U3Y2I2YjFkOGIiLCJ0YXJnZXRJRCI6IjI0ZWI5NTBjLTc3YjAtNDgzZi04MDUzLTc1ZTBiNTRiZTk1MiIsImxhYmVsIjoiT1VUQyIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzAwOTY4OCIsInNoYXBlIjoic29saWQifSwiaWQiOiJkNGNjMWFmOC05ZWNkLTQwZjgtOWM4Mi1kYTg1Mjk0NmY3NWUifV0= + + + + 1663950192817 + mark + + SET_POS + WyIyNGViOTUwYy03N2IwLTQ4M2YtODA1My03NWUwYjU0YmU5NTIiLHsieCI6NTQ5LCJ5IjoxMDZ9LHsieCI6NjI2LCJ5IjoxMDN9XQ== + + + SET_POS + WyIyNGViOTUwYy03N2IwLTQ4M2YtODA1My03NWUwYjU0YmU5NTIiLHsieCI6NjI2LCJ5IjoxMDN9LHsieCI6NTQ5LCJ5IjoxMDZ9XQ== + + + + 1663950198417 + mark + + UPDATE_EDGE + WyI0ZGM5ZDk5NC02NjYyLTQxY2YtYjBlZi1kZTNkZjk2MWMxMmQiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjOWMyN2IwIiwic2hhcGUiOiJzb2xpZCJ9LCJJTlAiLHRydWVd + + + UPDATE_EDGE + WyI0ZGM5ZDk5NC02NjYyLTQxY2YtYjBlZi1kZTNkZjk2MWMxMmQiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjOWMyN2IwIiwic2hhcGUiOiJzb2xpZCJ9LCJJTkMiLHRydWVd + + + + \ No newline at end of file diff --git a/testsou/twopid.graphml b/testsou/twopid.graphml new file mode 100644 index 0000000..7213486 --- /dev/null +++ b/testsou/twopid.graphml @@ -0,0 +1,327 @@ + + + + + + + + + + + + C1:pid1.py + + + + + + + + + + + C2:pid2.py + + + + + + + + + + + M:merge.py + + + + + + + + + + + P:pm.py + + + + + + + + + + U1 + + + + + + + + + + + + U2 + + + + + + + + + + + + U + + + + + + + + + + + + YM + + + + + + + + + + + + YM + + + + + + + + 1663958264662 + mark + + DEL_NODE + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiXQ== + + + ADD_NODE + WyJDMTpwaWQucHkiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4Ijo2MywieSI6OTd9LHt9LCI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiXQ== + + + + 1663958319960 + mark + + DEL_NODE + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciXQ== + + + ADD_NODE + WyJDMjpwaWQyLnB5Iix7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6Mzg0LCJ5Ijo5OX0se30sIjRmMGI3OTM0LTg5ODYtNDIwOS1iMjA0LWE4ZWFmYTA0NjhhNyJd + + + + 1663958325104 + mark + + SET_POS + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MzA1LCJ5IjoxMDB9XQ== + + + SET_POS + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsieCI6MzA1LCJ5IjoxMDB9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1663958345496 + mark + + DEL_NODE + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiXQ== + + + ADD_NODE + WyJNOm1lcmdlLnB5Iix7IndpZHRoIjoxMDQsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjM3LCJ5IjoyMjh9LHt9LCIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiXQ== + + + + 1663958350889 + mark + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MjAwLCJ5IjoyMDZ9XQ== + + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MjAwLCJ5IjoyMDZ9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1663958464656 + mark + + DEL_EDGE + WyI3YTFhYzQ2Yi1kZDNiLTQ0MGMtYTcyOS0xM2QxMmIxNjVlNGQiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLCJ0YXJnZXRJRCI6IjE1OWJlOGY3LTNiZmUtNGU5Mi05ZjBlLTdkMTdkMzUyYjBlYyIsImxhYmVsIjoiVTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiMxNTY1YzAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiN2ExYWM0NmItZGQzYi00NDBjLWE3MjktMTNkMTJiMTY1ZTRkIn1d + + + + 1663958477703 + mark + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MjAwLCJ5IjoyMDZ9LHsieCI6MjA4LCJ5IjoyMzF9XQ== + + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MjA4LCJ5IjoyMzF9LHsieCI6MjAwLCJ5IjoyMDZ9XQ== + + + + 1663958482030 + mark + + DEL_EDGE + WyI5MzczOTBiYS1kM2ZlLTQyOWItYjhhNi04ZTg4Yzg4ZWRhMjAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLCJ0YXJnZXRJRCI6IjE1OWJlOGY3LTNiZmUtNGU5Mi05ZjBlLTdkMTdkMzUyYjBlYyIsImxhYmVsIjoiVTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiMwMDAwMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiOTM3MzkwYmEtZDNmZS00MjliLWI4YTYtOGU4OGM4OGVkYTIwIn1d + + + + 1663958503353 + mark + + DEL_NODE + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiXQ== + + + ADD_NODE + WyJQOnBtLnB5Iix7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjM3LCJ5IjozOTl9LHt9LCIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiXQ== + + + + 1663958510890 + mark + + SET_POS + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MjA1LCJ5IjozNjd9XQ== + + + SET_POS + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLHsieCI6MjA1LCJ5IjozNjd9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1663958518892 + mark + + DEL_EDGE + WyJkOGE4OWZiZi00MTZkLTQwOTYtOWMyZS0yZTlhMjRmYjE4N2MiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLCJ0YXJnZXRJRCI6IjM1ODk5M2M1LWU1OTQtNDljMi1iMzMzLWNiYmM0YjQxOTA3YiIsImxhYmVsIjoiVSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzAwMDAwMCIsInNoYXBlIjoic29saWQifSwiaWQiOiJkOGE4OWZiZi00MTZkLTQwOTYtOWMyZS0yZTlhMjRmYjE4N2MifV0= + + + + 1663958553669 + mark + + DEL_EDGE + WyIyY2NmNWZhYy1mMmI3LTQ5ZjgtOTMxMi0xODc1NTlhMzkyZWIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLCJ0YXJnZXRJRCI6IjYzZTVkZDMxLTBlOGItNDM1Ni1iZWNhLTZlMGFhZmE2MDA4OSIsImxhYmVsIjoiWU0iLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM4Mjc3MTciLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiMmNjZjVmYWMtZjJiNy00OWY4LTkzMTItMTg3NTU5YTM5MmViIn1d + + + + 1663958562546 + mark + + SET_POS + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NjMsInkiOjk3fV0= + + + SET_POS + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLHsieCI6NjMsInkiOjk3fSx7IngiOjEwMCwieSI6MTAwfV0= + + + + 1663958566565 + mark + + SET_POS + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsieCI6MzA1LCJ5IjoxMDB9LHsieCI6Mzg0LCJ5Ijo5OX1d + + + SET_POS + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsieCI6Mzg0LCJ5Ijo5OX0seyJ4IjozMDUsInkiOjEwMH1d + + + + 1663958569231 + mark + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MjA4LCJ5IjoyMzF9LHsieCI6MjM3LCJ5IjoyMjh9XQ== + + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MjM3LCJ5IjoyMjh9LHsieCI6MjA4LCJ5IjoyMzF9XQ== + + + + 1663958576068 + mark + + SET_POS + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLHsieCI6MjA1LCJ5IjozNjd9LHsieCI6MjM3LCJ5IjozOTl9XQ== + + + SET_POS + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLHsieCI6MjM3LCJ5IjozOTl9LHsieCI6MjA1LCJ5IjozNjd9XQ== + + + + 1663958581389 + mark + + DEL_EDGE + WyIxZDQ4OWY1NC1jMzJjLTRlOGMtYTc4Ny04NTcyMjEzZmVjYmYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLCJ0YXJnZXRJRCI6IjRmMGI3OTM0LTg5ODYtNDIwOS1iMjA0LWE4ZWFmYTA0NjhhNyIsImlkIjoiMWQ0ODlmNTQtYzMyYy00ZThjLWE3ODctODU3MjIxM2ZlY2JmIn1d + + + + 1663958602527 + mark + + UPDATE_NODE + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMTpwaWQucHkiLHRydWVd + + + UPDATE_NODE + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMTpwaWQxLnB5Iix0cnVlXQ== + + + + \ No newline at end of file diff --git a/testsou/twopidalt.graphml b/testsou/twopidalt.graphml new file mode 100644 index 0000000..b8baa23 --- /dev/null +++ b/testsou/twopidalt.graphml @@ -0,0 +1,423 @@ + + + + + + + + + + + + C1:pid1.py + + + + + + + + + + + C2:pid2.py + + + + + + + + + + + M:merge.py + + + + + + + + + + + P:pm.py + + + + + + + + + + YM + + + + + + + + + + + + U1 + + + + + + + + + + + + U2 + + + + + + + + + + + + U + + + + + + + + + + + + Y2 + + + + + + + + + + + + Y1 + + + + + + + + 1663958264662 + mark + + DEL_NODE + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiXQ== + + + ADD_NODE + WyJDMTpwaWQucHkiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4Ijo2MywieSI6OTd9LHt9LCI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiXQ== + + + + 1663958319960 + mark + + DEL_NODE + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciXQ== + + + ADD_NODE + WyJDMjpwaWQyLnB5Iix7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6Mzg0LCJ5Ijo5OX0se30sIjRmMGI3OTM0LTg5ODYtNDIwOS1iMjA0LWE4ZWFmYTA0NjhhNyJd + + + + 1663958325104 + mark + + SET_POS + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MzA1LCJ5IjoxMDB9XQ== + + + SET_POS + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsieCI6MzA1LCJ5IjoxMDB9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1663958345496 + mark + + DEL_NODE + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiXQ== + + + ADD_NODE + WyJNOm1lcmdlLnB5Iix7IndpZHRoIjoxMDQsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjM3LCJ5IjoyMjh9LHt9LCIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiXQ== + + + + 1663958350889 + mark + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MjAwLCJ5IjoyMDZ9XQ== + + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MjAwLCJ5IjoyMDZ9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1663958464656 + mark + + DEL_EDGE + WyI3YTFhYzQ2Yi1kZDNiLTQ0MGMtYTcyOS0xM2QxMmIxNjVlNGQiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLCJ0YXJnZXRJRCI6IjE1OWJlOGY3LTNiZmUtNGU5Mi05ZjBlLTdkMTdkMzUyYjBlYyIsImxhYmVsIjoiVTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiMxNTY1YzAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiN2ExYWM0NmItZGQzYi00NDBjLWE3MjktMTNkMTJiMTY1ZTRkIn1d + + + + 1663958477703 + mark + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MjAwLCJ5IjoyMDZ9LHsieCI6MjA4LCJ5IjoyMzF9XQ== + + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MjA4LCJ5IjoyMzF9LHsieCI6MjAwLCJ5IjoyMDZ9XQ== + + + + 1663958482030 + mark + + DEL_EDGE + WyI5MzczOTBiYS1kM2ZlLTQyOWItYjhhNi04ZTg4Yzg4ZWRhMjAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLCJ0YXJnZXRJRCI6IjE1OWJlOGY3LTNiZmUtNGU5Mi05ZjBlLTdkMTdkMzUyYjBlYyIsImxhYmVsIjoiVTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiMwMDAwMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiOTM3MzkwYmEtZDNmZS00MjliLWI4YTYtOGU4OGM4OGVkYTIwIn1d + + + + 1663958503353 + mark + + DEL_NODE + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiXQ== + + + ADD_NODE + WyJQOnBtLnB5Iix7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjM3LCJ5IjozOTl9LHt9LCIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiXQ== + + + + 1663958510890 + mark + + SET_POS + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MjA1LCJ5IjozNjd9XQ== + + + SET_POS + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLHsieCI6MjA1LCJ5IjozNjd9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1663958518892 + mark + + DEL_EDGE + WyJkOGE4OWZiZi00MTZkLTQwOTYtOWMyZS0yZTlhMjRmYjE4N2MiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLCJ0YXJnZXRJRCI6IjM1ODk5M2M1LWU1OTQtNDljMi1iMzMzLWNiYmM0YjQxOTA3YiIsImxhYmVsIjoiVSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzAwMDAwMCIsInNoYXBlIjoic29saWQifSwiaWQiOiJkOGE4OWZiZi00MTZkLTQwOTYtOWMyZS0yZTlhMjRmYjE4N2MifV0= + + + + 1663958553669 + mark + + DEL_EDGE + WyIyY2NmNWZhYy1mMmI3LTQ5ZjgtOTMxMi0xODc1NTlhMzkyZWIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLCJ0YXJnZXRJRCI6IjYzZTVkZDMxLTBlOGItNDM1Ni1iZWNhLTZlMGFhZmE2MDA4OSIsImxhYmVsIjoiWU0iLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM4Mjc3MTciLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiMmNjZjVmYWMtZjJiNy00OWY4LTkzMTItMTg3NTU5YTM5MmViIn1d + + + + 1663958562546 + mark + + SET_POS + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NjMsInkiOjk3fV0= + + + SET_POS + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLHsieCI6NjMsInkiOjk3fSx7IngiOjEwMCwieSI6MTAwfV0= + + + + 1663958566565 + mark + + SET_POS + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsieCI6MzA1LCJ5IjoxMDB9LHsieCI6Mzg0LCJ5Ijo5OX1d + + + SET_POS + WyI0ZjBiNzkzNC04OTg2LTQyMDktYjIwNC1hOGVhZmEwNDY4YTciLHsieCI6Mzg0LCJ5Ijo5OX0seyJ4IjozMDUsInkiOjEwMH1d + + + + 1663958569231 + mark + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MjA4LCJ5IjoyMzF9LHsieCI6MjM3LCJ5IjoyMjh9XQ== + + + SET_POS + WyIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLHsieCI6MjM3LCJ5IjoyMjh9LHsieCI6MjA4LCJ5IjoyMzF9XQ== + + + + 1663958576068 + mark + + SET_POS + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLHsieCI6MjA1LCJ5IjozNjd9LHsieCI6MjM3LCJ5IjozOTl9XQ== + + + SET_POS + WyIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLHsieCI6MjM3LCJ5IjozOTl9LHsieCI6MjA1LCJ5IjozNjd9XQ== + + + + 1663958581389 + mark + + DEL_EDGE + WyIxZDQ4OWY1NC1jMzJjLTRlOGMtYTc4Ny04NTcyMjEzZmVjYmYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLCJ0YXJnZXRJRCI6IjRmMGI3OTM0LTg5ODYtNDIwOS1iMjA0LWE4ZWFmYTA0NjhhNyIsImlkIjoiMWQ0ODlmNTQtYzMyYy00ZThjLWE3ODctODU3MjIxM2ZlY2JmIn1d + + + + 1663958602527 + mark + + UPDATE_NODE + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMTpwaWQucHkiLHRydWVd + + + UPDATE_NODE + WyI2M2U1ZGQzMS0wZThiLTQzNTYtYmVjYS02ZTBhYWZhNjAwODkiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDMTpwaWQxLnB5Iix0cnVlXQ== + + + + 1663958675664 + mark + + SET_BENDW + WyIyY2NmNWZhYy1mMmI3LTQ5ZjgtOTMxMi0xODc1NTlhMzkyZWIiLHsiYmVuZERpc3RhbmNlIjowLCJiZW5kV2VpZ2h0IjowLjUsImJlbmRQb2ludCI6eyJ4IjoxNDkuNDM2MzczNTg3NzMwMTUsInkiOjIzNS41fX1d + + + SET_BENDW + WyIyY2NmNWZhYy1mMmI3LTQ5ZjgtOTMxMi0xODc1NTlhMzkyZWIiLHsiYmVuZERpc3RhbmNlIjotMTQuNjMxOTc5ODYzNzUyNzA0LCJiZW5kV2VpZ2h0IjowLjUxNjk4NTQxOTI3NTg0MiwiYmVuZFBvaW50Ijp7IngiOjEzNC4yODA4Nzg0ODgxMjQzLCJ5IjoyMzguNTU0MjUyNDkzMjgwMX19XQ== + + + + 1663958689538 + mark + + DEL_EDGE + WyI4YmQ5ZTQwMi1iMWQxLTQ0ZGItYjAzYS01Mjg4ZGNiZTJhYTgiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLCJ0YXJnZXRJRCI6IjE1OWJlOGY3LTNiZmUtNGU5Mi05ZjBlLTdkMTdkMzUyYjBlYyIsImlkIjoiOGJkOWU0MDItYjFkMS00NGRiLWIwM2EtNTI4OGRjYmUyYWE4In1d + + + + 1663958695576 + mark + + ADD_NODE + W251bGwsbnVsbCwiYmVuZCIseyJ4IjoxNjYuNjAzMDYzNTE5OTczNTIsInkiOjE3NC45OTk5OTk5OTk5OTk5N30seyJ0eXBlIjoiYmVuZCIsImlkIjoiMDE0MmEzMjUtZGQwMS00YTY0LTgxMmUtZDFhYWJiZTE5YmRjIn0sIjAxNDJhMzI1LWRkMDEtNGE2NC04MTJlLWQxYWFiYmUxOWJkYyJd + + + DEL_NODE + WyIwMTQyYTMyNS1kZDAxLTRhNjQtODEyZS1kMWFhYmJlMTliZGMiXQ== + + + + 1663958702702 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLCJ0YXJnZXRJRCI6IjRmMGI3OTM0LTg5ODYtNDIwOS1iMjA0LWE4ZWFmYTA0NjhhNyIsImxhYmVsIjoiWU0iLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM4Mjc3MTciLCJzaGFwZSI6InNvbGlkIn0sInR5cGUiOiJvcmRpbiIsInNvdXJjZSI6Ijc5Y2I5OTdmLTRlNDgtNGM4Yy1hODVmLTc4YzEyZmY3NzljNiIsInRhcmdldCI6IjRmMGI3OTM0LTg5ODYtNDIwOS1iMjA0LWE4ZWFmYTA0NjhhNyIsImJlbmREYXRhIjp7ImJlbmREaXN0YW5jZSI6MCwiYmVuZFdlaWdodCI6MC41LCJiZW5kUG9pbnQiOnsieCI6MzEwLjEyODk1NDkyNzY5NTgsInkiOjIzNi40OTk5OTk5OTk5OTk5NH19LCJpZCI6IjFkNDg5ZjU0LWMzMmMtNGU4Yy1hNzg3LTg1NzIyMTNmZWNiZiJ9XQ== + + + DEL_EDGE + WyIxZDQ4OWY1NC1jMzJjLTRlOGMtYTc4Ny04NTcyMjEzZmVjYmYiXQ== + + + + 1663958708042 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiIzNTg5OTNjNS1lNTk0LTQ5YzItYjMzMy1jYmJjNGI0MTkwN2IiLCJ0YXJnZXRJRCI6IjYzZTVkZDMxLTBlOGItNDM1Ni1iZWNhLTZlMGFhZmE2MDA4OSIsImxhYmVsIjoiWU0iLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM4Mjc3MTciLCJzaGFwZSI6InNvbGlkIn0sInR5cGUiOiJvcmRpbiIsInNvdXJjZSI6Ijc5Y2I5OTdmLTRlNDgtNGM4Yy1hODVmLTc4YzEyZmY3NzljNiIsInRhcmdldCI6IjYzZTVkZDMxLTBlOGItNDM1Ni1iZWNhLTZlMGFhZmE2MDA4OSIsImJlbmREYXRhIjp7ImJlbmREaXN0YW5jZSI6LTE0LjYzMTk3OTg2Mzc1MjcwNCwiYmVuZFdlaWdodCI6MC41MTY5ODU0MTkyNzU4NDIsImJlbmRQb2ludCI6eyJ4IjoxMzQuMjgwODc4NDg4MTI0MywieSI6MjM4LjU1NDI1MjQ5MzI4MDF9fSwiaWQiOiIyY2NmNWZhYy1mMmI3LTQ5ZjgtOTMxMi0xODc1NTlhMzkyZWIifV0= + + + DEL_EDGE + WyIyY2NmNWZhYy1mMmI3LTQ5ZjgtOTMxMi0xODc1NTlhMzkyZWIiXQ== + + + + 1663958715222 + mark + + DEL_EDGE + WyI3MDczY2IwOC00NzZhLTQ5ZGUtYjkzZS1mMjQyZjAzMzM2YzQiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLCJ0YXJnZXRJRCI6IjRmMGI3OTM0LTg5ODYtNDIwOS1iMjA0LWE4ZWFmYTA0NjhhNyIsImxhYmVsIjoiWTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM5YzI3YjAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNzA3M2NiMDgtNDc2YS00OWRlLWI5M2UtZjI0MmYwMzMzNmM0In1d + + + + 1663958731103 + mark + + DEL_EDGE + WyIzZDQ3YmNjMS1mODNlLTRlOWQtODc3Ny05ODU0NGQ4ZWYyNGUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIxNTliZThmNy0zYmZlLTRlOTItOWYwZS03ZDE3ZDM1MmIwZWMiLCJ0YXJnZXRJRCI6IjYzZTVkZDMxLTBlOGItNDM1Ni1iZWNhLTZlMGFhZmE2MDA4OSIsImxhYmVsIjoiWTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM5YzI3YjAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiM2Q0N2JjYzEtZjgzZS00ZTlkLTg3NzctOTg1NDRkOGVmMjRlIn1d + + + + \ No newline at end of file From a74cbd6cbb3496a32bf535e8e64a7071e9cc37ad Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Sat, 24 Sep 2022 17:47:59 -0400 Subject: [PATCH 092/113] ; instead of , for concore.params --- concore.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/concore.py b/concore.py index 6471e0b..3a9c0d6 100644 --- a/concore.py +++ b/concore.py @@ -37,7 +37,7 @@ sparams = sparams[0:sparams.find('"')] if sparams != '{': print("converting sparams: "+sparams) - sparams = "{'"+re.sub(',',",'",re.sub('=',"':",re.sub(' ','',sparams)))+"}" + sparams = "{'"+re.sub(';',",'",re.sub('=',"':",re.sub(' ','',sparams)))+"}" print("converted sparams: " + sparams) try: params = literal_eval(sparams) From 5b1aab45591787de80615ed259d92a7a14609c5a Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Mon, 26 Sep 2022 15:53:13 -0400 Subject: [PATCH 093/113] tools/pidscript, tools/runhelp --- tools/pidscript | 35 +++++++++++++++++++++++++++++++++++ tools/runhelp | 8 ++++++++ 2 files changed, 43 insertions(+) create mode 100755 tools/pidscript create mode 100755 tools/runhelp diff --git a/tools/pidscript b/tools/pidscript new file mode 100755 index 0000000..6b275d8 --- /dev/null +++ b/tools/pidscript @@ -0,0 +1,35 @@ +./maxtime 50 +./params "Kp=0.2; Ki=0.02; Kd=0" +../tools/runhelp +./maxtime 50 +./params "Kp=0.2; Ki=0.02; Kd=0.01" +../tools/runhelp +./params "sp=75; Kp=0.15; Ki=0.02; Kd=0.005" +../tools/runhelp +./params "sp=75; Kp=0.1; Ki=0.02; Kd=0.005" +../tools/runhelp +./params "sp=75; Kp=0.075; Ki=0.02; Kd=0.005" +../tools/runhelp +./params "sp=85; Kp=0.075; Ki=0.02; Kd=0.005" +../tools/runhelp +./params "sp=55; Kp=0.075; Ki=0.02; Kd=0.005; freq=25" +../tools/runhelp +./params "sp=85; Kp=0.075; Ki=0.02; Kd=0.005; freq=25" +../tools/runhelp +./params "sp=55; Kp=0.075; Ki=0.02; Kd=0.005; freq=20" +../tools/runhelp +./params "sp=85; Kp=0.075; Ki=0.02; Kd=0.005; freq=20" +../tools/runhelp +./params "sp=75; Kp=0.075; Ki=0.02; Kd=0.005; sigout=False" +../tools/runhelp +./maxtime 30 +./params "sp=65; Kp=0.075; Ki=0.02; Kd=0.005; sigout=False" +../tools/runhelp +./maxtime 30 +./params "sp=65; Kp=0.075; Ki=0.02; Kd=0.005; sigout=True" +../tools/runhelp +./params "sp=85; Kp=0.075; Ki=0.02; Kd=0.005; cin='map'" +../tools/runhelp +./params "sp=95; Kp=0.075; Ki=0.02; Kd=0.005; cin='map'" +../tools/runhelp + diff --git a/tools/runhelp b/tools/runhelp new file mode 100755 index 0000000..56366df --- /dev/null +++ b/tools/runhelp @@ -0,0 +1,8 @@ +echo +echo "running" +cat CU/concore.params +./run +echo "when plot appears, click on this window and hit enter to continue" +read +./stop +./clear From b77b088cb610eb771ce5c0bc55704c7b01b66424 Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Mon, 26 Sep 2022 17:13:18 -0400 Subject: [PATCH 094/113] set point for yuyu (cvxpysp); learn2 historyfull --- ratc/cvxpysp.dir/MPC_data.mat | Bin 0 -> 57940 bytes ratc/cvxpysp.py | 204 ++++++++++++++++++ ratc/learn2.py | 4 +- ratc/yuyu2learnsp.graphml | 375 ++++++++++++++++++++++++++++++++ ratc/yuyu3learnsp.graphml | 387 ++++++++++++++++++++++++++++++++++ 5 files changed, 969 insertions(+), 1 deletion(-) create mode 100644 ratc/cvxpysp.dir/MPC_data.mat create mode 100644 ratc/cvxpysp.py create mode 100644 ratc/yuyu2learnsp.graphml create mode 100644 ratc/yuyu3learnsp.graphml diff --git a/ratc/cvxpysp.dir/MPC_data.mat b/ratc/cvxpysp.dir/MPC_data.mat new file mode 100644 index 0000000000000000000000000000000000000000..7b266172cac0153a03d512becc664b702d29ba72 GIT binary patch literal 57940 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�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 rNE0E*i + + + + + + + + + + + CZ:cvxpysp.py + + + + + + + + + + + PZ:pmcvxpymatcore.py + + + + + + + + + + + LZ:learn2.py + + + + + + + + + + + OUT: + + + + + + + + + + VCY + + + + + + + + + + + + VPY + + + + + + + + + + + + VCY + + + + + + + + + + + + VPY + + + + + + + + + + + + HIST + + + + + + + + 1631987765505 + mark + + DEL_NODE + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiXQ== + + + ADD_NODE + WyJDWjpjdnhweW1hdGNvcmUucHkiLHsid2lkdGgiOjE2NiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjozNzcuODMwMjYwNTA1NjQ3NzQsInkiOjg3LjAzOTk4Nzg0ODEzMzA3fSx7fSwiMmEzZmY1MjItMWFmOS00MzhhLTgxMDctYWIwOTYyYTIzMzY2Il0= + + + + 1631987810303 + mark + + DEL_NODE + WyJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiXQ== + + + ADD_NODE + WyJQWjpwbWN2eHB5bWF0Y29yZS5weSIseyJ3aWR0aCI6MTg3LCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjM4MS4zNTAyNTQ0Mjk3MTQyNSwieSI6MjgwLjEwMDE1OTQ5MzI1Mzd9LHt9LCJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiXQ== + + + + 1631987820341 + mark + + SET_POS + WyJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MzgxLjM1MDI1NDQyOTcxNDI1LCJ5IjoyODAuMTAwMTU5NDkzMjUzN31d + + + SET_POS + WyJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLHsieCI6MzgxLjM1MDI1NDQyOTcxNDI1LCJ5IjoyODAuMTAwMTU5NDkzMjUzN30seyJ4IjoxMTAsInkiOjExMH1d + + + + 1631987826074 + mark + + SET_POS + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6Mzc3LjgzMDI2MDUwNTY0Nzc0LCJ5Ijo4Ny4wMzk5ODc4NDgxMzMwN31d + + + SET_POS + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLHsieCI6Mzc3LjgzMDI2MDUwNTY0Nzc0LCJ5Ijo4Ny4wMzk5ODc4NDgxMzMwN30seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1631987833719 + mark + + DEL_EDGE + WyI3ZDhlYmJiMS00MGQ2LTQyNDAtOWE1MC03YjZlYjU4YzU5YmIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLCJ0YXJnZXRJRCI6ImJkNmFhMjA2LTQxZGQtNDE1ZS05MzUzLTJlMmZhZmRlN2RjMiIsImxhYmVsIjoiVkNZIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjNjA3ZDhiIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjdkOGViYmIxLTQwZDYtNDI0MC05YTUwLTdiNmViNThjNTliYiJ9XQ== + + + + 1631987844901 + mark + + DEL_EDGE + WyI1MThlZWFjYy01YmNkLTRjZDMtODYxYy03MjljMDIxZGQ0OGIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLCJ0YXJnZXRJRCI6IjJhM2ZmNTIyLTFhZjktNDM4YS04MTA3LWFiMDk2MmEyMzM2NiIsImxhYmVsIjoiVlBZIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjOWMyN2IwIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjUxOGVlYWNjLTViY2QtNGNkMy04NjFjLTcyOWMwMjFkZDQ4YiJ9XQ== + + + + 1631988057648 + mark + + DEL_NODE + WyI1M2I3NjVmMi04YjU5LTQwMTgtOTAzOC0zNDAxY2M5ODNlNWMiXQ== + + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7fSwiNTNiNzY1ZjItOGI1OS00MDE4LTkwMzgtMzQwMWNjOTgzZTVjIl0= + + + + 1631988067297 + mark + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7ImlkIjoiNTNiNzY1ZjItOGI1OS00MDE4LTkwMzgtMzQwMWNjOTgzZTVjIiwibGFiZWwiOiJ5dXl1QyIsInR5cGUiOiJvcmRpbiIsInN0eWxlIjp7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfX0sIjUzYjc2NWYyLThiNTktNDAxOC05MDM4LTM0MDFjYzk4M2U1YyJd + + + DEL_NODE + WyI1M2I3NjVmMi04YjU5LTQwMTgtOTAzOC0zNDAxY2M5ODNlNWMiXQ== + + + + 1631988274563 + mark + + DEL_NODE + WyI2NzdjZTExZi1kNzZmLTQ2NDMtOWRkMS1jOGZhMjZiY2YyNzMiXQ== + + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7fSwiNjc3Y2UxMWYtZDc2Zi00NjQzLTlkZDEtYzhmYTI2YmNmMjczIl0= + + + + 1631988279632 + mark + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7ImlkIjoiNjc3Y2UxMWYtZDc2Zi00NjQzLTlkZDEtYzhmYTI2YmNmMjczIiwibGFiZWwiOiJ5dXl1QyIsInR5cGUiOiJvcmRpbiIsInN0eWxlIjp7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfX0sIjY3N2NlMTFmLWQ3NmYtNDY0My05ZGQxLWM4ZmEyNmJjZjI3MyJd + + + DEL_NODE + WyI2NzdjZTExZi1kNzZmLTQ2NDMtOWRkMS1jOGZhMjZiY2YyNzMiXQ== + + + + 1660317542808 + mark + + DEL_NODE + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiXQ== + + + ADD_NODE + WyJMWjpsZWFybi5weSIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjE2MSwieSI6MTc0fSx7fSwiZmVhNzU5ZWQtZWFkNi00M2IxLWEzY2YtOTY5MDgxMmE2ZjA5Il0= + + + + 1660317548640 + mark + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTYxLCJ5IjoxNzR9XQ== + + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6MTYxLCJ5IjoxNzR9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1660317557559 + mark + + DEL_EDGE + WyI3MDFiMmUwZS0wNzQxLTQ5NTMtYTk3Yy1mZWY0YTI2YTQzYTQiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLCJ0YXJnZXRJRCI6ImZlYTc1OWVkLWVhZDYtNDNiMS1hM2NmLTk2OTA4MTJhNmYwOSIsImlkIjoiNzAxYjJlMGUtMDc0MS00OTUzLWE5N2MtZmVmNGEyNmE0M2E0In1d + + + + 1660317565265 + mark + + DEL_EDGE + WyI5NjQxNWIxYy0yOGY4LTQzNjktYjViMi00YzE0OTQ4OWRjOTAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLCJ0YXJnZXRJRCI6ImZlYTc1OWVkLWVhZDYtNDNiMS1hM2NmLTk2OTA4MTJhNmYwOSIsImlkIjoiOTY0MTViMWMtMjhmOC00MzY5LWI1YjItNGMxNDk0ODlkYzkwIn1d + + + + 1663951088018 + mark + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6MTYxLCJ5IjoxNzR9LHsieCI6NjkyLCJ5IjoxNzh9XQ== + + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6NjkyLCJ5IjoxNzh9LHsieCI6MTYxLCJ5IjoxNzR9XQ== + + + + 1663951097443 + mark + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6NjkyLCJ5IjoxNzh9LHsieCI6NjA5LCJ5IjoxNzR9XQ== + + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6NjA5LCJ5IjoxNzR9LHsieCI6NjkyLCJ5IjoxNzh9XQ== + + + + 1663951162441 + mark + + DEL_NODE + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiXQ== + + + ADD_NODE + WyJPVVQ6Iix7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6ODMxLCJ5IjoxNzN9LHt9LCIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiXQ== + + + + 1663951172201 + mark + + SET_POS + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6ODI5LCJ5IjoxNzV9XQ== + + + SET_POS + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiLHsieCI6ODI5LCJ5IjoxNzV9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1663951177586 + mark + + DEL_EDGE + WyIwN2VlMmM4NC00OGY2LTQzZGEtOThiMS05NjhlMjRjOWQ5MDEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLCJ0YXJnZXRJRCI6IjJmZWIwZGFkLWJiM2QtNDRmZC1iNjIwLTgwMzk4Njg0MTAwMiIsImxhYmVsIjoiSElTVCIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmNmQwMCIsInNoYXBlIjoic29saWQifSwiaWQiOiIwN2VlMmM4NC00OGY2LTQzZGEtOThiMS05NjhlMjRjOWQ5MDEifV0= + + + + 1663951200362 + mark + + SET_POS + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiLHsieCI6ODI5LCJ5IjoxNzV9LHsieCI6ODMxLCJ5IjoxNzN9XQ== + + + SET_POS + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiLHsieCI6ODMxLCJ5IjoxNzN9LHsieCI6ODI5LCJ5IjoxNzV9XQ== + + + + 1663951224767 + mark + + UPDATE_NODE + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJMWjpsZWFybi5weSIsdHJ1ZV0= + + + UPDATE_NODE + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsid2lkdGgiOjEwOSwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJMWjpsZWFybjIucHkiLHRydWVd + + + + 1664223340814 + mark + + UPDATE_NODE + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLHsid2lkdGgiOjE2NiwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpjdnhweW1hdGNvcmUucHkiLHRydWVd + + + UPDATE_NODE + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLHsid2lkdGgiOjE2NiwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpjdnhweXNwLnB5Iix0cnVlXQ== + + + + \ No newline at end of file diff --git a/ratc/yuyu3learnsp.graphml b/ratc/yuyu3learnsp.graphml new file mode 100644 index 0000000..bfa2bd4 --- /dev/null +++ b/ratc/yuyu3learnsp.graphml @@ -0,0 +1,387 @@ + + + + + + + + + + + + CZ:cvxpysp.py + + + + + + + + + + + PZ:pmcvxpymatcore.py + + + + + + + + + + + LZ:learn3.py + + + + + + + + + + + OUT: + + + + + + + + + + VCY + + + + + + + + + + + + VPY + + + + + + + + + + + + VCY + + + + + + + + + + + + VPY + + + + + + + + + + + + HIST + + + + + + + + 1631987765505 + mark + + DEL_NODE + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiXQ== + + + ADD_NODE + WyJDWjpjdnhweW1hdGNvcmUucHkiLHsid2lkdGgiOjE2NiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjozNzcuODMwMjYwNTA1NjQ3NzQsInkiOjg3LjAzOTk4Nzg0ODEzMzA3fSx7fSwiMmEzZmY1MjItMWFmOS00MzhhLTgxMDctYWIwOTYyYTIzMzY2Il0= + + + + 1631987810303 + mark + + DEL_NODE + WyJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiXQ== + + + ADD_NODE + WyJQWjpwbWN2eHB5bWF0Y29yZS5weSIseyJ3aWR0aCI6MTg3LCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjM4MS4zNTAyNTQ0Mjk3MTQyNSwieSI6MjgwLjEwMDE1OTQ5MzI1Mzd9LHt9LCJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiXQ== + + + + 1631987820341 + mark + + SET_POS + WyJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MzgxLjM1MDI1NDQyOTcxNDI1LCJ5IjoyODAuMTAwMTU5NDkzMjUzN31d + + + SET_POS + WyJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLHsieCI6MzgxLjM1MDI1NDQyOTcxNDI1LCJ5IjoyODAuMTAwMTU5NDkzMjUzN30seyJ4IjoxMTAsInkiOjExMH1d + + + + 1631987826074 + mark + + SET_POS + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6Mzc3LjgzMDI2MDUwNTY0Nzc0LCJ5Ijo4Ny4wMzk5ODc4NDgxMzMwN31d + + + SET_POS + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLHsieCI6Mzc3LjgzMDI2MDUwNTY0Nzc0LCJ5Ijo4Ny4wMzk5ODc4NDgxMzMwN30seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1631987833719 + mark + + DEL_EDGE + WyI3ZDhlYmJiMS00MGQ2LTQyNDAtOWE1MC03YjZlYjU4YzU5YmIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLCJ0YXJnZXRJRCI6ImJkNmFhMjA2LTQxZGQtNDE1ZS05MzUzLTJlMmZhZmRlN2RjMiIsImxhYmVsIjoiVkNZIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjNjA3ZDhiIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjdkOGViYmIxLTQwZDYtNDI0MC05YTUwLTdiNmViNThjNTliYiJ9XQ== + + + + 1631987844901 + mark + + DEL_EDGE + WyI1MThlZWFjYy01YmNkLTRjZDMtODYxYy03MjljMDIxZGQ0OGIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLCJ0YXJnZXRJRCI6IjJhM2ZmNTIyLTFhZjktNDM4YS04MTA3LWFiMDk2MmEyMzM2NiIsImxhYmVsIjoiVlBZIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjOWMyN2IwIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjUxOGVlYWNjLTViY2QtNGNkMy04NjFjLTcyOWMwMjFkZDQ4YiJ9XQ== + + + + 1631988057648 + mark + + DEL_NODE + WyI1M2I3NjVmMi04YjU5LTQwMTgtOTAzOC0zNDAxY2M5ODNlNWMiXQ== + + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7fSwiNTNiNzY1ZjItOGI1OS00MDE4LTkwMzgtMzQwMWNjOTgzZTVjIl0= + + + + 1631988067297 + mark + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7ImlkIjoiNTNiNzY1ZjItOGI1OS00MDE4LTkwMzgtMzQwMWNjOTgzZTVjIiwibGFiZWwiOiJ5dXl1QyIsInR5cGUiOiJvcmRpbiIsInN0eWxlIjp7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfX0sIjUzYjc2NWYyLThiNTktNDAxOC05MDM4LTM0MDFjYzk4M2U1YyJd + + + DEL_NODE + WyI1M2I3NjVmMi04YjU5LTQwMTgtOTAzOC0zNDAxY2M5ODNlNWMiXQ== + + + + 1631988274563 + mark + + DEL_NODE + WyI2NzdjZTExZi1kNzZmLTQ2NDMtOWRkMS1jOGZhMjZiY2YyNzMiXQ== + + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7fSwiNjc3Y2UxMWYtZDc2Zi00NjQzLTlkZDEtYzhmYTI2YmNmMjczIl0= + + + + 1631988279632 + mark + + ADD_NODE + WyJ5dXl1QyIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7ImlkIjoiNjc3Y2UxMWYtZDc2Zi00NjQzLTlkZDEtYzhmYTI2YmNmMjczIiwibGFiZWwiOiJ5dXl1QyIsInR5cGUiOiJvcmRpbiIsInN0eWxlIjp7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfX0sIjY3N2NlMTFmLWQ3NmYtNDY0My05ZGQxLWM4ZmEyNmJjZjI3MyJd + + + DEL_NODE + WyI2NzdjZTExZi1kNzZmLTQ2NDMtOWRkMS1jOGZhMjZiY2YyNzMiXQ== + + + + 1660317542808 + mark + + DEL_NODE + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiXQ== + + + ADD_NODE + WyJMWjpsZWFybi5weSIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjE2MSwieSI6MTc0fSx7fSwiZmVhNzU5ZWQtZWFkNi00M2IxLWEzY2YtOTY5MDgxMmE2ZjA5Il0= + + + + 1660317548640 + mark + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTYxLCJ5IjoxNzR9XQ== + + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6MTYxLCJ5IjoxNzR9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1660317557559 + mark + + DEL_EDGE + WyI3MDFiMmUwZS0wNzQxLTQ5NTMtYTk3Yy1mZWY0YTI2YTQzYTQiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLCJ0YXJnZXRJRCI6ImZlYTc1OWVkLWVhZDYtNDNiMS1hM2NmLTk2OTA4MTJhNmYwOSIsImlkIjoiNzAxYjJlMGUtMDc0MS00OTUzLWE5N2MtZmVmNGEyNmE0M2E0In1d + + + + 1660317565265 + mark + + DEL_EDGE + WyI5NjQxNWIxYy0yOGY4LTQzNjktYjViMi00YzE0OTQ4OWRjOTAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDZhYTIwNi00MWRkLTQxNWUtOTM1My0yZTJmYWZkZTdkYzIiLCJ0YXJnZXRJRCI6ImZlYTc1OWVkLWVhZDYtNDNiMS1hM2NmLTk2OTA4MTJhNmYwOSIsImlkIjoiOTY0MTViMWMtMjhmOC00MzY5LWI1YjItNGMxNDk0ODlkYzkwIn1d + + + + 1663951088018 + mark + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6MTYxLCJ5IjoxNzR9LHsieCI6NjkyLCJ5IjoxNzh9XQ== + + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6NjkyLCJ5IjoxNzh9LHsieCI6MTYxLCJ5IjoxNzR9XQ== + + + + 1663951097443 + mark + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6NjkyLCJ5IjoxNzh9LHsieCI6NjA5LCJ5IjoxNzR9XQ== + + + SET_POS + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsieCI6NjA5LCJ5IjoxNzR9LHsieCI6NjkyLCJ5IjoxNzh9XQ== + + + + 1663951162441 + mark + + DEL_NODE + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiXQ== + + + ADD_NODE + WyJPVVQ6Iix7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6ODMxLCJ5IjoxNzN9LHt9LCIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiXQ== + + + + 1663951172201 + mark + + SET_POS + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6ODI5LCJ5IjoxNzV9XQ== + + + SET_POS + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiLHsieCI6ODI5LCJ5IjoxNzV9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1663951177586 + mark + + DEL_EDGE + WyIwN2VlMmM4NC00OGY2LTQzZGEtOThiMS05NjhlMjRjOWQ5MDEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLCJ0YXJnZXRJRCI6IjJmZWIwZGFkLWJiM2QtNDRmZC1iNjIwLTgwMzk4Njg0MTAwMiIsImxhYmVsIjoiSElTVCIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmNmQwMCIsInNoYXBlIjoic29saWQifSwiaWQiOiIwN2VlMmM4NC00OGY2LTQzZGEtOThiMS05NjhlMjRjOWQ5MDEifV0= + + + + 1663951200362 + mark + + SET_POS + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiLHsieCI6ODI5LCJ5IjoxNzV9LHsieCI6ODMxLCJ5IjoxNzN9XQ== + + + SET_POS + WyIyZmViMGRhZC1iYjNkLTQ0ZmQtYjYyMC04MDM5ODY4NDEwMDIiLHsieCI6ODMxLCJ5IjoxNzN9LHsieCI6ODI5LCJ5IjoxNzV9XQ== + + + + 1663951224767 + mark + + UPDATE_NODE + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJMWjpsZWFybi5weSIsdHJ1ZV0= + + + UPDATE_NODE + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsid2lkdGgiOjEwOSwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJMWjpsZWFybjIucHkiLHRydWVd + + + + 1663956664191 + mark + + UPDATE_NODE + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsid2lkdGgiOjEwOSwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJMWjpsZWFybjIucHkiLHRydWVd + + + UPDATE_NODE + WyJmZWE3NTllZC1lYWQ2LTQzYjEtYTNjZi05NjkwODEyYTZmMDkiLHsid2lkdGgiOjEwOSwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJMWjpsZWFybjMucHkiLHRydWVd + + + + 1664222927024 + mark + + UPDATE_NODE + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLHsid2lkdGgiOjE2NiwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpjdnhweW1hdGNvcmUucHkiLHRydWVd + + + UPDATE_NODE + WyIyYTNmZjUyMi0xYWY5LTQzOGEtODEwNy1hYjA5NjJhMjMzNjYiLHsid2lkdGgiOjE2NiwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpjdnhweXNwLnB5Iix0cnVlXQ== + + + + \ No newline at end of file From 122a37188b27aa94818d79d27b3741a169359369 Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Mon, 26 Sep 2022 17:17:24 -0400 Subject: [PATCH 095/113] learn3 historyfull --- ratc/learn3.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ratc/learn3.py b/ratc/learn3.py index 44710dd..f4d95f8 100644 --- a/ratc/learn3.py +++ b/ratc/learn3.py @@ -11,6 +11,7 @@ concore2.simtime = 0 fout=open(concore.outpath+'1/history.txt','w') +fout2=open('historyfull.txt','a+') concore.default_maxtime(150) init_simtime_u = "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]" init_simtime_ym = "[0.0, 0.0, 0.0]" @@ -26,6 +27,7 @@ ym = concore2.read(concore.iport["VPY"],"ym",init_simtime_ym) ymt[int(concore2.simtime)] = np.array(ym).T fout.write(str(u)+str(ym)+'\n') + fout2.write(str(u)+str(ym)+'\n') print("retry="+str(concore.retrycount)) fout.close() From f9336ac584ee1e6d0cdd35512d85055ed6d36182 Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Tue, 27 Sep 2022 01:19:25 -0400 Subject: [PATCH 096/113] learn3 terminates n-1 --- ratc/learn3.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ratc/learn3.py b/ratc/learn3.py index f4d95f8..e2bd395 100644 --- a/ratc/learn3.py +++ b/ratc/learn3.py @@ -3,7 +3,7 @@ import numpy as np import matplotlib.pyplot as plt import time -GENERATE_PLOT = 1 +GENERATE_PLOT = 0 concore.delay = 0.002 concore2.delay = 0.002 concore2.inpath = concore.inpath @@ -19,7 +19,7 @@ ym = concore.initval(init_simtime_ym) ut = (concore.maxtime+1)*[np.array(u).T] ymt = (concore.maxtime+1)*[np.array(ym).T] -while(concore.simtime Date: Tue, 27 Sep 2022 01:46:04 -0400 Subject: [PATCH 097/113] learn2 and learn3 show two prev HR,MAP states --- ratc/learn2.py | 9 +++++++-- ratc/learn3.py | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ratc/learn2.py b/ratc/learn2.py index f27084d..ae1b309 100644 --- a/ratc/learn2.py +++ b/ratc/learn2.py @@ -21,11 +21,16 @@ if concore.simtime > oldsimtime: ut[int(concore.simtime)] = np.array(u).T ymt[int(concore.simtime)] = np.array(ym).T - fout.write(str(u)+str(ym)+'\n') - fout2.write(str(u)+str(ym)+'\n') + #fout.write(str(u)+str(ym)+'\n') + #fout2.write(str(u)+str(ym)+'\n') oldsimtime = concore.simtime print("retry="+str(concore.retrycount)) + +for i in range(2,concore.maxtime): + fout.write(str(ymt[i-2])+str(ymt[i-1])+str(ut[i])+" "+str(ymt[i])+'\n') + fout2.write(str(ymt[i-2])+str(ymt[i-1])+str(ut[i])+" "+str(ymt[i])+'\n') fout.close() +fout2.close() ################# # plot inputs and outputs diff --git a/ratc/learn3.py b/ratc/learn3.py index e2bd395..496067a 100644 --- a/ratc/learn3.py +++ b/ratc/learn3.py @@ -26,10 +26,15 @@ while concore2.unchanged(): ym = concore2.read(concore.iport["VPY"],"ym",init_simtime_ym) ymt[int(concore2.simtime)] = np.array(ym).T - fout.write(str(u)+str(ym)+'\n') - fout2.write(str(u)+str(ym)+'\n') + #fout.write(str(u)+str(ym)+'\n') + #fout2.write(str(u)+str(ym)+'\n') print("retry="+str(concore.retrycount)) + +for i in range(2,concore.maxtime): + fout.write(str(ymt[i-2])+str(ymt[i-1])+str(ut[i])+" "+str(ymt[i])+'\n') + fout2.write(str(ymt[i-2])+str(ymt[i-1])+str(ut[i])+" "+str(ymt[i])+'\n') fout.close() +fout2.close() ################# # plot inputs and outputs From 200ca39dd395e6a337dfe8c4328713c84ad8b098 Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Fri, 30 Sep 2022 14:01:12 -0400 Subject: [PATCH 098/113] pretty examples --- testsou/blah-DHGWorkflow.graphml | 209 +++++++ testsou/blah2-DHGWorkflow.graphml | 888 +++++++++++++++++++++++++++ testsou/blah3-DHGWorkflow.graphml | 973 ++++++++++++++++++++++++++++++ testsou/pretty.graphml | 70 +++ 4 files changed, 2140 insertions(+) create mode 100644 testsou/blah-DHGWorkflow.graphml create mode 100644 testsou/blah2-DHGWorkflow.graphml create mode 100644 testsou/blah3-DHGWorkflow.graphml create mode 100644 testsou/pretty.graphml diff --git a/testsou/blah-DHGWorkflow.graphml b/testsou/blah-DHGWorkflow.graphml new file mode 100644 index 0000000..851cf42 --- /dev/null +++ b/testsou/blah-DHGWorkflow.graphml @@ -0,0 +1,209 @@ + + + + + + + + + + + + CZ:control.py + + + + + + + + + + + PZ:pm.py + + + + + + + + + + move + + + + + + + + + + + + feedback + + + + + + + + 1664385632880 + mark + + DEL_NODE + WyI4MWYyMTk2NC1kYzUyLTQzYWYtYTRmNS0xNWQ0MjQ1ODA0MDIiXQ== + + + ADD_NODE + WyJBOmEucHkiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjozMy4yOTU2MzE2OTA0NjkwNCwieSI6MTQ5LjIxMjgyNTQyNjA2ODkyfSx7fSwiODFmMjE5NjQtZGM1Mi00M2FmLWE0ZjUtMTVkNDI0NTgwNDAyIl0= + + + + 1664385681024 + mark + + DEL_NODE + WyI5YzAxNmZhZC01Mjg2LTRhYTEtYWU1NS1lMDI4ODM4NzQ4MzciXQ== + + + ADD_NODE + WyJQWjpwbS5weSIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjQyMC4xNjM4NDc2Mjc4MjA3LCJ5IjoxNTcuMDE2MDMxNzgyNTg2NH0se30sIjljMDE2ZmFkLTUyODYtNGFhMS1hZTU1LWUwMjg4Mzg3NDgzNyJd + + + + 1664385685894 + mark + + SET_POS + WyI5YzAxNmZhZC01Mjg2LTRhYTEtYWU1NS1lMDI4ODM4NzQ4MzciLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6NDA2LCJ5Ijo5OH1d + + + SET_POS + WyI5YzAxNmZhZC01Mjg2LTRhYTEtYWU1NS1lMDI4ODM4NzQ4MzciLHsieCI6NDA2LCJ5Ijo5OH0seyJ4IjoxMTAsInkiOjExMH1d + + + + 1664385693309 + mark + + SET_POS + WyI4MWYyMTk2NC1kYzUyLTQzYWYtYTRmNS0xNWQ0MjQ1ODA0MDIiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTIzLCJ5IjoxMDJ9XQ== + + + SET_POS + WyI4MWYyMTk2NC1kYzUyLTQzYWYtYTRmNS0xNWQ0MjQ1ODA0MDIiLHsieCI6MTIzLCJ5IjoxMDJ9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1664385697840 + mark + + DEL_EDGE + WyIwOGNiMmUyNC02MTMyLTQxZmItYWQwMi00MWQ3Y2M4NzEzMGQiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI4MWYyMTk2NC1kYzUyLTQzYWYtYTRmNS0xNWQ0MjQ1ODA0MDIiLCJ0YXJnZXRJRCI6IjljMDE2ZmFkLTUyODYtNGFhMS1hZTU1LWUwMjg4Mzg3NDgzNyIsImxhYmVsIjoibW92ZSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2Y0NDMzNiIsInNoYXBlIjoic29saWQifSwiaWQiOiIwOGNiMmUyNC02MTMyLTQxZmItYWQwMi00MWQ3Y2M4NzEzMGQifV0= + + + + 1664385717877 + mark + + DEL_EDGE + WyI1ODg0NmYzYS1jMTg4LTRhZjYtODUyMi1kNjVkM2EzNDRjZGMiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI5YzAxNmZhZC01Mjg2LTRhYTEtYWU1NS1lMDI4ODM4NzQ4MzciLCJ0YXJnZXRJRCI6IjgxZjIxOTY0LWRjNTItNDNhZi1hNGY1LTE1ZDQyNDU4MDQwMiIsImxhYmVsIjoiZmVlZGJhY2siLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM5YzI3YjAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNTg4NDZmM2EtYzE4OC00YWY2LTg1MjItZDY1ZDNhMzQ0Y2RjIn1d + + + + 1664385757570 + mark + + SET_POS + WyI5YzAxNmZhZC01Mjg2LTRhYTEtYWU1NS1lMDI4ODM4NzQ4MzciLHsieCI6NDA2LCJ5Ijo5OH0seyJ4Ijo0NjIuNjU1MzkwNTExMjgyODYsInkiOjE0OS45MzQxMDc5Njg2NzZ9XQ== + + + SET_POS + WyI5YzAxNmZhZC01Mjg2LTRhYTEtYWU1NS1lMDI4ODM4NzQ4MzciLHsieCI6NDYyLjY1NTM5MDUxMTI4Mjg2LCJ5IjoxNDkuOTM0MTA3OTY4Njc2fSx7IngiOjQwNiwieSI6OTh9XQ== + + + + 1664385762019 + mark + + SET_POS + WyI4MWYyMTk2NC1kYzUyLTQzYWYtYTRmNS0xNWQ0MjQ1ODA0MDIiLHsieCI6MTIzLCJ5IjoxMDJ9LHsieCI6MTI2LjU0MDk2MTkwNjk1NTE4LCJ5IjoxNTAuMzkzMTQ2MDYxNzIwNzh9XQ== + + + SET_POS + WyI4MWYyMTk2NC1kYzUyLTQzYWYtYTRmNS0xNWQ0MjQ1ODA0MDIiLHsieCI6MTI2LjU0MDk2MTkwNjk1NTE4LCJ5IjoxNTAuMzkzMTQ2MDYxNzIwNzh9LHsieCI6MTIzLCJ5IjoxMDJ9XQ== + + + + 1664385789948 + mark + + SET_POS + WyI5YzAxNmZhZC01Mjg2LTRhYTEtYWU1NS1lMDI4ODM4NzQ4MzciLHsieCI6NDYyLjY1NTM5MDUxMTI4Mjg2LCJ5IjoxNDkuOTM0MTA3OTY4Njc2fSx7IngiOjQyMC4xNjM4NDc2Mjc4MjA3LCJ5IjoxNTcuMDE2MDMxNzgyNTg2NH1d + + + SET_POS + WyI5YzAxNmZhZC01Mjg2LTRhYTEtYWU1NS1lMDI4ODM4NzQ4MzciLHsieCI6NDIwLjE2Mzg0NzYyNzgyMDcsInkiOjE1Ny4wMTYwMzE3ODI1ODY0fSx7IngiOjQ2Mi42NTUzOTA1MTEyODI4NiwieSI6MTQ5LjkzNDEwNzk2ODY3Nn1d + + + + 1664385834310 + mark + + UPDATE_NODE + WyI4MWYyMTk2NC1kYzUyLTQzYWYtYTRmNS0xNWQ0MjQ1ODA0MDIiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBOmEucHkiLHRydWVd + + + UPDATE_NODE + WyI4MWYyMTk2NC1kYzUyLTQzYWYtYTRmNS0xNWQ0MjQ1ODA0MDIiLHsid2lkdGgiOjExNSwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpjb250cm9sLnB5Iix0cnVlXQ== + + + + 1664385860653 + mark + + SET_POS + WyI4MWYyMTk2NC1kYzUyLTQzYWYtYTRmNS0xNWQ0MjQ1ODA0MDIiLHsieCI6MTI2LjU0MDk2MTkwNjk1NTE4LCJ5IjoxNTAuMzkzMTQ2MDYxNzIwNzh9LHsieCI6LTIuMTEzOTg3Mzc5MDgyODExLCJ5IjoxNTEuNTczNDY2Njk3MzcyNH1d + + + SET_POS + WyI4MWYyMTk2NC1kYzUyLTQzYWYtYTRmNS0xNWQ0MjQ1ODA0MDIiLHsieCI6LTIuMTEzOTg3Mzc5MDgyODExLCJ5IjoxNTEuNTczNDY2Njk3MzcyNH0seyJ4IjoxMjYuNTQwOTYxOTA2OTU1MTgsInkiOjE1MC4zOTMxNDYwNjE3MjA3OH1d + + + + 1664385899185 + mark + + SET_POS + WyI4MWYyMTk2NC1kYzUyLTQzYWYtYTRmNS0xNWQ0MjQ1ODA0MDIiLHsieCI6LTIuMTEzOTg3Mzc5MDgyODExLCJ5IjoxNTEuNTczNDY2Njk3MzcyNH0seyJ4IjozMy4yOTU2MzE2OTA0NjkwNCwieSI6MTQ5LjIxMjgyNTQyNjA2ODkyfV0= + + + SET_POS + WyI4MWYyMTk2NC1kYzUyLTQzYWYtYTRmNS0xNWQ0MjQ1ODA0MDIiLHsieCI6MzMuMjk1NjMxNjkwNDY5MDQsInkiOjE0OS4yMTI4MjU0MjYwNjg5Mn0seyJ4IjotMi4xMTM5ODczNzkwODI4MTEsInkiOjE1MS41NzM0NjY2OTczNzI0fV0= + + + + 1664386705118 + mark + + SET_POS + WyI4MWYyMTk2NC1kYzUyLTQzYWYtYTRmNS0xNWQ0MjQ1ODA0MDIiLHsieCI6MzMuMjk1NjMxNjkwNDY5MDQsInkiOjE0OS4yMTI4MjU0MjYwNjg5Mn0seyJ4Ijo3Ny4wOTUwNjEzNzY3OTYsInkiOjE1NS4zMjQzNzM3NTQzOTM2M31d + + + SET_POS + WyI4MWYyMTk2NC1kYzUyLTQzYWYtYTRmNS0xNWQ0MjQ1ODA0MDIiLHsieCI6NzcuMDk1MDYxMzc2Nzk2LCJ5IjoxNTUuMzI0MzczNzU0MzkzNjN9LHsieCI6MzMuMjk1NjMxNjkwNDY5MDQsInkiOjE0OS4yMTI4MjU0MjYwNjg5Mn1d + + + + \ No newline at end of file diff --git a/testsou/blah2-DHGWorkflow.graphml b/testsou/blah2-DHGWorkflow.graphml new file mode 100644 index 0000000..b59669c --- /dev/null +++ b/testsou/blah2-DHGWorkflow.graphml @@ -0,0 +1,888 @@ + + + + + + + + + + + + CZ:control.py + + + + + + + + + + + PZ:pm.py + + + + + + + + + + + SETPOINT: + + + + + + + + + + + DZ:diff.py + + + + + + + + + + + BZ:biomarkfeedback.py + + + + + + + + + + + LZ:learn.py + + + + + + + + + + + HIST: + + + + + + + + + + ym + + + + + + + + + + + + sp + + + + + + + + + + + + y + + + + + + + + + + + + u + + + + + + + + + + + + error + + + + + + + + + + + + u + + + + + + + + + + + + ym + + + + + + + + + + + + history + + + + + + + + 1664385922495 + mark + + DEL_NODE + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiXQ== + + + ADD_NODE + WyJDWjpjb250cm9sLnB5Iix7IndpZHRoIjoxMTUsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6NjU4LCJ5IjoxMTJ9LHt9LCIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiXQ== + + + + 1664385932899 + mark + + DEL_NODE + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciXQ== + + + ADD_NODE + WyJQWjpwbS5weSIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjkzOCwieSI6MTEwfSx7fSwiMTdkOTE2NzAtMjMyZS00YzM5LTkwZGMtNTNlOTZkYzI1YzA3Il0= + + + + 1664385949371 + mark + + DEL_NODE + WyI1NDE1ZTkyMi00ZTY3LTRiZTAtOTRhOS0wOTJlMTdlMDk2ZjMiXQ== + + + ADD_NODE + WyJTRVRQT0lOVDoiLHsid2lkdGgiOjEwMywiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjoxMjAsInkiOjEyMH0se30sIjU0MTVlOTIyLTRlNjctNGJlMC05NGE5LTA5MmUxN2UwOTZmMyJd + + + + 1664385962803 + mark + + DEL_NODE + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiXQ== + + + ADD_NODE + WyJEWjpkaWZmLnB5Iix7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzQ4LCJ5IjoxMjF9LHt9LCJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiXQ== + + + + 1664385985713 + mark + + DEL_NODE + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiXQ== + + + ADD_NODE + WyJCWjpiaW9tYXJrZmVlZGJhY2sucHkiLHsid2lkdGgiOjE4OCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4Ijo2OTMsInkiOjI2Nn0se30sIjQwNzM2NjhhLWYyNmUtNDc2YS1hOGYyLTgxNDRhYzMzM2Q5OCJd + + + + 1664385992411 + mark + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6MTQwLCJ5IjoxNDB9LHsieCI6NDA5LCJ5IjoyNTh9XQ== + + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6NDA5LCJ5IjoyNTh9LHsieCI6MTQwLCJ5IjoxNDB9XQ== + + + + 1664385995654 + mark + + SET_POS + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLHsieCI6MTMwLCJ5IjoxMzB9LHsieCI6MjQ5LCJ5IjoxMTh9XQ== + + + SET_POS + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLHsieCI6MjQ5LCJ5IjoxMTh9LHsieCI6MTMwLCJ5IjoxMzB9XQ== + + + + 1664385997633 + mark + + SET_POS + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLHsieCI6MjQ5LCJ5IjoxMTh9LHsieCI6MjczLCJ5IjoxMTh9XQ== + + + SET_POS + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLHsieCI6MjczLCJ5IjoxMTh9LHsieCI6MjQ5LCJ5IjoxMTh9XQ== + + + + 1664386003793 + mark + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NDgwLCJ5IjoxMTh9XQ== + + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6NDgwLCJ5IjoxMTh9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1664386007131 + mark + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6NDA5LCJ5IjoyNTh9LHsieCI6NjkzLCJ5IjoyNjZ9XQ== + + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6NjkzLCJ5IjoyNjZ9LHsieCI6NDA5LCJ5IjoyNTh9XQ== + + + + 1664386013217 + mark + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6Nzc3LCJ5IjoxMDl9XQ== + + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6Nzc3LCJ5IjoxMDl9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1664386017569 + mark + + SET_POS + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLHsieCI6MjczLCJ5IjoxMTh9LHsieCI6MjkwLCJ5IjoxMTh9XQ== + + + SET_POS + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLHsieCI6MjkwLCJ5IjoxMTh9LHsieCI6MjczLCJ5IjoxMTh9XQ== + + + + 1664386024151 + mark + + DEL_EDGE + WyI1YjNkZTE5ZC1lNWExLTQ2NDAtYWUzYi1lNWM1MWExMWM2MWYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLCJ0YXJnZXRJRCI6ImU4NjIyYmVlLTMxYjQtNGFiNy1iMWQ4LTBkZWVmZmU3ZTkwYiIsImxhYmVsIjoieCIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzljMjdiMCIsInNoYXBlIjoic29saWQifSwiaWQiOiI1YjNkZTE5ZC1lNWExLTQ2NDAtYWUzYi1lNWM1MWExMWM2MWYifV0= + + + + 1664386031949 + mark + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6NDgwLCJ5IjoxMTh9LHsieCI6NTY5LCJ5IjoxMTN9XQ== + + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6NTY5LCJ5IjoxMTN9LHsieCI6NDgwLCJ5IjoxMTh9XQ== + + + + 1664386039478 + mark + + DEL_EDGE + WyJhNzViZmJiMS1hN2YxLTQwODUtODA4ZC00MDEzYzY4ZGQxNDEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI1NDE1ZTkyMi00ZTY3LTRiZTAtOTRhOS0wOTJlMTdlMDk2ZjMiLCJ0YXJnZXRJRCI6ImU4NjIyYmVlLTMxYjQtNGFiNy1iMWQ4LTBkZWVmZmU3ZTkwYiIsImxhYmVsIjoic3AiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM5YzI3YjAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiYTc1YmZiYjEtYTdmMS00MDg1LTgwOGQtNDAxM2M2OGRkMTQxIn1d + + + + 1664386046397 + mark + + SET_POS + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLHsieCI6MjkwLCJ5IjoxMTh9LHsieCI6MzQ4LCJ5IjoxMjF9XQ== + + + SET_POS + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLHsieCI6MzQ4LCJ5IjoxMjF9LHsieCI6MjkwLCJ5IjoxMTh9XQ== + + + + 1664386049665 + mark + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6NTY5LCJ5IjoxMTN9LHsieCI6NjU4LCJ5IjoxMTJ9XQ== + + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6NjU4LCJ5IjoxMTJ9LHsieCI6NTY5LCJ5IjoxMTN9XQ== + + + + 1664386055201 + mark + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6Nzc3LCJ5IjoxMDl9LHsieCI6OTM4LCJ5IjoxMTB9XQ== + + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6OTM4LCJ5IjoxMTB9LHsieCI6Nzc3LCJ5IjoxMDl9XQ== + + + + 1664386061927 + mark + + DEL_EDGE + WyJlZTY4NjY1NS04MzA2LTQwNWUtYjY4Yi1lOGUxN2JmODdjMDkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLCJ0YXJnZXRJRCI6IjQwNzM2NjhhLWYyNmUtNDc2YS1hOGYyLTgxNDRhYzMzM2Q5OCIsImxhYmVsIjoieSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzljMjdiMCIsInNoYXBlIjoic29saWQifSwiaWQiOiJlZTY4NjY1NS04MzA2LTQwNWUtYjY4Yi1lOGUxN2JmODdjMDkifV0= + + + + 1664386097531 + mark + + UPDATE_EDGE + WyI1YjNkZTE5ZC1lNWExLTQ2NDAtYWUzYi1lNWM1MWExMWM2MWYiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjOWMyN2IwIiwic2hhcGUiOiJzb2xpZCJ9LCJ4Iix0cnVlXQ== + + + UPDATE_EDGE + WyI1YjNkZTE5ZC1lNWExLTQ2NDAtYWUzYi1lNWM1MWExMWM2MWYiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjOWMyN2IwIiwic2hhcGUiOiJzb2xpZCJ9LCJ5bSIsdHJ1ZV0= + + + + 1664386115858 + mark + + DEL_EDGE + WyI2OTQ4YjU2OS0wMzliLTQ0NzMtODkzZi0yOGUxMmQ1MThjMjAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLCJ0YXJnZXRJRCI6IjE3ZDkxNjcwLTIzMmUtNGMzOS05MGRjLTUzZTk2ZGMyNWMwNyIsImxhYmVsIjoidSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzE1NjVjMCIsInNoYXBlIjoic29saWQifSwiaWQiOiI2OTQ4YjU2OS0wMzliLTQ0NzMtODkzZi0yOGUxMmQ1MThjMjAifV0= + + + + 1664386147882 + mark + + DEL_EDGE + WyJjODUwNDBjNi05ZWIzLTQ3YmEtYjBjNi0yYzQwNjEyNmFlNmEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLCJ0YXJnZXRJRCI6IjBhYTAzMDdmLWIwOTYtNDZmMC05MWVmLTcyYThmYWY5OTAxMyIsImxhYmVsIjoiZXJyb3IiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM2MDdkOGIiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiYzg1MDQwYzYtOWViMy00N2JhLWIwYzYtMmM0MDYxMjZhZTZhIn1d + + + + 1664386240593 + mark + + DEL_NODE + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiXQ== + + + ADD_NODE + WyJMWjpsZWFybi5weSIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjc1MSwieSI6MjQ2fSx7fSwiYjQ2YWFlODEtZTYxMS00MzRjLThjZjYtZGJiYjA5YjA1OWQ1Il0= + + + + 1664386250579 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6Njc4LCJ5IjoxODJ9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6Njc4LCJ5IjoxODJ9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1664386258258 + mark + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6NjkzLCJ5IjoyNjZ9LHsieCI6Njk4LCJ5IjozODB9XQ== + + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6Njk4LCJ5IjozODB9LHsieCI6NjkzLCJ5IjoyNjZ9XQ== + + + + 1664386258959 + mark + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6Njk4LCJ5IjozODB9LHsieCI6Njk4LCJ5IjozODZ9XQ== + + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6Njk4LCJ5IjozODZ9LHsieCI6Njk4LCJ5IjozODB9XQ== + + + + 1664386262279 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6Njc4LCJ5IjoxODJ9LHsieCI6Njc0LCJ5IjoyMDJ9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6Njc0LCJ5IjoyMDJ9LHsieCI6Njc4LCJ5IjoxODJ9XQ== + + + + 1664386272925 + mark + + DEL_EDGE + WyJlNGYwNzI4ZS04ZWI4LTQ3OWQtOWNhMC0yMmQ4NTJmYjc3YjIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLCJ0YXJnZXRJRCI6ImI0NmFhZTgxLWU2MTEtNDM0Yy04Y2Y2LWRiYmIwOWIwNTlkNSIsImlkIjoiZTRmMDcyOGUtOGViOC00NzlkLTljYTAtMjJkODUyZmI3N2IyIn1d + + + + 1664386279025 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6Njc0LCJ5IjoyMDJ9LHsieCI6NzM5LCJ5IjoxOTd9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6NzM5LCJ5IjoxOTd9LHsieCI6Njc0LCJ5IjoyMDJ9XQ== + + + + 1664386288881 + mark + + DEL_EDGE + WyI5M2NmY2NkZS05NDk0LTRiODItOTViZi01ZTM2Y2ZhZDIwNDkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLCJ0YXJnZXRJRCI6ImI0NmFhZTgxLWU2MTEtNDM0Yy04Y2Y2LWRiYmIwOWIwNTlkNSIsImlkIjoiOTNjZmNjZGUtOTQ5NC00YjgyLTk1YmYtNWUzNmNmYWQyMDQ5In1d + + + + 1664386297117 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6NzM5LCJ5IjoxOTd9LHsieCI6NjQ1LCJ5IjoyMzF9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6NjQ1LCJ5IjoyMzF9LHsieCI6NzM5LCJ5IjoxOTd9XQ== + + + + 1664386311827 + mark + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6OTM4LCJ5IjoxMTB9LHsieCI6MTE3NiwieSI6NDF9XQ== + + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTE3NiwieSI6NDF9LHsieCI6OTM4LCJ5IjoxMTB9XQ== + + + + 1664386317943 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6NjQ1LCJ5IjoyMzF9LHsieCI6OTIwLCJ5IjoxMzB9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6OTIwLCJ5IjoxMzB9LHsieCI6NjQ1LCJ5IjoyMzF9XQ== + + + + 1664386327275 + mark + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTE3NiwieSI6NDF9LHsieCI6MTE5MSwieSI6MTEzfV0= + + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTE5MSwieSI6MTEzfSx7IngiOjExNzYsInkiOjQxfV0= + + + + 1664386334396 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6OTIwLCJ5IjoxMzB9LHsieCI6OTE3LCJ5IjoxNzZ9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6OTE3LCJ5IjoxNzZ9LHsieCI6OTIwLCJ5IjoxMzB9XQ== + + + + 1664386345723 + mark + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6Njk4LCJ5IjozODZ9LHsieCI6OTM4LCJ5IjozOTl9XQ== + + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6OTM4LCJ5IjozOTl9LHsieCI6Njk4LCJ5IjozODZ9XQ== + + + + 1664386361445 + mark + + DEL_NODE + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiXQ== + + + ADD_NODE + WyJISVNUOiIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjk4OCwieSI6MjQxfSx7fSwiNzgzYzI1MjMtNDVkNS00ZWNkLTg0NGItMmNjNzAwZWM0MWE2Il0= + + + + 1664386367904 + mark + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6OTIwLCJ5IjoyOTd9XQ== + + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6OTIwLCJ5IjoyOTd9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1664386373398 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6OTE3LCJ5IjoxNzZ9LHsieCI6OTE3LCJ5IjoxNzl9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6OTE3LCJ5IjoxNzl9LHsieCI6OTE3LCJ5IjoxNzZ9XQ== + + + + 1664386378205 + mark + + DEL_EDGE + WyI0YjI2MmY0Zi0yMmY0LTQwZjItYWUzYy0xMTNjZGIxOTE2MjEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLCJ0YXJnZXRJRCI6Ijc4M2MyNTIzLTQ1ZDUtNGVjZC04NDRiLTJjYzcwMGVjNDFhNiIsImxhYmVsIjoiaGlzdG9yeSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzAwMDAwMCIsInNoYXBlIjoic29saWQifSwiaWQiOiI0YjI2MmY0Zi0yMmY0LTQwZjItYWUzYy0xMTNjZGIxOTE2MjEifV0= + + + + 1664386388129 + mark + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6OTIwLCJ5IjoyOTd9LHsieCI6OTIwLCJ5IjozMjF9XQ== + + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6OTIwLCJ5IjozMjF9LHsieCI6OTIwLCJ5IjoyOTd9XQ== + + + + 1664386391908 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6OTE3LCJ5IjoxNzl9LHsieCI6OTE2LCJ5IjoxNTh9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6OTE2LCJ5IjoxNTh9LHsieCI6OTE3LCJ5IjoxNzl9XQ== + + + + 1664386397290 + mark + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6OTM4LCJ5IjozOTl9LHsieCI6OTU2LCJ5Ijo0MTN9XQ== + + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6OTU2LCJ5Ijo0MTN9LHsieCI6OTM4LCJ5IjozOTl9XQ== + + + + 1664386450910 + mark + + DEL_EDGE + WyJjOTRlYmQyNi1kNzRlLTQ1ZTItYjA0NS01NjI4NTFhMzExOGUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLCJ0YXJnZXRJRCI6ImI0NmFhZTgxLWU2MTEtNDM0Yy04Y2Y2LWRiYmIwOWIwNTlkNSIsImlkIjoiYzk0ZWJkMjYtZDc0ZS00NWUyLWIwNDUtNTYyODUxYTMxMThlIn1d + + + + 1664386455711 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6OTE2LCJ5IjoxNTh9LHsieCI6MTAxOCwieSI6MTYyfV0= + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6MTAxOCwieSI6MTYyfSx7IngiOjkxNiwieSI6MTU4fV0= + + + + 1664386462206 + mark + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6OTIwLCJ5IjozMjF9LHsieCI6MTA5MiwieSI6Mjg2fV0= + + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6MTA5MiwieSI6Mjg2fSx7IngiOjkyMCwieSI6MzIxfV0= + + + + 1664386466736 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6MTAxOCwieSI6MTYyfSx7IngiOjg2MywieSI6MTgxfV0= + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6ODYzLCJ5IjoxODF9LHsieCI6MTAxOCwieSI6MTYyfV0= + + + + 1664386476083 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLCJ0YXJnZXRJRCI6ImI0NmFhZTgxLWU2MTEtNDM0Yy04Y2Y2LWRiYmIwOWIwNTlkNSIsImxhYmVsIjoieSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzljMjdiMCIsInNoYXBlIjoic29saWQifSwidHlwZSI6Im9yZGluIiwic291cmNlIjoiZmU5NGMzYmItZWUxNS00ODZjLWFkZjgtYzA3ZDk4NDQ2OTQyIiwidGFyZ2V0IjoiYjQ2YWFlODEtZTYxMS00MzRjLThjZjYtZGJiYjA5YjA1OWQ1IiwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjowLCJiZW5kV2VpZ2h0IjowLjUsImJlbmRQb2ludCI6eyJ4IjoxMDA3Ljg3MTYwNzEyNTU3MzYsInkiOjE1OS41fX0sImlkIjoiOTNjZmNjZGUtOTQ5NC00YjgyLTk1YmYtNWUzNmNmYWQyMDQ5In1d + + + DEL_EDGE + WyI5M2NmY2NkZS05NDk0LTRiODItOTViZi01ZTM2Y2ZhZDIwNDkiXQ== + + + + 1664386481266 + mark + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6MTA5MiwieSI6Mjg2fSx7IngiOjExMTQsInkiOjE4M31d + + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6MTExNCwieSI6MTgzfSx7IngiOjEwOTIsInkiOjI4Nn1d + + + + 1664386487691 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6ODYzLCJ5IjoxODF9LHsieCI6NzgxLCJ5IjoyMTJ9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6NzgxLCJ5IjoyMTJ9LHsieCI6ODYzLCJ5IjoxODF9XQ== + + + + 1664386491705 + mark + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6MTExNCwieSI6MTgzfSx7IngiOjEwMTcsInkiOjIxMH1d + + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6MTAxNywieSI6MjEwfSx7IngiOjExMTQsInkiOjE4M31d + + + + 1664386498080 + mark + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTE5MSwieSI6MTEzfSx7IngiOjEyNzAsInkiOjEyNX1d + + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTI3MCwieSI6MTI1fSx7IngiOjExOTEsInkiOjExM31d + + + + 1664386500941 + mark + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTI3MCwieSI6MTI1fSx7IngiOjEyNzEsInkiOjExNH1d + + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTI3MSwieSI6MTE0fSx7IngiOjEyNzAsInkiOjEyNX1d + + + + 1664386504631 + mark + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6NjU4LCJ5IjoxMTJ9LHsieCI6NjU4LCJ5IjoxMTZ9XQ== + + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6NjU4LCJ5IjoxMTZ9LHsieCI6NjU4LCJ5IjoxMTJ9XQ== + + + + 1664386520655 + mark + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6OTU2LCJ5Ijo0MTN9LHsieCI6Nzk1LCJ5Ijo0Mjd9XQ== + + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6Nzk1LCJ5Ijo0Mjd9LHsieCI6OTU2LCJ5Ijo0MTN9XQ== + + + + 1664386529922 + mark + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6NjU4LCJ5IjoxMTZ9LHsieCI6Njg1LCJ5IjoxMTh9XQ== + + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6Njg1LCJ5IjoxMTh9LHsieCI6NjU4LCJ5IjoxMTZ9XQ== + + + + 1664386534291 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6NzgxLCJ5IjoyMTJ9LHsieCI6NzUxLCJ5IjoyNDZ9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6NzUxLCJ5IjoyNDZ9LHsieCI6NzgxLCJ5IjoyMTJ9XQ== + + + + 1664386538945 + mark + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6MTAxNywieSI6MjEwfSx7IngiOjk4OCwieSI6MjQxfV0= + + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6OTg4LCJ5IjoyNDF9LHsieCI6MTAxNywieSI6MjEwfV0= + + + + 1664386542631 + mark + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTI3MSwieSI6MTE0fSx7IngiOjEyOTIsInkiOjEyOX1d + + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTI5MiwieSI6MTI5fSx7IngiOjEyNzEsInkiOjExNH1d + + + + \ No newline at end of file diff --git a/testsou/blah3-DHGWorkflow.graphml b/testsou/blah3-DHGWorkflow.graphml new file mode 100644 index 0000000..53ab613 --- /dev/null +++ b/testsou/blah3-DHGWorkflow.graphml @@ -0,0 +1,973 @@ + + + + + + + + + + + + CZ:control.py + + + + + + + + + + + PZ:pm.py + + + + + + + + + + + INPUT: + + + + + + + + + + + DZ:diff.py + + + + + + + + + + + BZ:biomarkfeedback.py + + + + + + + + + + + OUTPUT: + + + + + + + + + + ym + + + + + + + + + + + + sp + + + + + + + + + + + + y + + + + + + + + + + + + u + + + + + + + + + + + + error + + + + + + + + + + + + y + + + + + + + + 1664385922495 + mark + + DEL_NODE + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiXQ== + + + ADD_NODE + WyJDWjpjb250cm9sLnB5Iix7IndpZHRoIjoxMTUsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6NjU4LCJ5IjoxMTJ9LHt9LCIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiXQ== + + + + 1664385932899 + mark + + DEL_NODE + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciXQ== + + + ADD_NODE + WyJQWjpwbS5weSIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjkzOCwieSI6MTEwfSx7fSwiMTdkOTE2NzAtMjMyZS00YzM5LTkwZGMtNTNlOTZkYzI1YzA3Il0= + + + + 1664385949371 + mark + + DEL_NODE + WyI1NDE1ZTkyMi00ZTY3LTRiZTAtOTRhOS0wOTJlMTdlMDk2ZjMiXQ== + + + ADD_NODE + WyJTRVRQT0lOVDoiLHsid2lkdGgiOjEwMywiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjoxMjAsInkiOjEyMH0se30sIjU0MTVlOTIyLTRlNjctNGJlMC05NGE5LTA5MmUxN2UwOTZmMyJd + + + + 1664385962803 + mark + + DEL_NODE + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiXQ== + + + ADD_NODE + WyJEWjpkaWZmLnB5Iix7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzQ4LCJ5IjoxMjF9LHt9LCJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiXQ== + + + + 1664385985713 + mark + + DEL_NODE + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiXQ== + + + ADD_NODE + WyJCWjpiaW9tYXJrZmVlZGJhY2sucHkiLHsid2lkdGgiOjE4OCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4Ijo2OTMsInkiOjI2Nn0se30sIjQwNzM2NjhhLWYyNmUtNDc2YS1hOGYyLTgxNDRhYzMzM2Q5OCJd + + + + 1664385992411 + mark + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6MTQwLCJ5IjoxNDB9LHsieCI6NDA5LCJ5IjoyNTh9XQ== + + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6NDA5LCJ5IjoyNTh9LHsieCI6MTQwLCJ5IjoxNDB9XQ== + + + + 1664385995654 + mark + + SET_POS + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLHsieCI6MTMwLCJ5IjoxMzB9LHsieCI6MjQ5LCJ5IjoxMTh9XQ== + + + SET_POS + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLHsieCI6MjQ5LCJ5IjoxMTh9LHsieCI6MTMwLCJ5IjoxMzB9XQ== + + + + 1664385997633 + mark + + SET_POS + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLHsieCI6MjQ5LCJ5IjoxMTh9LHsieCI6MjczLCJ5IjoxMTh9XQ== + + + SET_POS + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLHsieCI6MjczLCJ5IjoxMTh9LHsieCI6MjQ5LCJ5IjoxMTh9XQ== + + + + 1664386003793 + mark + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NDgwLCJ5IjoxMTh9XQ== + + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6NDgwLCJ5IjoxMTh9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1664386007131 + mark + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6NDA5LCJ5IjoyNTh9LHsieCI6NjkzLCJ5IjoyNjZ9XQ== + + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6NjkzLCJ5IjoyNjZ9LHsieCI6NDA5LCJ5IjoyNTh9XQ== + + + + 1664386013217 + mark + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6Nzc3LCJ5IjoxMDl9XQ== + + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6Nzc3LCJ5IjoxMDl9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1664386017569 + mark + + SET_POS + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLHsieCI6MjczLCJ5IjoxMTh9LHsieCI6MjkwLCJ5IjoxMTh9XQ== + + + SET_POS + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLHsieCI6MjkwLCJ5IjoxMTh9LHsieCI6MjczLCJ5IjoxMTh9XQ== + + + + 1664386024151 + mark + + DEL_EDGE + WyI1YjNkZTE5ZC1lNWExLTQ2NDAtYWUzYi1lNWM1MWExMWM2MWYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLCJ0YXJnZXRJRCI6ImU4NjIyYmVlLTMxYjQtNGFiNy1iMWQ4LTBkZWVmZmU3ZTkwYiIsImxhYmVsIjoieCIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzljMjdiMCIsInNoYXBlIjoic29saWQifSwiaWQiOiI1YjNkZTE5ZC1lNWExLTQ2NDAtYWUzYi1lNWM1MWExMWM2MWYifV0= + + + + 1664386031949 + mark + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6NDgwLCJ5IjoxMTh9LHsieCI6NTY5LCJ5IjoxMTN9XQ== + + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6NTY5LCJ5IjoxMTN9LHsieCI6NDgwLCJ5IjoxMTh9XQ== + + + + 1664386039478 + mark + + DEL_EDGE + WyJhNzViZmJiMS1hN2YxLTQwODUtODA4ZC00MDEzYzY4ZGQxNDEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI1NDE1ZTkyMi00ZTY3LTRiZTAtOTRhOS0wOTJlMTdlMDk2ZjMiLCJ0YXJnZXRJRCI6ImU4NjIyYmVlLTMxYjQtNGFiNy1iMWQ4LTBkZWVmZmU3ZTkwYiIsImxhYmVsIjoic3AiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM5YzI3YjAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiYTc1YmZiYjEtYTdmMS00MDg1LTgwOGQtNDAxM2M2OGRkMTQxIn1d + + + + 1664386046397 + mark + + SET_POS + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLHsieCI6MjkwLCJ5IjoxMTh9LHsieCI6MzQ4LCJ5IjoxMjF9XQ== + + + SET_POS + WyJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLHsieCI6MzQ4LCJ5IjoxMjF9LHsieCI6MjkwLCJ5IjoxMTh9XQ== + + + + 1664386049665 + mark + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6NTY5LCJ5IjoxMTN9LHsieCI6NjU4LCJ5IjoxMTJ9XQ== + + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6NjU4LCJ5IjoxMTJ9LHsieCI6NTY5LCJ5IjoxMTN9XQ== + + + + 1664386055201 + mark + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6Nzc3LCJ5IjoxMDl9LHsieCI6OTM4LCJ5IjoxMTB9XQ== + + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6OTM4LCJ5IjoxMTB9LHsieCI6Nzc3LCJ5IjoxMDl9XQ== + + + + 1664386061927 + mark + + DEL_EDGE + WyJlZTY4NjY1NS04MzA2LTQwNWUtYjY4Yi1lOGUxN2JmODdjMDkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLCJ0YXJnZXRJRCI6IjQwNzM2NjhhLWYyNmUtNDc2YS1hOGYyLTgxNDRhYzMzM2Q5OCIsImxhYmVsIjoieSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzljMjdiMCIsInNoYXBlIjoic29saWQifSwiaWQiOiJlZTY4NjY1NS04MzA2LTQwNWUtYjY4Yi1lOGUxN2JmODdjMDkifV0= + + + + 1664386097531 + mark + + UPDATE_EDGE + WyI1YjNkZTE5ZC1lNWExLTQ2NDAtYWUzYi1lNWM1MWExMWM2MWYiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjOWMyN2IwIiwic2hhcGUiOiJzb2xpZCJ9LCJ4Iix0cnVlXQ== + + + UPDATE_EDGE + WyI1YjNkZTE5ZC1lNWExLTQ2NDAtYWUzYi1lNWM1MWExMWM2MWYiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjOWMyN2IwIiwic2hhcGUiOiJzb2xpZCJ9LCJ5bSIsdHJ1ZV0= + + + + 1664386115858 + mark + + DEL_EDGE + WyI2OTQ4YjU2OS0wMzliLTQ0NzMtODkzZi0yOGUxMmQ1MThjMjAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLCJ0YXJnZXRJRCI6IjE3ZDkxNjcwLTIzMmUtNGMzOS05MGRjLTUzZTk2ZGMyNWMwNyIsImxhYmVsIjoidSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzE1NjVjMCIsInNoYXBlIjoic29saWQifSwiaWQiOiI2OTQ4YjU2OS0wMzliLTQ0NzMtODkzZi0yOGUxMmQ1MThjMjAifV0= + + + + 1664386147882 + mark + + DEL_EDGE + WyJjODUwNDBjNi05ZWIzLTQ3YmEtYjBjNi0yYzQwNjEyNmFlNmEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJlODYyMmJlZS0zMWI0LTRhYjctYjFkOC0wZGVlZmZlN2U5MGIiLCJ0YXJnZXRJRCI6IjBhYTAzMDdmLWIwOTYtNDZmMC05MWVmLTcyYThmYWY5OTAxMyIsImxhYmVsIjoiZXJyb3IiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM2MDdkOGIiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiYzg1MDQwYzYtOWViMy00N2JhLWIwYzYtMmM0MDYxMjZhZTZhIn1d + + + + 1664386240593 + mark + + DEL_NODE + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiXQ== + + + ADD_NODE + WyJMWjpsZWFybi5weSIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjc1MSwieSI6MjQ2fSx7fSwiYjQ2YWFlODEtZTYxMS00MzRjLThjZjYtZGJiYjA5YjA1OWQ1Il0= + + + + 1664386250579 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6Njc4LCJ5IjoxODJ9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6Njc4LCJ5IjoxODJ9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1664386258258 + mark + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6NjkzLCJ5IjoyNjZ9LHsieCI6Njk4LCJ5IjozODB9XQ== + + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6Njk4LCJ5IjozODB9LHsieCI6NjkzLCJ5IjoyNjZ9XQ== + + + + 1664386258959 + mark + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6Njk4LCJ5IjozODB9LHsieCI6Njk4LCJ5IjozODZ9XQ== + + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6Njk4LCJ5IjozODZ9LHsieCI6Njk4LCJ5IjozODB9XQ== + + + + 1664386262279 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6Njc4LCJ5IjoxODJ9LHsieCI6Njc0LCJ5IjoyMDJ9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6Njc0LCJ5IjoyMDJ9LHsieCI6Njc4LCJ5IjoxODJ9XQ== + + + + 1664386272925 + mark + + DEL_EDGE + WyJlNGYwNzI4ZS04ZWI4LTQ3OWQtOWNhMC0yMmQ4NTJmYjc3YjIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLCJ0YXJnZXRJRCI6ImI0NmFhZTgxLWU2MTEtNDM0Yy04Y2Y2LWRiYmIwOWIwNTlkNSIsImlkIjoiZTRmMDcyOGUtOGViOC00NzlkLTljYTAtMjJkODUyZmI3N2IyIn1d + + + + 1664386279025 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6Njc0LCJ5IjoyMDJ9LHsieCI6NzM5LCJ5IjoxOTd9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6NzM5LCJ5IjoxOTd9LHsieCI6Njc0LCJ5IjoyMDJ9XQ== + + + + 1664386288881 + mark + + DEL_EDGE + WyI5M2NmY2NkZS05NDk0LTRiODItOTViZi01ZTM2Y2ZhZDIwNDkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLCJ0YXJnZXRJRCI6ImI0NmFhZTgxLWU2MTEtNDM0Yy04Y2Y2LWRiYmIwOWIwNTlkNSIsImlkIjoiOTNjZmNjZGUtOTQ5NC00YjgyLTk1YmYtNWUzNmNmYWQyMDQ5In1d + + + + 1664386297117 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6NzM5LCJ5IjoxOTd9LHsieCI6NjQ1LCJ5IjoyMzF9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6NjQ1LCJ5IjoyMzF9LHsieCI6NzM5LCJ5IjoxOTd9XQ== + + + + 1664386311827 + mark + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6OTM4LCJ5IjoxMTB9LHsieCI6MTE3NiwieSI6NDF9XQ== + + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTE3NiwieSI6NDF9LHsieCI6OTM4LCJ5IjoxMTB9XQ== + + + + 1664386317943 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6NjQ1LCJ5IjoyMzF9LHsieCI6OTIwLCJ5IjoxMzB9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6OTIwLCJ5IjoxMzB9LHsieCI6NjQ1LCJ5IjoyMzF9XQ== + + + + 1664386327275 + mark + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTE3NiwieSI6NDF9LHsieCI6MTE5MSwieSI6MTEzfV0= + + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTE5MSwieSI6MTEzfSx7IngiOjExNzYsInkiOjQxfV0= + + + + 1664386334396 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6OTIwLCJ5IjoxMzB9LHsieCI6OTE3LCJ5IjoxNzZ9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6OTE3LCJ5IjoxNzZ9LHsieCI6OTIwLCJ5IjoxMzB9XQ== + + + + 1664386345723 + mark + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6Njk4LCJ5IjozODZ9LHsieCI6OTM4LCJ5IjozOTl9XQ== + + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6OTM4LCJ5IjozOTl9LHsieCI6Njk4LCJ5IjozODZ9XQ== + + + + 1664386361445 + mark + + DEL_NODE + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiXQ== + + + ADD_NODE + WyJISVNUOiIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjk4OCwieSI6MjQxfSx7fSwiNzgzYzI1MjMtNDVkNS00ZWNkLTg0NGItMmNjNzAwZWM0MWE2Il0= + + + + 1664386367904 + mark + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6OTIwLCJ5IjoyOTd9XQ== + + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6OTIwLCJ5IjoyOTd9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1664386373398 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6OTE3LCJ5IjoxNzZ9LHsieCI6OTE3LCJ5IjoxNzl9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6OTE3LCJ5IjoxNzl9LHsieCI6OTE3LCJ5IjoxNzZ9XQ== + + + + 1664386378205 + mark + + DEL_EDGE + WyI0YjI2MmY0Zi0yMmY0LTQwZjItYWUzYy0xMTNjZGIxOTE2MjEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLCJ0YXJnZXRJRCI6Ijc4M2MyNTIzLTQ1ZDUtNGVjZC04NDRiLTJjYzcwMGVjNDFhNiIsImxhYmVsIjoiaGlzdG9yeSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzAwMDAwMCIsInNoYXBlIjoic29saWQifSwiaWQiOiI0YjI2MmY0Zi0yMmY0LTQwZjItYWUzYy0xMTNjZGIxOTE2MjEifV0= + + + + 1664386388129 + mark + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6OTIwLCJ5IjoyOTd9LHsieCI6OTIwLCJ5IjozMjF9XQ== + + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6OTIwLCJ5IjozMjF9LHsieCI6OTIwLCJ5IjoyOTd9XQ== + + + + 1664386391908 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6OTE3LCJ5IjoxNzl9LHsieCI6OTE2LCJ5IjoxNTh9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6OTE2LCJ5IjoxNTh9LHsieCI6OTE3LCJ5IjoxNzl9XQ== + + + + 1664386397290 + mark + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6OTM4LCJ5IjozOTl9LHsieCI6OTU2LCJ5Ijo0MTN9XQ== + + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6OTU2LCJ5Ijo0MTN9LHsieCI6OTM4LCJ5IjozOTl9XQ== + + + + 1664386450910 + mark + + DEL_EDGE + WyJjOTRlYmQyNi1kNzRlLTQ1ZTItYjA0NS01NjI4NTFhMzExOGUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLCJ0YXJnZXRJRCI6ImI0NmFhZTgxLWU2MTEtNDM0Yy04Y2Y2LWRiYmIwOWIwNTlkNSIsImlkIjoiYzk0ZWJkMjYtZDc0ZS00NWUyLWIwNDUtNTYyODUxYTMxMThlIn1d + + + + 1664386455711 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6OTE2LCJ5IjoxNTh9LHsieCI6MTAxOCwieSI6MTYyfV0= + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6MTAxOCwieSI6MTYyfSx7IngiOjkxNiwieSI6MTU4fV0= + + + + 1664386462206 + mark + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6OTIwLCJ5IjozMjF9LHsieCI6MTA5MiwieSI6Mjg2fV0= + + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6MTA5MiwieSI6Mjg2fSx7IngiOjkyMCwieSI6MzIxfV0= + + + + 1664386466736 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6MTAxOCwieSI6MTYyfSx7IngiOjg2MywieSI6MTgxfV0= + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6ODYzLCJ5IjoxODF9LHsieCI6MTAxOCwieSI6MTYyfV0= + + + + 1664386476083 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLCJ0YXJnZXRJRCI6ImI0NmFhZTgxLWU2MTEtNDM0Yy04Y2Y2LWRiYmIwOWIwNTlkNSIsImxhYmVsIjoieSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzljMjdiMCIsInNoYXBlIjoic29saWQifSwidHlwZSI6Im9yZGluIiwic291cmNlIjoiZmU5NGMzYmItZWUxNS00ODZjLWFkZjgtYzA3ZDk4NDQ2OTQyIiwidGFyZ2V0IjoiYjQ2YWFlODEtZTYxMS00MzRjLThjZjYtZGJiYjA5YjA1OWQ1IiwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjowLCJiZW5kV2VpZ2h0IjowLjUsImJlbmRQb2ludCI6eyJ4IjoxMDA3Ljg3MTYwNzEyNTU3MzYsInkiOjE1OS41fX0sImlkIjoiOTNjZmNjZGUtOTQ5NC00YjgyLTk1YmYtNWUzNmNmYWQyMDQ5In1d + + + DEL_EDGE + WyI5M2NmY2NkZS05NDk0LTRiODItOTViZi01ZTM2Y2ZhZDIwNDkiXQ== + + + + 1664386481266 + mark + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6MTA5MiwieSI6Mjg2fSx7IngiOjExMTQsInkiOjE4M31d + + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6MTExNCwieSI6MTgzfSx7IngiOjEwOTIsInkiOjI4Nn1d + + + + 1664386487691 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6ODYzLCJ5IjoxODF9LHsieCI6NzgxLCJ5IjoyMTJ9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6NzgxLCJ5IjoyMTJ9LHsieCI6ODYzLCJ5IjoxODF9XQ== + + + + 1664386491705 + mark + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6MTExNCwieSI6MTgzfSx7IngiOjEwMTcsInkiOjIxMH1d + + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6MTAxNywieSI6MjEwfSx7IngiOjExMTQsInkiOjE4M31d + + + + 1664386498080 + mark + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTE5MSwieSI6MTEzfSx7IngiOjEyNzAsInkiOjEyNX1d + + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTI3MCwieSI6MTI1fSx7IngiOjExOTEsInkiOjExM31d + + + + 1664386500941 + mark + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTI3MCwieSI6MTI1fSx7IngiOjEyNzEsInkiOjExNH1d + + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTI3MSwieSI6MTE0fSx7IngiOjEyNzAsInkiOjEyNX1d + + + + 1664386504631 + mark + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6NjU4LCJ5IjoxMTJ9LHsieCI6NjU4LCJ5IjoxMTZ9XQ== + + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6NjU4LCJ5IjoxMTZ9LHsieCI6NjU4LCJ5IjoxMTJ9XQ== + + + + 1664386520655 + mark + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6OTU2LCJ5Ijo0MTN9LHsieCI6Nzk1LCJ5Ijo0Mjd9XQ== + + + SET_POS + WyI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLHsieCI6Nzk1LCJ5Ijo0Mjd9LHsieCI6OTU2LCJ5Ijo0MTN9XQ== + + + + 1664386529922 + mark + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6NjU4LCJ5IjoxMTZ9LHsieCI6Njg1LCJ5IjoxMTh9XQ== + + + SET_POS + WyIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLHsieCI6Njg1LCJ5IjoxMTh9LHsieCI6NjU4LCJ5IjoxMTZ9XQ== + + + + 1664386534291 + mark + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6NzgxLCJ5IjoyMTJ9LHsieCI6NzUxLCJ5IjoyNDZ9XQ== + + + SET_POS + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLHsieCI6NzUxLCJ5IjoyNDZ9LHsieCI6NzgxLCJ5IjoyMTJ9XQ== + + + + 1664386538945 + mark + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6MTAxNywieSI6MjEwfSx7IngiOjk4OCwieSI6MjQxfV0= + + + SET_POS + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiLHsieCI6OTg4LCJ5IjoyNDF9LHsieCI6MTAxNywieSI6MjEwfV0= + + + + 1664386542631 + mark + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTI3MSwieSI6MTE0fSx7IngiOjEyOTIsInkiOjEyOX1d + + + SET_POS + WyIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLHsieCI6MTI5MiwieSI6MTI5fSx7IngiOjEyNzEsInkiOjExNH1d + + + + 1664386876727 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiIwYWEwMzA3Zi1iMDk2LTQ2ZjAtOTFlZi03MmE4ZmFmOTkwMTMiLCJ0YXJnZXRJRCI6ImI0NmFhZTgxLWU2MTEtNDM0Yy04Y2Y2LWRiYmIwOWIwNTlkNSIsImxhYmVsIjoidSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzE1NjVjMCIsInNoYXBlIjoic29saWQifSwidHlwZSI6Im9yZGluIiwic291cmNlIjoiNzVjM2QzZjctZTRkMi00YWQzLWFjZjAtYzhiOTAzM2Q1ODYzIiwidGFyZ2V0IjoiYjQ2YWFlODEtZTYxMS00MzRjLThjZjYtZGJiYjA5YjA1OWQ1IiwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjowLCJiZW5kV2VpZ2h0IjowLjUsImJlbmRQb2ludCI6eyJ4Ijo3NDYuNzUsInkiOjE4Ny45Mzc5NDU1NDE3NjI2NH19LCJpZCI6ImU0ZjA3MjhlLThlYjgtNDc5ZC05Y2EwLTIyZDg1MmZiNzdiMiJ9XQ== + + + DEL_EDGE + WyJlNGYwNzI4ZS04ZWI4LTQ3OWQtOWNhMC0yMmQ4NTJmYjc3YjIiXQ== + + + + 1664386879460 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiLCJ0YXJnZXRJRCI6Ijc4M2MyNTIzLTQ1ZDUtNGVjZC04NDRiLTJjYzcwMGVjNDFhNiIsImxhYmVsIjoiaGlzdG9yeSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzAwMDAwMCIsInNoYXBlIjoic29saWQifSwidHlwZSI6Im9yZGluIiwic291cmNlIjoiMTE3YTA3NjUtNzkxMC00OWRjLTg4NjEtNjMwYmE0MGFhZDMxIiwidGFyZ2V0IjoiNzgzYzI1MjMtNDVkNS00ZWNkLTg0NGItMmNjNzAwZWM0MWE2IiwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjowLCJiZW5kV2VpZ2h0IjowLjUsImJlbmRQb2ludCI6eyJ4Ijo4OTQuNSwieSI6MjQyLjk4Nzc0ODg3MTU0NzcyfX0sImlkIjoiNGIyNjJmNGYtMjJmNC00MGYyLWFlM2MtMTEzY2RiMTkxNjIxIn1d + + + DEL_EDGE + WyI0YjI2MmY0Zi0yMmY0LTQwZjItYWUzYy0xMTNjZGIxOTE2MjEiXQ== + + + + 1664386879460 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiI0MDczNjY4YS1mMjZlLTQ3NmEtYThmMi04MTQ0YWMzMzNkOTgiLCJ0YXJnZXRJRCI6ImI0NmFhZTgxLWU2MTEtNDM0Yy04Y2Y2LWRiYmIwOWIwNTlkNSIsImxhYmVsIjoieW0iLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM5YzI3YjAiLCJzaGFwZSI6InNvbGlkIn0sInR5cGUiOiJvcmRpbiIsInNvdXJjZSI6ImJlNmI4MGY5LWI2NzgtNDM5My04MzRhLTIxZmVmZjM1OTVhMyIsInRhcmdldCI6ImI0NmFhZTgxLWU2MTEtNDM0Yy04Y2Y2LWRiYmIwOWIwNTlkNSIsImJlbmREYXRhIjp7ImJlbmREaXN0YW5jZSI6MCwiYmVuZFdlaWdodCI6MC41LCJiZW5kUG9pbnQiOnsieCI6NzYwLjM5NDk2MTQzMjI3NDQsInkiOjMyNH19LCJpZCI6ImM5NGViZDI2LWQ3NGUtNDVlMi1iMDQ1LTU2Mjg1MWEzMTE4ZSJ9XQ== + + + DEL_EDGE + WyJjOTRlYmQyNi1kNzRlLTQ1ZTItYjA0NS01NjI4NTFhMzExOGUiXQ== + + + + 1664386879460 + mark + + ADD_NODE + WyJMWjpsZWFybi5weSIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjc1MSwieSI6MjQ2fSx7ImlkIjoiYjQ2YWFlODEtZTYxMS00MzRjLThjZjYtZGJiYjA5YjA1OWQ1IiwibGFiZWwiOiJMWjpsZWFybi5weSIsInR5cGUiOiJvcmRpbiIsInN0eWxlIjp7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfX0sImI0NmFhZTgxLWU2MTEtNDM0Yy04Y2Y2LWRiYmIwOWIwNTlkNSJd + + + DEL_NODE + WyJiNDZhYWU4MS1lNjExLTQzNGMtOGNmNi1kYmJiMDliMDU5ZDUiXQ== + + + + 1664386882386 + mark + + ADD_NODE + WyJISVNUOiIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjk4OCwieSI6MjQxfSx7ImlkIjoiNzgzYzI1MjMtNDVkNS00ZWNkLTg0NGItMmNjNzAwZWM0MWE2IiwibGFiZWwiOiJISVNUOiIsInR5cGUiOiJvcmRpbiIsInN0eWxlIjp7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfX0sIjc4M2MyNTIzLTQ1ZDUtNGVjZC04NDRiLTJjYzcwMGVjNDFhNiJd + + + DEL_NODE + WyI3ODNjMjUyMy00NWQ1LTRlY2QtODQ0Yi0yY2M3MDBlYzQxYTYiXQ== + + + + 1664386970238 + mark + + DEL_NODE + WyI2ZTFjZWM2NS1mYTVmLTQ4NjAtYjM1MS0yMTBmOTVjOTVmOWEiXQ== + + + ADD_NODE + WyJPVFVQVVQ6Iix7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTU4OS41MjU2MDUzNjcyMzk1LCJ5IjoxMjkuNjg1NzM4OTExMTg3NjZ9LHt9LCI2ZTFjZWM2NS1mYTVmLTQ4NjAtYjM1MS0yMTBmOTVjOTVmOWEiXQ== + + + + 1664386977377 + mark + + SET_POS + WyI2ZTFjZWM2NS1mYTVmLTQ4NjAtYjM1MS0yMTBmOTVjOTVmOWEiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTU4OS41MjU2MDUzNjcyMzk1LCJ5IjoxMjkuNjg1NzM4OTExMTg3NjZ9XQ== + + + SET_POS + WyI2ZTFjZWM2NS1mYTVmLTQ4NjAtYjM1MS0yMTBmOTVjOTVmOWEiLHsieCI6MTU4OS41MjU2MDUzNjcyMzk1LCJ5IjoxMjkuNjg1NzM4OTExMTg3NjZ9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1664386981355 + mark + + UPDATE_NODE + WyI2ZTFjZWM2NS1mYTVmLTQ4NjAtYjM1MS0yMTBmOTVjOTVmOWEiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJPVFVQVVQ6Iix0cnVlXQ== + + + UPDATE_NODE + WyI2ZTFjZWM2NS1mYTVmLTQ4NjAtYjM1MS0yMTBmOTVjOTVmOWEiLHsid2lkdGgiOjE1NywiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJPVVRQVVQ6Iix0cnVlXQ== + + + + 1664386998049 + mark + + UPDATE_NODE + WyI1NDE1ZTkyMi00ZTY3LTRiZTAtOTRhOS0wOTJlMTdlMDk2ZjMiLHsid2lkdGgiOjEwMywiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJTRVRQT0lOVDoiLHRydWVd + + + UPDATE_NODE + WyI1NDE1ZTkyMi00ZTY3LTRiZTAtOTRhOS0wOTJlMTdlMDk2ZjMiLHsid2lkdGgiOjEwMywiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJJTlBVVDoiLHRydWVd + + + + 1664387011627 + mark + + DEL_EDGE + WyJkNzRlZGYzZi1hYTEyLTRkODMtYWJhYi1mNzM4ZDk2MWMxZTEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIxN2Q5MTY3MC0yMzJlLTRjMzktOTBkYy01M2U5NmRjMjVjMDciLCJ0YXJnZXRJRCI6IjZlMWNlYzY1LWZhNWYtNDg2MC1iMzUxLTIxMGY5NWM5NWY5YSIsImlkIjoiZDc0ZWRmM2YtYWExMi00ZDgzLWFiYWItZjczOGQ5NjFjMWUxIn1d + + + + \ No newline at end of file diff --git a/testsou/pretty.graphml b/testsou/pretty.graphml new file mode 100644 index 0000000..d892419 --- /dev/null +++ b/testsou/pretty.graphml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + PZ:pmpymax.py + + + + + + + + + + + + CZ:cpymax.py + + + + + + + + + + + + + + + + + ym + + + + + + + + + + + u + + + + + + + + From 08ce4fe1e4ab68879a49900c0d9e9f68785b3a22 Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Sun, 2 Oct 2022 14:28:34 -0400 Subject: [PATCH 099/113] mayuresh, funbody, funcall --- concore.py | 7 + concoredocker.py | 6 + testsou/funbody.dir/concore2.py | 113 +++++++ testsou/funbody.py | 25 ++ testsou/funbu.py | 15 + testsou/funby.py | 14 + testsou/funcall.dir/concore2.py | 113 +++++++ testsou/funcall.py | 24 ++ testsou/test3fun.graphml | 412 +++++++++++++++++++++++++ testsou/test3funbody.graphml | 448 +++++++++++++++++++++++++++ testsou/test4fun.graphml | 363 ++++++++++++++++++++++ testsou/test4io.graphml | 339 +++++++++++++++++++++ testsou/test5fuy.graphml | 518 ++++++++++++++++++++++++++++++++ tools/mayuresh.graphml | 280 +++++++++++++++++ tools/pidmayuresh.py | 65 ++++ 15 files changed, 2742 insertions(+) create mode 100644 testsou/funbody.dir/concore2.py create mode 100644 testsou/funbody.py create mode 100644 testsou/funbu.py create mode 100644 testsou/funby.py create mode 100644 testsou/funcall.dir/concore2.py create mode 100644 testsou/funcall.py create mode 100644 testsou/test3fun.graphml create mode 100644 testsou/test3funbody.graphml create mode 100644 testsou/test4fun.graphml create mode 100644 testsou/test4io.graphml create mode 100644 testsou/test5fuy.graphml create mode 100644 tools/mayuresh.graphml create mode 100644 tools/pidmayuresh.py diff --git a/concore.py b/concore.py index 3a9c0d6..e3ec817 100644 --- a/concore.py +++ b/concore.py @@ -45,6 +45,13 @@ print("bad params: "+sparams) except: params = dict() +#9/30/22 +def tryparam(n,i): + try: + return params[n] + except: + return i + #9/12/21 def default_maxtime(default): diff --git a/concoredocker.py b/concoredocker.py index 49e561e..e590d9d 100644 --- a/concoredocker.py +++ b/concoredocker.py @@ -35,6 +35,12 @@ print("bad params: "+sparams) except: params = dict() +#9/30/22 +def tryparam(n,i): + try: + return params[n] + except: + return i #9/12/21 def default_maxtime(default): diff --git a/testsou/funbody.dir/concore2.py b/testsou/funbody.dir/concore2.py new file mode 100644 index 0000000..e3ec817 --- /dev/null +++ b/testsou/funbody.dir/concore2.py @@ -0,0 +1,113 @@ +import time +import os +from ast import literal_eval +import sys +import re + +#if windows, create script to kill this process +# because batch files don't provide easy way to know pid of last command +# ignored for posix!=windows, because "concorepid" is handled by script +# ignored for docker (linux!=windows), because handled by docker stop +if hasattr(sys, 'getwindowsversion'): + with open("concorekill.bat","w") as fpid: + fpid.write("taskkill /F /PID "+str(os.getpid())+"\n") + +try: + iport = literal_eval(open("concore.iport").read()) +except: + iport = dict() +try: + oport = literal_eval(open("concore.oport").read()) +except: + oport = dict() + + +s = '' +olds = '' +delay = 1 +retrycount = 0 +inpath = "./in" #must be rel path for local +outpath = "./out" + +#9/21/22 +try: + sparams = open(inpath+"1/concore.params").read() + if sparams[0] == '"': #windows keeps "" need to remove + sparams = sparams[1:] + sparams = sparams[0:sparams.find('"')] + if sparams != '{': + print("converting sparams: "+sparams) + sparams = "{'"+re.sub(';',",'",re.sub('=',"':",re.sub(' ','',sparams)))+"}" + print("converted sparams: " + sparams) + try: + params = literal_eval(sparams) + except: + print("bad params: "+sparams) +except: + params = dict() +#9/30/22 +def tryparam(n,i): + try: + return params[n] + except: + return i + + +#9/12/21 +def default_maxtime(default): + global maxtime + try: + maxtime = literal_eval(open(inpath+"1/concore.maxtime").read()) + except: + maxtime = default +default_maxtime(100) + +def unchanged(): + global olds,s + if olds==s: + s = '' + return True + else: + olds = s + return False + +def read(port, name, initstr): + global s,simtime,retrycount + time.sleep(delay) + try: + infile = open(inpath+str(port)+"/"+name); + ins = infile.read() + except: + ins = initstr + while len(ins)==0: + time.sleep(delay) + ins = infile.read() + retrycount += 1 + s += ins + inval = literal_eval(ins) + simtime = max(simtime,inval[0]) + return inval[1:] + +def write(port, name, val, delta=0): + global outpath,simtime + if isinstance(val,str): + time.sleep(2*delay) + elif isinstance(val,list)==False: + print("mywrite must have list or str") + quit() + try: + with open(outpath+str(port)+"/"+name,"w") as outfile: + if isinstance(val,list): + outfile.write(str([simtime+delta]+val)) + simtime += delta + else: + outfile.write(val) + except: + print("skipping"+outpath+str(port)+"/"+name); + +def initval(simtime_val): + global simtime + val = literal_eval(simtime_val) + simtime = val[0] + return val[1:] + diff --git a/testsou/funbody.py b/testsou/funbody.py new file mode 100644 index 0000000..5dfda42 --- /dev/null +++ b/testsou/funbody.py @@ -0,0 +1,25 @@ +import concore +import concore2 +print("funbody") + +concore.delay = 0.07 +concore2.delay = 0.07 +concore2.inpath = concore.inpath +concore2.outpath = concore.outpath +concore2.simtime = 0 +concore.default_maxtime(100) +init_simtime_u = "[0.0, 0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0, 0.0]" + +u = concore.initval(init_simtime_u) +ym = concore.initval(init_simtime_ym) +while(concore.simtime + + + + + + + + + + + PZ:pmpymax.py + + + + + + + + + + + CZ:cpymax.py + + + + + + + + + + + F1:funcall.py + + + + + + + + + + U + + + + + + + + + + + + Y + + + + + + + + + + + + U1 + + + + + + + + + + + + Y1 + + + + + + + + 1664644923582 + mark + + DEL_NODE + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciXQ== + + + ADD_NODE + WyJQWjpwbXB5bWF4LnB5Iix7IndpZHRoIjoxMzYsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0se30sImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyJd + + + + 1664644939781 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1664644951652 + mark + + DEL_NODE + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiXQ== + + + ADD_NODE + WyJDWjpjcHltYXgucHkiLHsid2lkdGgiOjEyMiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjotMTM3Ljc3NjIwMzU0OTQyMzgzLCJ5Ijo5MS4zMjAxMjcwNjgyNTY0MX0se30sImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSJd + + + + 1664644958838 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOjEwMCwieSI6MTAwfV0= + + + + 1664644988539 + mark + + DEL_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiXQ== + + + ADD_NODE + WyJGMTpmdW5jYWxsLnB5Iix7IndpZHRoIjoxMTEsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0se30sImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCJd + + + + 1664645002278 + mark + + DEL_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + ADD_NODE + WyJGMjpmdW5ib2R5LnB5Iix7IndpZHRoIjoxMjAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHt9LCJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + + 1664645010353 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjoxMTAsInkiOjExMH1d + + + + 1664645015576 + mark + + DEL_EDGE + WyIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiVSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUifV0= + + + + 1664645043815 + mark + + DEL_EDGE + WyIzY2ZiNDBjZC01NTdhLTQ4NTAtOTNhNi1mZGMwOWNkMDA1ZjAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiVTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiM2NmYjQwY2QtNTU3YS00ODUwLTkzYTYtZmRjMDljZDAwNWYwIn1d + + + + 1664645057658 + mark + + DEL_EDGE + WyI3MTRkYjk4OS01NjcyLTQwM2ItYWU3Ni1mZDlhMjA4OTM0NzUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImxhYmVsIjoiVTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNzE0ZGI5ODktNTY3Mi00MDNiLWFlNzYtZmQ5YTIwODkzNDc1In1d + + + + 1664645068951 + mark + + DEL_EDGE + WyJhOGFlNzg5MC1iMmJiLTQyNzMtODc1My0wMTgxY2ViNDg2YzEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiWTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiYThhZTc4OTAtYjJiYi00MjczLTg3NTMtMDE4MWNlYjQ4NmMxIn1d + + + + 1664645081283 + mark + + DEL_EDGE + WyI1NWI5OWFiNi1hN2Q2LTRjNjctYWI0ZS1hOGUyOTM5YzFiMGYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNTViOTlhYjYtYTdkNi00YzY3LWFiNGUtYThlMjkzOWMxYjBmIn1d + + + + 1664645089735 + mark + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX1d + + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1664645092868 + mark + + DEL_EDGE + WyI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSIsImxhYmVsIjoiWSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkifV0= + + + + 1664645142026 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOi0xNzAuNDQxMDYwODg1NDY2OTUsInkiOjkwLjAxMzUzMjc3NDgxNDY5fV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + + + 1664645149601 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4Ijo3NTQuNDAxODgxNDA3MTk2NSwieSI6OTkuMTM1NzM0OTcxOTM2NjR9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjQwNC4yMzQ2MTA3NjQ4MTQyLCJ5IjotODkuMDEzODQzMjgzNjcxNzh9XQ== + + + + 1664645223291 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjY3Ni4wMDYyMjM4MDA2OTMsInkiOjEwMC40NDIzMjkyNjUzNzgzNn1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjc1NC40MDE4ODE0MDcxOTY1LCJ5Ijo5OS4xMzU3MzQ5NzE5MzY2NH1d + + + + 1664645228453 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjozMzYuMDE4NjM3MDg1NTg2NjUsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + + 1664645231883 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjU4Ny4xNTc4MTE4NDY2NTU2LCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0seyJ4Ijo2NzYuMDA2MjIzODAwNjkzLCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + + + 1664645237206 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9XQ== + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9LHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9XQ== + + + + 1664646509534 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImxhYmVsIjoiVTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sInR5cGUiOiJvcmRpbiIsInNvdXJjZSI6IjYyOGMyOTI0LWI2YzEtNDBjNi05ZjM5LTZjMDUxNmI3MGI1YSIsInRhcmdldCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImJlbmREYXRhIjp7ImJlbmREaXN0YW5jZSI6MCwiYmVuZFdlaWdodCI6MC41LCJiZW5kUG9pbnQiOnsieCI6NDkxLjU4ODIyNDQ2NjEyMTEsInkiOjEwMC42MzA4MzY4MzIxNzMyMn19LCJpZCI6IjcxNGRiOTg5LTU2NzItNDAzYi1hZTc2LWZkOWEyMDg5MzQ3NSJ9XQ== + + + DEL_EDGE + WyI3MTRkYjk4OS01NjcyLTQwM2ItYWU3Ni1mZDlhMjA4OTM0NzUiXQ== + + + + 1664646579649 + mark + + DEL_EDGE + WyIwM2RlN2FjYS1hZTA0LTQ5ZWEtYThjZC04YTg3YTA0MjA0ZjEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImlkIjoiMDNkZTdhY2EtYWUwNC00OWVhLWE4Y2QtOGE4N2EwNDIwNGYxIn1d + + + + 1664646592082 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sInR5cGUiOiJvcmRpbiIsInNvdXJjZSI6ImZlYjllMGU5LTA2NTktNDdmYy1iNGQzLTZiZGRkOGM2YjNkNiIsInRhcmdldCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImJlbmREYXRhIjp7ImJlbmREaXN0YW5jZSI6MjAsImJlbmRXZWlnaHQiOjAuNSwiYmVuZFBvaW50Ijp7IngiOjE4Ny42MDY5NDA0NzI4NDkzLCJ5Ijo3My4wMDY2NjE0ODk4MDV9fSwiaWQiOiI1NWI5OWFiNi1hN2Q2LTRjNjctYWI0ZS1hOGUyOTM5YzFiMGYifV0= + + + DEL_EDGE + WyI1NWI5OWFiNi1hN2Q2LTRjNjctYWI0ZS1hOGUyOTM5YzFiMGYiXQ== + + + + 1664646592082 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiWTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sInR5cGUiOiJvcmRpbiIsInNvdXJjZSI6Ijg3ODFjMWFiLTI3MzUtNGE1NS1iMzQyLWExMzBhNTlmMzcwNyIsInRhcmdldCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImJlbmREYXRhIjp7ImJlbmREaXN0YW5jZSI6MjAsImJlbmRXZWlnaHQiOjAuNSwiYmVuZFBvaW50Ijp7IngiOjQyNi42MTkzODI1NjIzMjg2LCJ5Ijo3Ni41MjAxMzYxMTU4NzI2NX19LCJpZCI6ImE4YWU3ODkwLWIyYmItNDI3My04NzUzLTAxODFjZWI0ODZjMSJ9XQ== + + + DEL_EDGE + WyJhOGFlNzg5MC1iMmJiLTQyNzMtODc1My0wMTgxY2ViNDg2YzEiXQ== + + + + 1664646592082 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiVTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJzaGFwZSI6InNvbGlkIn0sInR5cGUiOiJvcmRpbiIsInNvdXJjZSI6ImFhNjZiNDZiLTRkYTgtNDAxMC1iODk0LWQ0YmFhNWEzYWY4MiIsInRhcmdldCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImJlbmREYXRhIjp7ImJlbmREaXN0YW5jZSI6MC4wMDAwMjc4NjgxNzM4NjU0NjQwMywiYmVuZFdlaWdodCI6MC41MDAwMDAwMDQwMzA1MDY2LCJiZW5kUG9pbnQiOnsieCI6MjQ1Ljc1OTMxODQ3MDQxOTI2LCJ5Ijo5OC4zNDU3NTk1MDM4MjE4N319LCJpZCI6IjNjZmI0MGNkLTU1N2EtNDg1MC05M2E2LWZkYzA5Y2QwMDVmMCJ9XQ== + + + DEL_EDGE + WyIzY2ZiNDBjZC01NTdhLTQ4NTAtOTNhNi1mZGMwOWNkMDA1ZjAiXQ== + + + + 1664646592082 + mark + + ADD_NODE + WyJGMjpmdW5ib2R5LnB5Iix7IndpZHRoIjoxMjAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHsiaWQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJsYWJlbCI6IkYyOmZ1bmJvZHkucHkiLCJ0eXBlIjoib3JkaW4iLCJzdHlsZSI6eyJ3aWR0aCI6MTIwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX19LCJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + DEL_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + + 1664646604837 + mark + + DEL_EDGE + WyIzN2UyMzg0NC1hODgwLTQ1MjktOTA2Mi00YmIyNTIxZTI5YzUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiMzdlMjM4NDQtYTg4MC00NTI5LTkwNjItNGJiMjUyMWUyOWM1In1d + + + + \ No newline at end of file diff --git a/testsou/test3funbody.graphml b/testsou/test3funbody.graphml new file mode 100644 index 0000000..1732608 --- /dev/null +++ b/testsou/test3funbody.graphml @@ -0,0 +1,448 @@ + + + + + + + + + + + + PZ:pmpymax.py + + + + + + + + + + + CZ:cpymax.py + + + + + + + + + + + F2:funbody.py + + + + + + + + + + U1 + + + + + + + + + + + + Y2 + + + + + + + + + + + + Y1 + + + + + + + + + + + + U2 + + + + + + + + 1664644923582 + mark + + DEL_NODE + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciXQ== + + + ADD_NODE + WyJQWjpwbXB5bWF4LnB5Iix7IndpZHRoIjoxMzYsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0se30sImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyJd + + + + 1664644939781 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1664644951652 + mark + + DEL_NODE + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiXQ== + + + ADD_NODE + WyJDWjpjcHltYXgucHkiLHsid2lkdGgiOjEyMiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjotMTM3Ljc3NjIwMzU0OTQyMzgzLCJ5Ijo5MS4zMjAxMjcwNjgyNTY0MX0se30sImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSJd + + + + 1664644958838 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOjEwMCwieSI6MTAwfV0= + + + + 1664644988539 + mark + + DEL_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiXQ== + + + ADD_NODE + WyJGMTpmdW5jYWxsLnB5Iix7IndpZHRoIjoxMTEsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0se30sImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCJd + + + + 1664645002278 + mark + + DEL_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + ADD_NODE + WyJGMjpmdW5ib2R5LnB5Iix7IndpZHRoIjoxMjAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHt9LCJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + + 1664645010353 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjoxMTAsInkiOjExMH1d + + + + 1664645015576 + mark + + DEL_EDGE + WyIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiVSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUifV0= + + + + 1664645043815 + mark + + DEL_EDGE + WyIzY2ZiNDBjZC01NTdhLTQ4NTAtOTNhNi1mZGMwOWNkMDA1ZjAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiVTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiM2NmYjQwY2QtNTU3YS00ODUwLTkzYTYtZmRjMDljZDAwNWYwIn1d + + + + 1664645057658 + mark + + DEL_EDGE + WyI3MTRkYjk4OS01NjcyLTQwM2ItYWU3Ni1mZDlhMjA4OTM0NzUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImxhYmVsIjoiVTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNzE0ZGI5ODktNTY3Mi00MDNiLWFlNzYtZmQ5YTIwODkzNDc1In1d + + + + 1664645068951 + mark + + DEL_EDGE + WyJhOGFlNzg5MC1iMmJiLTQyNzMtODc1My0wMTgxY2ViNDg2YzEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiWTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiYThhZTc4OTAtYjJiYi00MjczLTg3NTMtMDE4MWNlYjQ4NmMxIn1d + + + + 1664645081283 + mark + + DEL_EDGE + WyI1NWI5OWFiNi1hN2Q2LTRjNjctYWI0ZS1hOGUyOTM5YzFiMGYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNTViOTlhYjYtYTdkNi00YzY3LWFiNGUtYThlMjkzOWMxYjBmIn1d + + + + 1664645089735 + mark + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX1d + + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1664645092868 + mark + + DEL_EDGE + WyI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSIsImxhYmVsIjoiWSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkifV0= + + + + 1664645142026 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOi0xNzAuNDQxMDYwODg1NDY2OTUsInkiOjkwLjAxMzUzMjc3NDgxNDY5fV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + + + 1664645149601 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4Ijo3NTQuNDAxODgxNDA3MTk2NSwieSI6OTkuMTM1NzM0OTcxOTM2NjR9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjQwNC4yMzQ2MTA3NjQ4MTQyLCJ5IjotODkuMDEzODQzMjgzNjcxNzh9XQ== + + + + 1664645223291 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjY3Ni4wMDYyMjM4MDA2OTMsInkiOjEwMC40NDIzMjkyNjUzNzgzNn1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjc1NC40MDE4ODE0MDcxOTY1LCJ5Ijo5OS4xMzU3MzQ5NzE5MzY2NH1d + + + + 1664645228453 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjozMzYuMDE4NjM3MDg1NTg2NjUsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + + 1664645231883 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjU4Ny4xNTc4MTE4NDY2NTU2LCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0seyJ4Ijo2NzYuMDA2MjIzODAwNjkzLCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + + + 1664645237206 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9XQ== + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9LHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9XQ== + + + + 1664646884333 + mark + + DEL_EDGE + WyI4M2Q3ZTg2My04YWVhLTRkMDEtYWJlMi0wOGYyMGQyOTAyNTciXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImlkIjoiODNkN2U4NjMtOGFlYS00ZDAxLWFiZTItMDhmMjBkMjkwMjU3In1d + + + + 1664646890892 + mark + + DEL_EDGE + WyJjNTQ2YTc5My0wNDdlLTQyODctYjU0ZC1iNWJjMWM1Y2VlOGIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImlkIjoiYzU0NmE3OTMtMDQ3ZS00Mjg3LWI1NGQtYjViYzFjNWNlZThiIn1d + + + + 1664646900515 + mark + + DEL_EDGE + WyI4MWRiNDQ4Ni0zOWY2LTQzMjEtYWU2YS0zZTUyYmNkN2RiODciXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSIsImlkIjoiODFkYjQ0ODYtMzlmNi00MzIxLWFlNmEtM2U1MmJjZDdkYjg3In1d + + + + 1664646906725 + mark + + ADD_EDGE + W3sibGFiZWwiOiJVMSIsInNvdXJjZSI6Ijk5MmVkZmVmLWE3OGItNDIxZC1hMWI3LTJiNGE5NGE5MTlmNiIsInRhcmdldCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsInN0eWxlIjp7ImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjowLjAwMDAyNzg2ODE3Mzg2NTQ2NDAzLCJiZW5kV2VpZ2h0IjowLjUwMDAwMDAwNDAzMDUwNjYsImJlbmRQb2ludCI6eyJ4IjoyNDUuNzU5MzE4NTQyNzk0OTQsInkiOjk4LjU4MDQzNDE0NjM5NTE4fX0sInNvdXJjZUlEIjoiZjU2ZjhiMjQtNDFhNi00NWI0LTg4MmItNjU5NjA0MGI2YWYwIiwidGFyZ2V0SUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0eXBlIjoib3JkaW4iLCJpZCI6ImEwN2Q5MDZjLWZjOTItNGY2MC1hYzMyLTg5NTc4YTQ0NmY4OSJ9XQ== + + + DEL_EDGE + WyJhMDdkOTA2Yy1mYzkyLTRmNjAtYWMzMi04OTU3OGE0NDZmODkiXQ== + + + + 1664646906725 + mark + + ADD_EDGE + W3sibGFiZWwiOiJZIiwic291cmNlIjoiNTM1NjMyZjYtNDkyNi00NzEwLWExM2MtMmExYTU2ZGVmNzFhIiwidGFyZ2V0IjoiZDk1Zjc4ODctNDJiZi00ZTEyLWEwMjItMDIxODY5NzAxYzZhIiwic3R5bGUiOnsiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInRoaWNrbmVzcyI6MSwic2hhcGUiOiJzb2xpZCJ9LCJiZW5kRGF0YSI6eyJiZW5kRGlzdGFuY2UiOjI0LjYwODA2MzQxODU0ODc1LCJiZW5kV2VpZ2h0IjowLjUwNTk0MzgwNzg0NTg2MzcsImJlbmRQb2ludCI6eyJ4IjotNDguNjE0ODQ2MjQ3MDI1Nzk1LCJ5Ijo2My40NTY5MzM3ODA2ODEyNX19LCJzb3VyY2VJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsInRhcmdldElEIjoiZDk1Zjc4ODctNDJiZi00ZTEyLWEwMjItMDIxODY5NzAxYzZhIiwidHlwZSI6Im9yZGluIiwiaWQiOiI2MDk4MWM0Ni0xMjdkLTQ2NWMtYjVkNC0zMTljOWMxNDRkYzkifV0= + + + DEL_EDGE + WyI2MDk4MWM0Ni0xMjdkLTQ2NWMtYjVkNC0zMTljOWMxNDRkYzkiXQ== + + + + 1664646906725 + mark + + ADD_EDGE + W3sibGFiZWwiOiJVIiwic291cmNlIjoiYjAwM2Q1MDktZjU2My00NjllLWI3YTMtMzdlNmUzZjc3ZjcyIiwidGFyZ2V0IjoiZjU2ZjhiMjQtNDFhNi00NWI0LTg4MmItNjU5NjA0MGI2YWYwIiwic3R5bGUiOnsiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInRoaWNrbmVzcyI6MSwic2hhcGUiOiJzb2xpZCJ9LCJiZW5kRGF0YSI6eyJiZW5kRGlzdGFuY2UiOjAuMDAwMDEyMzU0MDg0NjYzOTM0NzI4LCJiZW5kV2VpZ2h0IjowLjUwMDAwMDAwMTAxNDkxOTQsImJlbmRQb2ludCI6eyJ4IjoxMS42MTE4OTgzNjg5MDI2MDEsInkiOjk0LjUxNzUwNzMxNTAwMzY4fX0sInNvdXJjZUlEIjoiZDk1Zjc4ODctNDJiZi00ZTEyLWEwMjItMDIxODY5NzAxYzZhIiwidGFyZ2V0SUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0eXBlIjoib3JkaW4iLCJpZCI6IjgxODU1NTg0LTcwNjQtNGRiYi1iNGI3LTM5ODY0NjdkNTRlYiJ9XQ== + + + DEL_EDGE + WyI4MTg1NTU4NC03MDY0LTRkYmItYjRiNy0zOTg2NDY3ZDU0ZWIiXQ== + + + + 1664646906725 + mark + + ADD_EDGE + W3sibGFiZWwiOiJZMSIsInNvdXJjZSI6IjMzNTcyNGI5LTFlM2YtNDZjMi05ZTkyLTNlOGJmMTA5ZDI0OCIsInRhcmdldCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsInN0eWxlIjp7ImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjoyNS4wMTU2MDQ0Mzg0NDI0NywiYmVuZFdlaWdodCI6MC41MDcyNjEyODIxMTY0NTQyLCJiZW5kUG9pbnQiOnsieCI6MTg2LjI4ODA5ODE3NDU2MjI2LCJ5Ijo2OC4yMjU0MzkyMTQ2Mzc5M319LCJzb3VyY2VJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsInRhcmdldElEIjoiZjU2ZjhiMjQtNDFhNi00NWI0LTg4MmItNjU5NjA0MGI2YWYwIiwidHlwZSI6Im9yZGluIiwiaWQiOiI5NmVhMGRlZi1hZmUyLTQ5NTgtYWNkNS00ZDEyZGMyM2U0N2MifV0= + + + DEL_EDGE + WyI5NmVhMGRlZi1hZmUyLTQ5NTgtYWNkNS00ZDEyZGMyM2U0N2MiXQ== + + + + 1664646906725 + mark + + ADD_NODE + WyJGMTpmdW5jYWxsLnB5Iix7IndpZHRoIjoxMTEsImhlaWdodCI6NTAsIm9wYWNpdHkiOjEsInNoYXBlIjoicmVjdGFuZ2xlIiwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0seyJpZCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiRjE6ZnVuY2FsbC5weSIsInR5cGUiOiJvcmRpbiIsInN0eWxlIjp7IndpZHRoIjoxMTEsImhlaWdodCI6NTAsIm9wYWNpdHkiOjEsInNoYXBlIjoicmVjdGFuZ2xlIiwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfX0sImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCJd + + + DEL_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiXQ== + + + + 1664646916160 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiVSIsInN0eWxlIjp7ImJhY2tncm91bmRDb2xvciI6IiM4Mjc3MTciLCJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwidHlwZSI6Im9yZGluIiwic291cmNlIjoiYjAwM2Q1MDktZjU2My00NjllLWI3YTMtMzdlNmUzZjc3ZjcyIiwidGFyZ2V0IjoiZGIzMWJlM2YtM2U1OC00YzM2LTk3OWQtNDFmYjI4YWVmZTY4IiwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjoyMCwiYmVuZFdlaWdodCI6MC41LCJiZW5kUG9pbnQiOnsieCI6MTI5LjI5Nzc4OTY0ODE1MDk3LCJ5IjoxMTcuNTk2OTE0NDcxNDQzNzd9fSwiaWQiOiJjNTQ2YTc5My0wNDdlLTQyODctYjU0ZC1iNWJjMWM1Y2VlOGIifV0= + + + DEL_EDGE + WyJjNTQ2YTc5My0wNDdlLTQyODctYjU0ZC1iNWJjMWM1Y2VlOGIiXQ== + + + + 1664646939737 + mark + + UPDATE_EDGE + WyI4M2Q3ZTg2My04YWVhLTRkMDEtYWJlMi0wOGYyMGQyOTAyNTciLHsiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInRoaWNrbmVzcyI6MSwic2hhcGUiOiJzb2xpZCJ9LCJVIix0cnVlXQ== + + + UPDATE_EDGE + WyI4M2Q3ZTg2My04YWVhLTRkMDEtYWJlMi0wOGYyMGQyOTAyNTciLHsiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInRoaWNrbmVzcyI6MSwic2hhcGUiOiJzb2xpZCJ9LCJVMSIsdHJ1ZV0= + + + + \ No newline at end of file diff --git a/testsou/test4fun.graphml b/testsou/test4fun.graphml new file mode 100644 index 0000000..af071c1 --- /dev/null +++ b/testsou/test4fun.graphml @@ -0,0 +1,363 @@ + + + + + + + + + + + + PZ:pmpymax.py + + + + + + + + + + + CZ:cpymax.py + + + + + + + + + + + F1:funcall.py + + + + + + + + + + + F2:funbody.py + + + + + + + + + + U + + + + + + + + + + + + U1 + + + + + + + + + + + + U2 + + + + + + + + + + + + Y2 + + + + + + + + + + + + Y1 + + + + + + + + + + + + Y + + + + + + + + 1664644923582 + mark + + DEL_NODE + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciXQ== + + + ADD_NODE + WyJQWjpwbXB5bWF4LnB5Iix7IndpZHRoIjoxMzYsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0se30sImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyJd + + + + 1664644939781 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1664644951652 + mark + + DEL_NODE + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiXQ== + + + ADD_NODE + WyJDWjpjcHltYXgucHkiLHsid2lkdGgiOjEyMiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjotMTM3Ljc3NjIwMzU0OTQyMzgzLCJ5Ijo5MS4zMjAxMjcwNjgyNTY0MX0se30sImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSJd + + + + 1664644958838 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOjEwMCwieSI6MTAwfV0= + + + + 1664644988539 + mark + + DEL_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiXQ== + + + ADD_NODE + WyJGMTpmdW5jYWxsLnB5Iix7IndpZHRoIjoxMTEsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0se30sImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCJd + + + + 1664645002278 + mark + + DEL_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + ADD_NODE + WyJGMjpmdW5ib2R5LnB5Iix7IndpZHRoIjoxMjAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHt9LCJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + + 1664645010353 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjoxMTAsInkiOjExMH1d + + + + 1664645015576 + mark + + DEL_EDGE + WyIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiVSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUifV0= + + + + 1664645043815 + mark + + DEL_EDGE + WyIzY2ZiNDBjZC01NTdhLTQ4NTAtOTNhNi1mZGMwOWNkMDA1ZjAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiVTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiM2NmYjQwY2QtNTU3YS00ODUwLTkzYTYtZmRjMDljZDAwNWYwIn1d + + + + 1664645057658 + mark + + DEL_EDGE + WyI3MTRkYjk4OS01NjcyLTQwM2ItYWU3Ni1mZDlhMjA4OTM0NzUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImxhYmVsIjoiVTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNzE0ZGI5ODktNTY3Mi00MDNiLWFlNzYtZmQ5YTIwODkzNDc1In1d + + + + 1664645068951 + mark + + DEL_EDGE + WyJhOGFlNzg5MC1iMmJiLTQyNzMtODc1My0wMTgxY2ViNDg2YzEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiWTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiYThhZTc4OTAtYjJiYi00MjczLTg3NTMtMDE4MWNlYjQ4NmMxIn1d + + + + 1664645081283 + mark + + DEL_EDGE + WyI1NWI5OWFiNi1hN2Q2LTRjNjctYWI0ZS1hOGUyOTM5YzFiMGYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNTViOTlhYjYtYTdkNi00YzY3LWFiNGUtYThlMjkzOWMxYjBmIn1d + + + + 1664645089735 + mark + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX1d + + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1664645092868 + mark + + DEL_EDGE + WyI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSIsImxhYmVsIjoiWSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkifV0= + + + + 1664645142026 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOi0xNzAuNDQxMDYwODg1NDY2OTUsInkiOjkwLjAxMzUzMjc3NDgxNDY5fV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + + + 1664645149601 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4Ijo3NTQuNDAxODgxNDA3MTk2NSwieSI6OTkuMTM1NzM0OTcxOTM2NjR9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjQwNC4yMzQ2MTA3NjQ4MTQyLCJ5IjotODkuMDEzODQzMjgzNjcxNzh9XQ== + + + + 1664645223291 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjY3Ni4wMDYyMjM4MDA2OTMsInkiOjEwMC40NDIzMjkyNjUzNzgzNn1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjc1NC40MDE4ODE0MDcxOTY1LCJ5Ijo5OS4xMzU3MzQ5NzE5MzY2NH1d + + + + 1664645228453 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjozMzYuMDE4NjM3MDg1NTg2NjUsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + + 1664645231883 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjU4Ny4xNTc4MTE4NDY2NTU2LCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0seyJ4Ijo2NzYuMDA2MjIzODAwNjkzLCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + + + 1664645237206 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9XQ== + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9LHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9XQ== + + + + \ No newline at end of file diff --git a/testsou/test4io.graphml b/testsou/test4io.graphml new file mode 100644 index 0000000..4780063 --- /dev/null +++ b/testsou/test4io.graphml @@ -0,0 +1,339 @@ + + + + + + + + + + + + CZ:cpymax.py + + + + + + + + + + + PZ:pmpymax.py + + + + + + + + + + + OUT: + + + + + + + + + + + IN: + + + + + + + + + + VCY + + + + + + + + + + + + VPY + + + + + + + + + + + + INC + + + + + + + + + + + + OUTC + + + + + + + + + + + + OUTC + + + + + + + + 1663949967711 + mark + + DEL_NODE + WyI4NjI2MzU1My0wZGUzLTRhOWYtYTg1YS1mM2U3Y2I2YjFkOGIiXQ== + + + ADD_NODE + WyJDWjpjcHltYXgucHkiLHsid2lkdGgiOjEyMiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjozMzksInkiOjEwN30se30sIjg2MjYzNTUzLTBkZTMtNGE5Zi1hODVhLWYzZTdjYjZiMWQ4YiJd + + + + 1663949982953 + mark + + DEL_NODE + WyI0OGQxOWM5NC01MjE5LTQyYWMtOGViYi0wMzJjMDg0ZWJiODYiXQ== + + + ADD_NODE + WyJQWjpwbXB5bWF4LnB5Iix7IndpZHRoIjoxMzYsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzQ0LCJ5IjoyNjR9LHt9LCI0OGQxOWM5NC01MjE5LTQyYWMtOGViYi0wMzJjMDg0ZWJiODYiXQ== + + + + 1663949987866 + mark + + SET_POS + WyI0OGQxOWM5NC01MjE5LTQyYWMtOGViYi0wMzJjMDg0ZWJiODYiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MzQxLCJ5IjoyMjB9XQ== + + + SET_POS + WyI0OGQxOWM5NC01MjE5LTQyYWMtOGViYi0wMzJjMDg0ZWJiODYiLHsieCI6MzQxLCJ5IjoyMjB9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1663949991370 + mark + + SET_POS + WyI4NjI2MzU1My0wZGUzLTRhOWYtYTg1YS1mM2U3Y2I2YjFkOGIiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MzM5LCJ5IjoxMDd9XQ== + + + SET_POS + WyI4NjI2MzU1My0wZGUzLTRhOWYtYTg1YS1mM2U3Y2I2YjFkOGIiLHsieCI6MzM5LCJ5IjoxMDd9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1663950005067 + mark + + DEL_NODE + WyI1MmYwNjcxZS03NDY0LTQxMjktYjhhZS05ZTRiOTMyMWE0ZjEiXQ== + + + ADD_NODE + WyJJTjoiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjoxMDAsInkiOjEwMH0se30sIjUyZjA2NzFlLTc0NjQtNDEyOS1iOGFlLTllNGI5MzIxYTRmMSJd + + + + 1663950014785 + mark + + DEL_NODE + WyIyNGViOTUwYy03N2IwLTQ4M2YtODA1My03NWUwYjU0YmU5NTIiXQ== + + + ADD_NODE + WyJPVVQ6Iix7IndpZHRoIjoxMDAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6NTQ5LCJ5IjoxMDZ9LHt9LCIyNGViOTUwYy03N2IwLTQ4M2YtODA1My03NWUwYjU0YmU5NTIiXQ== + + + + 1663950020034 + mark + + SET_POS + WyIyNGViOTUwYy03N2IwLTQ4M2YtODA1My03NWUwYjU0YmU5NTIiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6NTQ5LCJ5IjoxMDZ9XQ== + + + SET_POS + WyIyNGViOTUwYy03N2IwLTQ4M2YtODA1My03NWUwYjU0YmU5NTIiLHsieCI6NTQ5LCJ5IjoxMDZ9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1663950026545 + mark + + DEL_EDGE + WyI2Y2FhZTc0ZS1iOWQ3LTRlMDQtYmY1Mi1jYjAyMzYyMGY5MmYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI4NjI2MzU1My0wZGUzLTRhOWYtYTg1YS1mM2U3Y2I2YjFkOGIiLCJ0YXJnZXRJRCI6IjQ4ZDE5Yzk0LTUyMTktNDJhYy04ZWJiLTAzMmMwODRlYmI4NiIsImxhYmVsIjoiVkNZIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjMDA5Njg4Iiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjZjYWFlNzRlLWI5ZDctNGUwNC1iZjUyLWNiMDIzNjIwZjkyZiJ9XQ== + + + + 1663950043846 + mark + + SET_POS + WyI0OGQxOWM5NC01MjE5LTQyYWMtOGViYi0wMzJjMDg0ZWJiODYiLHsieCI6MzQxLCJ5IjoyMjB9LHsieCI6MzQ0LCJ5IjoyNjR9XQ== + + + SET_POS + WyI0OGQxOWM5NC01MjE5LTQyYWMtOGViYi0wMzJjMDg0ZWJiODYiLHsieCI6MzQ0LCJ5IjoyNjR9LHsieCI6MzQxLCJ5IjoyMjB9XQ== + + + + 1663950047652 + mark + + DEL_EDGE + WyIzMDg0OGE3MS03ZjA2LTQwMDctOWI4MS0xOWExYjE3MWUyZmUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI0OGQxOWM5NC01MjE5LTQyYWMtOGViYi0wMzJjMDg0ZWJiODYiLCJ0YXJnZXRJRCI6Ijg2MjYzNTUzLTBkZTMtNGE5Zi1hODVhLWYzZTdjYjZiMWQ4YiIsImxhYmVsIjoiVlBZIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmY2ZDAwIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjMwODQ4YTcxLTdmMDYtNDAwNy05YjgxLTE5YTFiMTcxZTJmZSJ9XQ== + + + + 1663950061658 + mark + + DEL_EDGE + WyJjNGZiY2I4YS03Zjg1LTQ2ODktYWY1ZC1kNTFhMmJhZGE2OTMiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI1MmYwNjcxZS03NDY0LTQxMjktYjhhZS05ZTRiOTMyMWE0ZjEiLCJ0YXJnZXRJRCI6Ijg2MjYzNTUzLTBkZTMtNGE5Zi1hODVhLWYzZTdjYjZiMWQ4YiIsImxhYmVsIjoiaW5wdXQiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiYzRmYmNiOGEtN2Y4NS00Njg5LWFmNWQtZDUxYTJiYWRhNjkzIn1d + + + + 1663950139190 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiI1MmYwNjcxZS03NDY0LTQxMjktYjhhZS05ZTRiOTMyMWE0ZjEiLCJ0YXJnZXRJRCI6Ijg2MjYzNTUzLTBkZTMtNGE5Zi1hODVhLWYzZTdjYjZiMWQ4YiIsImxhYmVsIjoiaW5wdXQiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sInR5cGUiOiJvcmRpbiIsInNvdXJjZSI6IjNiNjc1MzdkLWQwZjctNGQ3My1hYmFlLTM5ZjJkZTI5OGJiZCIsInRhcmdldCI6Ijg2MjYzNTUzLTBkZTMtNGE5Zi1hODVhLWYzZTdjYjZiMWQ4YiIsImJlbmREYXRhIjp7ImJlbmREaXN0YW5jZSI6LTYuNTcyNTIwMzA1NzgwOTI3ZS0xNCwiYmVuZFdlaWdodCI6MC41LCJiZW5kUG9pbnQiOnsieCI6MjQ0LjUsInkiOjEwNC4yMzIyMTc1NzMyMjE3Mn19LCJpZCI6ImM0ZmJjYjhhLTdmODUtNDY4OS1hZjVkLWQ1MWEyYmFkYTY5MyJ9XQ== + + + DEL_EDGE + WyJjNGZiY2I4YS03Zjg1LTQ2ODktYWY1ZC1kNTFhMmJhZGE2OTMiXQ== + + + + 1663950149420 + mark + + DEL_EDGE + WyI0ZGM5ZDk5NC02NjYyLTQxY2YtYjBlZi1kZTNkZjk2MWMxMmQiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI1MmYwNjcxZS03NDY0LTQxMjktYjhhZS05ZTRiOTMyMWE0ZjEiLCJ0YXJnZXRJRCI6Ijg2MjYzNTUzLTBkZTMtNGE5Zi1hODVhLWYzZTdjYjZiMWQ4YiIsImxhYmVsIjoiSU5QIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjOWMyN2IwIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjRkYzlkOTk0LTY2NjItNDFjZi1iMGVmLWRlM2RmOTYxYzEyZCJ9XQ== + + + + 1663950175662 + mark + + DEL_EDGE + WyJkNGNjMWFmOC05ZWNkLTQwZjgtOWM4Mi1kYTg1Mjk0NmY3NWUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI4NjI2MzU1My0wZGUzLTRhOWYtYTg1YS1mM2U3Y2I2YjFkOGIiLCJ0YXJnZXRJRCI6IjI0ZWI5NTBjLTc3YjAtNDgzZi04MDUzLTc1ZTBiNTRiZTk1MiIsImxhYmVsIjoiT1VUQyIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzAwOTY4OCIsInNoYXBlIjoic29saWQifSwiaWQiOiJkNGNjMWFmOC05ZWNkLTQwZjgtOWM4Mi1kYTg1Mjk0NmY3NWUifV0= + + + + 1663950192817 + mark + + SET_POS + WyIyNGViOTUwYy03N2IwLTQ4M2YtODA1My03NWUwYjU0YmU5NTIiLHsieCI6NTQ5LCJ5IjoxMDZ9LHsieCI6NjI2LCJ5IjoxMDN9XQ== + + + SET_POS + WyIyNGViOTUwYy03N2IwLTQ4M2YtODA1My03NWUwYjU0YmU5NTIiLHsieCI6NjI2LCJ5IjoxMDN9LHsieCI6NTQ5LCJ5IjoxMDZ9XQ== + + + + 1663950198417 + mark + + UPDATE_EDGE + WyI0ZGM5ZDk5NC02NjYyLTQxY2YtYjBlZi1kZTNkZjk2MWMxMmQiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjOWMyN2IwIiwic2hhcGUiOiJzb2xpZCJ9LCJJTlAiLHRydWVd + + + UPDATE_EDGE + WyI0ZGM5ZDk5NC02NjYyLTQxY2YtYjBlZi1kZTNkZjk2MWMxMmQiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjOWMyN2IwIiwic2hhcGUiOiJzb2xpZCJ9LCJJTkMiLHRydWVd + + + + 1664644088598 + mark + + DEL_EDGE + WyI0M2IyMDY1Yy0yMzIxLTQ4NWYtYmY0NS02ZDViZTZmMjMyZTYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI4NjI2MzU1My0wZGUzLTRhOWYtYTg1YS1mM2U3Y2I2YjFkOGIiLCJ0YXJnZXRJRCI6IjUyZjA2NzFlLTc0NjQtNDEyOS1iOGFlLTllNGI5MzIxYTRmMSIsImlkIjoiNDNiMjA2NWMtMjMyMS00ODVmLWJmNDUtNmQ1YmU2ZjIzMmU2In1d + + + + 1664644094331 + mark + + SET_POS + WyI1MmYwNjcxZS03NDY0LTQxMjktYjhhZS05ZTRiOTMyMWE0ZjEiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTY4LCJ5Ijo1NX1d + + + SET_POS + WyI1MmYwNjcxZS03NDY0LTQxMjktYjhhZS05ZTRiOTMyMWE0ZjEiLHsieCI6MTY4LCJ5Ijo1NX0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1664644110409 + mark + + SET_POS + WyI1MmYwNjcxZS03NDY0LTQxMjktYjhhZS05ZTRiOTMyMWE0ZjEiLHsieCI6MTY4LCJ5Ijo1NX0seyJ4IjozNDgsInkiOi0zNX1d + + + SET_POS + WyI1MmYwNjcxZS03NDY0LTQxMjktYjhhZS05ZTRiOTMyMWE0ZjEiLHsieCI6MzQ4LCJ5IjotMzV9LHsieCI6MTY4LCJ5Ijo1NX1d + + + + \ No newline at end of file diff --git a/testsou/test5fuy.graphml b/testsou/test5fuy.graphml new file mode 100644 index 0000000..4a2ba3d --- /dev/null +++ b/testsou/test5fuy.graphml @@ -0,0 +1,518 @@ + + + + + + + + + + + + PZ:pmpymax.py + + + + + + + + + + + CZ:cpymax.py + + + + + + + + + + + F1:funcall.py + + + + + + + + + + + F2U:funbu.py + + + + + + + + + + + F2Y:funby.py + + + + + + + + + + U + + + + + + + + + + + + U1 + + + + + + + + + + + + U2 + + + + + + + + + + + + Y2 + + + + + + + + + + + + Y + + + + + + + + + + + + Y1 + + + + + + + + 1664644923582 + mark + + DEL_NODE + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciXQ== + + + ADD_NODE + WyJQWjpwbXB5bWF4LnB5Iix7IndpZHRoIjoxMzYsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0se30sImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyJd + + + + 1664644939781 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1664644951652 + mark + + DEL_NODE + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiXQ== + + + ADD_NODE + WyJDWjpjcHltYXgucHkiLHsid2lkdGgiOjEyMiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjotMTM3Ljc3NjIwMzU0OTQyMzgzLCJ5Ijo5MS4zMjAxMjcwNjgyNTY0MX0se30sImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSJd + + + + 1664644958838 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOjEwMCwieSI6MTAwfV0= + + + + 1664644988539 + mark + + DEL_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiXQ== + + + ADD_NODE + WyJGMTpmdW5jYWxsLnB5Iix7IndpZHRoIjoxMTEsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0se30sImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCJd + + + + 1664645002278 + mark + + DEL_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + ADD_NODE + WyJGMjpmdW5ib2R5LnB5Iix7IndpZHRoIjoxMjAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHt9LCJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + + 1664645010353 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjoxMTAsInkiOjExMH1d + + + + 1664645015576 + mark + + DEL_EDGE + WyIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiVSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUifV0= + + + + 1664645043815 + mark + + DEL_EDGE + WyIzY2ZiNDBjZC01NTdhLTQ4NTAtOTNhNi1mZGMwOWNkMDA1ZjAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiVTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiM2NmYjQwY2QtNTU3YS00ODUwLTkzYTYtZmRjMDljZDAwNWYwIn1d + + + + 1664645057658 + mark + + DEL_EDGE + WyI3MTRkYjk4OS01NjcyLTQwM2ItYWU3Ni1mZDlhMjA4OTM0NzUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImxhYmVsIjoiVTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNzE0ZGI5ODktNTY3Mi00MDNiLWFlNzYtZmQ5YTIwODkzNDc1In1d + + + + 1664645068951 + mark + + DEL_EDGE + WyJhOGFlNzg5MC1iMmJiLTQyNzMtODc1My0wMTgxY2ViNDg2YzEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiWTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiYThhZTc4OTAtYjJiYi00MjczLTg3NTMtMDE4MWNlYjQ4NmMxIn1d + + + + 1664645081283 + mark + + DEL_EDGE + WyI1NWI5OWFiNi1hN2Q2LTRjNjctYWI0ZS1hOGUyOTM5YzFiMGYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNTViOTlhYjYtYTdkNi00YzY3LWFiNGUtYThlMjkzOWMxYjBmIn1d + + + + 1664645089735 + mark + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX1d + + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1664645092868 + mark + + DEL_EDGE + WyI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSIsImxhYmVsIjoiWSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkifV0= + + + + 1664645142026 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOi0xNzAuNDQxMDYwODg1NDY2OTUsInkiOjkwLjAxMzUzMjc3NDgxNDY5fV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + + + 1664645149601 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4Ijo3NTQuNDAxODgxNDA3MTk2NSwieSI6OTkuMTM1NzM0OTcxOTM2NjR9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjQwNC4yMzQ2MTA3NjQ4MTQyLCJ5IjotODkuMDEzODQzMjgzNjcxNzh9XQ== + + + + 1664645223291 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjY3Ni4wMDYyMjM4MDA2OTMsInkiOjEwMC40NDIzMjkyNjUzNzgzNn1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjc1NC40MDE4ODE0MDcxOTY1LCJ5Ijo5OS4xMzU3MzQ5NzE5MzY2NH1d + + + + 1664645228453 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjozMzYuMDE4NjM3MDg1NTg2NjUsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + + 1664645231883 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjU4Ny4xNTc4MTE4NDY2NTU2LCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0seyJ4Ijo2NzYuMDA2MjIzODAwNjkzLCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + + + 1664645237206 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9XQ== + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9LHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9XQ== + + + + 1664726409211 + mark + + DEL_NODE + WyI4NzBiYTZkYi03N2RhLTQ0NDQtYjM4YS0xYTRjYWIzMWQ2YTUiXQ== + + + ADD_NODE + WyJGMlk6ZnVuYnkucHkiLHsid2lkdGgiOjExMiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjozMzEsInkiOjI5fSx7fSwiODcwYmE2ZGItNzdkYS00NDQ0LWIzOGEtMWE0Y2FiMzFkNmE1Il0= + + + + 1664726416834 + mark + + SET_POS + WyI4NzBiYTZkYi03N2RhLTQ0NDQtYjM4YS0xYTRjYWIzMWQ2YTUiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MzM1LCJ5IjoxODl9XQ== + + + SET_POS + WyI4NzBiYTZkYi03N2RhLTQ0NDQtYjM4YS0xYTRjYWIzMWQ2YTUiLHsieCI6MzM1LCJ5IjoxODl9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1664726422521 + mark + + UPDATE_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsid2lkdGgiOjEyMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJGMjpmdW5ib2R5LnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsid2lkdGgiOjEzMiwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJGMlU6ZnVuYnUucHkiLHRydWVd + + + + 1664726441520 + mark + + SET_POS + WyI4NzBiYTZkYi03N2RhLTQ0NDQtYjM4YS0xYTRjYWIzMWQ2YTUiLHsieCI6MzM1LCJ5IjoxODl9LHsieCI6MzMxLCJ5IjoyOX1d + + + SET_POS + WyI4NzBiYTZkYi03N2RhLTQ0NDQtYjM4YS0xYTRjYWIzMWQ2YTUiLHsieCI6MzMxLCJ5IjoyOX0seyJ4IjozMzUsInkiOjE4OX1d + + + + 1664726445958 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHsieCI6MzM5LjAxODYzNzA4NTU4NjY1LCJ5IjoxNDYuOTM3NjkyNDQ1MzAzNH1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM5LjAxODYzNzA4NTU4NjY1LCJ5IjoxNDYuOTM3NjkyNDQ1MzAzNH0seyJ4IjozMzYuMDE4NjM3MDg1NTg2NjUsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + + 1664726465133 + mark + + ADD_EDGE + W3sibGFiZWwiOiJZMSIsInNvdXJjZSI6ImJlNWIwYTExLTljMzgtNGJmZS05ZTQxLWYzZWM3MjQzNDhkZSIsInRhcmdldCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsInN0eWxlIjp7ImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjoyNS4wMTU2MDQ0Mzg0NDI0NywiYmVuZFdlaWdodCI6MC41MDcyNjEyODIxMTY0NTQyLCJiZW5kUG9pbnQiOnsieCI6MTkzLjA1MTEzOTY4MzQxMjYsInkiOjgzLjQxODg4MzA4NDI0MDMzfX0sInNvdXJjZUlEIjoiZGIzMWJlM2YtM2U1OC00YzM2LTk3OWQtNDFmYjI4YWVmZTY4IiwidGFyZ2V0SUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0eXBlIjoib3JkaW4iLCJpZCI6ImJkYzBhMTU5LWM5N2EtNGYyMC1iMzBhLWY2N2IwOWIyODQzMiJ9XQ== + + + DEL_EDGE + WyJiZGMwYTE1OS1jOTdhLTRmMjAtYjMwYS1mNjdiMDliMjg0MzIiXQ== + + + + 1664726471028 + mark + + DEL_EDGE + WyIxNDQ2MWViZi1jYmE0LTQxZjQtOTUzNi1mZmYwMGQ4MTQ1MzYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6Ijg3MGJhNmRiLTc3ZGEtNDQ0NC1iMzhhLTFhNGNhYjMxZDZhNSIsImlkIjoiMTQ0NjFlYmYtY2JhNC00MWY0LTk1MzYtZmZmMDBkODE0NTM2In1d + + + + 1664726475754 + mark + + ADD_EDGE + W3sibGFiZWwiOiJZMiIsInNvdXJjZSI6IjllMWU5NGYzLWYyNTgtNDk1MS04NzY5LWZmODM2ZDBiYzY1MSIsInRhcmdldCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsInN0eWxlIjp7ImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjoyNS4zMjA1MDYyOTUwMzY2MywiYmVuZFdlaWdodCI6MC41MDYzMTY2MjMxMzk1MzU4LCJiZW5kUG9pbnQiOnsieCI6NDIwLjY1NTE0MTM1MTQ5NTgsInkiOjk1LjkzMzcyNTQ3NjExOTkyfX0sInNvdXJjZUlEIjoiYmQ5MmY5ZDgtN2Q2My00MmIyLTk2OGItMzkwOWVmNGM3MjM3IiwidGFyZ2V0SUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0eXBlIjoib3JkaW4iLCJpZCI6IjMwM2NkYTAyLTZlYWUtNGE4ZS05NTYyLWNlNzU1ZjQ1MDBiYyJ9XQ== + + + DEL_EDGE + WyIzMDNjZGEwMi02ZWFlLTRhOGUtOTU2Mi1jZTc1NWY0NTAwYmMiXQ== + + + + 1664726488610 + mark + + DEL_EDGE + WyI5NDUxNTk2NC1lNjRjLTQxZGUtYTRlZC1lZTZmNzU2MmRhMWYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI4NzBiYTZkYi03N2RhLTQ0NDQtYjM4YS0xYTRjYWIzMWQ2YTUiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTJBIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjMDA5Njg4Iiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6Ijk0NTE1OTY0LWU2NGMtNDFkZS1hNGVkLWVlNmY3NTYyZGExZiJ9XQ== + + + + 1664726603196 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiI4NzBiYTZkYi03N2RhLTQ0NDQtYjM4YS0xYTRjYWIzMWQ2YTUiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTJBIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjMDA5Njg4Iiwic2hhcGUiOiJzb2xpZCJ9LCJ0eXBlIjoib3JkaW4iLCJzb3VyY2UiOiI4NjI1MDcxZC1lZjc2LTRiMWEtYTQ5Mi05YjU5OGIwMDBmOWIiLCJ0YXJnZXQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJiZW5kRGF0YSI6eyJiZW5kRGlzdGFuY2UiOjMuNTUyNzEzNjc4ODAwNTAxZS0xNSwiYmVuZFdlaWdodCI6MC41LCJiZW5kUG9pbnQiOnsieCI6MTg3LjUsInkiOjY5Ljg1OTM3MTc1NTY5MDI4fX0sImlkIjoiOTQ1MTU5NjQtZTY0Yy00MWRlLWE0ZWQtZWU2Zjc1NjJkYTFmIn1d + + + DEL_EDGE + WyI5NDUxNTk2NC1lNjRjLTQxZGUtYTRlZC1lZTZmNzU2MmRhMWYiXQ== + + + + 1664726608251 + mark + + SET_POS + WyI4NzBiYTZkYi03N2RhLTQ0NDQtYjM4YS0xYTRjYWIzMWQ2YTUiLHsieCI6MzMxLCJ5IjoyOX0seyJ4IjozMzEsInkiOjMzfV0= + + + SET_POS + WyI4NzBiYTZkYi03N2RhLTQ0NDQtYjM4YS0xYTRjYWIzMWQ2YTUiLHsieCI6MzMxLCJ5IjozM30seyJ4IjozMzEsInkiOjI5fV0= + + + + 1664726616299 + mark + + DEL_EDGE + WyJkYzcxNjU4ZC00ZWFmLTQ5NDAtOWZjZi1iNmU0MjkxM2FkYTkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI4NzBiYTZkYi03N2RhLTQ0NDQtYjM4YS0xYTRjYWIzMWQ2YTUiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiMwMDAwMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiZGM3MTY1OGQtNGVhZi00OTQwLTlmY2YtYjZlNDI5MTNhZGE5In1d + + + + \ No newline at end of file diff --git a/tools/mayuresh.graphml b/tools/mayuresh.graphml new file mode 100644 index 0000000..5d6cf77 --- /dev/null +++ b/tools/mayuresh.graphml @@ -0,0 +1,280 @@ + + + + + + + + + + + + PZ:cardiac_pm.py + + + + + + + + + + + CZ:pidmayuresh.py + + + + + + + + + + + XZ:plotym.py + + + + + + + + + + PYM + + + + + + + + + + + + CU + + + + + + + + + + + + XYM + + + + + + + + 1644943336906 + sanmi + + DEL_NODE + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiXQ== + + + ADD_NODE + WyJQWjpjYXJkaWFjX3BtLnB5Iix7IndpZHRoIjoxNDgsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjQ1LCJ5Ijo4NX0se30sIjU1MDg2NWQxLTI4YTMtNDBhOS05ZTI1LWQzYjY4YWQyNzdkNiJd + + + + 1644943355554 + sanmi + + DEL_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiXQ== + + + ADD_NODE + WyJDWjpkdW1teV9jb250cm9sbGVyLnB5Iix7IndpZHRoIjoxOTMsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MjUyLCJ5IjoyNjR9LHt9LCIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiXQ== + + + + 1644943358106 + sanmi + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MTM0LCJ5IjoyNjZ9XQ== + + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTM0LCJ5IjoyNjZ9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + + + 1644943359494 + sanmi + + SET_POS + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MjQ1LCJ5Ijo4NX1d + + + SET_POS + WyI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLHsieCI6MjQ1LCJ5Ijo4NX0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1644943362210 + sanmi + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MTM0LCJ5IjoyNjZ9LHsieCI6MjUyLCJ5IjoyNjR9XQ== + + + SET_POS + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsieCI6MjUyLCJ5IjoyNjR9LHsieCI6MTM0LCJ5IjoyNjZ9XQ== + + + + 1644943375398 + sanmi + + DEL_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiXQ== + + + ADD_NODE + WyJYWjpwbG90eW0iLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4Ijo1MDcsInkiOjE2MH0se30sIjRiODYwYWFlLTA1YzktNGViNS1iYzQ4LWY4MDAwY2NiNDJhOCJd + + + + 1644943378630 + sanmi + + SET_POS + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NTA3LCJ5IjoxNjB9XQ== + + + SET_POS + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsieCI6NTA3LCJ5IjoxNjB9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + + + 1644943386853 + sanmi + + DEL_EDGE + WyI0NzcwODQwZi04OGEwLTQ3NTItOWMxOS0yZTdmODlmOGZhNzkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI1NTA4NjVkMS0yOGEzLTQwYTktOWUyNS1kM2I2OGFkMjc3ZDYiLCJ0YXJnZXRJRCI6IjRiODYwYWFlLTA1YzktNGViNS1iYzQ4LWY4MDAwY2NiNDJhOCIsImxhYmVsIjoiUFlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjN2M0ZGZmIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjQ3NzA4NDBmLTg4YTAtNDc1Mi05YzE5LTJlN2Y4OWY4ZmE3OSJ9XQ== + + + + 1644943394719 + sanmi + + DEL_EDGE + WyI3ZjJiMWM0Yy04ZjJmLTQyZjQtYjU1Yy0xY2RlNzdiMWU4NTIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLCJ0YXJnZXRJRCI6IjU1MDg2NWQxLTI4YTMtNDBhOS05ZTI1LWQzYjY4YWQyNzdkNiIsImxhYmVsIjoiQ1UiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiN2YyYjFjNGMtOGYyZi00MmY0LWI1NWMtMWNkZTc3YjFlODUyIn1d + + + + 1644943403841 + sanmi + + DEL_EDGE + WyIyZDdlZjk4ZS04Y2E5LTRhZjMtYWQxOS1hYzM0MTQ2ZmZlYmYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLCJ0YXJnZXRJRCI6IjM2YjlmMWRmLTdjODQtNGYwNy04ZmNlLWM0YTZmNjQ2MjkzMSIsImxhYmVsIjoiWFlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjMTU2NWMwIiwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjJkN2VmOThlLThjYTktNGFmMy1hZDE5LWFjMzQxNDZmZmViZiJ9XQ== + + + + 1644943683422 + sanmi + + UPDATE_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsid2lkdGgiOjEwMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJYWjpwbG90eW0iLHRydWVd + + + UPDATE_NODE + WyI0Yjg2MGFhZS0wNWM5LTRlYjUtYmM0OC1mODAwMGNjYjQyYTgiLHsid2lkdGgiOjExNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJYWjpwbG90eW0ucHkiLHRydWVd + + + + 1662144313252 + sanmi + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpkdW1teV9jb250cm9sbGVyLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nbmJhbmcucHkiLHRydWVd + + + + 1662144436617 + sanmi + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nbmJhbmcucHkiLHRydWVd + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nYmFuZy5weSIsdHJ1ZV0= + + + + 1662583658804 + Shannon + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpiYW5nYmFuZy5weSIsdHJ1ZV0= + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpzaGFubm9uLnB5Iix0cnVlXQ== + + + + 1663351448627 + mark + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpzaGFubm9uLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpwaWQyLnB5Iix0cnVlXQ== + + + + 1663444756220 + mark + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpwaWQyLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpwaWRzaWcucHkiLHRydWVd + + + + 1664561202527 + mark + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpwaWRzaWcucHkiLHRydWVd + + + UPDATE_NODE + WyIzNmI5ZjFkZi03Yzg0LTRmMDctOGZjZS1jNGE2ZjY0NjI5MzEiLHsid2lkdGgiOjE5MywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpwaWRtYXl1cmVzaC5weSIsdHJ1ZV0= + + + + \ No newline at end of file diff --git a/tools/pidmayuresh.py b/tools/pidmayuresh.py new file mode 100644 index 0000000..178b308 --- /dev/null +++ b/tools/pidmayuresh.py @@ -0,0 +1,65 @@ +import numpy as np +import math +import concore +dT = 0.1 +global Prev_Error, I, freq +Prev_Error = 0 +I = 0 + +sp = concore.tryparam('sp', 67.5) +Kp = concore.tryparam('Kp', 0.075) +Ki = concore.tryparam('Ki', 0.02) +Kd = concore.tryparam('Kd', 0.005) +freq = concore.tryparam('freq',30) +sigout = concore.tryparam('sigout',True) +cin = concore.tryparam('cin', 'hr') + +def pid_controller(ym): + global Prev_Error, I, freq + if cin == 'hr': + Error = sp - ym[1] + elif cin == 'map': + Error = sp - ym[0] + else: + print('invalid control input '+cin) + quit() + P = Error + I = I + Error*dT + D = (Error - Prev_Error )/dT + amp = Kp*P + Ki*I + Kd*D + Prev_Error = Error + if sigout: + amp = 3.0/(1.0 + math.exp(amp)) + ustar = np.array([amp,freq]) + return ustar + + +concore.default_maxtime(150) +concore.delay = 0.02 +init_simtime_u = "[0.0, 0.0,0.0]" +init_simtime_ym = "[0.0, 70.0,91]" +u = np.array([concore.initval(init_simtime_u)]).T +print("Mayuresh's and Shannon's PID controller: sp is "+str(sp)) +print(concore.params) +while(concore.simtime Date: Sun, 2 Oct 2022 21:00:12 -0400 Subject: [PATCH 100/113] pidmayuresh returns state --- tools/pidmayuresh.py | 10 +++---- tools/pidmayuresh1.py | 65 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 tools/pidmayuresh1.py diff --git a/tools/pidmayuresh.py b/tools/pidmayuresh.py index 178b308..9494478 100644 --- a/tools/pidmayuresh.py +++ b/tools/pidmayuresh.py @@ -2,7 +2,7 @@ import math import concore dT = 0.1 -global Prev_Error, I, freq +global freq Prev_Error = 0 I = 0 @@ -14,8 +14,8 @@ sigout = concore.tryparam('sigout',True) cin = concore.tryparam('cin', 'hr') -def pid_controller(ym): - global Prev_Error, I, freq +def pid_controller(Prev_Error, I, ym): + global freq if cin == 'hr': Error = sp - ym[1] elif cin == 'map': @@ -31,7 +31,7 @@ def pid_controller(ym): if sigout: amp = 3.0/(1.0 + math.exp(amp)) ustar = np.array([amp,freq]) - return ustar + return (Prev_Error, I, ustar) concore.default_maxtime(150) @@ -49,7 +49,7 @@ def pid_controller(ym): if concore.simtime < 0: ustar = np.array([0.0,30.0]) else: - ustar = pid_controller(ym) + (Prev_Error, I, ustar) = pid_controller(Prev_Error, I, ym) print(str(concore.simtime) + " u="+str(ustar) + "ym="+str(ym)) concore.write(1,"u",list(ustar),delta=0) diff --git a/tools/pidmayuresh1.py b/tools/pidmayuresh1.py new file mode 100644 index 0000000..178b308 --- /dev/null +++ b/tools/pidmayuresh1.py @@ -0,0 +1,65 @@ +import numpy as np +import math +import concore +dT = 0.1 +global Prev_Error, I, freq +Prev_Error = 0 +I = 0 + +sp = concore.tryparam('sp', 67.5) +Kp = concore.tryparam('Kp', 0.075) +Ki = concore.tryparam('Ki', 0.02) +Kd = concore.tryparam('Kd', 0.005) +freq = concore.tryparam('freq',30) +sigout = concore.tryparam('sigout',True) +cin = concore.tryparam('cin', 'hr') + +def pid_controller(ym): + global Prev_Error, I, freq + if cin == 'hr': + Error = sp - ym[1] + elif cin == 'map': + Error = sp - ym[0] + else: + print('invalid control input '+cin) + quit() + P = Error + I = I + Error*dT + D = (Error - Prev_Error )/dT + amp = Kp*P + Ki*I + Kd*D + Prev_Error = Error + if sigout: + amp = 3.0/(1.0 + math.exp(amp)) + ustar = np.array([amp,freq]) + return ustar + + +concore.default_maxtime(150) +concore.delay = 0.02 +init_simtime_u = "[0.0, 0.0,0.0]" +init_simtime_ym = "[0.0, 70.0,91]" +u = np.array([concore.initval(init_simtime_u)]).T +print("Mayuresh's and Shannon's PID controller: sp is "+str(sp)) +print(concore.params) +while(concore.simtime Date: Sun, 2 Oct 2022 21:23:26 -0400 Subject: [PATCH 101/113] Update pidmayuresh.py --- tools/pidmayuresh.py | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/tools/pidmayuresh.py b/tools/pidmayuresh.py index 9494478..1ffc761 100644 --- a/tools/pidmayuresh.py +++ b/tools/pidmayuresh.py @@ -36,30 +36,17 @@ def pid_controller(Prev_Error, I, ym): concore.default_maxtime(150) concore.delay = 0.02 -init_simtime_u = "[0.0, 0.0,0.0]" init_simtime_ym = "[0.0, 70.0,91]" -u = np.array([concore.initval(init_simtime_u)]).T -print("Mayuresh's and Shannon's PID controller: sp is "+str(sp)) +ym = np.array(concore.initval(init_simtime_ym)) +print("Mayuresh's PID controller: sp is "+str(sp)) print(concore.params) while(concore.simtime Date: Mon, 3 Oct 2022 14:40:44 -0400 Subject: [PATCH 102/113] remove globals from mayuresh --- tools/pidmayuresh.py | 22 +++++++++--------- tools/pidmayuresh2.py | 52 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 11 deletions(-) create mode 100644 tools/pidmayuresh2.py diff --git a/tools/pidmayuresh.py b/tools/pidmayuresh.py index 1ffc761..900d32f 100644 --- a/tools/pidmayuresh.py +++ b/tools/pidmayuresh.py @@ -2,9 +2,6 @@ import math import concore dT = 0.1 -global freq -Prev_Error = 0 -I = 0 sp = concore.tryparam('sp', 67.5) Kp = concore.tryparam('Kp', 0.075) @@ -14,8 +11,9 @@ sigout = concore.tryparam('sigout',True) cin = concore.tryparam('cin', 'hr') -def pid_controller(Prev_Error, I, ym): - global freq +def pid_controller(state, ym, sp, Kp, Ki, Kd, sigout, cin, low, up): + Prev_Error = state[0] + I = state[1] if cin == 'hr': Error = sp - ym[1] elif cin == 'map': @@ -29,24 +27,26 @@ def pid_controller(Prev_Error, I, ym): amp = Kp*P + Ki*I + Kd*D Prev_Error = Error if sigout: - amp = 3.0/(1.0 + math.exp(amp)) - ustar = np.array([amp,freq]) - return (Prev_Error, I, ustar) + amp = (up-low)/(1.0 + math.exp(amp)) + low + state = [Prev_Error, I] + return (state, amp) concore.default_maxtime(150) concore.delay = 0.02 init_simtime_ym = "[0.0, 70.0,91]" ym = np.array(concore.initval(init_simtime_ym)) +state = [0.0, 0.0] print("Mayuresh's PID controller: sp is "+str(sp)) print(concore.params) while(concore.simtime Date: Mon, 3 Oct 2022 14:41:35 -0400 Subject: [PATCH 103/113] Create pidmayuresh3.py --- tools/pidmayuresh3.py | 52 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 tools/pidmayuresh3.py diff --git a/tools/pidmayuresh3.py b/tools/pidmayuresh3.py new file mode 100644 index 0000000..900d32f --- /dev/null +++ b/tools/pidmayuresh3.py @@ -0,0 +1,52 @@ +import numpy as np +import math +import concore +dT = 0.1 + +sp = concore.tryparam('sp', 67.5) +Kp = concore.tryparam('Kp', 0.075) +Ki = concore.tryparam('Ki', 0.02) +Kd = concore.tryparam('Kd', 0.005) +freq = concore.tryparam('freq',30) +sigout = concore.tryparam('sigout',True) +cin = concore.tryparam('cin', 'hr') + +def pid_controller(state, ym, sp, Kp, Ki, Kd, sigout, cin, low, up): + Prev_Error = state[0] + I = state[1] + if cin == 'hr': + Error = sp - ym[1] + elif cin == 'map': + Error = sp - ym[0] + else: + print('invalid control input '+cin) + quit() + P = Error + I = I + Error*dT + D = (Error - Prev_Error )/dT + amp = Kp*P + Ki*I + Kd*D + Prev_Error = Error + if sigout: + amp = (up-low)/(1.0 + math.exp(amp)) + low + state = [Prev_Error, I] + return (state, amp) + + +concore.default_maxtime(150) +concore.delay = 0.02 +init_simtime_ym = "[0.0, 70.0,91]" +ym = np.array(concore.initval(init_simtime_ym)) +state = [0.0, 0.0] +print("Mayuresh's PID controller: sp is "+str(sp)) +print(concore.params) +while(concore.simtime Date: Wed, 5 Oct 2022 14:48:11 -0400 Subject: [PATCH 104/113] Create oldeditgraph --- oldeditgraph | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100755 oldeditgraph diff --git a/oldeditgraph b/oldeditgraph new file mode 100755 index 0000000..2d2553a --- /dev/null +++ b/oldeditgraph @@ -0,0 +1,14 @@ +#!/bin/bash +which open +if [ $? == 0 ] +then + open https://pradeeban.github.io/DHGWorkflow/ +else + which xdg-open + if [ $? == 0 ] + then + xdg-open https://pradeeban.github.io/DHGWorkflow/ + else + echo "unable to open browser for DHGWorkflow" + fi +fi From a44a65fad1a7bdbddfab9b3fc1d299c140e21d06 Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Wed, 5 Oct 2022 14:50:10 -0400 Subject: [PATCH 105/113] mayuresh -> may --- tools/{mayuresh.graphml => may.graphml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tools/{mayuresh.graphml => may.graphml} (100%) diff --git a/tools/mayuresh.graphml b/tools/may.graphml similarity index 100% rename from tools/mayuresh.graphml rename to tools/may.graphml From 2c3133829fb231af0217f455b163e2fbb678d2ce Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Wed, 19 Oct 2022 00:28:08 -0400 Subject: [PATCH 106/113] Chrome; funcall/body; test6 --- editgraph | 2 +- editgraph.bat | 2 +- testsou/funbody.py | 9 +- testsou/funcall.py | 12 +- testsou/passu.py | 16 + testsou/passym.py | 16 + testsou/test6.graphml | 1029 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 1075 insertions(+), 11 deletions(-) create mode 100644 testsou/passu.py create mode 100644 testsou/passym.py create mode 100644 testsou/test6.graphml diff --git a/editgraph b/editgraph index b78757f..832a8cf 100755 --- a/editgraph +++ b/editgraph @@ -2,7 +2,7 @@ which open if [ $? == 0 ] then - open https://controlcore-project.github.io/concore-editor/ + open -a 'Google Chrome' https://controlcore-project.github.io/concore-editor/ else which xdg-open if [ $? == 0 ] diff --git a/editgraph.bat b/editgraph.bat index 8643ff7..52f4da6 100644 --- a/editgraph.bat +++ b/editgraph.bat @@ -1,2 +1,2 @@ -start https://controlcore-project.github.io/concore-editor/ +start chrome https://controlcore-project.github.io/concore-editor/ diff --git a/testsou/funbody.py b/testsou/funbody.py index 5dfda42..4d0b3d1 100644 --- a/testsou/funbody.py +++ b/testsou/funbody.py @@ -12,14 +12,15 @@ init_simtime_ym = "[0.0, 0.0, 0.0]" u = concore.initval(init_simtime_u) -ym = concore.initval(init_simtime_ym) +ym = concore2.initval(init_simtime_ym) while(concore.simtime + + + + + + + + + + + PZ:pmpymax.py + + + + + + + + + + + CZ:cpymax.py + + + + + + + + + + + YZ1:passym.py + + + + + + + + + + + YZ2:passym.py + + + + + + + + + + + UZ1:passu.py + + + + + + + + + + + UZ2:passu.py + + + + + + + + + + Y2 + + + + + + + + + + + + Y + + + + + + + + + + + + Y1 + + + + + + + + + + + + U + + + + + + + + + + + + U1 + + + + + + + + + + + + U2 + + + + + + + + 1664644923582 + mark + + DEL_NODE + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciXQ== + + + ADD_NODE + WyJQWjpwbXB5bWF4LnB5Iix7IndpZHRoIjoxMzYsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0se30sImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyJd + + ea1f3ba8fe573453400ffda5fad41219 + + + 1664644939781 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4IjoxMDAsInkiOjEwMH1d + + 4d28b3ac41cd2913a677da0a4b65b424 + + + 1664644951652 + mark + + DEL_NODE + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiXQ== + + + ADD_NODE + WyJDWjpjcHltYXgucHkiLHsid2lkdGgiOjEyMiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjotMTM3Ljc3NjIwMzU0OTQyMzgzLCJ5Ijo5MS4zMjAxMjcwNjgyNTY0MX0se30sImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSJd + + 7d1c82d143a33ca11a4f968849bad104 + + + 1664644958838 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOjEwMCwieSI6MTAwfV0= + + 2e1ad74435543de42a296bb9a0620e63 + + + 1664644988539 + mark + + DEL_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiXQ== + + + ADD_NODE + WyJGMTpmdW5jYWxsLnB5Iix7IndpZHRoIjoxMTEsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0se30sImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCJd + + ed42ad47c94f87d676c7c83ce9ded915 + + + 1664645002278 + mark + + DEL_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + ADD_NODE + WyJGMjpmdW5ib2R5LnB5Iix7IndpZHRoIjoxMjAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHt9LCJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + 0f42a42f08b5d6633750c6cd0a52cd7f + + + 1664645010353 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjoxMTAsInkiOjExMH1d + + 9ed03855520c803cecdd1d7497a92151 + + + 1664645015576 + mark + + DEL_EDGE + WyIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiVSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUifV0= + + 725908dc36e7bc154d1d8dd0e98a412d + + + 1664645043815 + mark + + DEL_EDGE + WyIzY2ZiNDBjZC01NTdhLTQ4NTAtOTNhNi1mZGMwOWNkMDA1ZjAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiVTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiM2NmYjQwY2QtNTU3YS00ODUwLTkzYTYtZmRjMDljZDAwNWYwIn1d + + 9f18da8775e24b7f2f9902f2842eb63e + + + 1664645057658 + mark + + DEL_EDGE + WyI3MTRkYjk4OS01NjcyLTQwM2ItYWU3Ni1mZDlhMjA4OTM0NzUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImxhYmVsIjoiVTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNzE0ZGI5ODktNTY3Mi00MDNiLWFlNzYtZmQ5YTIwODkzNDc1In1d + + 3e1c6e41350aaf47123ec7cf25e1b62c + + + 1664645068951 + mark + + DEL_EDGE + WyJhOGFlNzg5MC1iMmJiLTQyNzMtODc1My0wMTgxY2ViNDg2YzEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiWTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiYThhZTc4OTAtYjJiYi00MjczLTg3NTMtMDE4MWNlYjQ4NmMxIn1d + + 269c6a2baeea1b2785ce71ff56f4a76d + + + 1664645081283 + mark + + DEL_EDGE + WyI1NWI5OWFiNi1hN2Q2LTRjNjctYWI0ZS1hOGUyOTM5YzFiMGYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNTViOTlhYjYtYTdkNi00YzY3LWFiNGUtYThlMjkzOWMxYjBmIn1d + + 3c7cb858225e79ecf43defb7b70197a6 + + + 1664645089735 + mark + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX1d + + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0seyJ4IjoxMDAsInkiOjEwMH1d + + b6b4fcd96e508461f87e4513dbd0170e + + + 1664645092868 + mark + + DEL_EDGE + WyI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSIsImxhYmVsIjoiWSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkifV0= + + f2a382cf010520ed6d8d1167488af14c + + + 1664645142026 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOi0xNzAuNDQxMDYwODg1NDY2OTUsInkiOjkwLjAxMzUzMjc3NDgxNDY5fV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + 5fc1c53a84494c7b3b749c475cf09d33 + + + 1664645149601 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4Ijo3NTQuNDAxODgxNDA3MTk2NSwieSI6OTkuMTM1NzM0OTcxOTM2NjR9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjQwNC4yMzQ2MTA3NjQ4MTQyLCJ5IjotODkuMDEzODQzMjgzNjcxNzh9XQ== + + 627a3a19a5e310402ab0c81e854bb1aa + + + 1664645223291 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjY3Ni4wMDYyMjM4MDA2OTMsInkiOjEwMC40NDIzMjkyNjUzNzgzNn1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjc1NC40MDE4ODE0MDcxOTY1LCJ5Ijo5OS4xMzU3MzQ5NzE5MzY2NH1d + + 65480a229a142f0b48daa6727b8aae7b + + + 1664645228453 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjozMzYuMDE4NjM3MDg1NTg2NjUsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + 1359e922778d54bbfc88d8040c764247 + + + 1664645231883 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjU4Ny4xNTc4MTE4NDY2NTU2LCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0seyJ4Ijo2NzYuMDA2MjIzODAwNjkzLCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + ef15c4c7e39dcf45dee8b9e5d071d32f + + + 1664645237206 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9XQ== + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9LHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9XQ== + + a8ef099b87ae2a958e58d7b138deb5f5 + + + 1664646509534 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImxhYmVsIjoiVTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sInR5cGUiOiJvcmRpbiIsInNvdXJjZSI6IjYyOGMyOTI0LWI2YzEtNDBjNi05ZjM5LTZjMDUxNmI3MGI1YSIsInRhcmdldCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImJlbmREYXRhIjp7ImJlbmREaXN0YW5jZSI6MCwiYmVuZFdlaWdodCI6MC41LCJiZW5kUG9pbnQiOnsieCI6NDkxLjU4ODIyNDQ2NjEyMTEsInkiOjEwMC42MzA4MzY4MzIxNzMyMn19LCJpZCI6IjcxNGRiOTg5LTU2NzItNDAzYi1hZTc2LWZkOWEyMDg5MzQ3NSJ9XQ== + + + DEL_EDGE + WyI3MTRkYjk4OS01NjcyLTQwM2ItYWU3Ni1mZDlhMjA4OTM0NzUiXQ== + + be06f5694030d340acf43985d4764362 + + + 1664646579649 + mark + + DEL_EDGE + WyIwM2RlN2FjYS1hZTA0LTQ5ZWEtYThjZC04YTg3YTA0MjA0ZjEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImlkIjoiMDNkZTdhY2EtYWUwNC00OWVhLWE4Y2QtOGE4N2EwNDIwNGYxIn1d + + 7d575287a574997fdda6282a846bf1f3 + + + 1664646592082 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sInR5cGUiOiJvcmRpbiIsInNvdXJjZSI6ImZlYjllMGU5LTA2NTktNDdmYy1iNGQzLTZiZGRkOGM2YjNkNiIsInRhcmdldCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImJlbmREYXRhIjp7ImJlbmREaXN0YW5jZSI6MjAsImJlbmRXZWlnaHQiOjAuNSwiYmVuZFBvaW50Ijp7IngiOjE4Ny42MDY5NDA0NzI4NDkzLCJ5Ijo3My4wMDY2NjE0ODk4MDV9fSwiaWQiOiI1NWI5OWFiNi1hN2Q2LTRjNjctYWI0ZS1hOGUyOTM5YzFiMGYifV0= + + + DEL_EDGE + WyI1NWI5OWFiNi1hN2Q2LTRjNjctYWI0ZS1hOGUyOTM5YzFiMGYiXQ== + + c66b2c684c2b0358e2d0f826f2109262 + + + 1664646592082 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiWTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sInR5cGUiOiJvcmRpbiIsInNvdXJjZSI6Ijg3ODFjMWFiLTI3MzUtNGE1NS1iMzQyLWExMzBhNTlmMzcwNyIsInRhcmdldCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImJlbmREYXRhIjp7ImJlbmREaXN0YW5jZSI6MjAsImJlbmRXZWlnaHQiOjAuNSwiYmVuZFBvaW50Ijp7IngiOjQyNi42MTkzODI1NjIzMjg2LCJ5Ijo3Ni41MjAxMzYxMTU4NzI2NX19LCJpZCI6ImE4YWU3ODkwLWIyYmItNDI3My04NzUzLTAxODFjZWI0ODZjMSJ9XQ== + + + DEL_EDGE + WyJhOGFlNzg5MC1iMmJiLTQyNzMtODc1My0wMTgxY2ViNDg2YzEiXQ== + + 1692856443b261d4f75b038cf1e23765 + + + 1664646592082 + mark + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiVTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJzaGFwZSI6InNvbGlkIn0sInR5cGUiOiJvcmRpbiIsInNvdXJjZSI6ImFhNjZiNDZiLTRkYTgtNDAxMC1iODk0LWQ0YmFhNWEzYWY4MiIsInRhcmdldCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImJlbmREYXRhIjp7ImJlbmREaXN0YW5jZSI6MC4wMDAwMjc4NjgxNzM4NjU0NjQwMywiYmVuZFdlaWdodCI6MC41MDAwMDAwMDQwMzA1MDY2LCJiZW5kUG9pbnQiOnsieCI6MjQ1Ljc1OTMxODQ3MDQxOTI2LCJ5Ijo5OC4zNDU3NTk1MDM4MjE4N319LCJpZCI6IjNjZmI0MGNkLTU1N2EtNDg1MC05M2E2LWZkYzA5Y2QwMDVmMCJ9XQ== + + + DEL_EDGE + WyIzY2ZiNDBjZC01NTdhLTQ4NTAtOTNhNi1mZGMwOWNkMDA1ZjAiXQ== + + 3d1318e98dae670aedf9951cfce61845 + + + 1664646592082 + mark + + ADD_NODE + WyJGMjpmdW5ib2R5LnB5Iix7IndpZHRoIjoxMjAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHsiaWQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJsYWJlbCI6IkYyOmZ1bmJvZHkucHkiLCJ0eXBlIjoib3JkaW4iLCJzdHlsZSI6eyJ3aWR0aCI6MTIwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX19LCJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + DEL_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + f51c4bd0db9fad59ce9378267b903cf9 + + + 1664646604837 + mark + + DEL_EDGE + WyIzN2UyMzg0NC1hODgwLTQ1MjktOTA2Mi00YmIyNTIxZTI5YzUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiMzdlMjM4NDQtYTg4MC00NTI5LTkwNjItNGJiMjUyMWUyOWM1In1d + + 527011ae5fbf69f274528971cab08f84 + + + 1665424653478 + mark + + DEL_NODE + WyI4MDZhN2NjOS1hNjNlLTQ5YmMtOTE0MC1jM2VhYmU4ZjZiNGQiXQ== + + + ADD_NODE + WyJGOmZ1bmJvZHkucHkiLHsid2lkdGgiOjExMSwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjoxMTYsInkiOjI3OX0se30sIjgwNmE3Y2M5LWE2M2UtNDliYy05MTQwLWMzZWFiZThmNmI0ZCJd + + 3eb804681aaa2d826b6c0b3bb5d9123e + + + 1665424663512 + mark + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0seyJ4IjoxMDUsInkiOjg4Ljc3MzYyMjgyNjIzMzExfV0= + + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTA1LCJ5Ijo4OC43NzM2MjI4MjYyMzMxMX0seyJ4IjoxMDAsInkiOjk0Ljc3MzYyMjgyNjIzMzExfV0= + + 0597535801686ff69b9c5c0ee61b0dac + + + 1665424668269 + mark + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTA1LCJ5Ijo4OC43NzM2MjI4MjYyMzMxMX0seyJ4IjoxMTAsInkiOjEzMi43NzM2MjI4MjYyMzMxMn1d + + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTEwLCJ5IjoxMzIuNzczNjIyODI2MjMzMTJ9LHsieCI6MTA1LCJ5Ijo4OC43NzM2MjI4MjYyMzMxMX1d + + 9ec6951d02aabe2e1ae7b1b4bd6dbdee + + + 1665424676130 + mark + + SET_POS + WyI4MDZhN2NjOS1hNjNlLTQ5YmMtOTE0MC1jM2VhYmU4ZjZiNGQiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTE2LCJ5IjoyNzl9XQ== + + + SET_POS + WyI4MDZhN2NjOS1hNjNlLTQ5YmMtOTE0MC1jM2VhYmU4ZjZiNGQiLHsieCI6MTE2LCJ5IjoyNzl9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + bfeea58c54d7663f3421b29a5f76e50c + + + 1665424726877 + mark + + DEL_NODE + WyJlNWJiZmI0Ni02MTQ3LTQwNDgtYWUzNS0wYzI5NmE3NTQ1YjUiXQ== + + + ADD_NODE + WyJGMzpjcHltYXQucHkiLHsid2lkdGgiOjExNiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjoyNjEsInkiOjI2M30se30sImU1YmJmYjQ2LTYxNDctNDA0OC1hZTM1LTBjMjk2YTc1NDViNSJd + + eedb7fd5d1df83116402892fca2e9c4b + + + 1665424732246 + mark + + SET_POS + WyJlNWJiZmI0Ni02MTQ3LTQwNDgtYWUzNS0wYzI5NmE3NTQ1YjUiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MjYxLCJ5IjoyNjN9XQ== + + + SET_POS + WyJlNWJiZmI0Ni02MTQ3LTQwNDgtYWUzNS0wYzI5NmE3NTQ1YjUiLHsieCI6MjYxLCJ5IjoyNjN9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + 177b97bf905ced3bdb9f9fb765b3bb70 + + + 1665424736147 + mark + + ADD_NODE + WyJGMzpjcHltYXQucHkiLHsid2lkdGgiOjExNiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjoyNjEsInkiOjI2M30seyJpZCI6ImU1YmJmYjQ2LTYxNDctNDA0OC1hZTM1LTBjMjk2YTc1NDViNSIsImxhYmVsIjoiRjM6Y3B5bWF0LnB5IiwidHlwZSI6Im9yZGluIiwic3R5bGUiOnsid2lkdGgiOjExNiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9fSwiZTViYmZiNDYtNjE0Ny00MDQ4LWFlMzUtMGMyOTZhNzU0NWI1Il0= + + + DEL_NODE + WyJlNWJiZmI0Ni02MTQ3LTQwNDgtYWUzNS0wYzI5NmE3NTQ1YjUiXQ== + + 282c276ffd2bcd1f29bfcfab1c0fb991 + + + 1665424739685 + mark + + ADD_NODE + WyJGOmZ1bmJvZHkucHkiLHsid2lkdGgiOjExMSwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjoxMTYsInkiOjI3OX0seyJpZCI6IjgwNmE3Y2M5LWE2M2UtNDliYy05MTQwLWMzZWFiZThmNmI0ZCIsImxhYmVsIjoiRjpmdW5ib2R5LnB5IiwidHlwZSI6Im9yZGluIiwic3R5bGUiOnsid2lkdGgiOjExMSwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9fSwiODA2YTdjYzktYTYzZS00OWJjLTkxNDAtYzNlYWJlOGY2YjRkIl0= + + + DEL_NODE + WyI4MDZhN2NjOS1hNjNlLTQ5YmMtOTE0MC1jM2VhYmU4ZjZiNGQiXQ== + + 61f14b5265628d0d1cfd0049e3511e5e + + + 1666148791542 + mark + + ADD_EDGE + W3sibGFiZWwiOiJVIiwic291cmNlIjoiZTA1ZmJjZDktMGZkOS00NmU0LWE5NmUtZDNhMjgwZTEyZDBjIiwidGFyZ2V0IjoiZjU2ZjhiMjQtNDFhNi00NWI0LTg4MmItNjU5NjA0MGI2YWYwIiwic3R5bGUiOnsiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInRoaWNrbmVzcyI6MSwic2hhcGUiOiJzb2xpZCJ9LCJiZW5kRGF0YSI6eyJiZW5kRGlzdGFuY2UiOjAuMDAwMDEyMzU0MDg0NjYzOTM0NzI4LCJiZW5kV2VpZ2h0IjowLjUwMDAwMDAwMTAxNDkxOTQsImJlbmRQb2ludCI6eyJ4IjoxNi42MTE4OTYzNzYzMTg0NCwieSI6MTE3LjE0OTYwNTcyODQwNzM1fX0sInNvdXJjZUlEIjoiZDk1Zjc4ODctNDJiZi00ZTEyLWEwMjItMDIxODY5NzAxYzZhIiwidGFyZ2V0SUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0eXBlIjoib3JkaW4iLCJpZCI6ImI4MjUxYTdhLWIzMTctNGI2ZC04YmJmLTljOTQxMDZmZDFhMyJ9XQ== + + + DEL_EDGE + WyJiODI1MWE3YS1iMzE3LTRiNmQtOGJiZi05Yzk0MTA2ZmQxYTMiXQ== + + 4d518e40be4943161ca987160391f62d + + + 1666148795465 + mark + + ADD_EDGE + W3sibGFiZWwiOiJVMSIsInNvdXJjZSI6ImI1MDhiYmY1LWY2OTQtNDYwMS1hY2YxLWIwYmE2ZTQ2ZWE5NSIsInRhcmdldCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsInN0eWxlIjp7ImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjowLjE2NzE1NTgwNTI0MDM3NzY1LCJiZW5kV2VpZ2h0IjowLjUwMDAwNDUwNTc0NjUwNzMsImJlbmRQb2ludCI6eyJ4IjozNzYuMzQyMTE5Nzk1NzQ5MDYsInkiOjExNC45MTE3ODg4OTg4ODY4M319LCJzb3VyY2VJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsInRhcmdldElEIjoiYmQ5MmY5ZDgtN2Q2My00MmIyLTk2OGItMzkwOWVmNGM3MjM3IiwidHlwZSI6Im9yZGluIiwiaWQiOiI1MDhmMzhkMS0xZTQ2LTQwNDYtYWJjNS0xYzNhNDczZjI0ZTMifV0= + + + DEL_EDGE + WyI1MDhmMzhkMS0xZTQ2LTQwNDYtYWJjNS0xYzNhNDczZjI0ZTMiXQ== + + 4d2929c92400b76461cdd3c1455ee6e6 + + + 1666148884186 + mark + + DEL_NODE + WyIzMjQyZmQwZS05ZmY3LTRiNjYtYjlhOS01Mzc1N2RkNjIyZGIiXQ== + + + ADD_NODE + WyJZMjpwYXNzeW0ucHkiLHsid2lkdGgiOjEyMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4Ijo0NDguMjE4MzIwODE3MDE2MSwieSI6NDEuOTYzNjEzMTk3MTYzOTQ0fSx7fSwiMzI0MmZkMGUtOWZmNy00YjY2LWI5YTktNTM3NTdkZDYyMmRiIl0= + + 31edd37115d2ceae94058ddae6ce99ed + + + 1666148893206 + mark + + DEL_EDGE + WyI1YjNhNDE2Zi00NjBhLTQ1ZmYtYThkOC1mMDhjZjkxYTQzMGIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6IjMyNDJmZDBlLTlmZjctNGI2Ni1iOWE5LTUzNzU3ZGQ2MjJkYiIsImlkIjoiNWIzYTQxNmYtNDYwYS00NWZmLWE4ZDgtZjA4Y2Y5MWE0MzBiIn1d + + 4a8867d05f3bdfb9ff58ca728ad9fe24 + + + 1666148897601 + mark + + SET_POS + WyIzMjQyZmQwZS05ZmY3LTRiNjYtYjlhOS01Mzc1N2RkNjIyZGIiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MzkzLjQ5ODI5ODk3NDM0MjE2LCJ5IjozNS4zMzA4ODMyNzY4Mzk4MzV9XQ== + + + SET_POS + WyIzMjQyZmQwZS05ZmY3LTRiNjYtYjlhOS01Mzc1N2RkNjIyZGIiLHsieCI6MzkzLjQ5ODI5ODk3NDM0MjE2LCJ5IjozNS4zMzA4ODMyNzY4Mzk4MzV9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + cd741e2e6f795034d22a48b4c6a8d587 + + + 1666148902756 + mark + + SET_POS + WyIzMjQyZmQwZS05ZmY3LTRiNjYtYjlhOS01Mzc1N2RkNjIyZGIiLHsieCI6MzkzLjQ5ODI5ODk3NDM0MjE2LCJ5IjozNS4zMzA4ODMyNzY4Mzk4MzV9LHsieCI6MzQyLjA5NDY0MjA5MTgzMDMsInkiOjMwLjM1NjMzNTgzNjU5Njc1fV0= + + + SET_POS + WyIzMjQyZmQwZS05ZmY3LTRiNjYtYjlhOS01Mzc1N2RkNjIyZGIiLHsieCI6MzQyLjA5NDY0MjA5MTgzMDMsInkiOjMwLjM1NjMzNTgzNjU5Njc1fSx7IngiOjM5My40OTgyOTg5NzQzNDIxNiwieSI6MzUuMzMwODgzMjc2ODM5ODM1fV0= + + e0388b13bd17b9b90ee784da49243bc4 + + + 1666148907537 + mark + + UPDATE_EDGE + WyI1YjNhNDE2Zi00NjBhLTQ1ZmYtYThkOC1mMDhjZjkxYTQzMGIiLHsiYmFja2dyb3VuZENvbG9yIjoiI2ZmNmQwMCIsInRoaWNrbmVzcyI6MSwic2hhcGUiOiJzb2xpZCJ9LCJZMSIsdHJ1ZV0= + + + UPDATE_EDGE + WyI1YjNhNDE2Zi00NjBhLTQ1ZmYtYThkOC1mMDhjZjkxYTQzMGIiLHsiYmFja2dyb3VuZENvbG9yIjoiI2ZmNmQwMCIsInRoaWNrbmVzcyI6MSwic2hhcGUiOiJzb2xpZCJ9LCJZMiIsdHJ1ZV0= + + 0f30e74fa22739b9af202e28ed98adab + + + 1666148915283 + mark + + ADD_EDGE + W3sibGFiZWwiOiJZMiIsInNvdXJjZSI6IjJjYTk2ZThiLThjOWMtNGNmMy04ZWFjLWUxN2M2N2M3Nzk2MSIsInRhcmdldCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsInN0eWxlIjp7ImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjoyMi40NTA0NDA3MTAxNjAxMTYsImJlbmRXZWlnaHQiOjAuNTAwNjI2MjI0NzYwOTc1OCwiYmVuZFBvaW50Ijp7IngiOjMxMi4xMzYzMTMyMjUzODQyNCwieSI6OTAuNDM2NjA4MzI0NzUyOTR9fSwic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsInR5cGUiOiJvcmRpbiIsImlkIjoiMWJlMDBlNjMtYTU5Ni00NjhiLTliYzItMTcwMDc4YmE2OWExIn1d + + + DEL_EDGE + WyIxYmUwMGU2My1hNTk2LTQ2OGItOWJjMi0xNzAwNzhiYTY5YTEiXQ== + + 6df323578d9a50e2506cc455108d7e78 + + + 1666148920159 + mark + + SET_POS + WyIzMjQyZmQwZS05ZmY3LTRiNjYtYjlhOS01Mzc1N2RkNjIyZGIiLHsieCI6MzQyLjA5NDY0MjA5MTgzMDMsInkiOjMwLjM1NjMzNTgzNjU5Njc1fSx7IngiOjMzNy4xMjAwOTQ2NTE1ODcyLCJ5IjoxMDguMjkwOTEyNDAwNDA1MTN9XQ== + + + SET_POS + WyIzMjQyZmQwZS05ZmY3LTRiNjYtYjlhOS01Mzc1N2RkNjIyZGIiLHsieCI6MzM3LjEyMDA5NDY1MTU4NzIsInkiOjEwOC4yOTA5MTI0MDA0MDUxM30seyJ4IjozNDIuMDk0NjQyMDkxODMwMywieSI6MzAuMzU2MzM1ODM2NTk2NzV9XQ== + + 9ee6e02a26266c66a0e32525fcb062f0 + + + 1666148925961 + mark + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTEwLCJ5IjoxMzIuNzczNjIyODI2MjMzMTJ9LHsieCI6MTExLjY1ODE4MjQ4MDA4MTAyLCJ5Ijo0NC44ODk5NTEzODE5Mzg1OX1d + + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTExLjY1ODE4MjQ4MDA4MTAyLCJ5Ijo0NC44ODk5NTEzODE5Mzg1OX0seyJ4IjoxMTAsInkiOjEzMi43NzM2MjI4MjYyMzMxMn1d + + 70c7e7b8028fcda787afcb5e0e201698 + + + 1666148929207 + mark + + SET_POS + WyIzMjQyZmQwZS05ZmY3LTRiNjYtYjlhOS01Mzc1N2RkNjIyZGIiLHsieCI6MzM3LjEyMDA5NDY1MTU4NzIsInkiOjEwOC4yOTA5MTI0MDA0MDUxM30seyJ4IjozMzUuNDYxOTEyMTcxNTA2MSwieSI6NDYuOTM4MTYwNjM3NDA3MDN9XQ== + + + SET_POS + WyIzMjQyZmQwZS05ZmY3LTRiNjYtYjlhOS01Mzc1N2RkNjIyZGIiLHsieCI6MzM1LjQ2MTkxMjE3MTUwNjEsInkiOjQ2LjkzODE2MDYzNzQwNzAzfSx7IngiOjMzNy4xMjAwOTQ2NTE1ODcyLCJ5IjoxMDguMjkwOTEyNDAwNDA1MTN9XQ== + + 04c20dc361efd7df5491fa929eae8ab5 + + + 1666148933977 + mark + + UPDATE_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsid2lkdGgiOjExMSwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJGMTpmdW5jYWxsLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsid2lkdGgiOjEyMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJZMTpwYXNzeW0ucHkiLHRydWVd + + 184fc7c1a0a1e9d7dda003e97b907c75 + + + 1666148968322 + mark + + SET_DIM + WyIzMjQyZmQwZS05ZmY3LTRiNjYtYjlhOS01Mzc1N2RkNjIyZGIiLHsiaGVpZ2h0Ijo1MCwid2lkdGgiOjEyMH0seyJ4IjozMzUuNDYxOTEyMTcxNTA2MSwieSI6NDYuOTM4MTYwNjM3NDA3MDN9XQ== + + + SET_DIM + WyIzMjQyZmQwZS05ZmY3LTRiNjYtYjlhOS01Mzc1N2RkNjIyZGIiLHsiaGVpZ2h0Ijo1MCwid2lkdGgiOjExMC4wNTA5MDUxMTk1MTM4Nn0seyJ4IjozNDAuNDM2NDU5NjExNzQ5MTcsInkiOjQ2LjkzODE2MDYzNzQwNzAzfV0= + + 2e6238e4f0afa3b62a302413e6d93b4c + + + 1666148973059 + mark + + DEL_EDGE + WyJmYmJjNTgwYi0xODJjLTRiYTAtYTczYS0yMWFiZWJkN2UwZTQiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIzMjQyZmQwZS05ZmY3LTRiNjYtYjlhOS01Mzc1N2RkNjIyZGIiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6bnVsbCwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6ImZiYmM1ODBiLTE4MmMtNGJhMC1hNzNhLTIxYWJlYmQ3ZTBlNCJ9XQ== + + 0fdc840c06b1bcbad5f44ea0a193e2d3 + + + 1666148982455 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0seyJ4Ijo2OTYuNTk3ODU1NTMyMDAzNSwieSI6OTguNzg0MTQ2Nzg1Mjk3MzJ9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njk2LjU5Nzg1NTUzMjAwMzUsInkiOjk4Ljc4NDE0Njc4NTI5NzMyfSx7IngiOjU4Ny4xNTc4MTE4NDY2NTU2LCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + 0c76fa8978e6d98fe1dcf65894884e5b + + + 1666148987372 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9LHsieCI6LTE0MS4wOTI1Njg1MDk1ODU4NywieSI6MTQ2LjA0MDE0ODkxMDkzMDM4fV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE0MS4wOTI1Njg1MDk1ODU4NywieSI6MTQ2LjA0MDE0ODkxMDkzMDM4fSx7IngiOi0xMzcuNzc2MjAzNTQ5NDIzODMsInkiOjkxLjMyMDEyNzA2ODI1NjQxfV0= + + 3a4f18cce60939cf3278943295fc1961 + + + 1666149027210 + mark + + DEL_NODE + WyJjY2RlYzc4Yy01YWMxLTQyOGUtYmRiNS0xNjYzMDI5ZjhhOGYiXQ== + + + ADD_NODE + WyJVMTpwYXNzdS5weSIseyJ3aWR0aCI6MTA5LCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwOS45NDkwOTQ4ODA0ODYxNiwieSI6MjY0LjE2MDA2NTUyODAyMTg1fSx7fSwiY2NkZWM3OGMtNWFjMS00MjhlLWJkYjUtMTY2MzAyOWY4YThmIl0= + + f3d13a6315269ebeecb63ea302cf0b6a + + + 1666149033617 + mark + + SET_POS + WyJjY2RlYzc4Yy01YWMxLTQyOGUtYmRiNS0xNjYzMDI5ZjhhOGYiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTA2LjYzMjcyOTkyMDMyNDExLCJ5IjoyNTIuNTUyNzg4MTY3NDU0NjV9XQ== + + + SET_POS + WyJjY2RlYzc4Yy01YWMxLTQyOGUtYmRiNS0xNjYzMDI5ZjhhOGYiLHsieCI6MTA2LjYzMjcyOTkyMDMyNDExLCJ5IjoyNTIuNTUyNzg4MTY3NDU0NjV9LHsieCI6MTAwLCJ5IjoxMDB9XQ== + + ba2244c4b80b007d4d2ca1a82cc569d0 + + + 1666149038613 + mark + + DEL_EDGE + WyI4OWRlNzlkNy1iYjk1LTQxODQtODFlNy1kNzRlYjY4MzIzMjciXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLCJ0YXJnZXRJRCI6ImNjZGVjNzhjLTVhYzEtNDI4ZS1iZGI1LTE2NjMwMjlmOGE4ZiIsImxhYmVsIjoiVSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjpudWxsLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiODlkZTc5ZDctYmI5NS00MTg0LTgxZTctZDc0ZWI2ODMyMzI3In1d + + f5130a47b2684fc4ee0c2d6f4c038018 + + + 1666149045582 + mark + + SET_POS + WyJjY2RlYzc4Yy01YWMxLTQyOGUtYmRiNS0xNjYzMDI5ZjhhOGYiLHsieCI6MTA2LjYzMjcyOTkyMDMyNDExLCJ5IjoyNTIuNTUyNzg4MTY3NDU0NjV9LHsieCI6MTQ0Ljc3MDkyNjk2MjE4NzgsInkiOjI1NS44NjkxNTMxMjc2MTY3fV0= + + + SET_POS + WyJjY2RlYzc4Yy01YWMxLTQyOGUtYmRiNS0xNjYzMDI5ZjhhOGYiLHsieCI6MTQ0Ljc3MDkyNjk2MjE4NzgsInkiOjI1NS44NjkxNTMxMjc2MTY3fSx7IngiOjEwNi42MzI3Mjk5MjAzMjQxMSwieSI6MjUyLjU1Mjc4ODE2NzQ1NDY1fV0= + + 725a0c21c69ed30cde6cf6ba3891c484 + + + 1666149071430 + mark + + DEL_NODE + WyJkMjRiYmQ4Zi1iNWQzLTRjNmUtYjRjYi04OWRiZGI2ZDZmMjMiXQ== + + + ADD_NODE + WyJVMjpwYXNzdS5weSIseyJ3aWR0aCI6MTA5LCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjQ1Ni41MDkyMzMyMTc0MjEzLCJ5IjoyNjAuODQzNzAwNTY3ODU5NzR9LHt9LCJkMjRiYmQ4Zi1iNWQzLTRjNmUtYjRjYi04OWRiZGI2ZDZmMjMiXQ== + + b197fc2245c695eb204fbd1a753b0e2e + + + 1666149080790 + mark + + SET_POS + WyJkMjRiYmQ4Zi1iNWQzLTRjNmUtYjRjYi04OWRiZGI2ZDZmMjMiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MzUzLjcwMTkxOTQ1MjM5NzUsInkiOjI0Ny41NzgyNDA3MjcyMTE1OH1d + + + SET_POS + WyJkMjRiYmQ4Zi1iNWQzLTRjNmUtYjRjYi04OWRiZGI2ZDZmMjMiLHsieCI6MzUzLjcwMTkxOTQ1MjM5NzUsInkiOjI0Ny41NzgyNDA3MjcyMTE1OH0seyJ4IjoxMDAsInkiOjEwMH1d + + 8655f8116ea96668c9defb94bf9d9d58 + + + 1666149085641 + mark + + DEL_EDGE + WyIxYmUxY2MyMy1hMmMwLTQ1YzgtOTE1Yy1kM2Q0NzFlYzFkYzUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJjY2RlYzc4Yy01YWMxLTQyOGUtYmRiNS0xNjYzMDI5ZjhhOGYiLCJ0YXJnZXRJRCI6ImQyNGJiZDhmLWI1ZDMtNGM2ZS1iNGNiLTg5ZGJkYjZkNmYyMyIsImxhYmVsIjoiVTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6bnVsbCwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjFiZTFjYzIzLWEyYzAtNDVjOC05MTVjLWQzZDQ3MWVjMWRjNSJ9XQ== + + 95c8c707e1395f36b842355206e7783c + + + 1666149094834 + mark + + SET_POS + WyJkMjRiYmQ4Zi1iNWQzLTRjNmUtYjRjYi04OWRiZGI2ZDZmMjMiLHsieCI6MzUzLjcwMTkxOTQ1MjM5NzUsInkiOjI0Ny41NzgyNDA3MjcyMTE1OH0seyJ4IjozNzAuMjgzNzQ0MjUzMjA3OCwieSI6MjYwLjg0MzcwMDU2Nzg1OTc0fV0= + + + SET_POS + WyJkMjRiYmQ4Zi1iNWQzLTRjNmUtYjRjYi04OWRiZGI2ZDZmMjMiLHsieCI6MzcwLjI4Mzc0NDI1MzIwNzgsInkiOjI2MC44NDM3MDA1Njc4NTk3NH0seyJ4IjozNTMuNzAxOTE5NDUyMzk3NSwieSI6MjQ3LjU3ODI0MDcyNzIxMTU4fV0= + + 6a7c70e1786852ea42772cdf4edd482e + + + 1666149099036 + mark + + DEL_EDGE + WyJkNmJlY2EwOC01ZjBlLTQ1OTctYThjYi1mNmI5NzljZjk2YzgiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkMjRiYmQ4Zi1iNWQzLTRjNmUtYjRjYi04OWRiZGI2ZDZmMjMiLCJ0YXJnZXRJRCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImxhYmVsIjoiVTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6bnVsbCwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6ImQ2YmVjYTA4LTVmMGUtNDU5Ny1hOGNiLWY2Yjk3OWNmOTZjOCJ9XQ== + + 36fd67bfe524482e86aeca85b51ad262 + + + 1666149128044 + mark + + UPDATE_NODE + WyJkMjRiYmQ4Zi1iNWQzLTRjNmUtYjRjYi04OWRiZGI2ZDZmMjMiLHsid2lkdGgiOjEwOSwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJVMjpwYXNzdS5weSIsdHJ1ZV0= + + + UPDATE_NODE + WyJkMjRiYmQ4Zi1iNWQzLTRjNmUtYjRjYi04OWRiZGI2ZDZmMjMiLHsid2lkdGgiOjExOSwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJVWjI6cGFzc3UucHkiLHRydWVd + + b42d9efdd1529a3ff37855673c6bc8b8 + + + 1666149159156 + mark + + SET_POS + WyJkMjRiYmQ4Zi1iNWQzLTRjNmUtYjRjYi04OWRiZGI2ZDZmMjMiLHsieCI6MzcwLjI4Mzc0NDI1MzIwNzgsInkiOjI2MC44NDM3MDA1Njc4NTk3NH0seyJ4Ijo0NTYuNTA5MjMzMjE3NDIxMywieSI6MjYwLjg0MzcwMDU2Nzg1OTc0fV0= + + + SET_POS + WyJkMjRiYmQ4Zi1iNWQzLTRjNmUtYjRjYi04OWRiZGI2ZDZmMjMiLHsieCI6NDU2LjUwOTIzMzIxNzQyMTMsInkiOjI2MC44NDM3MDA1Njc4NTk3NH0seyJ4IjozNzAuMjgzNzQ0MjUzMjA3OCwieSI6MjYwLjg0MzcwMDU2Nzg1OTc0fV0= + + 283da100d39ac0bc0da7a3b60f550ddb + + + 1666149164681 + mark + + SET_POS + WyIzMjQyZmQwZS05ZmY3LTRiNjYtYjlhOS01Mzc1N2RkNjIyZGIiLHsieCI6MzQwLjQzNjQ1OTYxMTc0OTE3LCJ5Ijo0Ni45MzgxNjA2Mzc0MDcwM30seyJ4Ijo0NDguMjE4MzIwODE3MDE2MSwieSI6NDEuOTYzNjEzMTk3MTYzOTQ0fV0= + + + SET_POS + WyIzMjQyZmQwZS05ZmY3LTRiNjYtYjlhOS01Mzc1N2RkNjIyZGIiLHsieCI6NDQ4LjIxODMyMDgxNzAxNjEsInkiOjQxLjk2MzYxMzE5NzE2Mzk0NH0seyJ4IjozNDAuNDM2NDU5NjExNzQ5MTcsInkiOjQ2LjkzODE2MDYzNzQwNzAzfV0= + + 48b1ad01c87dbacf38f19c75d10f01f3 + + + 1666149167791 + mark + + SET_POS + WyJjY2RlYzc4Yy01YWMxLTQyOGUtYmRiNS0xNjYzMDI5ZjhhOGYiLHsieCI6MTQ0Ljc3MDkyNjk2MjE4NzgsInkiOjI1NS44NjkxNTMxMjc2MTY3fSx7IngiOjEwOS45NDkwOTQ4ODA0ODYxNiwieSI6Mjc0LjEwOTE2MDQwODUwOH1d + + + SET_POS + WyJjY2RlYzc4Yy01YWMxLTQyOGUtYmRiNS0xNjYzMDI5ZjhhOGYiLHsieCI6MTA5Ljk0OTA5NDg4MDQ4NjE2LCJ5IjoyNzQuMTA5MTYwNDA4NTA4fSx7IngiOjE0NC43NzA5MjY5NjIxODc4LCJ5IjoyNTUuODY5MTUzMTI3NjE2N31d + + aa03dcc685a6d7e0c89d9c4d769b0b10 + + + 1666149186894 + mark + + SET_POS + WyJjY2RlYzc4Yy01YWMxLTQyOGUtYmRiNS0xNjYzMDI5ZjhhOGYiLHsieCI6MTA5Ljk0OTA5NDg4MDQ4NjE2LCJ5IjoyNzQuMTA5MTYwNDA4NTA4fSx7IngiOjEwOS45NDkwOTQ4ODA0ODYxNiwieSI6MjY0LjE2MDA2NTUyODAyMTg1fV0= + + + SET_POS + WyJjY2RlYzc4Yy01YWMxLTQyOGUtYmRiNS0xNjYzMDI5ZjhhOGYiLHsieCI6MTA5Ljk0OTA5NDg4MDQ4NjE2LCJ5IjoyNjQuMTYwMDY1NTI4MDIxODV9LHsieCI6MTA5Ljk0OTA5NDg4MDQ4NjE2LCJ5IjoyNzQuMTA5MTYwNDA4NTA4fV0= + + 460498d39d7bd1435659d085f3303cf9 + + + 1666149188602 + mark + + UPDATE_NODE + WyJjY2RlYzc4Yy01YWMxLTQyOGUtYmRiNS0xNjYzMDI5ZjhhOGYiLHsid2lkdGgiOjEwOSwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJVMTpwYXNzdS5weSIsdHJ1ZV0= + + + UPDATE_NODE + WyJjY2RlYzc4Yy01YWMxLTQyOGUtYmRiNS0xNjYzMDI5ZjhhOGYiLHsid2lkdGgiOjExOSwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJVWjE6cGFzc3UucHkiLHRydWVd + + b08b81f473c205217447eadcc12e6fe2 + + + 1666149225574 + mark + + UPDATE_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsid2lkdGgiOjEyMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJZMTpwYXNzeW0ucHkiLHRydWVd + + + UPDATE_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsid2lkdGgiOjEzMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJZWjE6cGFzc3ltLnB5Iix0cnVlXQ== + + bc835c40c77a7ca35b145c0cc8f9f0c3 + + + 1666149261925 + mark + + UPDATE_NODE + WyIzMjQyZmQwZS05ZmY3LTRiNjYtYjlhOS01Mzc1N2RkNjIyZGIiLHsid2lkdGgiOjExMC4wNTA5MDUxMTk1MTM4NiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJZMjpwYXNzeW0ucHkiLHRydWVd + + + UPDATE_NODE + WyIzMjQyZmQwZS05ZmY3LTRiNjYtYjlhOS01Mzc1N2RkNjIyZGIiLHsid2lkdGgiOjEzMCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJZWjI6cGFzc3ltLnB5Iix0cnVlXQ== + + 48447c3bcd54b6275095edb309009cfe + + + \ No newline at end of file From f03fa54bd00b5a868c31d319e5b7387db12adf7a Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Wed, 19 Oct 2022 00:35:18 -0400 Subject: [PATCH 107/113] funbody/call uses concore2.simtime --- testsou/funbody.py | 2 +- testsou/funcall.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/testsou/funbody.py b/testsou/funbody.py index 4d0b3d1..59f03f9 100644 --- a/testsou/funbody.py +++ b/testsou/funbody.py @@ -13,7 +13,7 @@ u = concore.initval(init_simtime_u) ym = concore2.initval(init_simtime_ym) -while(concore.simtime Date: Sat, 22 Oct 2022 21:20:50 -0400 Subject: [PATCH 108/113] 0mq funcall/funbody test0mq --- 0mq/cpymax.py | 29 +++ 0mq/funbody.dir/concore2.py | 113 +++++++++++ 0mq/funbody.py | 68 +++++++ 0mq/funcall.dir/concore2.py | 113 +++++++++++ 0mq/funcall.py | 37 ++++ 0mq/pmpymax.py | 15 ++ 0mq/test0mq.graphml | 385 ++++++++++++++++++++++++++++++++++++ 0mq/test4fun.graphml | 363 ++++++++++++++++++++++++++++++++++ 8 files changed, 1123 insertions(+) create mode 100644 0mq/cpymax.py create mode 100644 0mq/funbody.dir/concore2.py create mode 100644 0mq/funbody.py create mode 100644 0mq/funcall.dir/concore2.py create mode 100644 0mq/funcall.py create mode 100644 0mq/pmpymax.py create mode 100644 0mq/test0mq.graphml create mode 100644 0mq/test4fun.graphml diff --git a/0mq/cpymax.py b/0mq/cpymax.py new file mode 100644 index 0000000..5c767ea --- /dev/null +++ b/0mq/cpymax.py @@ -0,0 +1,29 @@ +import concore +import time +concore.delay = 0.01 +#Nsim = 100 +init_simtime_u = "[0.0, 0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0, 0.0]" +minElasped = 10000000 +maxElasped = 0 +sumElasped = 0 +u = concore.initval(init_simtime_u) +wallclock1 = time.perf_counter() +while(concore.simtime1: + print("too many commands at once!") + command = command_list[0] + if command.action == CONCORE_MANIFEST.action: + u = command.params["u"] + concore.simtime = u[0] + u = u[1:] + concore.write(concore.oport['U2'],"u",u) + print(u) + old2 = concore2.simtime + while concore2.unchanged() or concore2.simtime <= old2: + ym = concore2.read(concore.iport['Y2'],"ym",init_simtime_ym) + print(f"Replying to {command.action} with {ym}") + paired_transmitter.reply_to_command( + request_id=command.request_id, payload=[concore2.simtime]+ym) + else: + print("undefined action"+str(command.action)) + quit() + #concore2.write(concore.oport['Y1'],"ym",ym) + print("funbody u="+str(u)+" ym="+str(ym)+" time="+str(concore2.simtime)) +paired_transmitter.stop_background_sync() +print("retry="+str(concore.retrycount)) diff --git a/0mq/funcall.dir/concore2.py b/0mq/funcall.dir/concore2.py new file mode 100644 index 0000000..e3ec817 --- /dev/null +++ b/0mq/funcall.dir/concore2.py @@ -0,0 +1,113 @@ +import time +import os +from ast import literal_eval +import sys +import re + +#if windows, create script to kill this process +# because batch files don't provide easy way to know pid of last command +# ignored for posix!=windows, because "concorepid" is handled by script +# ignored for docker (linux!=windows), because handled by docker stop +if hasattr(sys, 'getwindowsversion'): + with open("concorekill.bat","w") as fpid: + fpid.write("taskkill /F /PID "+str(os.getpid())+"\n") + +try: + iport = literal_eval(open("concore.iport").read()) +except: + iport = dict() +try: + oport = literal_eval(open("concore.oport").read()) +except: + oport = dict() + + +s = '' +olds = '' +delay = 1 +retrycount = 0 +inpath = "./in" #must be rel path for local +outpath = "./out" + +#9/21/22 +try: + sparams = open(inpath+"1/concore.params").read() + if sparams[0] == '"': #windows keeps "" need to remove + sparams = sparams[1:] + sparams = sparams[0:sparams.find('"')] + if sparams != '{': + print("converting sparams: "+sparams) + sparams = "{'"+re.sub(';',",'",re.sub('=',"':",re.sub(' ','',sparams)))+"}" + print("converted sparams: " + sparams) + try: + params = literal_eval(sparams) + except: + print("bad params: "+sparams) +except: + params = dict() +#9/30/22 +def tryparam(n,i): + try: + return params[n] + except: + return i + + +#9/12/21 +def default_maxtime(default): + global maxtime + try: + maxtime = literal_eval(open(inpath+"1/concore.maxtime").read()) + except: + maxtime = default +default_maxtime(100) + +def unchanged(): + global olds,s + if olds==s: + s = '' + return True + else: + olds = s + return False + +def read(port, name, initstr): + global s,simtime,retrycount + time.sleep(delay) + try: + infile = open(inpath+str(port)+"/"+name); + ins = infile.read() + except: + ins = initstr + while len(ins)==0: + time.sleep(delay) + ins = infile.read() + retrycount += 1 + s += ins + inval = literal_eval(ins) + simtime = max(simtime,inval[0]) + return inval[1:] + +def write(port, name, val, delta=0): + global outpath,simtime + if isinstance(val,str): + time.sleep(2*delay) + elif isinstance(val,list)==False: + print("mywrite must have list or str") + quit() + try: + with open(outpath+str(port)+"/"+name,"w") as outfile: + if isinstance(val,list): + outfile.write(str([simtime+delta]+val)) + simtime += delta + else: + outfile.write(val) + except: + print("skipping"+outpath+str(port)+"/"+name); + +def initval(simtime_val): + global simtime + val = literal_eval(simtime_val) + simtime = val[0] + return val[1:] + diff --git a/0mq/funcall.py b/0mq/funcall.py new file mode 100644 index 0000000..b316ff1 --- /dev/null +++ b/0mq/funcall.py @@ -0,0 +1,37 @@ +import concore +import concore2 +from osparc_control import PairedTransmitter +print("funcall 0mq") + +concore.delay = 0.07 +concore2.delay = 0.07 +concore2.inpath = concore.inpath +concore2.outpath = concore.outpath +concore2.simtime = 0 +concore.default_maxtime(100) +init_simtime_u = "[0.0, 0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0, 0.0]" + +u = concore.initval(init_simtime_u) +ym = concore2.initval(init_simtime_ym) +while(concore2.simtime + + + + + + + + + + + PZ:pmpymax.py + + + + + + + + + + + CZ:cpymax.py + + + + + + + + + + + F1:funcall.py + + + + + + + + + + + F2:funbody.py + + + + + + + + + + U + + + + + + + + + + + + Y + + + + + + + + + + + + U2 + + + + + + + + + + + + Y2 + + + + + + + + 1664644923582 + mark + + DEL_NODE + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciXQ== + + + ADD_NODE + WyJQWjpwbXB5bWF4LnB5Iix7IndpZHRoIjoxMzYsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0se30sImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyJd + + ea1f3ba8fe573453400ffda5fad41219 + + + 1664644939781 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4IjoxMDAsInkiOjEwMH1d + + 4d28b3ac41cd2913a677da0a4b65b424 + + + 1664644951652 + mark + + DEL_NODE + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiXQ== + + + ADD_NODE + WyJDWjpjcHltYXgucHkiLHsid2lkdGgiOjEyMiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjotMTM3Ljc3NjIwMzU0OTQyMzgzLCJ5Ijo5MS4zMjAxMjcwNjgyNTY0MX0se30sImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSJd + + 7d1c82d143a33ca11a4f968849bad104 + + + 1664644958838 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOjEwMCwieSI6MTAwfV0= + + 2e1ad74435543de42a296bb9a0620e63 + + + 1664644988539 + mark + + DEL_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiXQ== + + + ADD_NODE + WyJGMTpmdW5jYWxsLnB5Iix7IndpZHRoIjoxMTEsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0se30sImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCJd + + ed42ad47c94f87d676c7c83ce9ded915 + + + 1664645002278 + mark + + DEL_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + ADD_NODE + WyJGMjpmdW5ib2R5LnB5Iix7IndpZHRoIjoxMjAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHt9LCJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + 0f42a42f08b5d6633750c6cd0a52cd7f + + + 1664645010353 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjoxMTAsInkiOjExMH1d + + 9ed03855520c803cecdd1d7497a92151 + + + 1664645015576 + mark + + DEL_EDGE + WyIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiVSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUifV0= + + 725908dc36e7bc154d1d8dd0e98a412d + + + 1664645043815 + mark + + DEL_EDGE + WyIzY2ZiNDBjZC01NTdhLTQ4NTAtOTNhNi1mZGMwOWNkMDA1ZjAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiVTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiM2NmYjQwY2QtNTU3YS00ODUwLTkzYTYtZmRjMDljZDAwNWYwIn1d + + 9f18da8775e24b7f2f9902f2842eb63e + + + 1664645057658 + mark + + DEL_EDGE + WyI3MTRkYjk4OS01NjcyLTQwM2ItYWU3Ni1mZDlhMjA4OTM0NzUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImxhYmVsIjoiVTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNzE0ZGI5ODktNTY3Mi00MDNiLWFlNzYtZmQ5YTIwODkzNDc1In1d + + 3e1c6e41350aaf47123ec7cf25e1b62c + + + 1664645068951 + mark + + DEL_EDGE + WyJhOGFlNzg5MC1iMmJiLTQyNzMtODc1My0wMTgxY2ViNDg2YzEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiWTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiYThhZTc4OTAtYjJiYi00MjczLTg3NTMtMDE4MWNlYjQ4NmMxIn1d + + 269c6a2baeea1b2785ce71ff56f4a76d + + + 1664645081283 + mark + + DEL_EDGE + WyI1NWI5OWFiNi1hN2Q2LTRjNjctYWI0ZS1hOGUyOTM5YzFiMGYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNTViOTlhYjYtYTdkNi00YzY3LWFiNGUtYThlMjkzOWMxYjBmIn1d + + 3c7cb858225e79ecf43defb7b70197a6 + + + 1664645089735 + mark + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX1d + + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0seyJ4IjoxMDAsInkiOjEwMH1d + + b6b4fcd96e508461f87e4513dbd0170e + + + 1664645092868 + mark + + DEL_EDGE + WyI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSIsImxhYmVsIjoiWSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkifV0= + + f2a382cf010520ed6d8d1167488af14c + + + 1664645142026 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOi0xNzAuNDQxMDYwODg1NDY2OTUsInkiOjkwLjAxMzUzMjc3NDgxNDY5fV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + 5fc1c53a84494c7b3b749c475cf09d33 + + + 1664645149601 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4Ijo3NTQuNDAxODgxNDA3MTk2NSwieSI6OTkuMTM1NzM0OTcxOTM2NjR9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjQwNC4yMzQ2MTA3NjQ4MTQyLCJ5IjotODkuMDEzODQzMjgzNjcxNzh9XQ== + + 627a3a19a5e310402ab0c81e854bb1aa + + + 1664645223291 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjY3Ni4wMDYyMjM4MDA2OTMsInkiOjEwMC40NDIzMjkyNjUzNzgzNn1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjc1NC40MDE4ODE0MDcxOTY1LCJ5Ijo5OS4xMzU3MzQ5NzE5MzY2NH1d + + 65480a229a142f0b48daa6727b8aae7b + + + 1664645228453 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjozMzYuMDE4NjM3MDg1NTg2NjUsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + 1359e922778d54bbfc88d8040c764247 + + + 1664645231883 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjU4Ny4xNTc4MTE4NDY2NTU2LCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0seyJ4Ijo2NzYuMDA2MjIzODAwNjkzLCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + ef15c4c7e39dcf45dee8b9e5d071d32f + + + 1664645237206 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9XQ== + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9LHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9XQ== + + a8ef099b87ae2a958e58d7b138deb5f5 + + + 1666487497309 + mark + + ADD_EDGE + W3sibGFiZWwiOiJZMSIsInNvdXJjZSI6IjdiNjljNmU2LTY0ZDEtNGQxZC1hODVkLThmODIwZGVhZTkyZSIsInRhcmdldCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsInN0eWxlIjp7ImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjoyNS4wMTU2MDQ0Mzg0NDI0NywiYmVuZFdlaWdodCI6MC41MDcyNjEyODIxMTY0NTQyLCJiZW5kUG9pbnQiOnsieCI6MTg1Ljk0OTI3NTk2OTkwNjY3LCJ5Ijo2Ny4wNTc5Mjg3NTI0OTY3Mn19LCJzb3VyY2VJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsInRhcmdldElEIjoiZjU2ZjhiMjQtNDFhNi00NWI0LTg4MmItNjU5NjA0MGI2YWYwIiwidHlwZSI6Im9yZGluIiwiaWQiOiJkYWRmMjgyOS1lMDEwLTRlMGQtYTNhNy1iYTdkYjg3OWM2NDkifV0= + + + DEL_EDGE + WyJkYWRmMjgyOS1lMDEwLTRlMGQtYTNhNy1iYTdkYjg3OWM2NDkiXQ== + + 6a68923268af161e7e8346570af341ba + + + 1666487500685 + mark + + ADD_EDGE + W3sibGFiZWwiOiJVMSIsInNvdXJjZSI6IjZhYzczNmNiLWUyZmUtNGI4Mi04NzQ1LTUyZjkzNGYyZGYxMCIsInRhcmdldCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsInN0eWxlIjp7ImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjowLjAwMDAyNzg2ODE3Mzg2NTQ2NDAzLCJiZW5kV2VpZ2h0IjowLjUwMDAwMDAwNDAzMDUwNjYsImJlbmRQb2ludCI6eyJ4IjoyNDUuNzU5MzE4NTQyNzk0OTQsInkiOjk4LjU4MDQzNDE0NjM5NTE4fX0sInNvdXJjZUlEIjoiZjU2ZjhiMjQtNDFhNi00NWI0LTg4MmItNjU5NjA0MGI2YWYwIiwidGFyZ2V0SUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0eXBlIjoib3JkaW4iLCJpZCI6ImRlYzYzYTI5LWY1NWEtNGNmNy04OWIwLWQ3NjY2YzcyMmFkOSJ9XQ== + + + DEL_EDGE + WyJkZWM2M2EyOS1mNTVhLTRjZjctODliMC1kNzY2NmM3MjJhZDkiXQ== + + afaa886c1e4907765760ae91632e1871 + + + \ No newline at end of file diff --git a/0mq/test4fun.graphml b/0mq/test4fun.graphml new file mode 100644 index 0000000..af071c1 --- /dev/null +++ b/0mq/test4fun.graphml @@ -0,0 +1,363 @@ + + + + + + + + + + + + PZ:pmpymax.py + + + + + + + + + + + CZ:cpymax.py + + + + + + + + + + + F1:funcall.py + + + + + + + + + + + F2:funbody.py + + + + + + + + + + U + + + + + + + + + + + + U1 + + + + + + + + + + + + U2 + + + + + + + + + + + + Y2 + + + + + + + + + + + + Y1 + + + + + + + + + + + + Y + + + + + + + + 1664644923582 + mark + + DEL_NODE + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciXQ== + + + ADD_NODE + WyJQWjpwbXB5bWF4LnB5Iix7IndpZHRoIjoxMzYsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0se30sImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyJd + + + + 1664644939781 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1664644951652 + mark + + DEL_NODE + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiXQ== + + + ADD_NODE + WyJDWjpjcHltYXgucHkiLHsid2lkdGgiOjEyMiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjotMTM3Ljc3NjIwMzU0OTQyMzgzLCJ5Ijo5MS4zMjAxMjcwNjgyNTY0MX0se30sImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSJd + + + + 1664644958838 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOjEwMCwieSI6MTAwfV0= + + + + 1664644988539 + mark + + DEL_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiXQ== + + + ADD_NODE + WyJGMTpmdW5jYWxsLnB5Iix7IndpZHRoIjoxMTEsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0se30sImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCJd + + + + 1664645002278 + mark + + DEL_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + ADD_NODE + WyJGMjpmdW5ib2R5LnB5Iix7IndpZHRoIjoxMjAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHt9LCJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + + 1664645010353 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjoxMTAsInkiOjExMH1d + + + + 1664645015576 + mark + + DEL_EDGE + WyIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiVSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUifV0= + + + + 1664645043815 + mark + + DEL_EDGE + WyIzY2ZiNDBjZC01NTdhLTQ4NTAtOTNhNi1mZGMwOWNkMDA1ZjAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiVTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiM2NmYjQwY2QtNTU3YS00ODUwLTkzYTYtZmRjMDljZDAwNWYwIn1d + + + + 1664645057658 + mark + + DEL_EDGE + WyI3MTRkYjk4OS01NjcyLTQwM2ItYWU3Ni1mZDlhMjA4OTM0NzUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImxhYmVsIjoiVTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNzE0ZGI5ODktNTY3Mi00MDNiLWFlNzYtZmQ5YTIwODkzNDc1In1d + + + + 1664645068951 + mark + + DEL_EDGE + WyJhOGFlNzg5MC1iMmJiLTQyNzMtODc1My0wMTgxY2ViNDg2YzEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiWTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiYThhZTc4OTAtYjJiYi00MjczLTg3NTMtMDE4MWNlYjQ4NmMxIn1d + + + + 1664645081283 + mark + + DEL_EDGE + WyI1NWI5OWFiNi1hN2Q2LTRjNjctYWI0ZS1hOGUyOTM5YzFiMGYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNTViOTlhYjYtYTdkNi00YzY3LWFiNGUtYThlMjkzOWMxYjBmIn1d + + + + 1664645089735 + mark + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX1d + + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0seyJ4IjoxMDAsInkiOjEwMH1d + + + + 1664645092868 + mark + + DEL_EDGE + WyI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSIsImxhYmVsIjoiWSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkifV0= + + + + 1664645142026 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOi0xNzAuNDQxMDYwODg1NDY2OTUsInkiOjkwLjAxMzUzMjc3NDgxNDY5fV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + + + 1664645149601 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4Ijo3NTQuNDAxODgxNDA3MTk2NSwieSI6OTkuMTM1NzM0OTcxOTM2NjR9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjQwNC4yMzQ2MTA3NjQ4MTQyLCJ5IjotODkuMDEzODQzMjgzNjcxNzh9XQ== + + + + 1664645223291 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjY3Ni4wMDYyMjM4MDA2OTMsInkiOjEwMC40NDIzMjkyNjUzNzgzNn1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjc1NC40MDE4ODE0MDcxOTY1LCJ5Ijo5OS4xMzU3MzQ5NzE5MzY2NH1d + + + + 1664645228453 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjozMzYuMDE4NjM3MDg1NTg2NjUsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + + 1664645231883 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjU4Ny4xNTc4MTE4NDY2NTU2LCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0seyJ4Ijo2NzYuMDA2MjIzODAwNjkzLCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + + + 1664645237206 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9XQ== + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9LHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9XQ== + + + + \ No newline at end of file From 06a86dd41c0b8824346dd77189c6d098a6445622 Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Sat, 22 Oct 2022 21:26:29 -0400 Subject: [PATCH 109/113] Update funbody.py --- 0mq/funbody.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/0mq/funbody.py b/0mq/funbody.py index 2dd7b0b..379b2d2 100644 --- a/0mq/funbody.py +++ b/0mq/funbody.py @@ -40,7 +40,7 @@ while(concore2.simtime Date: Wed, 26 Oct 2022 14:56:56 -0400 Subject: [PATCH 110/113] funcall2 --- 0mq/funbody2.dir/concore2.py | 113 +++++++++ 0mq/funbody2.py | 69 ++++++ 0mq/funcall2.dir/concore2.py | 113 +++++++++ 0mq/funcall2.py | 37 +++ 0mq/test0mq2.graphml | 450 +++++++++++++++++++++++++++++++++++ 0mq/test0mqbody2.graphml | 404 +++++++++++++++++++++++++++++++ 0mq/test0mqcall.graphml | 404 +++++++++++++++++++++++++++++++ 7 files changed, 1590 insertions(+) create mode 100644 0mq/funbody2.dir/concore2.py create mode 100644 0mq/funbody2.py create mode 100644 0mq/funcall2.dir/concore2.py create mode 100644 0mq/funcall2.py create mode 100644 0mq/test0mq2.graphml create mode 100644 0mq/test0mqbody2.graphml create mode 100644 0mq/test0mqcall.graphml diff --git a/0mq/funbody2.dir/concore2.py b/0mq/funbody2.dir/concore2.py new file mode 100644 index 0000000..e3ec817 --- /dev/null +++ b/0mq/funbody2.dir/concore2.py @@ -0,0 +1,113 @@ +import time +import os +from ast import literal_eval +import sys +import re + +#if windows, create script to kill this process +# because batch files don't provide easy way to know pid of last command +# ignored for posix!=windows, because "concorepid" is handled by script +# ignored for docker (linux!=windows), because handled by docker stop +if hasattr(sys, 'getwindowsversion'): + with open("concorekill.bat","w") as fpid: + fpid.write("taskkill /F /PID "+str(os.getpid())+"\n") + +try: + iport = literal_eval(open("concore.iport").read()) +except: + iport = dict() +try: + oport = literal_eval(open("concore.oport").read()) +except: + oport = dict() + + +s = '' +olds = '' +delay = 1 +retrycount = 0 +inpath = "./in" #must be rel path for local +outpath = "./out" + +#9/21/22 +try: + sparams = open(inpath+"1/concore.params").read() + if sparams[0] == '"': #windows keeps "" need to remove + sparams = sparams[1:] + sparams = sparams[0:sparams.find('"')] + if sparams != '{': + print("converting sparams: "+sparams) + sparams = "{'"+re.sub(';',",'",re.sub('=',"':",re.sub(' ','',sparams)))+"}" + print("converted sparams: " + sparams) + try: + params = literal_eval(sparams) + except: + print("bad params: "+sparams) +except: + params = dict() +#9/30/22 +def tryparam(n,i): + try: + return params[n] + except: + return i + + +#9/12/21 +def default_maxtime(default): + global maxtime + try: + maxtime = literal_eval(open(inpath+"1/concore.maxtime").read()) + except: + maxtime = default +default_maxtime(100) + +def unchanged(): + global olds,s + if olds==s: + s = '' + return True + else: + olds = s + return False + +def read(port, name, initstr): + global s,simtime,retrycount + time.sleep(delay) + try: + infile = open(inpath+str(port)+"/"+name); + ins = infile.read() + except: + ins = initstr + while len(ins)==0: + time.sleep(delay) + ins = infile.read() + retrycount += 1 + s += ins + inval = literal_eval(ins) + simtime = max(simtime,inval[0]) + return inval[1:] + +def write(port, name, val, delta=0): + global outpath,simtime + if isinstance(val,str): + time.sleep(2*delay) + elif isinstance(val,list)==False: + print("mywrite must have list or str") + quit() + try: + with open(outpath+str(port)+"/"+name,"w") as outfile: + if isinstance(val,list): + outfile.write(str([simtime+delta]+val)) + simtime += delta + else: + outfile.write(val) + except: + print("skipping"+outpath+str(port)+"/"+name); + +def initval(simtime_val): + global simtime + val = literal_eval(simtime_val) + simtime = val[0] + return val[1:] + diff --git a/0mq/funbody2.py b/0mq/funbody2.py new file mode 100644 index 0000000..379b2d2 --- /dev/null +++ b/0mq/funbody2.py @@ -0,0 +1,69 @@ +import concore +import concore2 +import time +from osparc_control import CommandManifest +from osparc_control import CommandParameter +from osparc_control import CommandType +from osparc_control import PairedTransmitter +# declare some commands to which a reply can be provided +CONCORE_MANIFEST = CommandManifest( + action="fun", + description="function call", + params=[ + CommandParameter(name="u", description="control move"), + ], + command_type=CommandType.WITH_IMMEDIATE_REPLY, +) + + +print("funbody 0mq") +# initialization of 0mq/osparc-control "paired_transmitter" +paired_transmitter = PairedTransmitter( + remote_host="localhost", + exposed_commands=[CONCORE_MANIFEST], + remote_port=2346, + listen_port=2345,) + +paired_transmitter.start_background_sync() + +concore.delay = 0.07 +concore2.delay = 0.07 +concore2.inpath = concore.inpath +concore2.outpath = concore.outpath +concore2.simtime = 0 +concore.default_maxtime(100) +init_simtime_u = "[0.0, 0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0, 0.0]" + +u = concore.initval(init_simtime_u) +ym = concore2.initval(init_simtime_ym) +while(concore2.simtime1: + print("too many commands at once!") + command = command_list[0] + if command.action == CONCORE_MANIFEST.action: + u = command.params["u"] + concore.simtime = u[0] + u = u[1:] + concore.write(concore.oport['U2'],"u",u) + print(u) + old2 = concore2.simtime + while concore2.unchanged() or concore2.simtime <= old2: + ym = concore2.read(concore.iport['Y2'],"ym",init_simtime_ym) + ym = [concore2.simtime]+ym + print(f"Replying to {command.action} with {ym}") + paired_transmitter.reply_to_command( + request_id=command.request_id, payload=ym) + else: + print("undefined action"+str(command.action)) + quit() + #concore2.write(concore.oport['Y1'],"ym",ym) + print("funbody u="+str(u)+" ym="+str(ym)+" time="+str(concore2.simtime)) +paired_transmitter.stop_background_sync() +print("retry="+str(concore.retrycount)) diff --git a/0mq/funcall2.dir/concore2.py b/0mq/funcall2.dir/concore2.py new file mode 100644 index 0000000..e3ec817 --- /dev/null +++ b/0mq/funcall2.dir/concore2.py @@ -0,0 +1,113 @@ +import time +import os +from ast import literal_eval +import sys +import re + +#if windows, create script to kill this process +# because batch files don't provide easy way to know pid of last command +# ignored for posix!=windows, because "concorepid" is handled by script +# ignored for docker (linux!=windows), because handled by docker stop +if hasattr(sys, 'getwindowsversion'): + with open("concorekill.bat","w") as fpid: + fpid.write("taskkill /F /PID "+str(os.getpid())+"\n") + +try: + iport = literal_eval(open("concore.iport").read()) +except: + iport = dict() +try: + oport = literal_eval(open("concore.oport").read()) +except: + oport = dict() + + +s = '' +olds = '' +delay = 1 +retrycount = 0 +inpath = "./in" #must be rel path for local +outpath = "./out" + +#9/21/22 +try: + sparams = open(inpath+"1/concore.params").read() + if sparams[0] == '"': #windows keeps "" need to remove + sparams = sparams[1:] + sparams = sparams[0:sparams.find('"')] + if sparams != '{': + print("converting sparams: "+sparams) + sparams = "{'"+re.sub(';',",'",re.sub('=',"':",re.sub(' ','',sparams)))+"}" + print("converted sparams: " + sparams) + try: + params = literal_eval(sparams) + except: + print("bad params: "+sparams) +except: + params = dict() +#9/30/22 +def tryparam(n,i): + try: + return params[n] + except: + return i + + +#9/12/21 +def default_maxtime(default): + global maxtime + try: + maxtime = literal_eval(open(inpath+"1/concore.maxtime").read()) + except: + maxtime = default +default_maxtime(100) + +def unchanged(): + global olds,s + if olds==s: + s = '' + return True + else: + olds = s + return False + +def read(port, name, initstr): + global s,simtime,retrycount + time.sleep(delay) + try: + infile = open(inpath+str(port)+"/"+name); + ins = infile.read() + except: + ins = initstr + while len(ins)==0: + time.sleep(delay) + ins = infile.read() + retrycount += 1 + s += ins + inval = literal_eval(ins) + simtime = max(simtime,inval[0]) + return inval[1:] + +def write(port, name, val, delta=0): + global outpath,simtime + if isinstance(val,str): + time.sleep(2*delay) + elif isinstance(val,list)==False: + print("mywrite must have list or str") + quit() + try: + with open(outpath+str(port)+"/"+name,"w") as outfile: + if isinstance(val,list): + outfile.write(str([simtime+delta]+val)) + simtime += delta + else: + outfile.write(val) + except: + print("skipping"+outpath+str(port)+"/"+name); + +def initval(simtime_val): + global simtime + val = literal_eval(simtime_val) + simtime = val[0] + return val[1:] + diff --git a/0mq/funcall2.py b/0mq/funcall2.py new file mode 100644 index 0000000..b316ff1 --- /dev/null +++ b/0mq/funcall2.py @@ -0,0 +1,37 @@ +import concore +import concore2 +from osparc_control import PairedTransmitter +print("funcall 0mq") + +concore.delay = 0.07 +concore2.delay = 0.07 +concore2.inpath = concore.inpath +concore2.outpath = concore.outpath +concore2.simtime = 0 +concore.default_maxtime(100) +init_simtime_u = "[0.0, 0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0, 0.0]" + +u = concore.initval(init_simtime_u) +ym = concore2.initval(init_simtime_ym) +while(concore2.simtime + + + + + + + + + + + PZ:pmpymax.py + + + + + + + + + + + CZ:cpymax.py + + + + + + + + + + + F1:funcall2.py + + + + + + + + + + + F2:funbody2.py + + + + + + + + + + U + + + + + + + + + + + + Y + + + + + + + + + + + + U2 + + + + + + + + + + + + Y2 + + + + + + + + 1664644923582 + mark + + DEL_NODE + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciXQ== + + + ADD_NODE + WyJQWjpwbXB5bWF4LnB5Iix7IndpZHRoIjoxMzYsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0se30sImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyJd + + ea1f3ba8fe573453400ffda5fad41219 + + + 1664644939781 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4IjoxMDAsInkiOjEwMH1d + + 4d28b3ac41cd2913a677da0a4b65b424 + + + 1664644951652 + mark + + DEL_NODE + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiXQ== + + + ADD_NODE + WyJDWjpjcHltYXgucHkiLHsid2lkdGgiOjEyMiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjotMTM3Ljc3NjIwMzU0OTQyMzgzLCJ5Ijo5MS4zMjAxMjcwNjgyNTY0MX0se30sImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSJd + + 7d1c82d143a33ca11a4f968849bad104 + + + 1664644958838 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOjEwMCwieSI6MTAwfV0= + + 2e1ad74435543de42a296bb9a0620e63 + + + 1664644988539 + mark + + DEL_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiXQ== + + + ADD_NODE + WyJGMTpmdW5jYWxsLnB5Iix7IndpZHRoIjoxMTEsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0se30sImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCJd + + ed42ad47c94f87d676c7c83ce9ded915 + + + 1664645002278 + mark + + DEL_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + ADD_NODE + WyJGMjpmdW5ib2R5LnB5Iix7IndpZHRoIjoxMjAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHt9LCJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + 0f42a42f08b5d6633750c6cd0a52cd7f + + + 1664645010353 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjoxMTAsInkiOjExMH1d + + 9ed03855520c803cecdd1d7497a92151 + + + 1664645015576 + mark + + DEL_EDGE + WyIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiVSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUifV0= + + 725908dc36e7bc154d1d8dd0e98a412d + + + 1664645043815 + mark + + DEL_EDGE + WyIzY2ZiNDBjZC01NTdhLTQ4NTAtOTNhNi1mZGMwOWNkMDA1ZjAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiVTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiM2NmYjQwY2QtNTU3YS00ODUwLTkzYTYtZmRjMDljZDAwNWYwIn1d + + 9f18da8775e24b7f2f9902f2842eb63e + + + 1664645057658 + mark + + DEL_EDGE + WyI3MTRkYjk4OS01NjcyLTQwM2ItYWU3Ni1mZDlhMjA4OTM0NzUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImxhYmVsIjoiVTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNzE0ZGI5ODktNTY3Mi00MDNiLWFlNzYtZmQ5YTIwODkzNDc1In1d + + 3e1c6e41350aaf47123ec7cf25e1b62c + + + 1664645068951 + mark + + DEL_EDGE + WyJhOGFlNzg5MC1iMmJiLTQyNzMtODc1My0wMTgxY2ViNDg2YzEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiWTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiYThhZTc4OTAtYjJiYi00MjczLTg3NTMtMDE4MWNlYjQ4NmMxIn1d + + 269c6a2baeea1b2785ce71ff56f4a76d + + + 1664645081283 + mark + + DEL_EDGE + WyI1NWI5OWFiNi1hN2Q2LTRjNjctYWI0ZS1hOGUyOTM5YzFiMGYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNTViOTlhYjYtYTdkNi00YzY3LWFiNGUtYThlMjkzOWMxYjBmIn1d + + 3c7cb858225e79ecf43defb7b70197a6 + + + 1664645089735 + mark + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX1d + + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0seyJ4IjoxMDAsInkiOjEwMH1d + + b6b4fcd96e508461f87e4513dbd0170e + + + 1664645092868 + mark + + DEL_EDGE + WyI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSIsImxhYmVsIjoiWSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkifV0= + + f2a382cf010520ed6d8d1167488af14c + + + 1664645142026 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOi0xNzAuNDQxMDYwODg1NDY2OTUsInkiOjkwLjAxMzUzMjc3NDgxNDY5fV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + 5fc1c53a84494c7b3b749c475cf09d33 + + + 1664645149601 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4Ijo3NTQuNDAxODgxNDA3MTk2NSwieSI6OTkuMTM1NzM0OTcxOTM2NjR9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjQwNC4yMzQ2MTA3NjQ4MTQyLCJ5IjotODkuMDEzODQzMjgzNjcxNzh9XQ== + + 627a3a19a5e310402ab0c81e854bb1aa + + + 1664645223291 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjY3Ni4wMDYyMjM4MDA2OTMsInkiOjEwMC40NDIzMjkyNjUzNzgzNn1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjc1NC40MDE4ODE0MDcxOTY1LCJ5Ijo5OS4xMzU3MzQ5NzE5MzY2NH1d + + 65480a229a142f0b48daa6727b8aae7b + + + 1664645228453 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjozMzYuMDE4NjM3MDg1NTg2NjUsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + 1359e922778d54bbfc88d8040c764247 + + + 1664645231883 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjU4Ny4xNTc4MTE4NDY2NTU2LCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0seyJ4Ijo2NzYuMDA2MjIzODAwNjkzLCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + ef15c4c7e39dcf45dee8b9e5d071d32f + + + 1664645237206 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9XQ== + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9LHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9XQ== + + a8ef099b87ae2a958e58d7b138deb5f5 + + + 1666487497309 + mark + + ADD_EDGE + W3sibGFiZWwiOiJZMSIsInNvdXJjZSI6IjdiNjljNmU2LTY0ZDEtNGQxZC1hODVkLThmODIwZGVhZTkyZSIsInRhcmdldCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsInN0eWxlIjp7ImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjoyNS4wMTU2MDQ0Mzg0NDI0NywiYmVuZFdlaWdodCI6MC41MDcyNjEyODIxMTY0NTQyLCJiZW5kUG9pbnQiOnsieCI6MTg1Ljk0OTI3NTk2OTkwNjY3LCJ5Ijo2Ny4wNTc5Mjg3NTI0OTY3Mn19LCJzb3VyY2VJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsInRhcmdldElEIjoiZjU2ZjhiMjQtNDFhNi00NWI0LTg4MmItNjU5NjA0MGI2YWYwIiwidHlwZSI6Im9yZGluIiwiaWQiOiJkYWRmMjgyOS1lMDEwLTRlMGQtYTNhNy1iYTdkYjg3OWM2NDkifV0= + + + DEL_EDGE + WyJkYWRmMjgyOS1lMDEwLTRlMGQtYTNhNy1iYTdkYjg3OWM2NDkiXQ== + + 6a68923268af161e7e8346570af341ba + + + 1666487500685 + mark + + ADD_EDGE + W3sibGFiZWwiOiJVMSIsInNvdXJjZSI6IjZhYzczNmNiLWUyZmUtNGI4Mi04NzQ1LTUyZjkzNGYyZGYxMCIsInRhcmdldCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsInN0eWxlIjp7ImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjowLjAwMDAyNzg2ODE3Mzg2NTQ2NDAzLCJiZW5kV2VpZ2h0IjowLjUwMDAwMDAwNDAzMDUwNjYsImJlbmRQb2ludCI6eyJ4IjoyNDUuNzU5MzE4NTQyNzk0OTQsInkiOjk4LjU4MDQzNDE0NjM5NTE4fX0sInNvdXJjZUlEIjoiZjU2ZjhiMjQtNDFhNi00NWI0LTg4MmItNjU5NjA0MGI2YWYwIiwidGFyZ2V0SUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0eXBlIjoib3JkaW4iLCJpZCI6ImRlYzYzYTI5LWY1NWEtNGNmNy04OWIwLWQ3NjY2YzcyMmFkOSJ9XQ== + + + DEL_EDGE + WyJkZWM2M2EyOS1mNTVhLTRjZjctODliMC1kNzY2NmM3MjJhZDkiXQ== + + afaa886c1e4907765760ae91632e1871 + + + 1666487596231 + mark + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0seyJ4Ijo2MDEsInkiOjIwNC43NzM2MjI4MjYyMzMxMn1d + + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6NjAxLCJ5IjoyMDQuNzczNjIyODI2MjMzMTJ9LHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX1d + + 9b8102bf0ff6c683303dd52bb4e5f11f + + + 1666487606788 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9LHsieCI6MzQ2LjIyMzc5NjQ1MDU3NjIsInkiOjE5Mi4zMjAxMjcwNjgyNTY0fV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MzQ2LjIyMzc5NjQ1MDU3NjIsInkiOjE5Mi4zMjAxMjcwNjgyNTY0fSx7IngiOi0xMzcuNzc2MjAzNTQ5NDIzODMsInkiOjkxLjMyMDEyNzA2ODI1NjQxfV0= + + 81b083eaab3a85c8a256b80ac2c5824d + + + 1666488874534 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MzQ2LjIyMzc5NjQ1MDU3NjIsInkiOjI0Ni4zMjAxMjcwNjgyNTY0fSx7IngiOjM0Mi4yMjM3OTY0NTA1NzYyLCJ5IjoyMDkuMzIwMTI3MDY4MjU2NH1d + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MzQyLjIyMzc5NjQ1MDU3NjIsInkiOjIwOS4zMjAxMjcwNjgyNTY0fSx7IngiOjM0Ni4yMjM3OTY0NTA1NzYyLCJ5IjoyNDYuMzIwMTI3MDY4MjU2NH1d + + b8795f29706d6c377257fb0df5233bd8 + + + 1666810512066 + mark + + UPDATE_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsid2lkdGgiOjEyMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJGMjpmdW5ib2R5LnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsid2lkdGgiOjEzMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJGMjpmdW5ib2R5Mi5weSIsdHJ1ZV0= + + 8a4a2242b6e4ded74e305b2ee3aea6b8 + + + 1666810533063 + mark + + UPDATE_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsid2lkdGgiOjExMSwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJGMTpmdW5jYWxsLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsid2lkdGgiOjEyMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJGMTpmdW5jYWxsMi5weSIsdHJ1ZV0= + + af30be77ca02fd759728f9cc913267e7 + + + \ No newline at end of file diff --git a/0mq/test0mqbody2.graphml b/0mq/test0mqbody2.graphml new file mode 100644 index 0000000..cd69805 --- /dev/null +++ b/0mq/test0mqbody2.graphml @@ -0,0 +1,404 @@ + + + + + + + + + + + + PZ:pmpymax.py + + + + + + + + + + + F2:funbody2.py + + + + + + + + + + Y2 + + + + + + + + + + + + U2 + + + + + + + + 1664644923582 + mark + + DEL_NODE + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciXQ== + + + ADD_NODE + WyJQWjpwbXB5bWF4LnB5Iix7IndpZHRoIjoxMzYsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0se30sImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyJd + + ea1f3ba8fe573453400ffda5fad41219 + + + 1664644939781 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4IjoxMDAsInkiOjEwMH1d + + 4d28b3ac41cd2913a677da0a4b65b424 + + + 1664644951652 + mark + + DEL_NODE + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiXQ== + + + ADD_NODE + WyJDWjpjcHltYXgucHkiLHsid2lkdGgiOjEyMiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjotMTM3Ljc3NjIwMzU0OTQyMzgzLCJ5Ijo5MS4zMjAxMjcwNjgyNTY0MX0se30sImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSJd + + 7d1c82d143a33ca11a4f968849bad104 + + + 1664644958838 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOjEwMCwieSI6MTAwfV0= + + 2e1ad74435543de42a296bb9a0620e63 + + + 1664644988539 + mark + + DEL_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiXQ== + + + ADD_NODE + WyJGMTpmdW5jYWxsLnB5Iix7IndpZHRoIjoxMTEsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0se30sImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCJd + + ed42ad47c94f87d676c7c83ce9ded915 + + + 1664645002278 + mark + + DEL_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + ADD_NODE + WyJGMjpmdW5ib2R5LnB5Iix7IndpZHRoIjoxMjAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHt9LCJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + 0f42a42f08b5d6633750c6cd0a52cd7f + + + 1664645010353 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjoxMTAsInkiOjExMH1d + + 9ed03855520c803cecdd1d7497a92151 + + + 1664645015576 + mark + + DEL_EDGE + WyIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiVSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUifV0= + + 725908dc36e7bc154d1d8dd0e98a412d + + + 1664645043815 + mark + + DEL_EDGE + WyIzY2ZiNDBjZC01NTdhLTQ4NTAtOTNhNi1mZGMwOWNkMDA1ZjAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiVTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiM2NmYjQwY2QtNTU3YS00ODUwLTkzYTYtZmRjMDljZDAwNWYwIn1d + + 9f18da8775e24b7f2f9902f2842eb63e + + + 1664645057658 + mark + + DEL_EDGE + WyI3MTRkYjk4OS01NjcyLTQwM2ItYWU3Ni1mZDlhMjA4OTM0NzUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImxhYmVsIjoiVTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNzE0ZGI5ODktNTY3Mi00MDNiLWFlNzYtZmQ5YTIwODkzNDc1In1d + + 3e1c6e41350aaf47123ec7cf25e1b62c + + + 1664645068951 + mark + + DEL_EDGE + WyJhOGFlNzg5MC1iMmJiLTQyNzMtODc1My0wMTgxY2ViNDg2YzEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiWTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiYThhZTc4OTAtYjJiYi00MjczLTg3NTMtMDE4MWNlYjQ4NmMxIn1d + + 269c6a2baeea1b2785ce71ff56f4a76d + + + 1664645081283 + mark + + DEL_EDGE + WyI1NWI5OWFiNi1hN2Q2LTRjNjctYWI0ZS1hOGUyOTM5YzFiMGYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNTViOTlhYjYtYTdkNi00YzY3LWFiNGUtYThlMjkzOWMxYjBmIn1d + + 3c7cb858225e79ecf43defb7b70197a6 + + + 1664645089735 + mark + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX1d + + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0seyJ4IjoxMDAsInkiOjEwMH1d + + b6b4fcd96e508461f87e4513dbd0170e + + + 1664645092868 + mark + + DEL_EDGE + WyI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSIsImxhYmVsIjoiWSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkifV0= + + f2a382cf010520ed6d8d1167488af14c + + + 1664645142026 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOi0xNzAuNDQxMDYwODg1NDY2OTUsInkiOjkwLjAxMzUzMjc3NDgxNDY5fV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + 5fc1c53a84494c7b3b749c475cf09d33 + + + 1664645149601 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4Ijo3NTQuNDAxODgxNDA3MTk2NSwieSI6OTkuMTM1NzM0OTcxOTM2NjR9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjQwNC4yMzQ2MTA3NjQ4MTQyLCJ5IjotODkuMDEzODQzMjgzNjcxNzh9XQ== + + 627a3a19a5e310402ab0c81e854bb1aa + + + 1664645223291 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjY3Ni4wMDYyMjM4MDA2OTMsInkiOjEwMC40NDIzMjkyNjUzNzgzNn1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjc1NC40MDE4ODE0MDcxOTY1LCJ5Ijo5OS4xMzU3MzQ5NzE5MzY2NH1d + + 65480a229a142f0b48daa6727b8aae7b + + + 1664645228453 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjozMzYuMDE4NjM3MDg1NTg2NjUsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + 1359e922778d54bbfc88d8040c764247 + + + 1664645231883 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjU4Ny4xNTc4MTE4NDY2NTU2LCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0seyJ4Ijo2NzYuMDA2MjIzODAwNjkzLCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + ef15c4c7e39dcf45dee8b9e5d071d32f + + + 1664645237206 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9XQ== + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9LHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9XQ== + + a8ef099b87ae2a958e58d7b138deb5f5 + + + 1666487497309 + mark + + ADD_EDGE + W3sibGFiZWwiOiJZMSIsInNvdXJjZSI6IjdiNjljNmU2LTY0ZDEtNGQxZC1hODVkLThmODIwZGVhZTkyZSIsInRhcmdldCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsInN0eWxlIjp7ImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjoyNS4wMTU2MDQ0Mzg0NDI0NywiYmVuZFdlaWdodCI6MC41MDcyNjEyODIxMTY0NTQyLCJiZW5kUG9pbnQiOnsieCI6MTg1Ljk0OTI3NTk2OTkwNjY3LCJ5Ijo2Ny4wNTc5Mjg3NTI0OTY3Mn19LCJzb3VyY2VJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsInRhcmdldElEIjoiZjU2ZjhiMjQtNDFhNi00NWI0LTg4MmItNjU5NjA0MGI2YWYwIiwidHlwZSI6Im9yZGluIiwiaWQiOiJkYWRmMjgyOS1lMDEwLTRlMGQtYTNhNy1iYTdkYjg3OWM2NDkifV0= + + + DEL_EDGE + WyJkYWRmMjgyOS1lMDEwLTRlMGQtYTNhNy1iYTdkYjg3OWM2NDkiXQ== + + 6a68923268af161e7e8346570af341ba + + + 1666487500685 + mark + + ADD_EDGE + W3sibGFiZWwiOiJVMSIsInNvdXJjZSI6IjZhYzczNmNiLWUyZmUtNGI4Mi04NzQ1LTUyZjkzNGYyZGYxMCIsInRhcmdldCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsInN0eWxlIjp7ImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjowLjAwMDAyNzg2ODE3Mzg2NTQ2NDAzLCJiZW5kV2VpZ2h0IjowLjUwMDAwMDAwNDAzMDUwNjYsImJlbmRQb2ludCI6eyJ4IjoyNDUuNzU5MzE4NTQyNzk0OTQsInkiOjk4LjU4MDQzNDE0NjM5NTE4fX0sInNvdXJjZUlEIjoiZjU2ZjhiMjQtNDFhNi00NWI0LTg4MmItNjU5NjA0MGI2YWYwIiwidGFyZ2V0SUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0eXBlIjoib3JkaW4iLCJpZCI6ImRlYzYzYTI5LWY1NWEtNGNmNy04OWIwLWQ3NjY2YzcyMmFkOSJ9XQ== + + + DEL_EDGE + WyJkZWM2M2EyOS1mNTVhLTRjZjctODliMC1kNzY2NmM3MjJhZDkiXQ== + + afaa886c1e4907765760ae91632e1871 + + + 1666810445211 + mark + + ADD_EDGE + W3sibGFiZWwiOiJZIiwic291cmNlIjoiNTIzNjQxYTQtOTc1NS00NWVkLTlhMjUtYTExNDc2ZGUzN2EwIiwidGFyZ2V0IjoiZDk1Zjc4ODctNDJiZi00ZTEyLWEwMjItMDIxODY5NzAxYzZhIiwic3R5bGUiOnsiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInRoaWNrbmVzcyI6MSwic2hhcGUiOiJzb2xpZCJ9LCJiZW5kRGF0YSI6eyJiZW5kRGlzdGFuY2UiOjI5LjE1NTExMDY3Mjg3NDI5NCwiYmVuZFdlaWdodCI6MC41MTMxNjc2Njk2NTEzNTEyLCJiZW5kUG9pbnQiOnsieCI6LTUwLjM1NTE2Njc0NzA3LCJ5Ijo1OC4xODI0NTg4NjkxNTA4NH19LCJzb3VyY2VJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsInRhcmdldElEIjoiZDk1Zjc4ODctNDJiZi00ZTEyLWEwMjItMDIxODY5NzAxYzZhIiwidHlwZSI6Im9yZGluIiwiaWQiOiI4YTE1ZmMyOC02ZjA5LTQ3MmYtYTk3Ni1jZmYzOWY3MzFjNjAifV0= + + + DEL_EDGE + WyI4YTE1ZmMyOC02ZjA5LTQ3MmYtYTk3Ni1jZmYzOWY3MzFjNjAiXQ== + + e6899a4a1e46f06e241808fedb6942ce + + + 1666810445211 + mark + + ADD_EDGE + W3sibGFiZWwiOiJVIiwic291cmNlIjoiZDA0MDg0OGYtNmE5NC00YWMyLWE0ZTItYTg4NzliNWY3ZmZiIiwidGFyZ2V0IjoiZjU2ZjhiMjQtNDFhNi00NWI0LTg4MmItNjU5NjA0MGI2YWYwIiwic3R5bGUiOnsiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInRoaWNrbmVzcyI6MSwic2hhcGUiOiJzb2xpZCJ9LCJiZW5kRGF0YSI6eyJiZW5kRGlzdGFuY2UiOjAuMDAwMDE0ODc2MzcxMTExNjM4NDIsImJlbmRXZWlnaHQiOjAuNTAwMDAwMDAxMjIyMTMzNiwiYmVuZFBvaW50Ijp7IngiOjExLjYxMTg5ODIyNTI4ODk2OCwieSI6OTMuNDg5ODc5MjQ2Nzg1Mzl9fSwic291cmNlSUQiOiJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsInR5cGUiOiJvcmRpbiIsImlkIjoiZTAxY2FiN2MtYzQ0Ni00OGRhLWI4OGUtN2Y5NjIwY2NkMjY5In1d + + + DEL_EDGE + WyJlMDFjYWI3Yy1jNDQ2LTQ4ZGEtYjg4ZS03Zjk2MjBjY2QyNjkiXQ== + + 7ac674c0802aeff613b1f0b989427ec9 + + + 1666810445211 + mark + + ADD_NODE + WyJGMTpmdW5jYWxsLnB5Iix7IndpZHRoIjoxMTEsImhlaWdodCI6NTAsIm9wYWNpdHkiOjEsInNoYXBlIjoicmVjdGFuZ2xlIiwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0seyJpZCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiRjE6ZnVuY2FsbC5weSIsInR5cGUiOiJvcmRpbiIsInN0eWxlIjp7IndpZHRoIjoxMTEsImhlaWdodCI6NTAsIm9wYWNpdHkiOjEsInNoYXBlIjoicmVjdGFuZ2xlIiwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfX0sImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCJd + + + DEL_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiXQ== + + bd81ac85ca97ad8607020554364e59b0 + + + 1666810453165 + mark + + ADD_NODE + WyJDWjpjcHltYXgucHkiLHsid2lkdGgiOjEyMiwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjotMTM3Ljc3NjIwMzU0OTQyMzgzLCJ5Ijo5MS4zMjAxMjcwNjgyNTY0MX0seyJpZCI6ImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSIsImxhYmVsIjoiQ1o6Y3B5bWF4LnB5IiwidHlwZSI6Im9yZGluIiwic3R5bGUiOnsid2lkdGgiOjEyMiwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9fSwiZDk1Zjc4ODctNDJiZi00ZTEyLWEwMjItMDIxODY5NzAxYzZhIl0= + + + DEL_NODE + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiXQ== + + a1e7c2a7f9a5da8636e9eb957887686d + + + 1666810462415 + mark + + UPDATE_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsid2lkdGgiOjEyMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJGMjpmdW5ib2R5LnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsid2lkdGgiOjEzMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJGMjpmdW5ib2R5Mi5weSIsdHJ1ZV0= + + 6d6f211aebd7b1a130a1360f884c258b + + + \ No newline at end of file diff --git a/0mq/test0mqcall.graphml b/0mq/test0mqcall.graphml new file mode 100644 index 0000000..cf5b799 --- /dev/null +++ b/0mq/test0mqcall.graphml @@ -0,0 +1,404 @@ + + + + + + + + + + + + CZ:cpymax.py + + + + + + + + + + + F1:funcall2.py + + + + + + + + + + Y + + + + + + + + + + + + U + + + + + + + + 1664644923582 + mark + + DEL_NODE + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciXQ== + + + ADD_NODE + WyJQWjpwbXB5bWF4LnB5Iix7IndpZHRoIjoxMzYsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0se30sImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyJd + + ea1f3ba8fe573453400ffda5fad41219 + + + 1664644939781 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4IjoxMDAsInkiOjEwMH1d + + 4d28b3ac41cd2913a677da0a4b65b424 + + + 1664644951652 + mark + + DEL_NODE + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiXQ== + + + ADD_NODE + WyJDWjpjcHltYXgucHkiLHsid2lkdGgiOjEyMiwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJvcmRpbiIseyJ4IjotMTM3Ljc3NjIwMzU0OTQyMzgzLCJ5Ijo5MS4zMjAxMjcwNjgyNTY0MX0se30sImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSJd + + 7d1c82d143a33ca11a4f968849bad104 + + + 1664644958838 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOjEwMCwieSI6MTAwfV0= + + 2e1ad74435543de42a296bb9a0620e63 + + + 1664644988539 + mark + + DEL_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiXQ== + + + ADD_NODE + WyJGMTpmdW5jYWxsLnB5Iix7IndpZHRoIjoxMTEsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0se30sImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCJd + + ed42ad47c94f87d676c7c83ce9ded915 + + + 1664645002278 + mark + + DEL_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + ADD_NODE + WyJGMjpmdW5ib2R5LnB5Iix7IndpZHRoIjoxMjAsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHt9LCJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + 0f42a42f08b5d6633750c6cd0a52cd7f + + + 1664645010353 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjoxMTAsInkiOjExMH1d + + 9ed03855520c803cecdd1d7497a92151 + + + 1664645015576 + mark + + DEL_EDGE + WyIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiVSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiIwZjk1MWZiYy0wZDNmLTQzYzAtYmJmMC04NjViYzQ3ZjEyMGUifV0= + + 725908dc36e7bc154d1d8dd0e98a412d + + + 1664645043815 + mark + + DEL_EDGE + WyIzY2ZiNDBjZC01NTdhLTQ4NTAtOTNhNi1mZGMwOWNkMDA1ZjAiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiVTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiM2NmYjQwY2QtNTU3YS00ODUwLTkzYTYtZmRjMDljZDAwNWYwIn1d + + 9f18da8775e24b7f2f9902f2842eb63e + + + 1664645057658 + mark + + DEL_EDGE + WyI3MTRkYjk4OS01NjcyLTQwM2ItYWU3Ni1mZDlhMjA4OTM0NzUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImxhYmVsIjoiVTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNzE0ZGI5ODktNTY3Mi00MDNiLWFlNzYtZmQ5YTIwODkzNDc1In1d + + 3e1c6e41350aaf47123ec7cf25e1b62c + + + 1664645068951 + mark + + DEL_EDGE + WyJhOGFlNzg5MC1iMmJiLTQyNzMtODc1My0wMTgxY2ViNDg2YzEiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsImxhYmVsIjoiWTIiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiYThhZTc4OTAtYjJiYi00MjczLTg3NTMtMDE4MWNlYjQ4NmMxIn1d + + 269c6a2baeea1b2785ce71ff56f4a76d + + + 1664645081283 + mark + + DEL_EDGE + WyI1NWI5OWFiNi1hN2Q2LTRjNjctYWI0ZS1hOGUyOTM5YzFiMGYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0YXJnZXRJRCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsImxhYmVsIjoiWTEiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJzaGFwZSI6InNvbGlkIn0sImlkIjoiNTViOTlhYjYtYTdkNi00YzY3LWFiNGUtYThlMjkzOWMxYjBmIn1d + + 3c7cb858225e79ecf43defb7b70197a6 + + + 1664645089735 + mark + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5IjoxMDB9LHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX1d + + + SET_POS + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsieCI6MTAwLCJ5Ijo5NC43NzM2MjI4MjYyMzMxMX0seyJ4IjoxMDAsInkiOjEwMH1d + + b6b4fcd96e508461f87e4513dbd0170e + + + 1664645092868 + mark + + DEL_EDGE + WyI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLCJ0YXJnZXRJRCI6ImQ5NWY3ODg3LTQyYmYtNGUxMi1hMDIyLTAyMTg2OTcwMWM2YSIsImxhYmVsIjoiWSIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiI3OWE1NDdmNS02NzBhLTQ1ZjYtYTc4My02ZGI4ZmYwZTY1NTkifV0= + + f2a382cf010520ed6d8d1167488af14c + + + 1664645142026 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfSx7IngiOi0xNzAuNDQxMDYwODg1NDY2OTUsInkiOjkwLjAxMzUzMjc3NDgxNDY5fV0= + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6OTcuNDEwNzY5MjcwMDg2NjksInkiOi05MS42MDMwNzQwMTM1ODUxfV0= + + 5fc1c53a84494c7b3b749c475cf09d33 + + + 1664645149601 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NDA0LjIzNDYxMDc2NDgxNDIsInkiOi04OS4wMTM4NDMyODM2NzE3OH0seyJ4Ijo3NTQuNDAxODgxNDA3MTk2NSwieSI6OTkuMTM1NzM0OTcxOTM2NjR9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjQwNC4yMzQ2MTA3NjQ4MTQyLCJ5IjotODkuMDEzODQzMjgzNjcxNzh9XQ== + + 627a3a19a5e310402ab0c81e854bb1aa + + + 1664645223291 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NzU0LjQwMTg4MTQwNzE5NjUsInkiOjk5LjEzNTczNDk3MTkzNjY0fSx7IngiOjY3Ni4wMDYyMjM4MDA2OTMsInkiOjEwMC40NDIzMjkyNjUzNzgzNn1d + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjc1NC40MDE4ODE0MDcxOTY1LCJ5Ijo5OS4xMzU3MzQ5NzE5MzY2NH1d + + 65480a229a142f0b48daa6727b8aae7b + + + 1664645228453 + mark + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX0seyJ4IjozMzYuMDE4NjM3MDg1NTg2NjUsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + + SET_POS + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHsieCI6Mzk0LjgxNTM4MDI5MDQ2NDMsInkiOjEwMC45Mzc2OTI0NDUzMDM0MX1d + + 1359e922778d54bbfc88d8040c764247 + + + 1664645231883 + mark + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6Njc2LjAwNjIyMzgwMDY5MywieSI6MTAwLjQ0MjMyOTI2NTM3ODM2fSx7IngiOjU4Ny4xNTc4MTE4NDY2NTU2LCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + + SET_POS + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0seyJ4Ijo2NzYuMDA2MjIzODAwNjkzLCJ5IjoxMDAuNDQyMzI5MjY1Mzc4MzZ9XQ== + + ef15c4c7e39dcf45dee8b9e5d071d32f + + + 1664645237206 + mark + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9LHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9XQ== + + + SET_POS + WyJkOTVmNzg4Ny00MmJmLTRlMTItYTAyMi0wMjE4Njk3MDFjNmEiLHsieCI6LTEzNy43NzYyMDM1NDk0MjM4MywieSI6OTEuMzIwMTI3MDY4MjU2NDF9LHsieCI6LTE3MC40NDEwNjA4ODU0NjY5NSwieSI6OTAuMDEzNTMyNzc0ODE0Njl9XQ== + + a8ef099b87ae2a958e58d7b138deb5f5 + + + 1666487497309 + mark + + ADD_EDGE + W3sibGFiZWwiOiJZMSIsInNvdXJjZSI6IjdiNjljNmU2LTY0ZDEtNGQxZC1hODVkLThmODIwZGVhZTkyZSIsInRhcmdldCI6ImY1NmY4YjI0LTQxYTYtNDViNC04ODJiLTY1OTYwNDBiNmFmMCIsInN0eWxlIjp7ImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjoyNS4wMTU2MDQ0Mzg0NDI0NywiYmVuZFdlaWdodCI6MC41MDcyNjEyODIxMTY0NTQyLCJiZW5kUG9pbnQiOnsieCI6MTg1Ljk0OTI3NTk2OTkwNjY3LCJ5Ijo2Ny4wNTc5Mjg3NTI0OTY3Mn19LCJzb3VyY2VJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsInRhcmdldElEIjoiZjU2ZjhiMjQtNDFhNi00NWI0LTg4MmItNjU5NjA0MGI2YWYwIiwidHlwZSI6Im9yZGluIiwiaWQiOiJkYWRmMjgyOS1lMDEwLTRlMGQtYTNhNy1iYTdkYjg3OWM2NDkifV0= + + + DEL_EDGE + WyJkYWRmMjgyOS1lMDEwLTRlMGQtYTNhNy1iYTdkYjg3OWM2NDkiXQ== + + 6a68923268af161e7e8346570af341ba + + + 1666487500685 + mark + + ADD_EDGE + W3sibGFiZWwiOiJVMSIsInNvdXJjZSI6IjZhYzczNmNiLWUyZmUtNGI4Mi04NzQ1LTUyZjkzNGYyZGYxMCIsInRhcmdldCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsInN0eWxlIjp7ImJhY2tncm91bmRDb2xvciI6IiM3YzRkZmYiLCJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjowLjAwMDAyNzg2ODE3Mzg2NTQ2NDAzLCJiZW5kV2VpZ2h0IjowLjUwMDAwMDAwNDAzMDUwNjYsImJlbmRQb2ludCI6eyJ4IjoyNDUuNzU5MzE4NTQyNzk0OTQsInkiOjk4LjU4MDQzNDE0NjM5NTE4fX0sInNvdXJjZUlEIjoiZjU2ZjhiMjQtNDFhNi00NWI0LTg4MmItNjU5NjA0MGI2YWYwIiwidGFyZ2V0SUQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJ0eXBlIjoib3JkaW4iLCJpZCI6ImRlYzYzYTI5LWY1NWEtNGNmNy04OWIwLWQ3NjY2YzcyMmFkOSJ9XQ== + + + DEL_EDGE + WyJkZWM2M2EyOS1mNTVhLTRjZjctODliMC1kNzY2NmM3MjJhZDkiXQ== + + afaa886c1e4907765760ae91632e1871 + + + 1666810339519 + mark + + ADD_EDGE + W3sibGFiZWwiOiJVMiIsInNvdXJjZSI6ImFjZWUyZTJjLTFhOTEtNDg1OC1hYzdjLWNhMmNiM2YxZjQ3MCIsInRhcmdldCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsInN0eWxlIjp7ImJhY2tncm91bmRDb2xvciI6IiNmZjZkMDAiLCJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjotOS40NzQ2NTYxODQ2MTU5NmUtOCwiYmVuZFdlaWdodCI6MC41MDAwMDAwMDAwMDA5Nzc3LCJiZW5kUG9pbnQiOnsieCI6NDkxLjU4ODIyNDQ2NjEyMTEsInkiOjEwMC42MzA4MzY3OTg1ODUxfX0sInNvdXJjZUlEIjoiZGIzMWJlM2YtM2U1OC00YzM2LTk3OWQtNDFmYjI4YWVmZTY4IiwidGFyZ2V0SUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0eXBlIjoib3JkaW4iLCJpZCI6ImU2ZWZhMmIyLWI0NDItNDAwNi05NzQ5LTdlM2IyZDUxMzJmYiJ9XQ== + + + DEL_EDGE + WyJlNmVmYTJiMi1iNDQyLTQwMDYtOTc0OS03ZTNiMmQ1MTMyZmIiXQ== + + c513a6555bbc7f569db6b7618105b78f + + + 1666810339519 + mark + + ADD_EDGE + W3sibGFiZWwiOiJZMiIsInNvdXJjZSI6IjA0YmZkMWI4LTkzYWYtNDQxZi1iNDZhLTMyMGZkMTA3NDBjOSIsInRhcmdldCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsInN0eWxlIjp7ImJhY2tncm91bmRDb2xvciI6IiNmNDQzMzYiLCJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjozMC41NjQzMTU2MDk0NTE4NjQsImJlbmRXZWlnaHQiOjAuNTE0MzI5NzI5MzYyMTU2MywiYmVuZFBvaW50Ijp7IngiOjQyMi43NzE0OTAyODczNTc2NiwieSI6NjQuMDU1NTI3OTI5NTQ0ODd9fSwic291cmNlSUQiOiJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciLCJ0YXJnZXRJRCI6ImRiMzFiZTNmLTNlNTgtNGMzNi05NzlkLTQxZmIyOGFlZmU2OCIsInR5cGUiOiJvcmRpbiIsImlkIjoiOTE3MzNmNmItM2RlMy00MGFmLWJmMTQtMmJiNmNiYzQ5MGUyIn1d + + + DEL_EDGE + WyI5MTczM2Y2Yi0zZGUzLTQwYWYtYmYxNC0yYmI2Y2JjNDkwZTIiXQ== + + b33c2827ee23b0e9057528015febad17 + + + 1666810339519 + mark + + ADD_NODE + WyJGMjpmdW5ib2R5LnB5Iix7IndpZHRoIjoxMjAsImhlaWdodCI6NTAsIm9wYWNpdHkiOjEsInNoYXBlIjoicmVjdGFuZ2xlIiwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzM2LjAxODYzNzA4NTU4NjY1LCJ5IjoxMDAuOTM3NjkyNDQ1MzAzNDF9LHsiaWQiOiJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiLCJsYWJlbCI6IkYyOmZ1bmJvZHkucHkiLCJ0eXBlIjoib3JkaW4iLCJzdHlsZSI6eyJ3aWR0aCI6MTIwLCJoZWlnaHQiOjUwLCJvcGFjaXR5IjoxLCJzaGFwZSI6InJlY3RhbmdsZSIsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX19LCJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + + DEL_NODE + WyJkYjMxYmUzZi0zZTU4LTRjMzYtOTc5ZC00MWZiMjhhZWZlNjgiXQ== + + 1e39894291be950a14dd7ab1b7759234 + + + 1666810343268 + mark + + ADD_NODE + WyJQWjpwbXB5bWF4LnB5Iix7IndpZHRoIjoxMzYsImhlaWdodCI6NTAsIm9wYWNpdHkiOjEsInNoYXBlIjoicmVjdGFuZ2xlIiwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6NTg3LjE1NzgxMTg0NjY1NTYsInkiOjEwMC40NDIzMjkyNjUzNzgzNn0seyJpZCI6ImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyIsImxhYmVsIjoiUFo6cG1weW1heC5weSIsInR5cGUiOiJvcmRpbiIsInN0eWxlIjp7IndpZHRoIjoxMzYsImhlaWdodCI6NTAsIm9wYWNpdHkiOjEsInNoYXBlIjoicmVjdGFuZ2xlIiwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfX0sImJkOTJmOWQ4LTdkNjMtNDJiMi05NjhiLTM5MDllZjRjNzIzNyJd + + + DEL_NODE + WyJiZDkyZjlkOC03ZDYzLTQyYjItOTY4Yi0zOTA5ZWY0YzcyMzciXQ== + + 0658fdad3d7279fd8e56299941d04582 + + + 1666810375461 + mark + + UPDATE_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsid2lkdGgiOjExMSwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJGMTpmdW5jYWxsLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyJmNTZmOGIyNC00MWE2LTQ1YjQtODgyYi02NTk2MDQwYjZhZjAiLHsid2lkdGgiOjEyMCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJGMTpmdW5jYWxsMi5weSIsdHJ1ZV0= + + 2f5c9fab25c4a17d6b2906bbda9aab3c + + + \ No newline at end of file From 48c8505b30af50887b2784714b9b4575a154f405 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Tue, 22 Nov 2022 09:55:22 -0500 Subject: [PATCH 111/113] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 852a38b..de651cc 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ The CONTROL-CORE framework consists of the below projects. -* _concore_: The CONTROL-CORE protocol, known as _concore_, allows modular simulation of controller and PM nodes to run on different operating systems, computing platforms, and programming languages. [This repository](https://github.com/ControlCore-Project/concore/) consists of _concore_ source code. The _concore_ documentation can be found [here](https://control-core.readthedocs.io/en/latest/index.html). A _concore_ study can be developed from programss written in different languages. That means, _concore_ facilitates a seamless communication across codes developed in different languages that it supports, through its simple file-based data sharing between the programs. +* _concore_: The CONTROL-CORE protocol, known as _concore_, allows modular simulation of controller and PM nodes to run on different operating systems, computing platforms, and programming languages. [This repository](https://github.com/ControlCore-Project/concore/) consists of _concore_ source code. The _concore_ documentation can be found [here](https://control-core.readthedocs.io/en/latest/index.html). A _concore_ study can be developed from programs written in different languages. That means, _concore_ facilitates a seamless communication across codes developed in different languages that it supports, through its simple file-based data sharing between the programs. * _concore_ Editor: This is the front-end for CONTROL-CORE. We forked [DHGWorkflow](https://github.com/ControlCore-Project/DHGWorkflow), a sibling project we developed, and extend it as the _concore_ Editor. Please check out the [dev branch](https://github.com/ControlCore-Project/DHGWorkflow/tree/dev) for the _concore_ Editor. From 1da6db4d850e7140c8e1bc8be8a4e79a906d1a42 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 21 Dec 2022 16:05:23 -0500 Subject: [PATCH 112/113] Add files via upload --- figures/0MQ.png | Bin 0 -> 206623 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 figures/0MQ.png diff --git a/figures/0MQ.png b/figures/0MQ.png new file mode 100644 index 0000000000000000000000000000000000000000..378a6f0b27a5b656d61601a998f1962e384c9ec2 GIT binary patch literal 206623 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

3Qj*{pA@1 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 literal 0 HcmV?d00001 From 5d5ae09206b778a9d631003579b9a5a0c46c2001 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Sun, 8 Jan 2023 02:40:17 -0500 Subject: [PATCH 113/113] Fix README to use main branch Dev branch is stale and has #27 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index de651cc..1173cce 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ The CONTROL-CORE framework consists of the below projects. * _concore_: The CONTROL-CORE protocol, known as _concore_, allows modular simulation of controller and PM nodes to run on different operating systems, computing platforms, and programming languages. [This repository](https://github.com/ControlCore-Project/concore/) consists of _concore_ source code. The _concore_ documentation can be found [here](https://control-core.readthedocs.io/en/latest/index.html). A _concore_ study can be developed from programs written in different languages. That means, _concore_ facilitates a seamless communication across codes developed in different languages that it supports, through its simple file-based data sharing between the programs. -* _concore_ Editor: This is the front-end for CONTROL-CORE. We forked [DHGWorkflow](https://github.com/ControlCore-Project/DHGWorkflow), a sibling project we developed, and extend it as the _concore_ Editor. Please check out the [dev branch](https://github.com/ControlCore-Project/DHGWorkflow/tree/dev) for the _concore_ Editor. +* _concore_ Editor: This is the front-end for CONTROL-CORE. We forked [DHGWorkflow](https://github.com/ControlCore-Project/DHGWorkflow), a sibling project we developed, and extend it as the _concore_ Editor. * _Mediator_: The [Mediator](https://github.com/ControlCore-Project/mediator) allows the CONTROL-CORE studies to be distributed and run, rather than having all the programs that construct a study to be run just from a centralized location.