Browse Source

the first commit regarding separation of front and backend

master
alpcentaur 3 years ago
parent
commit
9ed0e1f6e7
3928 changed files with 83260 additions and 20104 deletions
  1. +1
    -0
      .vagrant/machines/default/virtualbox/action_set_name
  2. +1
    -0
      .vagrant/machines/default/virtualbox/creator_uid
  3. +1
    -0
      .vagrant/machines/default/virtualbox/id
  4. +1
    -0
      .vagrant/machines/default/virtualbox/index_uuid
  5. +1
    -0
      .vagrant/machines/default/virtualbox/vagrant_cwd
  6. +9
    -0
      .vagrant/rgloader/loader.rb
  7. BIN
      cuda-repo-ubuntu1804_10.1.243-1_amd64.deb
  8. +826
    -0
      nodefrontend/Prototyp.html
  9. +276
    -0
      nodefrontend/jslib/pathformer.js
  10. +859
    -0
      nodefrontend/jslib/vivus.js
  11. +70
    -0
      nodefrontend/node_modules/asap/CHANGES.md
  12. +21
    -0
      nodefrontend/node_modules/asap/LICENSE.md
  13. +237
    -0
      nodefrontend/node_modules/asap/README.md
  14. +65
    -0
      nodefrontend/node_modules/asap/asap.js
  15. +66
    -0
      nodefrontend/node_modules/asap/browser-asap.js
  16. +223
    -0
      nodefrontend/node_modules/asap/browser-raw.js
  17. +87
    -0
      nodefrontend/node_modules/asap/package.json
  18. +101
    -0
      nodefrontend/node_modules/asap/raw.js
  19. +12
    -0
      nodefrontend/node_modules/promise/.github/FUNDING.yml
  20. +5
    -0
      nodefrontend/node_modules/promise/.jshintrc
  21. +19
    -0
      nodefrontend/node_modules/promise/LICENSE
  22. +256
    -0
      nodefrontend/node_modules/promise/Readme.md
  23. +66
    -0
      nodefrontend/node_modules/promise/build.js
  24. +5
    -0
      nodefrontend/node_modules/promise/core.js
  25. +213
    -0
      nodefrontend/node_modules/promise/domains/core.js
  26. +13
    -0
      nodefrontend/node_modules/promise/domains/done.js
  27. +119
    -0
      nodefrontend/node_modules/promise/domains/es6-extensions.js
  28. +16
    -0
      nodefrontend/node_modules/promise/domains/finally.js
  29. +8
    -0
      nodefrontend/node_modules/promise/domains/index.js
  30. +130
    -0
      nodefrontend/node_modules/promise/domains/node-extensions.js
  31. +113
    -0
      nodefrontend/node_modules/promise/domains/rejection-tracking.js
  32. +62
    -0
      nodefrontend/node_modules/promise/domains/synchronous.js
  33. +246
    -0
      nodefrontend/node_modules/promise/index.d.ts
  34. +3
    -0
      nodefrontend/node_modules/promise/index.js
  35. +52
    -0
      nodefrontend/node_modules/promise/index.js.flow
  36. +213
    -0
      nodefrontend/node_modules/promise/lib/core.js
  37. +13
    -0
      nodefrontend/node_modules/promise/lib/done.js
  38. +119
    -0
      nodefrontend/node_modules/promise/lib/es6-extensions.js
  39. +16
    -0
      nodefrontend/node_modules/promise/lib/finally.js
  40. +8
    -0
      nodefrontend/node_modules/promise/lib/index.js
  41. +130
    -0
      nodefrontend/node_modules/promise/lib/node-extensions.js
  42. +113
    -0
      nodefrontend/node_modules/promise/lib/rejection-tracking.js
  43. +62
    -0
      nodefrontend/node_modules/promise/lib/synchronous.js
  44. +67
    -0
      nodefrontend/node_modules/promise/package.json
  45. +12
    -0
      nodefrontend/node_modules/promise/polyfill-done.js
  46. +10
    -0
      nodefrontend/node_modules/promise/polyfill.js
  47. +213
    -0
      nodefrontend/node_modules/promise/setimmediate/core.js
  48. +13
    -0
      nodefrontend/node_modules/promise/setimmediate/done.js
  49. +119
    -0
      nodefrontend/node_modules/promise/setimmediate/es6-extensions.js
  50. +16
    -0
      nodefrontend/node_modules/promise/setimmediate/finally.js
  51. +8
    -0
      nodefrontend/node_modules/promise/setimmediate/index.js
  52. +130
    -0
      nodefrontend/node_modules/promise/setimmediate/node-extensions.js
  53. +113
    -0
      nodefrontend/node_modules/promise/setimmediate/rejection-tracking.js
  54. +62
    -0
      nodefrontend/node_modules/promise/setimmediate/synchronous.js
  55. +213
    -0
      nodefrontend/node_modules/promise/src/core.js
  56. +13
    -0
      nodefrontend/node_modules/promise/src/done.js
  57. +119
    -0
      nodefrontend/node_modules/promise/src/es6-extensions.js
  58. +16
    -0
      nodefrontend/node_modules/promise/src/finally.js
  59. +8
    -0
      nodefrontend/node_modules/promise/src/index.js
  60. +130
    -0
      nodefrontend/node_modules/promise/src/node-extensions.js
  61. +113
    -0
      nodefrontend/node_modules/promise/src/rejection-tracking.js
  62. +62
    -0
      nodefrontend/node_modules/promise/src/synchronous.js
  63. +20
    -0
      nodefrontend/node_modules/python-shell/CHANGELOG.md
  64. +358
    -0
      nodefrontend/node_modules/python-shell/README.md
  65. +179
    -0
      nodefrontend/node_modules/python-shell/index.d.ts
  66. +389
    -0
      nodefrontend/node_modules/python-shell/index.js
  67. +1
    -0
      nodefrontend/node_modules/python-shell/index.js.map
  68. +73
    -0
      nodefrontend/node_modules/python-shell/package.json
  69. +24
    -0
      nodefrontend/package-lock.json
  70. +1
    -0
      nodefrontend/public/data.json
  71. +5
    -0
      nodefrontend/script.py
  72. +232
    -0
      nodefrontend/server.js
  73. BIN
      nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
  74. +12
    -2
      requirements.txt
  75. +8
    -0
      venv/bin/pyrsa-decrypt
  76. +8
    -0
      venv/bin/pyrsa-encrypt
  77. +8
    -0
      venv/bin/pyrsa-keygen
  78. +8
    -0
      venv/bin/pyrsa-priv2pub
  79. +8
    -0
      venv/bin/pyrsa-sign
  80. +8
    -0
      venv/bin/pyrsa-verify
  81. +7
    -0
      venv/etc/jupyter/jupyter_notebook_config.json
  82. +5
    -0
      venv/etc/jupyter/nbconfig/notebook.json
  83. BIN
      venv/lib/python3.5/site-packages/absl/__pycache__/__init__.cpython-35.pyc
  84. BIN
      venv/lib/python3.5/site-packages/absl/__pycache__/_enum_module.cpython-35.pyc
  85. BIN
      venv/lib/python3.5/site-packages/absl/__pycache__/app.cpython-35.pyc
  86. BIN
      venv/lib/python3.5/site-packages/absl/__pycache__/command_name.cpython-35.pyc
  87. BIN
      venv/lib/python3.5/site-packages/absl/flags/__pycache__/__init__.cpython-35.pyc
  88. BIN
      venv/lib/python3.5/site-packages/absl/flags/__pycache__/_argument_parser.cpython-35.pyc
  89. BIN
      venv/lib/python3.5/site-packages/absl/flags/__pycache__/_defines.cpython-35.pyc
  90. BIN
      venv/lib/python3.5/site-packages/absl/flags/__pycache__/_exceptions.cpython-35.pyc
  91. BIN
      venv/lib/python3.5/site-packages/absl/flags/__pycache__/_flag.cpython-35.pyc
  92. BIN
      venv/lib/python3.5/site-packages/absl/flags/__pycache__/_flagvalues.cpython-35.pyc
  93. BIN
      venv/lib/python3.5/site-packages/absl/flags/__pycache__/_helpers.cpython-35.pyc
  94. BIN
      venv/lib/python3.5/site-packages/absl/flags/__pycache__/_validators.cpython-35.pyc
  95. BIN
      venv/lib/python3.5/site-packages/absl/flags/__pycache__/argparse_flags.cpython-35.pyc
  96. BIN
      venv/lib/python3.5/site-packages/absl/logging/__pycache__/__init__.cpython-35.pyc
  97. BIN
      venv/lib/python3.5/site-packages/absl/logging/__pycache__/converter.cpython-35.pyc
  98. BIN
      venv/lib/python3.5/site-packages/absl/testing/__pycache__/__init__.cpython-35.pyc
  99. BIN
      venv/lib/python3.5/site-packages/absl/testing/__pycache__/_bazelize_command.cpython-35.pyc
  100. BIN
      venv/lib/python3.5/site-packages/absl/testing/__pycache__/_pretty_print_reporter.cpython-35.pyc

+ 1
- 0
.vagrant/machines/default/virtualbox/action_set_name View File

@ -0,0 +1 @@
1603378776

+ 1
- 0
.vagrant/machines/default/virtualbox/creator_uid View File

@ -0,0 +1 @@
1000

+ 1
- 0
.vagrant/machines/default/virtualbox/id View File

@ -0,0 +1 @@
ed29e797-7ce8-4059-8e00-c212b0b4e26d

+ 1
- 0
.vagrant/machines/default/virtualbox/index_uuid View File

@ -0,0 +1 @@
5511a5040f9649188ea4b617db9be33d

+ 1
- 0
.vagrant/machines/default/virtualbox/vagrant_cwd View File

@ -0,0 +1 @@
/home/alpcentaur/ProjektA/PrototypeWebApp

+ 9
- 0
.vagrant/rgloader/loader.rb View File

@ -0,0 +1,9 @@
# This file loads the proper rgloader/loader.rb file that comes packaged
# with Vagrant so that encoded files can properly run with Vagrant.
if ENV["VAGRANT_INSTALLER_EMBEDDED_DIR"]
require File.expand_path(
"rgloader/loader", ENV["VAGRANT_INSTALLER_EMBEDDED_DIR"])
else
raise "Encoded files can't be read outside of the Vagrant installer."
end

BIN
cuda-repo-ubuntu1804_10.1.243-1_amd64.deb View File


+ 826
- 0
nodefrontend/Prototyp.html View File

@ -0,0 +1,826 @@
<html>
<head><meta charset="utf-8" />
<title>Prototyp Leichte Sprache</title>
<style>
svg {
align: center;
width: 80%;
height: 60%;
}
.center {
display: block;
margin-left: auto;
margin-right: auto;
width: 100%;
}
p {
font-size: 20px;
}
body {
align: center;
}
</style>
<style>
.button {
text-shadow: -1px -1px rgba(255, 255, 255, 0.35), 1px 1px rgba(0, 0, 0, 0.40);
font-family: 'Lato', sans-serif;
text-decoration: none;
letter-spacing: .07rem;
font-size: 110%;
font-weight: bold;
color: rgba(0, 0, 0, 0.3);
border-radius: 30px;
transition: all 0.2s cubic-bezier(0, 0.22, .3, 1);
/* box-shadow: inset 0 2px 0 rgba(255,255,255,0.5), 0 2px 2px rgba(0, 0, 0, 0.19); */
box-shadow: 0px 5px 5px rgba(0, 0, 0, 0.29);
}
.button.mod-active {
color: rgba(0, 0, 0, 0.4);
background-color: lightgreen;
}
.button:hover {
background-color: .button.background-color;
opacity: 0.6;
color: rgba(0, 0, 0, 0.3);
}
.thetext > .widget-label {
font-style: 'Lato', sans-serif;
color: blue;
font-size: 110%;
}
#textarea_inputoutput {
align: center;
padding: 10px 0 0 10px;
resize: none;
font-size: 150%;
/* color: black; */
background-color: lightgreen;
border-radius: 20px;
border-opacity: 0.8;
border-width : 10px;
border-color: lightgrey;
/* transition: all 0.1s cubic-bezier(0, 0.22, 1.3, 0.9); */
/* box-shadow: inset 0 2px 0 rgba(255,255,255,0.5), 0 2px 2px rgba(0, 0, 0, 0.19); */
/* box-shadow: 0px 5px 5px rgba(0, 0, 0, 0.29); */
}
#textarea_inputoutput > ::placeholder {
opacity:0.5;
}
.button1 {background-color: pink;height: 100%; width: 100%;}
.button2 {background-color: pink;height: 100%; width: 100%;}
.button3 {background-color: pink;height: 100%; width: 100%;}
.button4 {background-color: pink;height: 100%; width: 100%;}
.button5 {background-color: pink;height: 100%; width: 100%;}
.button6 {background-color: pink;height: 100%; width: 100%;}
.button7 {background-color: pink;height: 100%; width: 100%;}
.button8 {background-color: pink;height: 100%; width: 100%;}
.button9 {background-color: pink;height: 100%; width: 100%;}
.item1 {justify-self: stretch;}
.item2 {justify-self: stretch;}
.item3 {justify-self: stretch;}
.item4 {justify-self: stretch;}
.item5 {justify-self: stretch;}
.item6 {justify-self: stretch;}
.item7 {justify-self: stretch;}
.item8 {justify-self: stretch;}
.item9 {justify-self: stretch;}
.button10 {
text-shadow: -1px -1px rgba(255, 255, 255, 0.35), 1px 1px rgba(0, 0, 0, 0.40);
font-family: 'Lato', sans-serif;
text-decoration: none;
letter-spacing: .07rem;
font-size: 110%;
font-weight: bold;
color: rgba(0, 0, 0, 0.3);
background-color: lightgreen;
border-radius: 30px;
transition: all 0.2s cubic-bezier(0, 0.22, .3, 1);
/* box-shadow: inset 0 2px 0 rgba(255,255,255,0.5), 0 2px 2px rgba(0, 0, 0, 0.19); */
box-shadow: 0px 5px 5px rgba(0, 0, 0, 0.29);
width: 100%;
height:10%;
}
.button11 {
text-shadow: -1px -1px rgba(255, 255, 255, 0.35), 1px 1px rgba(0, 0, 0, 0.40);
font-family: 'Lato', sans-serif;
text-decoration: none;
letter-spacing: .07rem;
font-size: 110%;
font-weight: bold;
color: rgba(0, 0, 0, 0.3);
background-color: lightblue;
border-radius: 30px;
transition: all 0.2s cubic-bezier(0, 0.22, .3, 1);
/* box-shadow: inset 0 2px 0 rgba(255,255,255,0.5), 0 2px 2px rgba(0, 0, 0, 0.19); */
box-shadow: 0px 5px 5px rgba(0, 0, 0, 0.29);
width: 100%;
height:10%;
}
#textarea_absenden {
align: center;
padding: 10px 0 0 10px;
resize: none;
font-size: 150%;
color: black;
background-color: lightblue;
border-color: lightgrey;
border-opacity: 0.8;
border-radius: 20px;
border-width : 10px;
/* transition: all 0.3s cubic-bezier(0, 0.22, .3, 1); */
/* box-shadow: inset 0 2px 0 rgba(255,255,255,0.5), 0 2px 2px rgba(0, 0, 0, 0.19); */
/* box-shadow: 0px 5px 5px rgba(0, 0, 0, 0.29); */
}
#textarea_absenden > ::placeholder {
opacity: 0.5;
}
.grid-container {
display: grid;
grid-template-columns: auto auto auto;
justify-content: space-evenly;
grid-template-rows: auto auto auto;
height: 30%;
}
</style>
</head>
<body>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC>
<a href="https://basabuuka.zapto.org/alpcentaur/Basabuuka_Prototyp">
<svg class='center' version="1.2" id='my-svg' width="100mm" height="90mm" viewBox="0 0 21590 21940" fill-rule="evenodd" stroke-width="23.222" stroke-linejoin="round">
<defs class="ClipPathGroup">
<clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
<rect x="0" y="0" width="21590" height="21940"/>
</clipPath>
<clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse">
<rect x="21" y="20" width="21590" height="21940"/>
</clipPath>
</defs>
<defs class="TextShapeIndex">
<g ooo:slide="id1" ooo:id-list="id3 id4 id5 id6 id7 id8 id9 id10 id11 id12 id13 id14 id15 id16 id17 id18 id19 id20 id21 id22 id23 id24 id25 id26 id27 id28 id29 id30 id31 id32 id33 id34 id35 id36 id37 id38 id39 id40 id41 id42 id43 id44 id45 id46 id47 id48 id49 id50 id51 id52 id53 id54 id55 id56 id57 id58 id59 id60 id61"/>
</defs>
<defs class="EmbeddedBulletChars">
<g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
</g>
<g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
</g>
<g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
</g>
<g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
</g>
<g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
</g>
<g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
</g>
<g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
</g>
<g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
</g>
<g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)">
<path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
</g>
<g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
</g>
</defs>
<g>
<g id="id2" class="Master_Slide">
<g id="bg-id2" class="Background"/>
<g id="bo-id2" class="BackgroundObjects"/>
</g>
</g>
<g class="SlideGroup">
<g id="container-id1">
<g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
<g class="Page">
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id3">
<rect class="BoundingBox" stroke="none" fill="none" x="11098" y="16654" width="1683" height="4794"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 12462,20854 L 12462,20431 12462,18018 11611,17167"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 12462,20812 C 12520,20812 12570,20825 12621,20855 12671,20884 12708,20920 12737,20971 12766,21021 12780,21071 12780,21130 12780,21188 12766,21238 12737,21288 12708,21339 12671,21375 12621,21404 12570,21434 12520,21447 12462,21447 12404,21447 12354,21434 12303,21404 12253,21375 12216,21339 12187,21288 12158,21238 12145,21188 12145,21130 12145,21071 12158,21021 12187,20971 12216,20920 12253,20884 12303,20855 12354,20825 12404,20812 12462,20812 Z M 12462,20854 C 12513,20854 12556,20866 12600,20891 12643,20916 12675,20948 12700,20992 12726,21036 12737,21079 12737,21130 12737,21180 12726,21223 12700,21267 12675,21311 12643,21342 12600,21368 12556,21393 12513,21405 12462,21405 12411,21405 12368,21393 12324,21368 12281,21342 12249,21311 12224,21267 12198,21223 12187,21180 12187,21130 12187,21079 12198,21036 12224,20992 12249,20948 12281,20917 12324,20891 12368,20866 12411,20854 12462,20854 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 11641,17197 C 11600,17238 11555,17264 11499,17279 11442,17294 11391,17294 11334,17279 11278,17264 11233,17238 11192,17197 11151,17156 11125,17111 11110,17055 11095,16998 11095,16947 11110,16890 11125,16834 11151,16789 11192,16748 11233,16707 11278,16681 11334,16666 11391,16651 11442,16651 11499,16666 11555,16681 11600,16707 11641,16748 11682,16789 11708,16834 11723,16890 11738,16947 11738,16998 11723,17055 11708,17111 11682,17156 11641,17197 Z M 11611,17167 C 11575,17203 11537,17225 11488,17238 11439,17251 11394,17251 11345,17238 11296,17225 11258,17203 11222,17167 11186,17131 11164,17093 11151,17044 11138,16995 11138,16950 11151,16901 11164,16852 11186,16814 11222,16778 11258,16742 11296,16720 11345,16707 11394,16694 11439,16694 11488,16707 11537,16720 11575,16742 11611,16778 11647,16814 11669,16852 11682,16901 11695,16950 11695,16995 11682,17044 11669,17093 11647,17131 11611,17167 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id4">
<rect class="BoundingBox" stroke="none" fill="none" x="10430" y="15795" width="2986" height="5272"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 13097,20473 L 13097,18653 13097,17891 12335,17129 11319,16113 11023,16113"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 13097,20431 C 13155,20431 13205,20444 13256,20474 13306,20503 13343,20539 13372,20590 13401,20640 13415,20690 13415,20749 13415,20807 13401,20857 13372,20907 13343,20958 13306,20994 13256,21023 13205,21053 13155,21066 13097,21066 13039,21066 12989,21053 12938,21023 12888,20994 12851,20958 12822,20907 12793,20857 12780,20807 12780,20749 12780,20690 12793,20640 12822,20590 12851,20539 12888,20503 12938,20474 12989,20444 13039,20431 13097,20431 Z M 13097,20473 C 13148,20473 13191,20485 13235,20510 13278,20535 13310,20567 13335,20611 13361,20655 13372,20698 13372,20749 13372,20799 13361,20842 13335,20886 13310,20930 13278,20961 13235,20987 13191,21012 13148,21024 13097,21024 13046,21024 13003,21012 12959,20987 12916,20961 12884,20930 12859,20886 12833,20842 12822,20799 12822,20749 12822,20698 12833,20655 12859,20611 12884,20567 12916,20536 12959,20510 13003,20485 13046,20473 13097,20473 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 11065,16113 C 11065,16171 11052,16221 11022,16272 10993,16322 10957,16359 10906,16388 10856,16417 10806,16431 10748,16431 10689,16431 10639,16417 10589,16388 10538,16359 10502,16322 10473,16272 10443,16221 10430,16171 10430,16113 10430,16055 10443,16005 10473,15954 10502,15904 10538,15867 10589,15838 10639,15809 10689,15796 10748,15796 10806,15796 10856,15809 10906,15838 10957,15867 10993,15904 11022,15954 11052,16005 11065,16055 11065,16113 Z M 11023,16113 C 11023,16164 11011,16207 10986,16251 10961,16294 10929,16326 10885,16351 10841,16377 10798,16388 10748,16388 10697,16388 10654,16377 10610,16351 10566,16326 10535,16294 10509,16251 10484,16207 10472,16164 10472,16113 10472,16062 10484,16019 10509,15975 10535,15932 10566,15900 10610,15875 10654,15849 10697,15838 10748,15838 10798,15838 10841,15849 10885,15875 10929,15900 10960,15932 10986,15975 11011,16019 11023,16062 11023,16113 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id5">
<rect class="BoundingBox" stroke="none" fill="none" x="8449" y="13751" width="5602" height="7698"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 13732,20854 L 13732,17510 11700,15478 9033,15478 8525,14970 8525,14462 9160,13827 12208,13827 13440,15059"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 13732,20812 C 13790,20812 13840,20825 13891,20855 13941,20884 13978,20920 14007,20971 14036,21021 14049,21071 14049,21130 14049,21188 14036,21238 14007,21288 13978,21339 13941,21375 13891,21404 13840,21434 13790,21447 13732,21447 13674,21447 13624,21434 13573,21404 13523,21375 13486,21339 13457,21288 13428,21238 13414,21188 13414,21130 13414,21071 13428,21021 13457,20971 13486,20920 13523,20884 13573,20855 13624,20825 13674,20812 13732,20812 Z M 13732,20854 C 13783,20854 13826,20866 13870,20891 13913,20916 13945,20948 13970,20992 13996,21036 14007,21079 14007,21130 14007,21180 13996,21223 13970,21267 13945,21311 13913,21342 13870,21368 13826,21393 13783,21405 13732,21405 13681,21405 13638,21393 13594,21368 13551,21342 13519,21311 13494,21267 13468,21223 13457,21180 13457,21130 13457,21079 13468,21036 13494,20992 13519,20948 13551,20917 13594,20891 13638,20866 13681,20854 13732,20854 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 13410,15029 C 13451,14988 13496,14962 13552,14947 13609,14932 13660,14932 13717,14947 13773,14962 13818,14988 13859,15029 13900,15070 13926,15115 13941,15171 13956,15228 13956,15279 13941,15336 13926,15392 13900,15437 13859,15478 13818,15519 13773,15545 13717,15560 13660,15575 13609,15575 13552,15560 13496,15545 13451,15519 13410,15478 13369,15437 13343,15392 13328,15336 13313,15279 13313,15228 13328,15171 13343,15115 13369,15070 13410,15029 Z M 13440,15059 C 13476,15023 13514,15001 13563,14988 13612,14975 13657,14975 13706,14988 13755,15001 13793,15023 13829,15059 13865,15095 13887,15133 13900,15182 13913,15231 13913,15276 13900,15325 13887,15374 13865,15412 13829,15448 13793,15484 13755,15506 13706,15519 13657,15532 13612,15532 13563,15519 13514,15506 13476,15484 13440,15448 13404,15412 13382,15374 13369,15325 13356,15276 13356,15231 13369,15182 13382,15133 13404,15095 13440,15059 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id6">
<rect class="BoundingBox" stroke="none" fill="none" x="9160" y="14500" width="7443" height="6440"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 14494,20299 L 14494,17764 15129,17129 15891,17129 16526,16494 16526,16113 16145,15732 14621,15732 13986,16367 13351,16367 11827,14843 9800,14843"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 14494,20253 C 14557,20253 14611,20267 14666,20299 14720,20331 14759,20370 14791,20425 14823,20479 14837,20533 14837,20596 14837,20659 14823,20713 14791,20768 14759,20822 14720,20861 14666,20893 14611,20925 14557,20939 14494,20939 14431,20939 14377,20925 14323,20893 14268,20861 14229,20822 14197,20768 14165,20713 14151,20659 14151,20596 14151,20533 14165,20479 14197,20425 14229,20370 14268,20331 14323,20299 14377,20267 14431,20253 14494,20253 Z M 14494,20299 C 14549,20299 14595,20311 14643,20339 14690,20366 14724,20400 14751,20447 14779,20495 14791,20541 14791,20596 14791,20651 14779,20697 14751,20745 14724,20792 14690,20826 14643,20853 14595,20881 14549,20893 14494,20893 14439,20893 14393,20881 14345,20853 14298,20826 14264,20792 14237,20745 14209,20697 14197,20651 14197,20596 14197,20541 14209,20495 14237,20447 14264,20400 14298,20366 14345,20339 14393,20311 14439,20299 14494,20299 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 9846,14843 C 9846,14906 9832,14960 9800,15015 9768,15069 9729,15108 9675,15140 9620,15172 9566,15186 9503,15186 9440,15186 9386,15172 9332,15140 9277,15108 9238,15069 9206,15015 9174,14960 9160,14906 9160,14843 9160,14780 9174,14726 9206,14672 9238,14617 9277,14578 9332,14546 9386,14514 9440,14500 9503,14500 9566,14500 9620,14514 9675,14546 9729,14578 9768,14617 9800,14672 9832,14726 9846,14780 9846,14843 Z M 9800,14843 C 9800,14898 9788,14944 9760,14992 9733,15039 9699,15073 9652,15100 9604,15128 9558,15140 9503,15140 9448,15140 9402,15128 9354,15100 9307,15073 9273,15039 9246,14992 9218,14944 9206,14898 9206,14843 9206,14788 9218,14742 9246,14694 9273,14647 9307,14613 9354,14586 9402,14558 9448,14546 9503,14546 9558,14546 9604,14558 9652,14586 9699,14613 9733,14647 9760,14694 9788,14742 9800,14788 9800,14843 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id7">
<rect class="BoundingBox" stroke="none" fill="none" x="13958" y="16003" width="2008" height="1462"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 14513,16909 L 15076,16346 15325,16346"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 14545,16877 C 14590,16922 14618,16970 14634,17031 14650,17092 14650,17147 14634,17208 14618,17269 14590,17317 14545,17362 14500,17407 14452,17434 14391,17451 14330,17467 14275,17467 14214,17451 14153,17434 14105,17407 14060,17362 14015,17317 13988,17269 13971,17208 13955,17147 13955,17092 13971,17031 13988,16970 14015,16922 14060,16877 14105,16832 14153,16804 14214,16788 14275,16772 14330,16772 14391,16788 14452,16804 14500,16832 14545,16877 Z M 14513,16909 C 14551,16948 14575,16990 14590,17042 14604,17095 14604,17144 14590,17196 14576,17249 14551,17291 14513,17330 14474,17368 14432,17392 14380,17407 14327,17421 14278,17421 14226,17407 14173,17392 14131,17368 14092,17330 14054,17291 14030,17249 14015,17196 14001,17144 14001,17095 14015,17042 14029,16990 14054,16948 14092,16909 14131,16871 14173,16847 14226,16832 14278,16818 14327,16818 14380,16832 14432,16847 14474,16871 14513,16909 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 15279,16346 C 15279,16283 15293,16229 15325,16175 15357,16120 15396,16081 15450,16049 15505,16017 15559,16003 15622,16003 15685,16003 15739,16017 15793,16049 15848,16081 15887,16120 15919,16174 15951,16229 15965,16283 15965,16346 15965,16409 15951,16463 15919,16518 15887,16572 15848,16611 15794,16643 15739,16675 15685,16689 15622,16689 15559,16689 15505,16675 15451,16643 15396,16611 15357,16572 15325,16518 15293,16463 15279,16409 15279,16346 Z M 15325,16346 C 15325,16291 15337,16245 15365,16197 15392,16150 15426,16116 15473,16089 15521,16061 15567,16049 15622,16049 15677,16049 15723,16061 15771,16089 15818,16116 15852,16150 15879,16197 15907,16245 15919,16291 15919,16346 15919,16401 15907,16447 15879,16495 15852,16542 15818,16576 15771,16603 15723,16631 15677,16643 15622,16643 15567,16643 15521,16631 15473,16603 15426,16576 15392,16542 15365,16495 15337,16447 15325,16401 15325,16346 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id8">
<rect class="BoundingBox" stroke="none" fill="none" x="14756" y="16950" width="2506" height="3382"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 15023,19834 L 15023,18299 15658,17664 16547,17664 16830,17381"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 15023,19798 C 15072,19798 15114,19809 15156,19834 15199,19858 15229,19889 15254,19931 15278,19974 15289,20015 15289,20064 15289,20114 15278,20155 15254,20198 15229,20240 15199,20271 15156,20295 15114,20320 15072,20331 15023,20331 14974,20331 14932,20320 14890,20295 14847,20271 14817,20240 14792,20198 14768,20155 14756,20114 14756,20064 14756,20015 14768,19974 14792,19931 14817,19889 14847,19858 14890,19834 14932,19809 14974,19798 15023,19798 Z M 15023,19834 C 15065,19834 15102,19843 15138,19864 15175,19886 15202,19912 15223,19949 15244,19986 15254,20022 15254,20064 15254,20107 15244,20143 15223,20180 15202,20217 15175,20243 15138,20265 15102,20286 15065,20295 15023,20295 14981,20295 14944,20286 14908,20265 14871,20243 14844,20217 14823,20180 14802,20143 14792,20107 14792,20064 14792,20022 14802,19986 14823,19949 14844,19912 14871,19886 14908,19864 14944,19843 14981,19834 15023,19834 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 16805,17406 C 16770,17371 16749,17334 16736,17286 16723,17239 16723,17196 16736,17148 16749,17101 16770,17064 16805,17029 16840,16994 16877,16973 16925,16960 16972,16947 17015,16947 17063,16960 17110,16973 17147,16994 17182,17029 17217,17064 17238,17101 17251,17148 17264,17196 17264,17239 17251,17286 17238,17334 17217,17371 17182,17406 17147,17441 17110,17462 17063,17475 17015,17488 16972,17488 16925,17475 16877,17462 16840,17441 16805,17406 Z M 16830,17381 C 16800,17351 16781,17318 16770,17277 16759,17236 16760,17199 16770,17158 16781,17117 16800,17084 16830,17054 16860,17024 16893,17005 16934,16994 16975,16983 17012,16983 17053,16994 17094,17005 17127,17024 17157,17054 17187,17084 17206,17117 17217,17158 17228,17199 17228,17236 17217,17277 17206,17318 17187,17351 17157,17381 17127,17411 17094,17430 17053,17441 17012,17452 16975,17451 16934,17441 16893,17430 16860,17411 16830,17381 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id9">
<rect class="BoundingBox" stroke="none" fill="none" x="11065" y="12798" width="6745" height="5475"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 17542,17775 L 17542,16240 16145,14843 14240,14843 12462,13065 11562,13065"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 17542,17739 C 17591,17739 17633,17750 17675,17775 17718,17799 17748,17830 17773,17872 17797,17915 17809,17956 17809,18006 17809,18055 17797,18096 17773,18139 17748,18181 17718,18212 17675,18236 17633,18261 17591,18272 17542,18272 17493,18272 17451,18261 17409,18236 17366,18212 17336,18181 17311,18139 17287,18096 17276,18055 17276,18006 17276,17956 17287,17915 17311,17872 17336,17830 17366,17799 17409,17775 17451,17750 17493,17739 17542,17739 Z M 17542,17775 C 17584,17775 17621,17784 17657,17805 17694,17827 17721,17853 17742,17890 17763,17927 17773,17963 17773,18006 17773,18048 17763,18084 17742,18121 17721,18158 17694,18184 17657,18206 17621,18227 17584,18236 17542,18236 17500,18236 17463,18227 17427,18206 17390,18184 17363,18158 17342,18121 17321,18084 17311,18048 17311,18006 17311,17963 17321,17927 17342,17890 17363,17853 17390,17827 17427,17805 17463,17784 17500,17775 17542,17775 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 11598,13065 C 11598,13114 11587,13156 11562,13198 11538,13241 11507,13271 11465,13296 11422,13320 11381,13332 11332,13332 11282,13332 11241,13320 11198,13296 11156,13271 11125,13241 11101,13198 11076,13156 11065,13114 11065,13065 11065,13016 11076,12974 11101,12932 11125,12889 11156,12859 11198,12834 11241,12810 11282,12799 11332,12799 11381,12799 11422,12810 11465,12834 11507,12859 11538,12889 11562,12932 11587,12974 11598,13016 11598,13065 Z M 11562,13065 C 11562,13107 11553,13144 11532,13180 11510,13217 11484,13244 11447,13265 11410,13286 11374,13296 11332,13296 11289,13296 11253,13286 11216,13265 11179,13244 11153,13217 11131,13180 11110,13144 11101,13107 11101,13065 11101,13023 11110,12986 11131,12950 11153,12913 11179,12886 11216,12865 11253,12844 11289,12834 11332,12834 11374,12834 11410,12844 11447,12865 11484,12886 11510,12913 11532,12950 11553,12986 11562,13023 11562,13065 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id10">
<rect class="BoundingBox" stroke="none" fill="none" x="15287" y="16453" width="3316" height="4540"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 15605,20399 L 15605,18833 16240,18198 16748,18198 17256,18706 17891,18706 18526,18071 18526,17309 18183,16966"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 15605,20357 C 15663,20357 15713,20370 15764,20400 15814,20429 15851,20465 15880,20516 15909,20566 15923,20616 15923,20675 15923,20733 15909,20783 15880,20833 15851,20884 15814,20920 15764,20949 15713,20979 15663,20992 15605,20992 15547,20992 15497,20979 15446,20949 15396,20920 15359,20884 15330,20833 15301,20783 15288,20733 15288,20675 15288,20616 15301,20566 15330,20516 15359,20465 15396,20429 15446,20400 15497,20370 15547,20357 15605,20357 Z M 15605,20399 C 15656,20399 15699,20411 15743,20436 15786,20461 15818,20493 15843,20537 15869,20581 15880,20624 15880,20675 15880,20725 15869,20768 15843,20812 15818,20856 15786,20887 15743,20913 15699,20938 15656,20950 15605,20950 15554,20950 15511,20938 15467,20913 15424,20887 15392,20856 15367,20812 15341,20768 15330,20725 15330,20675 15330,20624 15341,20581 15367,20537 15392,20493 15424,20462 15467,20436 15511,20411 15554,20399 15605,20399 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 18213,16996 C 18172,17037 18127,17063 18071,17078 18014,17093 17963,17093 17906,17078 17850,17063 17805,17037 17764,16996 17723,16955 17697,16910 17682,16854 17667,16797 17667,16746 17682,16689 17697,16633 17723,16588 17764,16547 17805,16506 17850,16480 17906,16465 17963,16450 18014,16450 18071,16465 18127,16480 18172,16506 18213,16547 18254,16588 18280,16633 18295,16689 18310,16746 18310,16797 18295,16854 18280,16910 18254,16955 18213,16996 Z M 18183,16966 C 18147,17002 18109,17024 18060,17037 18011,17050 17966,17050 17917,17037 17868,17024 17830,17002 17794,16966 17758,16930 17736,16892 17723,16843 17710,16794 17710,16749 17723,16700 17736,16651 17758,16613 17794,16577 17830,16541 17868,16519 17917,16506 17966,16493 18011,16493 18060,16506 18109,16519 18147,16541 18183,16577 18219,16613 18241,16651 18254,16700 18267,16749 18267,16794 18254,16843 18241,16892 18219,16930 18183,16966 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id11">
<rect class="BoundingBox" stroke="none" fill="none" x="13719" y="12430" width="4538" height="3763"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 17825,15761 L 17288,15224 17288,14462 16780,13954 14621,13954 13986,13319 13986,12927"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 17800,15736 C 17835,15701 17872,15680 17920,15667 17967,15654 18010,15654 18058,15667 18105,15680 18142,15701 18177,15736 18212,15771 18233,15808 18246,15856 18259,15903 18259,15946 18246,15994 18233,16041 18212,16078 18177,16113 18142,16148 18105,16169 18058,16182 18010,16195 17967,16195 17920,16182 17872,16169 17835,16148 17800,16113 17765,16078 17744,16041 17731,15994 17718,15946 17718,15903 17731,15856 17744,15808 17765,15771 17800,15736 Z M 17825,15761 C 17855,15731 17888,15712 17929,15701 17970,15690 18007,15691 18048,15701 18089,15712 18122,15731 18152,15761 18182,15791 18201,15824 18212,15865 18223,15906 18223,15943 18212,15984 18201,16025 18182,16058 18152,16088 18122,16118 18089,16137 18048,16148 18007,16159 17970,16159 17929,16148 17888,16137 17855,16118 17825,16088 17795,16058 17776,16025 17765,15984 17754,15943 17755,15906 17765,15865 17776,15824 17795,15791 17825,15761 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 13986,12963 C 13937,12963 13895,12952 13853,12927 13810,12903 13780,12872 13755,12830 13731,12787 13720,12746 13720,12697 13720,12647 13731,12606 13755,12563 13780,12521 13810,12490 13853,12466 13895,12441 13937,12430 13986,12430 14035,12430 14077,12441 14119,12466 14162,12490 14192,12521 14217,12563 14241,12606 14253,12647 14253,12697 14253,12746 14241,12787 14217,12830 14192,12872 14162,12903 14119,12927 14077,12952 14035,12963 13986,12963 Z M 13986,12927 C 13944,12927 13907,12918 13871,12897 13834,12875 13807,12849 13786,12812 13765,12775 13755,12739 13755,12697 13755,12654 13765,12618 13786,12581 13807,12544 13834,12518 13871,12496 13907,12475 13944,12466 13986,12466 14028,12466 14065,12475 14101,12496 14138,12518 14165,12544 14186,12581 14207,12618 14217,12654 14217,12697 14217,12739 14207,12775 14186,12812 14165,12849 14138,12875 14101,12897 14065,12918 14028,12927 13986,12927 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id12">
<rect class="BoundingBox" stroke="none" fill="none" x="12948" y="11692" width="6313" height="4649"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 18993,15843 L 18993,15070 18231,14308 16961,13038 15564,13038 14802,12276 14294,11768 13532,11768 13024,12276 13024,12911 14421,14308 16326,14308 16609,14591"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 18993,15807 C 19042,15807 19084,15818 19126,15843 19169,15867 19199,15898 19224,15940 19248,15983 19260,16024 19260,16074 19260,16123 19248,16164 19224,16207 19199,16249 19169,16280 19126,16304 19084,16329 19042,16340 18993,16340 18944,16340 18902,16329 18860,16304 18817,16280 18787,16249 18762,16207 18738,16164 18727,16123 18727,16074 18727,16024 18738,15983 18762,15940 18787,15898 18817,15867 18860,15843 18902,15818 18944,15807 18993,15807 Z M 18993,15843 C 19035,15843 19072,15852 19108,15873 19145,15895 19172,15921 19193,15958 19214,15995 19224,16031 19224,16074 19224,16116 19214,16152 19193,16189 19172,16226 19145,16252 19108,16274 19072,16295 19035,16304 18993,16304 18951,16304 18914,16295 18878,16274 18841,16252 18814,16226 18793,16189 18772,16152 18762,16116 18762,16074 18762,16031 18772,15995 18793,15958 18814,15921 18841,15895 18878,15873 18914,15852 18951,15843 18993,15843 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 16584,14566 C 16619,14531 16656,14510 16704,14497 16751,14484 16794,14484 16842,14497 16889,14510 16926,14531 16961,14566 16996,14601 17017,14638 17030,14686 17043,14733 17043,14776 17030,14824 17017,14871 16996,14908 16961,14943 16926,14978 16889,14999 16842,15012 16794,15025 16751,15025 16704,15012 16656,14999 16619,14978 16584,14943 16549,14908 16528,14871 16515,14824 16502,14776 16502,14733 16515,14686 16528,14638 16549,14601 16584,14566 Z M 16609,14591 C 16639,14561 16672,14542 16713,14531 16754,14520 16791,14521 16832,14531 16873,14542 16906,14561 16936,14591 16966,14621 16985,14654 16996,14695 17007,14736 17007,14773 16996,14814 16985,14855 16966,14888 16936,14918 16906,14948 16873,14967 16832,14978 16791,14989 16754,14989 16713,14978 16672,14967 16639,14948 16609,14918 16579,14888 16560,14855 16549,14814 16538,14773 16539,14736 16549,14695 16560,14654 16579,14621 16609,14591 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id13">
<rect class="BoundingBox" stroke="none" fill="none" x="7115" y="11211" width="9110" height="3252"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 15793,12332 L 14748,11287 14240,11287 12843,11287 11954,12176 10684,12176 9922,11414 8525,11414 7382,12557 7382,13965"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 15768,12307 C 15803,12272 15840,12251 15888,12238 15935,12225 15978,12225 16026,12238 16073,12251 16110,12272 16145,12307 16180,12342 16201,12379 16214,12427 16227,12474 16227,12517 16214,12565 16201,12612 16180,12649 16145,12684 16110,12719 16073,12740 16026,12753 15978,12766 15935,12766 15888,12753 15840,12740 15803,12719 15768,12684 15733,12649 15712,12612 15699,12565 15686,12517 15686,12474 15699,12427 15712,12379 15733,12342 15768,12307 Z M 15793,12332 C 15823,12302 15856,12283 15897,12272 15938,12261 15975,12262 16016,12272 16057,12283 16090,12302 16120,12332 16150,12362 16169,12395 16180,12436 16191,12477 16191,12514 16180,12555 16169,12596 16150,12629 16120,12659 16090,12689 16057,12708 16016,12719 15975,12730 15938,12730 15897,12719 15856,12708 15823,12689 15793,12659 15763,12629 15744,12596 15733,12555 15722,12514 15723,12477 15733,12436 15744,12395 15763,12362 15793,12332 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 7382,13929 C 7431,13929 7473,13940 7515,13965 7558,13989 7588,14020 7613,14062 7637,14105 7648,14146 7648,14196 7648,14245 7637,14286 7613,14329 7588,14371 7558,14402 7515,14426 7473,14451 7431,14462 7382,14462 7333,14462 7291,14451 7249,14426 7206,14402 7176,14371 7151,14329 7127,14286 7115,14245 7115,14196 7115,14146 7127,14105 7151,14062 7176,14020 7206,13989 7249,13965 7291,13940 7333,13929 7382,13929 Z M 7382,13965 C 7424,13965 7461,13974 7497,13995 7534,14017 7561,14043 7582,14080 7603,14117 7613,14153 7613,14196 7613,14238 7603,14274 7582,14311 7561,14348 7534,14374 7497,14396 7461,14417 7424,14426 7382,14426 7340,14426 7303,14417 7267,14396 7230,14374 7203,14348 7182,14311 7161,14274 7151,14238 7151,14196 7151,14153 7161,14117 7182,14080 7203,14043 7230,14017 7267,13995 7303,13974 7340,13965 7382,13965 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id14">
<rect class="BoundingBox" stroke="none" fill="none" x="7242" y="11973" width="3268" height="4014"/>
<path fill="none" stroke="rgb(255,109,109)" stroke-width="152" stroke-linejoin="round" d="M 7509,15489 L 7509,15097 8144,14462 8144,12811 8906,12049 9795,12049 10078,12332"/>
<path fill="rgb(255,109,109)" stroke="none" d="M 7509,15453 C 7558,15453 7600,15464 7642,15489 7685,15513 7715,15544 7740,15586 7764,15629 7775,15670 7775,15720 7775,15769 7764,15810 7740,15853 7715,15895 7685,15926 7642,15950 7600,15975 7558,15986 7509,15986 7460,15986 7418,15975 7376,15950 7333,15926 7303,15895 7278,15853 7254,15810 7242,15769 7242,15720 7242,15670 7254,15629 7278,15586 7303,15544 7333,15513 7376,15489 7418,15464 7460,15453 7509,15453 Z M 7509,15489 C 7551,15489 7588,15498 7624,15519 7661,15541 7688,15567 7709,15604 7730,15641 7740,15677 7740,15720 7740,15762 7730,15798 7709,15835 7688,15872 7661,15898 7624,15920 7588,15941 7551,15950 7509,15950 7467,15950 7430,15941 7394,15920 7357,15898 7330,15872 7309,15835 7288,15798 7278,15762 7278,15720 7278,15677 7288,15641 7309,15604 7330,15567 7357,15541 7394,15519 7430,15498 7467,15489 7509,15489 Z"/>
<path fill="rgb(255,109,109)" stroke="none" d="M 10053,12307 C 10088,12272 10125,12251 10173,12238 10220,12225 10263,12225 10311,12238 10358,12251 10395,12272 10430,12307 10465,12342 10486,12379 10499,12427 10512,12474 10512,12517 10499,12565 10486,12612 10465,12649 10430,12684 10395,12719 10358,12740 10311,12753 10263,12766 10220,12766 10173,12753 10125,12740 10088,12719 10053,12684 10018,12649 9997,12612 9984,12565 9971,12517 9971,12474 9984,12427 9997,12379 10018,12342 10053,12307 Z M 10078,12332 C 10108,12302 10141,12283 10182,12272 10223,12261 10260,12262 10301,12272 10342,12283 10375,12302 10405,12332 10435,12362 10454,12395 10465,12436 10476,12477 10476,12514 10465,12555 10454,12596 10435,12629 10405,12659 10375,12689 10342,12708 10301,12719 10260,12730 10223,12730 10182,12719 10141,12708 10108,12689 10078,12659 10048,12629 10029,12596 10018,12555 10007,12514 10008,12477 10018,12436 10029,12395 10048,12362 10078,12332 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id15">
<rect class="BoundingBox" stroke="none" fill="none" x="7938" y="15272" width="4157" height="5668"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 11827,20442 L 11827,19161 11827,18526 10811,17510 10811,17002 10049,16240 8906,16240 8369,15703"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 11827,20406 C 11876,20406 11918,20417 11960,20442 12003,20466 12033,20497 12058,20539 12082,20582 12094,20623 12094,20673 12094,20722 12082,20763 12058,20806 12033,20848 12003,20879 11960,20903 11918,20928 11876,20939 11827,20939 11778,20939 11736,20928 11694,20903 11651,20879 11621,20848 11596,20806 11572,20763 11561,20722 11561,20673 11561,20623 11572,20582 11596,20539 11621,20497 11651,20466 11694,20442 11736,20417 11778,20406 11827,20406 Z M 11827,20442 C 11869,20442 11906,20451 11942,20472 11979,20494 12006,20520 12027,20557 12048,20594 12058,20630 12058,20673 12058,20715 12048,20751 12027,20788 12006,20825 11979,20851 11942,20873 11906,20894 11869,20903 11827,20903 11785,20903 11748,20894 11712,20873 11675,20851 11648,20825 11627,20788 11606,20751 11596,20715 11596,20673 11596,20630 11606,20594 11627,20557 11648,20520 11675,20494 11712,20472 11748,20451 11785,20442 11827,20442 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 8394,15728 C 8359,15763 8322,15784 8274,15797 8227,15810 8184,15810 8136,15797 8089,15784 8052,15763 8017,15728 7982,15693 7961,15656 7948,15608 7935,15561 7935,15518 7948,15470 7961,15423 7982,15386 8017,15351 8052,15316 8089,15295 8136,15282 8184,15269 8227,15269 8274,15282 8322,15295 8359,15316 8394,15351 8429,15386 8450,15423 8463,15470 8476,15518 8476,15561 8463,15608 8450,15656 8429,15693 8394,15728 Z M 8369,15703 C 8339,15733 8306,15752 8265,15763 8224,15774 8187,15773 8146,15763 8105,15752 8072,15733 8042,15703 8012,15673 7993,15640 7982,15599 7971,15558 7971,15521 7982,15480 7993,15439 8012,15406 8042,15376 8072,15346 8105,15327 8146,15316 8187,15305 8224,15305 8265,15316 8306,15327 8339,15346 8369,15376 8399,15406 8418,15439 8429,15480 8440,15521 8439,15558 8429,15599 8418,15640 8399,15673 8369,15703 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id16">
<rect class="BoundingBox" stroke="none" fill="none" x="5591" y="15605" width="5173" height="2620"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 10332,17793 L 9414,16875 8525,16875 7763,17637 6874,17637 5858,16621 5858,16102"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 10307,17768 C 10342,17733 10379,17712 10427,17699 10474,17686 10517,17686 10565,17699 10612,17712 10649,17733 10684,17768 10719,17803 10740,17840 10753,17888 10766,17935 10766,17978 10753,18026 10740,18073 10719,18110 10684,18145 10649,18180 10612,18201 10565,18214 10517,18227 10474,18227 10427,18214 10379,18201 10342,18180 10307,18145 10272,18110 10251,18073 10238,18026 10225,17978 10225,17935 10238,17888 10251,17840 10272,17803 10307,17768 Z M 10332,17793 C 10362,17763 10395,17744 10436,17733 10477,17722 10514,17723 10555,17733 10596,17744 10629,17763 10659,17793 10689,17823 10708,17856 10719,17897 10730,17938 10730,17975 10719,18016 10708,18057 10689,18090 10659,18120 10629,18150 10596,18169 10555,18180 10514,18191 10477,18191 10436,18180 10395,18169 10362,18150 10332,18120 10302,18090 10283,18057 10272,18016 10261,17975 10262,17938 10272,17897 10283,17856 10302,17823 10332,17793 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 5858,16138 C 5809,16138 5767,16127 5725,16102 5682,16078 5652,16047 5627,16005 5603,15962 5592,15921 5592,15872 5592,15822 5603,15781 5627,15738 5652,15696 5682,15665 5725,15641 5767,15616 5809,15605 5858,15605 5907,15605 5949,15616 5991,15641 6034,15665 6064,15696 6089,15738 6113,15781 6125,15822 6125,15872 6125,15921 6113,15962 6089,16005 6064,16047 6034,16078 5991,16102 5949,16127 5907,16138 5858,16138 Z M 5858,16102 C 5816,16102 5779,16093 5743,16072 5706,16050 5679,16024 5658,15987 5637,15950 5627,15914 5627,15872 5627,15829 5637,15793 5658,15756 5679,15719 5706,15693 5743,15671 5779,15650 5816,15641 5858,15641 5900,15641 5937,15650 5973,15671 6010,15693 6037,15719 6058,15756 6079,15793 6089,15829 6089,15872 6089,15914 6079,15950 6058,15987 6037,16024 6010,16050 5973,16072 5937,16093 5900,16102 5858,16102 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id17">
<rect class="BoundingBox" stroke="none" fill="none" x="2860" y="13494" width="3205" height="4223"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 5633,17285 L 4842,16494 3572,16494 2937,15859 2937,14843 3855,13925"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 5608,17260 C 5643,17225 5680,17204 5728,17191 5775,17178 5818,17178 5866,17191 5913,17204 5950,17225 5985,17260 6020,17295 6041,17332 6054,17380 6067,17427 6067,17470 6054,17518 6041,17565 6020,17602 5985,17637 5950,17672 5913,17693 5866,17706 5818,17719 5775,17719 5728,17706 5680,17693 5643,17672 5608,17637 5573,17602 5552,17565 5539,17518 5526,17470 5526,17427 5539,17380 5552,17332 5573,17295 5608,17260 Z M 5633,17285 C 5663,17255 5696,17236 5737,17225 5778,17214 5815,17215 5856,17225 5897,17236 5930,17255 5960,17285 5990,17315 6009,17348 6020,17389 6031,17430 6031,17467 6020,17508 6009,17549 5990,17582 5960,17612 5930,17642 5897,17661 5856,17672 5815,17683 5778,17683 5737,17672 5696,17661 5663,17642 5633,17612 5603,17582 5584,17549 5573,17508 5562,17467 5563,17430 5573,17389 5584,17348 5603,17315 5633,17285 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 3830,13950 C 3795,13915 3774,13878 3761,13830 3748,13783 3748,13740 3761,13692 3774,13645 3795,13608 3830,13573 3865,13538 3902,13517 3950,13504 3997,13491 4040,13491 4088,13504 4135,13517 4172,13538 4207,13573 4242,13608 4263,13645 4276,13692 4289,13740 4289,13783 4276,13830 4263,13878 4242,13915 4207,13950 4172,13985 4135,14006 4088,14019 4040,14032 3997,14032 3950,14019 3902,14006 3865,13985 3830,13950 Z M 3855,13925 C 3825,13895 3806,13862 3795,13821 3784,13780 3785,13743 3795,13702 3806,13661 3825,13628 3855,13598 3885,13568 3918,13549 3959,13538 4000,13527 4037,13527 4078,13538 4119,13549 4152,13568 4182,13598 4212,13628 4231,13661 4242,13702 4253,13743 4253,13780 4242,13821 4231,13862 4212,13895 4182,13925 4152,13955 4119,13974 4078,13985 4037,13996 4000,13995 3959,13985 3918,13974 3885,13955 3855,13925 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id18">
<rect class="BoundingBox" stroke="none" fill="none" x="13399" y="9938" width="5874" height="4731"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 18841,14237 L 18558,13954 17288,12684 17288,11922 16653,11287 15637,11287 15002,10652 14113,10652 13830,10369"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 18816,14212 C 18851,14177 18888,14156 18936,14143 18983,14130 19026,14130 19074,14143 19121,14156 19158,14177 19193,14212 19228,14247 19249,14284 19262,14332 19275,14379 19275,14422 19262,14470 19249,14517 19228,14554 19193,14589 19158,14624 19121,14645 19074,14658 19026,14671 18983,14671 18936,14658 18888,14645 18851,14624 18816,14589 18781,14554 18760,14517 18747,14470 18734,14422 18734,14379 18747,14332 18760,14284 18781,14247 18816,14212 Z M 18841,14237 C 18871,14207 18904,14188 18945,14177 18986,14166 19023,14167 19064,14177 19105,14188 19138,14207 19168,14237 19198,14267 19217,14300 19228,14341 19239,14382 19239,14419 19228,14460 19217,14501 19198,14534 19168,14564 19138,14594 19105,14613 19064,14624 19023,14635 18986,14635 18945,14624 18904,14613 18871,14594 18841,14564 18811,14534 18792,14501 18781,14460 18770,14419 18771,14382 18781,14341 18792,14300 18811,14267 18841,14237 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 13855,10394 C 13820,10429 13783,10450 13735,10463 13688,10476 13645,10476 13597,10463 13550,10450 13513,10429 13478,10394 13443,10359 13422,10322 13409,10274 13396,10227 13396,10184 13409,10136 13422,10089 13443,10052 13478,10017 13513,9982 13550,9961 13597,9948 13645,9935 13688,9935 13735,9948 13783,9961 13820,9982 13855,10017 13890,10052 13911,10089 13924,10136 13937,10184 13937,10227 13924,10274 13911,10322 13890,10359 13855,10394 Z M 13830,10369 C 13800,10399 13767,10418 13726,10429 13685,10440 13648,10439 13607,10429 13566,10418 13533,10399 13503,10369 13473,10339 13454,10306 13443,10265 13432,10224 13432,10187 13443,10146 13454,10105 13473,10072 13503,10042 13533,10012 13566,9993 13607,9982 13648,9971 13685,9971 13726,9982 13767,9993 13800,10012 13830,10042 13860,10072 13879,10105 13890,10146 13901,10187 13900,10224 13890,10265 13879,10306 13860,10339 13830,10369 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id19">
<rect class="BoundingBox" stroke="none" fill="none" x="3622" y="11592" width="3332" height="2947"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 6522,13798 L 5858,14462 5350,14462 3699,12811 3699,12430 4461,11668 5350,11668 5760,12078"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 6497,13823 C 6462,13788 6441,13751 6428,13703 6415,13656 6415,13613 6428,13565 6441,13518 6462,13481 6497,13446 6532,13411 6569,13390 6617,13377 6664,13364 6707,13364 6755,13377 6802,13390 6839,13411 6874,13446 6909,13481 6930,13518 6943,13565 6956,13613 6956,13656 6943,13703 6930,13751 6909,13788 6874,13823 6839,13858 6802,13879 6755,13892 6707,13905 6664,13905 6617,13892 6569,13879 6532,13858 6497,13823 Z M 6522,13798 C 6492,13768 6473,13735 6462,13694 6451,13653 6452,13616 6462,13575 6473,13534 6492,13501 6522,13471 6552,13441 6585,13422 6626,13411 6667,13400 6704,13400 6745,13411 6786,13422 6819,13441 6849,13471 6879,13501 6898,13534 6909,13575 6920,13616 6920,13653 6909,13694 6898,13735 6879,13768 6849,13798 6819,13828 6786,13847 6745,13858 6704,13869 6667,13868 6626,13858 6585,13847 6552,13828 6522,13798 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 5735,12053 C 5770,12018 5807,11997 5855,11984 5902,11971 5945,11971 5993,11984 6040,11997 6077,12018 6112,12053 6147,12088 6168,12125 6181,12173 6194,12220 6194,12263 6181,12311 6168,12358 6147,12395 6112,12430 6077,12465 6040,12486 5993,12499 5945,12512 5902,12512 5855,12499 5807,12486 5770,12465 5735,12430 5700,12395 5679,12358 5666,12311 5653,12263 5653,12220 5666,12173 5679,12125 5700,12088 5735,12053 Z M 5760,12078 C 5790,12048 5823,12029 5864,12018 5905,12007 5942,12008 5983,12018 6024,12029 6057,12048 6087,12078 6117,12108 6136,12141 6147,12182 6158,12223 6158,12260 6147,12301 6136,12342 6117,12375 6087,12405 6057,12435 6024,12454 5983,12465 5942,12476 5905,12476 5864,12465 5823,12454 5790,12435 5760,12405 5730,12375 5711,12342 5700,12301 5689,12260 5690,12223 5700,12182 5711,12141 5730,12108 5760,12078 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id20">
<rect class="BoundingBox" stroke="none" fill="none" x="3876" y="14129" width="3078" height="2062"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 4236,14941 L 3953,15224 3953,15732 4334,16113 4969,16113 6522,14560"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 4211,14966 C 4176,14931 4155,14894 4142,14846 4129,14799 4129,14756 4142,14708 4155,14661 4176,14624 4211,14589 4246,14554 4283,14533 4331,14520 4378,14507 4421,14507 4469,14520 4516,14533 4553,14554 4588,14589 4623,14624 4644,14661 4657,14708 4670,14756 4670,14799 4657,14846 4644,14894 4623,14931 4588,14966 4553,15001 4516,15022 4469,15035 4421,15048 4378,15048 4331,15035 4283,15022 4246,15001 4211,14966 Z M 4236,14941 C 4206,14911 4187,14878 4176,14837 4165,14796 4166,14759 4176,14718 4187,14677 4206,14644 4236,14614 4266,14584 4299,14565 4340,14554 4381,14543 4418,14543 4459,14554 4500,14565 4533,14584 4563,14614 4593,14644 4612,14677 4623,14718 4634,14759 4634,14796 4623,14837 4612,14878 4593,14911 4563,14941 4533,14971 4500,14990 4459,15001 4418,15012 4381,15011 4340,15001 4299,14990 4266,14971 4236,14941 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 6497,14585 C 6462,14550 6441,14513 6428,14465 6415,14418 6415,14375 6428,14327 6441,14280 6462,14243 6497,14208 6532,14173 6569,14152 6617,14139 6664,14126 6707,14126 6755,14139 6802,14152 6839,14173 6874,14208 6909,14243 6930,14280 6943,14327 6956,14375 6956,14418 6943,14465 6930,14513 6909,14550 6874,14585 6839,14620 6802,14641 6755,14654 6707,14667 6664,14667 6617,14654 6569,14641 6532,14620 6497,14585 Z M 6522,14560 C 6492,14530 6473,14497 6462,14456 6451,14415 6452,14378 6462,14337 6473,14296 6492,14263 6522,14233 6552,14203 6585,14184 6626,14173 6667,14162 6704,14162 6745,14173 6786,14184 6819,14203 6849,14233 6879,14263 6898,14296 6909,14337 6920,14378 6920,14415 6909,14456 6898,14497 6879,14530 6849,14560 6819,14590 6786,14609 6745,14620 6704,14631 6667,14630 6626,14620 6585,14609 6552,14590 6522,14560 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id21">
<rect class="BoundingBox" stroke="none" fill="none" x="3178" y="14131" width="2122" height="1856"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 4940,15507 L 5223,15224 5223,14843 4588,14208 4080,14208 3445,14843 3445,15489"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 4965,15482 C 5000,15517 5021,15554 5034,15602 5047,15649 5047,15692 5034,15740 5021,15787 5000,15824 4965,15859 4930,15894 4893,15915 4845,15928 4798,15941 4755,15941 4707,15928 4660,15915 4623,15894 4588,15859 4553,15824 4532,15787 4519,15740 4506,15692 4506,15649 4519,15602 4532,15554 4553,15517 4588,15482 4623,15447 4660,15426 4707,15413 4755,15400 4798,15400 4845,15413 4893,15426 4930,15447 4965,15482 Z M 4940,15507 C 4970,15537 4989,15570 5000,15611 5011,15652 5010,15689 5000,15730 4989,15771 4970,15804 4940,15834 4910,15864 4877,15883 4836,15894 4795,15905 4758,15905 4717,15894 4676,15883 4643,15864 4613,15834 4583,15804 4564,15771 4553,15730 4542,15689 4542,15652 4553,15611 4564,15570 4583,15537 4613,15507 4643,15477 4676,15458 4717,15447 4758,15436 4795,15437 4836,15447 4877,15458 4910,15477 4940,15507 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 3445,15453 C 3494,15453 3536,15464 3578,15489 3621,15513 3651,15544 3676,15586 3700,15629 3712,15670 3712,15719 3712,15769 3700,15810 3676,15853 3651,15895 3621,15926 3578,15950 3536,15975 3494,15986 3445,15986 3396,15986 3354,15975 3312,15950 3269,15926 3239,15895 3214,15853 3190,15810 3179,15769 3179,15719 3179,15670 3190,15629 3214,15586 3239,15544 3269,15513 3312,15489 3354,15464 3396,15453 3445,15453 Z M 3445,15489 C 3487,15489 3524,15498 3560,15519 3597,15541 3624,15567 3645,15604 3666,15641 3676,15677 3676,15719 3676,15762 3666,15798 3645,15835 3624,15872 3597,15898 3560,15920 3524,15941 3487,15950 3445,15950 3403,15950 3366,15941 3330,15920 3293,15898 3266,15872 3245,15835 3224,15798 3214,15762 3214,15719 3214,15677 3224,15641 3245,15604 3266,15567 3293,15541 3330,15519 3366,15498 3403,15489 3445,15489 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id22">
<rect class="BoundingBox" stroke="none" fill="none" x="5718" y="9623" width="1665" height="1792"/>
<path fill="none" stroke="rgb(129,212,26)" stroke-width="152" stroke-linejoin="round" d="M 5985,10917 L 5985,10525 6620,9890 6885,9890"/>
<path fill="rgb(129,212,26)" stroke="none" d="M 5985,10881 C 6034,10881 6076,10892 6118,10917 6161,10941 6191,10972 6216,11014 6240,11057 6252,11098 6252,11147 6252,11197 6240,11238 6216,11281 6191,11323 6161,11354 6118,11378 6076,11403 6034,11414 5985,11414 5936,11414 5894,11403 5852,11378 5809,11354 5779,11323 5754,11281 5730,11238 5719,11197 5719,11147 5719,11098 5730,11057 5754,11014 5779,10972 5809,10941 5852,10917 5894,10892 5936,10881 5985,10881 Z M 5985,10917 C 6027,10917 6064,10926 6100,10947 6137,10969 6164,10995 6185,11032 6206,11069 6216,11105 6216,11147 6216,11190 6206,11226 6185,11263 6164,11300 6137,11326 6100,11348 6064,11369 6027,11378 5985,11378 5943,11378 5906,11369 5870,11348 5833,11326 5806,11300 5785,11263 5764,11226 5754,11190 5754,11147 5754,11105 5764,11069 5785,11032 5806,10995 5833,10969 5870,10947 5906,10926 5943,10917 5985,10917 Z"/>
<path fill="rgb(129,212,26)" stroke="none" d="M 6849,9890 C 6849,9841 6860,9799 6885,9757 6909,9714 6940,9684 6982,9659 7025,9635 7066,9624 7116,9624 7165,9624 7206,9635 7249,9659 7291,9684 7322,9714 7346,9757 7371,9799 7382,9841 7382,9890 7382,9939 7371,9981 7346,10023 7322,10066 7291,10096 7249,10121 7206,10145 7165,10157 7116,10157 7066,10157 7025,10145 6982,10121 6940,10096 6909,10066 6885,10023 6860,9981 6849,9939 6849,9890 Z M 6885,9890 C 6885,9848 6894,9811 6915,9775 6937,9738 6963,9711 7000,9690 7037,9669 7073,9659 7116,9659 7158,9659 7194,9669 7231,9690 7268,9711 7294,9738 7316,9775 7337,9811 7346,9848 7346,9890 7346,9932 7337,9969 7316,10005 7294,10042 7268,10069 7231,10090 7194,10111 7158,10121 7116,10121 7073,10121 7037,10111 7000,10090 6963,10069 6937,10042 6915,10005 6894,9969 6885,9932 6885,9890 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id23">
<rect class="BoundingBox" stroke="none" fill="none" x="5009" y="8951" width="2757" height="2618"/>
<path fill="none" stroke="rgb(129,212,26)" stroke-width="152" stroke-linejoin="round" d="M 5276,11071 L 5276,10171 6419,9028 7054,9028 7689,9663 7689,10298 7152,10835"/>
<path fill="rgb(129,212,26)" stroke="none" d="M 5276,11035 C 5325,11035 5367,11046 5409,11071 5452,11095 5482,11126 5507,11168 5531,11211 5543,11252 5543,11301 5543,11351 5531,11392 5507,11435 5482,11477 5452,11508 5409,11532 5367,11557 5325,11568 5276,11568 5227,11568 5185,11557 5143,11532 5100,11508 5070,11477 5045,11435 5021,11392 5010,11351 5010,11301 5010,11252 5021,11211 5045,11168 5070,11126 5100,11095 5143,11071 5185,11046 5227,11035 5276,11035 Z M 5276,11071 C 5318,11071 5355,11080 5391,11101 5428,11123 5455,11149 5476,11186 5497,11223 5507,11259 5507,11301 5507,11344 5497,11380 5476,11417 5455,11454 5428,11480 5391,11502 5355,11523 5318,11532 5276,11532 5234,11532 5197,11523 5161,11502 5124,11480 5097,11454 5076,11417 5055,11380 5045,11344 5045,11301 5045,11259 5055,11223 5076,11186 5097,11149 5124,11123 5161,11101 5197,11080 5234,11071 5276,11071 Z"/>
<path fill="rgb(129,212,26)" stroke="none" d="M 7177,10810 C 7212,10845 7233,10882 7246,10930 7259,10977 7259,11020 7246,11068 7233,11115 7212,11152 7177,11187 7142,11222 7105,11243 7057,11256 7010,11269 6967,11269 6919,11256 6872,11243 6835,11222 6800,11187 6765,11152 6744,11115 6731,11068 6718,11020 6718,10977 6731,10930 6744,10882 6765,10845 6800,10810 6835,10775 6872,10754 6919,10741 6967,10728 7010,10728 7057,10741 7105,10754 7142,10775 7177,10810 Z M 7152,10835 C 7182,10865 7201,10898 7212,10939 7223,10980 7222,11017 7212,11058 7201,11099 7182,11132 7152,11162 7122,11192 7089,11211 7048,11222 7007,11233 6970,11233 6929,11222 6888,11211 6855,11192 6825,11162 6795,11132 6776,11099 6765,11058 6754,11017 6754,10980 6765,10939 6776,10898 6795,10865 6825,10835 6855,10805 6888,10786 6929,10775 6970,10764 7007,10765 7048,10775 7089,10786 7122,10805 7152,10835 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id24">
<rect class="BoundingBox" stroke="none" fill="none" x="2734" y="10893" width="2109" height="2760"/>
<path fill="none" stroke="rgb(129,212,26)" stroke-width="152" stroke-linejoin="round" d="M 3093,13221 L 2810,12938 2810,12176 3826,11160 4345,11160"/>
<path fill="rgb(129,212,26)" stroke="none" d="M 3068,13196 C 3103,13161 3140,13140 3188,13127 3235,13114 3278,13114 3326,13127 3373,13140 3410,13161 3445,13196 3480,13231 3501,13268 3514,13316 3527,13363 3527,13406 3514,13454 3501,13501 3480,13538 3445,13573 3410,13608 3373,13629 3326,13642 3278,13655 3235,13655 3188,13642 3140,13629 3103,13608 3068,13573 3033,13538 3012,13501 2999,13454 2986,13406 2986,13363 2999,13316 3012,13268 3033,13231 3068,13196 Z M 3093,13221 C 3123,13191 3156,13172 3197,13161 3238,13150 3275,13151 3316,13161 3357,13172 3390,13191 3420,13221 3450,13251 3469,13284 3480,13325 3491,13366 3491,13403 3480,13444 3469,13485 3450,13518 3420,13548 3390,13578 3357,13597 3316,13608 3275,13619 3238,13619 3197,13608 3156,13597 3123,13578 3093,13548 3063,13518 3044,13485 3033,13444 3022,13403 3023,13366 3033,13325 3044,13284 3063,13251 3093,13221 Z"/>
<path fill="rgb(129,212,26)" stroke="none" d="M 4309,11160 C 4309,11111 4320,11069 4345,11027 4369,10984 4400,10954 4442,10929 4485,10905 4526,10894 4576,10894 4625,10894 4666,10905 4709,10929 4751,10954 4782,10984 4806,11027 4831,11069 4842,11111 4842,11160 4842,11209 4831,11251 4806,11293 4782,11336 4751,11366 4709,11391 4666,11415 4625,11427 4576,11427 4526,11427 4485,11415 4442,11391 4400,11366 4369,11336 4345,11293 4320,11251 4309,11209 4309,11160 Z M 4345,11160 C 4345,11118 4354,11081 4375,11045 4397,11008 4423,10981 4460,10960 4497,10939 4533,10929 4576,10929 4618,10929 4654,10939 4691,10960 4728,10981 4754,11008 4776,11045 4797,11081 4806,11118 4806,11160 4806,11202 4797,11239 4776,11275 4754,11312 4728,11339 4691,11360 4654,11381 4618,11391 4576,11391 4533,11391 4497,11381 4460,11360 4423,11339 4397,11312 4375,11275 4354,11239 4345,11202 4345,11160 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id25">
<rect class="BoundingBox" stroke="none" fill="none" x="15383" y="10385" width="2808" height="2427"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 17923,12314 L 17923,11668 16907,10652 15880,10652"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 17923,12278 C 17972,12278 18014,12289 18056,12314 18099,12338 18129,12369 18154,12411 18178,12454 18190,12495 18190,12545 18190,12594 18178,12635 18154,12678 18129,12720 18099,12751 18056,12775 18014,12800 17972,12811 17923,12811 17874,12811 17832,12800 17790,12775 17747,12751 17717,12720 17692,12678 17668,12635 17657,12594 17657,12545 17657,12495 17668,12454 17692,12411 17717,12369 17747,12338 17790,12314 17832,12289 17874,12278 17923,12278 Z M 17923,12314 C 17965,12314 18002,12323 18038,12344 18075,12366 18102,12392 18123,12429 18144,12466 18154,12502 18154,12545 18154,12587 18144,12623 18123,12660 18102,12697 18075,12723 18038,12745 18002,12766 17965,12775 17923,12775 17881,12775 17844,12766 17808,12745 17771,12723 17744,12697 17723,12660 17702,12623 17692,12587 17692,12545 17692,12502 17702,12466 17723,12429 17744,12392 17771,12366 17808,12344 17844,12323 17881,12314 17923,12314 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 15916,10652 C 15916,10701 15905,10743 15880,10785 15856,10828 15825,10858 15783,10883 15740,10907 15699,10919 15650,10919 15600,10919 15559,10907 15516,10883 15474,10858 15443,10828 15419,10785 15394,10743 15383,10701 15383,10652 15383,10603 15394,10561 15419,10519 15443,10476 15474,10446 15516,10421 15559,10397 15600,10386 15650,10386 15699,10386 15740,10397 15783,10421 15825,10446 15856,10476 15880,10519 15905,10561 15916,10603 15916,10652 Z M 15880,10652 C 15880,10694 15871,10731 15850,10767 15828,10804 15802,10831 15765,10852 15728,10873 15692,10883 15650,10883 15607,10883 15571,10873 15534,10852 15497,10831 15471,10804 15449,10767 15428,10731 15419,10694 15419,10652 15419,10610 15428,10573 15449,10537 15471,10500 15497,10473 15534,10452 15571,10431 15607,10421 15650,10421 15692,10421 15728,10431 15765,10452 15802,10473 15828,10500 15850,10537 15871,10573 15880,10610 15880,10652 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id26">
<rect class="BoundingBox" stroke="none" fill="none" x="8144" y="9178" width="4268" height="1742"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 8641,10144 L 9033,10144 9414,10144 10303,9255 11700,9255 12335,9890 12335,10271 11954,10652 11562,10652"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 8677,10144 C 8677,10193 8666,10235 8641,10277 8617,10320 8586,10350 8544,10375 8501,10399 8460,10411 8411,10411 8361,10411 8320,10399 8277,10375 8235,10350 8204,10320 8180,10277 8155,10235 8144,10193 8144,10144 8144,10095 8155,10053 8180,10011 8204,9968 8235,9938 8277,9913 8320,9889 8361,9878 8411,9878 8460,9878 8501,9889 8544,9913 8586,9938 8617,9968 8641,10011 8666,10053 8677,10095 8677,10144 Z M 8641,10144 C 8641,10186 8632,10223 8611,10259 8589,10296 8563,10323 8526,10344 8489,10365 8453,10375 8411,10375 8368,10375 8332,10365 8295,10344 8258,10323 8232,10296 8210,10259 8189,10223 8180,10186 8180,10144 8180,10102 8189,10065 8210,10029 8232,9992 8258,9965 8295,9944 8332,9923 8368,9913 8411,9913 8453,9913 8489,9923 8526,9944 8563,9965 8589,9992 8611,10029 8632,10065 8641,10102 8641,10144 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 11598,10652 C 11598,10701 11587,10743 11562,10785 11538,10828 11507,10858 11465,10883 11422,10907 11381,10918 11332,10918 11282,10918 11241,10907 11198,10883 11156,10858 11125,10828 11101,10785 11076,10743 11065,10701 11065,10652 11065,10603 11076,10561 11101,10519 11125,10476 11156,10446 11198,10421 11241,10397 11282,10385 11332,10385 11381,10385 11422,10397 11465,10421 11507,10446 11538,10476 11562,10519 11587,10561 11598,10603 11598,10652 Z M 11562,10652 C 11562,10694 11553,10731 11532,10767 11510,10804 11484,10831 11447,10852 11410,10873 11374,10883 11332,10883 11289,10883 11253,10873 11216,10852 11179,10831 11153,10804 11131,10767 11110,10731 11101,10694 11101,10652 11101,10610 11110,10573 11131,10537 11153,10500 11179,10473 11216,10452 11253,10431 11289,10421 11332,10421 11374,10421 11410,10431 11447,10452 11484,10473 11510,10500 11532,10537 11553,10573 11562,10610 11562,10652 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id27">
<rect class="BoundingBox" stroke="none" fill="none" x="8954" y="8290" width="4094" height="3331"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 9385,9157 L 10176,8366 11573,8366 12970,9763 12970,10525 12306,11189"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 9410,9132 C 9445,9167 9466,9204 9479,9252 9492,9299 9492,9342 9479,9390 9466,9437 9445,9474 9410,9509 9375,9544 9338,9565 9290,9578 9243,9591 9200,9591 9152,9578 9105,9565 9068,9544 9033,9509 8998,9474 8977,9437 8964,9390 8951,9342 8951,9299 8964,9252 8977,9204 8998,9167 9033,9132 9068,9097 9105,9076 9152,9063 9200,9050 9243,9050 9290,9063 9338,9076 9375,9097 9410,9132 Z M 9385,9157 C 9415,9187 9434,9220 9445,9261 9456,9302 9455,9339 9445,9380 9434,9421 9415,9454 9385,9484 9355,9514 9322,9533 9281,9544 9240,9555 9203,9555 9162,9544 9121,9533 9088,9514 9058,9484 9028,9454 9009,9421 8998,9380 8987,9339 8987,9302 8998,9261 9009,9220 9028,9187 9058,9157 9088,9127 9121,9108 9162,9097 9203,9086 9240,9087 9281,9097 9322,9108 9355,9127 9385,9157 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 12331,11164 C 12366,11199 12387,11236 12400,11284 12413,11331 12413,11374 12400,11422 12387,11469 12366,11506 12331,11541 12296,11576 12259,11597 12211,11610 12164,11623 12121,11623 12073,11610 12026,11597 11989,11576 11954,11541 11919,11506 11898,11469 11885,11422 11872,11374 11872,11331 11885,11284 11898,11236 11919,11199 11954,11164 11989,11129 12026,11108 12073,11095 12121,11082 12164,11082 12211,11095 12259,11108 12296,11129 12331,11164 Z M 12306,11189 C 12336,11219 12355,11252 12366,11293 12377,11334 12376,11371 12366,11412 12355,11453 12336,11486 12306,11516 12276,11546 12243,11565 12202,11576 12161,11587 12124,11587 12083,11576 12042,11565 12009,11546 11979,11516 11949,11486 11930,11453 11919,11412 11908,11371 11908,11334 11919,11293 11930,11252 11949,11219 11979,11189 12009,11159 12042,11140 12083,11129 12124,11118 12161,11119 12202,11129 12243,11140 12276,11159 12306,11189 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id28">
<rect class="BoundingBox" stroke="none" fill="none" x="6330" y="15303" width="2097" height="1602"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 6673,15943 L 6673,16319 7181,16827 7689,16827 7871,16645"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 6673,15989 C 6610,15989 6556,15975 6502,15943 6447,15911 6408,15872 6376,15818 6344,15763 6330,15709 6330,15646 6330,15583 6344,15529 6376,15475 6408,15420 6447,15381 6502,15349 6556,15317 6610,15303 6673,15303 6736,15303 6790,15317 6845,15349 6899,15381 6938,15420 6970,15475 7002,15529 7016,15583 7016,15646 7016,15709 7002,15763 6970,15818 6938,15872 6899,15911 6845,15943 6790,15975 6736,15989 6673,15989 Z M 6673,15943 C 6618,15943 6572,15931 6524,15903 6477,15876 6443,15842 6416,15795 6388,15747 6376,15701 6376,15646 6376,15591 6388,15545 6416,15497 6443,15450 6477,15416 6524,15389 6572,15361 6618,15349 6673,15349 6728,15349 6774,15361 6822,15389 6869,15416 6903,15450 6930,15497 6958,15545 6970,15591 6970,15646 6970,15701 6958,15747 6930,15795 6903,15842 6869,15876 6822,15903 6774,15931 6728,15943 6673,15943 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 7839,16677 C 7794,16632 7766,16584 7750,16523 7734,16462 7734,16407 7750,16346 7766,16285 7794,16237 7839,16192 7884,16147 7932,16120 7993,16103 8054,16087 8109,16087 8170,16103 8231,16120 8279,16147 8324,16192 8369,16237 8396,16285 8413,16346 8429,16407 8429,16462 8413,16523 8396,16584 8369,16632 8324,16677 8279,16722 8231,16750 8170,16766 8109,16782 8054,16782 7993,16766 7932,16750 7884,16722 7839,16677 Z M 7871,16645 C 7833,16606 7809,16564 7794,16512 7780,16459 7780,16410 7794,16358 7808,16305 7833,16263 7871,16224 7910,16186 7952,16162 8004,16147 8057,16133 8106,16133 8158,16147 8211,16162 8253,16186 8292,16224 8330,16263 8354,16305 8369,16358 8383,16410 8383,16459 8369,16512 8355,16564 8330,16606 8292,16645 8253,16683 8211,16707 8158,16722 8106,16736 8057,16736 8004,16722 7952,16707 7910,16683 7871,16645 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id29">
<rect class="BoundingBox" stroke="none" fill="none" x="7938" y="7909" width="5874" height="1807"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 8369,9284 L 8906,8747 9668,7985 12081,7985 13380,9284"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 8394,9259 C 8429,9294 8450,9331 8463,9379 8476,9426 8476,9469 8463,9517 8450,9564 8429,9601 8394,9636 8359,9671 8322,9692 8274,9705 8227,9718 8184,9718 8136,9705 8089,9692 8052,9671 8017,9636 7982,9601 7961,9564 7948,9517 7935,9469 7935,9426 7948,9379 7961,9331 7982,9294 8017,9259 8052,9224 8089,9203 8136,9190 8184,9177 8227,9177 8274,9190 8322,9203 8359,9224 8394,9259 Z M 8369,9284 C 8399,9314 8418,9347 8429,9388 8440,9429 8439,9466 8429,9507 8418,9548 8399,9581 8369,9611 8339,9641 8306,9660 8265,9671 8224,9682 8187,9682 8146,9671 8105,9660 8072,9641 8042,9611 8012,9581 7993,9548 7982,9507 7971,9466 7971,9429 7982,9388 7993,9347 8012,9314 8042,9284 8072,9254 8105,9235 8146,9224 8187,9213 8224,9214 8265,9224 8306,9235 8339,9254 8369,9284 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 13355,9259 C 13390,9224 13427,9203 13475,9190 13522,9177 13565,9177 13613,9190 13660,9203 13697,9224 13732,9259 13767,9294 13788,9331 13801,9379 13814,9426 13814,9469 13801,9517 13788,9564 13767,9601 13732,9636 13697,9671 13660,9692 13613,9705 13565,9718 13522,9718 13475,9705 13427,9692 13390,9671 13355,9636 13320,9601 13299,9564 13286,9517 13273,9469 13273,9426 13286,9379 13299,9331 13320,9294 13355,9259 Z M 13380,9284 C 13410,9254 13443,9235 13484,9224 13525,9213 13562,9214 13603,9224 13644,9235 13677,9254 13707,9284 13737,9314 13756,9347 13767,9388 13778,9429 13778,9466 13767,9507 13756,9548 13737,9581 13707,9611 13677,9641 13644,9660 13603,9671 13562,9682 13525,9682 13484,9671 13443,9660 13410,9641 13380,9611 13350,9581 13331,9548 13320,9507 13309,9466 13310,9429 13320,9388 13331,9347 13350,9314 13380,9284 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id30">
<rect class="BoundingBox" stroke="none" fill="none" x="12970" y="8226" width="2046" height="2173"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 13467,8493 L 14113,8493 14240,8620 14748,9128 14748,9901"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 13503,8493 C 13503,8542 13492,8584 13467,8626 13443,8669 13412,8699 13370,8724 13327,8748 13286,8760 13237,8760 13187,8760 13146,8748 13103,8724 13061,8699 13030,8669 13006,8626 12981,8584 12970,8542 12970,8493 12970,8444 12981,8402 13006,8360 13030,8317 13061,8287 13103,8262 13146,8238 13187,8227 13237,8227 13286,8227 13327,8238 13370,8262 13412,8287 13443,8317 13467,8360 13492,8402 13503,8444 13503,8493 Z M 13467,8493 C 13467,8535 13458,8572 13437,8608 13415,8645 13389,8672 13352,8693 13315,8714 13279,8724 13237,8724 13194,8724 13158,8714 13121,8693 13084,8672 13058,8645 13036,8608 13015,8572 13006,8535 13006,8493 13006,8451 13015,8414 13036,8378 13058,8341 13084,8314 13121,8293 13158,8272 13194,8262 13237,8262 13279,8262 13315,8272 13352,8293 13389,8314 13415,8341 13437,8378 13458,8414 13467,8451 13467,8493 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 14748,9865 C 14797,9865 14839,9876 14881,9901 14924,9925 14954,9956 14979,9998 15003,10041 15015,10082 15015,10132 15015,10181 15003,10222 14979,10265 14954,10307 14924,10338 14881,10362 14839,10387 14797,10398 14748,10398 14699,10398 14657,10387 14615,10362 14572,10338 14542,10307 14517,10265 14493,10222 14482,10181 14482,10132 14482,10082 14493,10041 14517,9998 14542,9956 14572,9925 14615,9901 14657,9876 14699,9865 14748,9865 Z M 14748,9901 C 14790,9901 14827,9910 14863,9931 14900,9953 14927,9979 14948,10016 14969,10053 14979,10089 14979,10132 14979,10174 14969,10210 14948,10247 14927,10284 14900,10310 14863,10332 14827,10353 14790,10362 14748,10362 14706,10362 14669,10353 14633,10332 14596,10310 14569,10284 14548,10247 14527,10210 14517,10174 14517,10132 14517,10089 14527,10053 14548,10016 14569,9979 14596,9953 14633,9931 14669,9910 14706,9901 14748,9901 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id31">
<rect class="BoundingBox" stroke="none" fill="none" x="14917" y="9037" width="2064" height="918"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 15348,9269 L 15504,9113 16139,9113 16549,9523"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 15373,9244 C 15408,9279 15429,9316 15442,9364 15455,9411 15455,9454 15442,9502 15429,9549 15408,9586 15373,9621 15338,9656 15301,9677 15253,9690 15206,9703 15163,9703 15115,9690 15068,9677 15031,9656 14996,9621 14961,9586 14940,9549 14927,9502 14914,9454 14914,9411 14927,9364 14940,9316 14961,9279 14996,9244 15031,9209 15068,9188 15115,9175 15163,9162 15206,9162 15253,9175 15301,9188 15338,9209 15373,9244 Z M 15348,9269 C 15378,9299 15397,9332 15408,9373 15419,9414 15418,9451 15408,9492 15397,9533 15378,9566 15348,9596 15318,9626 15285,9645 15244,9656 15203,9667 15166,9667 15125,9656 15084,9645 15051,9626 15021,9596 14991,9566 14972,9533 14961,9492 14950,9451 14950,9414 14961,9373 14972,9332 14991,9299 15021,9269 15051,9239 15084,9220 15125,9209 15166,9198 15203,9199 15244,9209 15285,9220 15318,9239 15348,9269 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 16524,9498 C 16559,9463 16596,9442 16644,9429 16691,9416 16734,9416 16782,9429 16829,9442 16866,9463 16901,9498 16936,9533 16957,9570 16970,9618 16983,9665 16983,9708 16970,9756 16957,9803 16936,9840 16901,9875 16866,9910 16829,9931 16782,9944 16734,9957 16691,9957 16644,9944 16596,9931 16559,9910 16524,9875 16489,9840 16468,9803 16455,9756 16442,9708 16442,9665 16455,9618 16468,9570 16489,9533 16524,9498 Z M 16549,9523 C 16579,9493 16612,9474 16653,9463 16694,9452 16731,9453 16772,9463 16813,9474 16846,9493 16876,9523 16906,9553 16925,9586 16936,9627 16947,9668 16947,9705 16936,9746 16925,9787 16906,9820 16876,9850 16846,9880 16813,9899 16772,9910 16731,9921 16694,9921 16653,9910 16612,9899 16579,9880 16549,9850 16519,9820 16500,9787 16489,9746 16478,9705 16479,9668 16489,9627 16500,9586 16519,9553 16549,9523 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id32">
<rect class="BoundingBox" stroke="none" fill="none" x="18686" y="13384" width="1060" height="3872"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 19326,13897 L 19669,14240 19669,16272 19199,16742"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 19356,13927 C 19315,13968 19270,13994 19214,14009 19157,14024 19106,14024 19049,14009 18993,13994 18948,13968 18907,13927 18866,13886 18840,13841 18825,13785 18810,13728 18810,13677 18825,13620 18840,13564 18866,13519 18907,13478 18948,13437 18993,13411 19049,13396 19106,13381 19157,13381 19214,13396 19270,13411 19315,13437 19356,13478 19397,13519 19423,13564 19438,13620 19453,13677 19453,13728 19438,13785 19423,13841 19397,13886 19356,13927 Z M 19326,13897 C 19290,13933 19252,13955 19203,13968 19154,13981 19109,13981 19060,13968 19011,13955 18973,13933 18937,13897 18901,13861 18879,13823 18866,13774 18853,13725 18853,13680 18866,13631 18879,13582 18901,13544 18937,13508 18973,13472 19011,13450 19060,13437 19109,13424 19154,13424 19203,13437 19252,13450 19290,13472 19326,13508 19362,13544 19384,13582 19397,13631 19410,13680 19410,13725 19397,13774 19384,13823 19362,13861 19326,13897 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 19229,16712 C 19270,16753 19296,16798 19311,16854 19326,16911 19326,16962 19311,17019 19296,17075 19270,17120 19229,17161 19188,17202 19143,17228 19087,17243 19030,17258 18979,17258 18922,17243 18866,17228 18821,17202 18780,17161 18739,17120 18713,17075 18698,17019 18683,16962 18683,16911 18698,16854 18713,16798 18739,16753 18780,16712 18821,16671 18866,16645 18922,16630 18979,16615 19030,16615 19087,16630 19143,16645 19188,16671 19229,16712 Z M 19199,16742 C 19235,16778 19257,16816 19270,16865 19283,16914 19283,16959 19270,17008 19257,17057 19235,17095 19199,17131 19163,17167 19125,17189 19076,17202 19027,17215 18982,17215 18933,17202 18884,17189 18846,17167 18810,17131 18774,17095 18752,17057 18739,17008 18726,16959 18726,16914 18739,16865 18752,16816 18774,16778 18810,16742 18846,16706 18884,16684 18933,16671 18982,16658 19027,16658 19076,16671 19125,16684 19163,16706 19199,16742 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id33">
<rect class="BoundingBox" stroke="none" fill="none" x="3239" y="8035" width="5493" height="3078"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 3670,10681 L 3699,10652 4207,10144 4715,10144 5223,9636 5223,8747 5858,8112 8017,8112 8300,8395"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 3695,10656 C 3730,10691 3751,10728 3764,10776 3777,10823 3777,10866 3764,10914 3751,10961 3730,10998 3695,11033 3660,11068 3623,11089 3575,11102 3528,11115 3485,11115 3437,11102 3390,11089 3353,11068 3318,11033 3283,10998 3262,10961 3249,10914 3236,10866 3236,10823 3249,10776 3262,10728 3283,10691 3318,10656 3353,10621 3390,10600 3437,10587 3485,10574 3528,10574 3575,10587 3623,10600 3660,10621 3695,10656 Z M 3670,10681 C 3700,10711 3719,10744 3730,10785 3741,10826 3740,10863 3730,10904 3719,10945 3700,10978 3670,11008 3640,11038 3607,11057 3566,11068 3525,11079 3488,11079 3447,11068 3406,11057 3373,11038 3343,11008 3313,10978 3294,10945 3283,10904 3272,10863 3272,10826 3283,10785 3294,10744 3313,10711 3343,10681 3373,10651 3406,10632 3447,10621 3488,10610 3525,10611 3566,10621 3607,10632 3640,10651 3670,10681 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 8275,8370 C 8310,8335 8347,8314 8395,8301 8442,8288 8485,8288 8533,8301 8580,8314 8617,8335 8652,8370 8687,8405 8708,8442 8721,8490 8734,8537 8734,8580 8721,8628 8708,8675 8687,8712 8652,8747 8617,8782 8580,8803 8533,8816 8485,8829 8442,8829 8395,8816 8347,8803 8310,8782 8275,8747 8240,8712 8219,8675 8206,8628 8193,8580 8193,8537 8206,8490 8219,8442 8240,8405 8275,8370 Z M 8300,8395 C 8330,8365 8363,8346 8404,8335 8445,8324 8482,8325 8523,8335 8564,8346 8597,8365 8627,8395 8657,8425 8676,8458 8687,8499 8698,8540 8698,8577 8687,8618 8676,8659 8657,8692 8627,8722 8597,8752 8564,8771 8523,8782 8482,8793 8445,8793 8404,8782 8363,8771 8330,8752 8300,8722 8270,8692 8251,8659 8240,8618 8229,8577 8230,8540 8240,8499 8251,8458 8270,8425 8300,8395 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id34">
<rect class="BoundingBox" stroke="none" fill="none" x="5398" y="8543" width="2572" height="792"/>
<path fill="none" stroke="rgb(129,212,26)" stroke-width="152" stroke-linejoin="round" d="M 5829,8903 L 6112,8620 6366,8620 7382,8620 7538,8776"/>
<path fill="rgb(129,212,26)" stroke="none" d="M 5854,8878 C 5889,8913 5910,8950 5923,8998 5936,9045 5936,9088 5923,9136 5910,9183 5889,9220 5854,9255 5819,9290 5782,9311 5734,9324 5687,9337 5644,9337 5596,9324 5549,9311 5512,9290 5477,9255 5442,9220 5421,9183 5408,9136 5395,9088 5395,9045 5408,8998 5421,8950 5442,8913 5477,8878 5512,8843 5549,8822 5596,8809 5644,8796 5687,8796 5734,8809 5782,8822 5819,8843 5854,8878 Z M 5829,8903 C 5859,8933 5878,8966 5889,9007 5900,9048 5899,9085 5889,9126 5878,9167 5859,9200 5829,9230 5799,9260 5766,9279 5725,9290 5684,9301 5647,9301 5606,9290 5565,9279 5532,9260 5502,9230 5472,9200 5453,9167 5442,9126 5431,9085 5431,9048 5442,9007 5453,8966 5472,8933 5502,8903 5532,8873 5565,8854 5606,8843 5647,8832 5684,8833 5725,8843 5766,8854 5799,8873 5829,8903 Z"/>
<path fill="rgb(129,212,26)" stroke="none" d="M 7513,8751 C 7548,8716 7585,8695 7633,8682 7680,8669 7723,8669 7771,8682 7818,8695 7855,8716 7890,8751 7925,8786 7946,8823 7959,8871 7972,8918 7972,8961 7959,9009 7946,9056 7925,9093 7890,9128 7855,9163 7818,9184 7771,9197 7723,9210 7680,9210 7633,9197 7585,9184 7548,9163 7513,9128 7478,9093 7457,9056 7444,9009 7431,8961 7431,8918 7444,8871 7457,8823 7478,8786 7513,8751 Z M 7538,8776 C 7568,8746 7601,8727 7642,8716 7683,8705 7720,8706 7761,8716 7802,8727 7835,8746 7865,8776 7895,8806 7914,8839 7925,8880 7936,8921 7936,8958 7925,8999 7914,9040 7895,9073 7865,9103 7835,9133 7802,9152 7761,9163 7720,9174 7683,9174 7642,9163 7601,9152 7568,9133 7538,9103 7508,9073 7489,9040 7478,8999 7467,8958 7468,8921 7478,8880 7489,8839 7508,8806 7538,8776 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id35">
<rect class="BoundingBox" stroke="none" fill="none" x="7049" y="10957" width="3842" height="1299"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 7480,11824 L 7763,11541 8271,11033 10176,11033 10459,11316"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 7505,11799 C 7540,11834 7561,11871 7574,11919 7587,11966 7587,12009 7574,12057 7561,12104 7540,12141 7505,12176 7470,12211 7433,12232 7385,12245 7338,12258 7295,12258 7247,12245 7200,12232 7163,12211 7128,12176 7093,12141 7072,12104 7059,12057 7046,12009 7046,11966 7059,11919 7072,11871 7093,11834 7128,11799 7163,11764 7200,11743 7247,11730 7295,11717 7338,11717 7385,11730 7433,11743 7470,11764 7505,11799 Z M 7480,11824 C 7510,11854 7529,11887 7540,11928 7551,11969 7550,12006 7540,12047 7529,12088 7510,12121 7480,12151 7450,12181 7417,12200 7376,12211 7335,12222 7298,12222 7257,12211 7216,12200 7183,12181 7153,12151 7123,12121 7104,12088 7093,12047 7082,12006 7082,11969 7093,11928 7104,11887 7123,11854 7153,11824 7183,11794 7216,11775 7257,11764 7298,11753 7335,11754 7376,11764 7417,11775 7450,11794 7480,11824 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 10434,11291 C 10469,11256 10506,11235 10554,11222 10601,11209 10644,11209 10692,11222 10739,11235 10776,11256 10811,11291 10846,11326 10867,11363 10880,11411 10893,11458 10893,11501 10880,11549 10867,11596 10846,11633 10811,11668 10776,11703 10739,11724 10692,11737 10644,11750 10601,11750 10554,11737 10506,11724 10469,11703 10434,11668 10399,11633 10378,11596 10365,11549 10352,11501 10352,11458 10365,11411 10378,11363 10399,11326 10434,11291 Z M 10459,11316 C 10489,11286 10522,11267 10563,11256 10604,11245 10641,11246 10682,11256 10723,11267 10756,11286 10786,11316 10816,11346 10835,11379 10846,11420 10857,11461 10857,11498 10846,11539 10835,11580 10816,11613 10786,11643 10756,11673 10723,11692 10682,11703 10641,11714 10604,11714 10563,11703 10522,11692 10489,11673 10459,11643 10429,11613 10410,11580 10399,11539 10388,11498 10389,11461 10399,11420 10410,11379 10429,11346 10459,11316 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id36">
<rect class="BoundingBox" stroke="none" fill="none" x="10049" y="14068" width="3128" height="1490"/>
<path fill="none" stroke="rgb(255,109,109)" stroke-width="152" stroke-linejoin="round" d="M 10546,14335 L 10938,14335 11954,14335 12745,15126"/>
<path fill="rgb(255,109,109)" stroke="none" d="M 10582,14335 C 10582,14384 10571,14426 10546,14468 10522,14511 10491,14541 10449,14566 10406,14590 10365,14602 10316,14602 10266,14602 10225,14590 10182,14566 10140,14541 10109,14511 10085,14468 10060,14426 10049,14384 10049,14335 10049,14286 10060,14244 10085,14202 10109,14159 10140,14129 10182,14104 10225,14080 10266,14069 10316,14069 10365,14069 10406,14080 10449,14104 10491,14129 10522,14159 10546,14202 10571,14244 10582,14286 10582,14335 Z M 10546,14335 C 10546,14377 10537,14414 10516,14450 10494,14487 10468,14514 10431,14535 10394,14556 10358,14566 10316,14566 10273,14566 10237,14556 10200,14535 10163,14514 10137,14487 10115,14450 10094,14414 10085,14377 10085,14335 10085,14293 10094,14256 10115,14220 10137,14183 10163,14156 10200,14135 10237,14114 10273,14104 10316,14104 10358,14104 10394,14114 10431,14135 10468,14156 10494,14183 10516,14220 10537,14256 10546,14293 10546,14335 Z"/>
<path fill="rgb(255,109,109)" stroke="none" d="M 12720,15101 C 12755,15066 12792,15045 12840,15032 12887,15019 12930,15019 12978,15032 13025,15045 13062,15066 13097,15101 13132,15136 13153,15173 13166,15221 13179,15268 13179,15311 13166,15359 13153,15406 13132,15443 13097,15478 13062,15513 13025,15534 12978,15547 12930,15560 12887,15560 12840,15547 12792,15534 12755,15513 12720,15478 12685,15443 12664,15406 12651,15359 12638,15311 12638,15268 12651,15221 12664,15173 12685,15136 12720,15101 Z M 12745,15126 C 12775,15096 12808,15077 12849,15066 12890,15055 12927,15056 12968,15066 13009,15077 13042,15096 13072,15126 13102,15156 13121,15189 13132,15230 13143,15271 13143,15308 13132,15349 13121,15390 13102,15423 13072,15453 13042,15483 13009,15502 12968,15513 12927,15524 12890,15524 12849,15513 12808,15502 12775,15483 12745,15453 12715,15423 12696,15390 12685,15349 12674,15308 12675,15271 12685,15230 12696,15189 12715,15156 12745,15126 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id37">
<rect class="BoundingBox" stroke="none" fill="none" x="13345" y="15084" width="2669" height="1161"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 13843,15986 L 13854,15986 14489,15351 15516,15351"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 13879,15968 C 13880,16017 13871,16059 13847,16102 13824,16146 13795,16177 13753,16203 13712,16229 13670,16242 13621,16243 13572,16245 13530,16235 13487,16212 13444,16189 13412,16160 13386,16118 13360,16076 13348,16035 13346,15986 13344,15937 13354,15895 13377,15852 13400,15808 13430,15777 13471,15751 13513,15725 13554,15712 13603,15711 13652,15709 13695,15719 13738,15742 13781,15765 13813,15794 13839,15836 13864,15878 13877,15919 13879,15968 Z M 13843,15969 C 13845,16012 13836,16048 13816,16086 13796,16123 13771,16151 13734,16173 13698,16196 13663,16206 13620,16208 13578,16209 13541,16201 13504,16181 13466,16161 13439,16135 13416,16099 13394,16063 13383,16027 13382,15985 13380,15942 13389,15906 13409,15868 13429,15831 13454,15804 13490,15781 13526,15758 13562,15748 13605,15746 13647,15745 13684,15753 13721,15773 13759,15793 13786,15819 13808,15855 13831,15891 13842,15927 13843,15969 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 15480,15351 C 15480,15302 15491,15260 15516,15218 15540,15175 15571,15145 15613,15120 15656,15096 15697,15085 15747,15085 15796,15085 15837,15096 15880,15120 15922,15145 15953,15175 15977,15218 16002,15260 16013,15302 16013,15351 16013,15400 16002,15442 15977,15484 15953,15527 15922,15557 15880,15582 15837,15606 15796,15618 15747,15618 15697,15618 15656,15606 15613,15582 15571,15557 15540,15527 15516,15484 15491,15442 15480,15400 15480,15351 Z M 15516,15351 C 15516,15309 15525,15272 15546,15236 15568,15199 15594,15172 15631,15151 15668,15130 15704,15120 15747,15120 15789,15120 15825,15130 15862,15151 15899,15172 15925,15199 15947,15236 15968,15272 15977,15309 15977,15351 15977,15393 15968,15430 15947,15466 15925,15503 15899,15530 15862,15551 15825,15572 15789,15582 15747,15582 15704,15582 15668,15572 15631,15551 15594,15530 15568,15503 15546,15466 15525,15430 15516,15393 15516,15351 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id38">
<rect class="BoundingBox" stroke="none" fill="none" x="14542" y="12859" width="3649" height="2493"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 14973,13290 L 15256,13573 16907,13573 17923,14589 17923,14854"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 14998,13315 C 14963,13350 14926,13371 14878,13384 14831,13397 14788,13397 14740,13384 14693,13371 14656,13350 14621,13315 14586,13280 14565,13243 14552,13195 14539,13148 14539,13105 14552,13057 14565,13010 14586,12973 14621,12938 14656,12903 14693,12882 14740,12869 14788,12856 14831,12856 14878,12869 14926,12882 14963,12903 14998,12938 15033,12973 15054,13010 15067,13057 15080,13105 15080,13148 15067,13195 15054,13243 15033,13280 14998,13315 Z M 14973,13290 C 14943,13320 14910,13339 14869,13350 14828,13361 14791,13360 14750,13350 14709,13339 14676,13320 14646,13290 14616,13260 14597,13227 14586,13186 14575,13145 14575,13108 14586,13067 14597,13026 14616,12993 14646,12963 14676,12933 14709,12914 14750,12903 14791,12892 14828,12892 14869,12903 14910,12914 14943,12933 14973,12963 15003,12993 15022,13026 15033,13067 15044,13108 15043,13145 15033,13186 15022,13227 15003,13260 14973,13290 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 17923,14818 C 17972,14818 18014,14829 18056,14854 18099,14878 18129,14909 18154,14951 18178,14994 18190,15035 18190,15085 18190,15134 18178,15175 18154,15218 18129,15260 18099,15291 18056,15315 18014,15340 17972,15351 17923,15351 17874,15351 17832,15340 17790,15315 17747,15291 17717,15260 17692,15218 17668,15175 17657,15134 17657,15085 17657,15035 17668,14994 17692,14951 17717,14909 17747,14878 17790,14854 17832,14829 17874,14818 17923,14818 Z M 17923,14854 C 17965,14854 18002,14863 18038,14884 18075,14906 18102,14932 18123,14969 18144,15006 18154,15042 18154,15085 18154,15127 18144,15163 18123,15200 18102,15237 18075,15263 18038,15285 18002,15306 17965,15315 17923,15315 17881,15315 17844,15306 17808,15285 17771,15263 17744,15237 17723,15200 17702,15163 17692,15127 17692,15085 17692,15042 17702,15006 17723,14969 17744,14932 17771,14906 17808,14884 17844,14863 17881,14854 17923,14854 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id39">
<rect class="BoundingBox" stroke="none" fill="none" x="8385" y="12290" width="4332" height="1665"/>
<path fill="none" stroke="rgb(255,109,109)" stroke-width="152" stroke-linejoin="round" d="M 8652,13457 L 8652,13319 9287,12684 9541,12684 9922,13065 10430,13065 10938,12557 12219,12557"/>
<path fill="rgb(255,109,109)" stroke="none" d="M 8652,13421 C 8701,13421 8743,13432 8785,13457 8828,13481 8858,13512 8883,13554 8907,13597 8919,13638 8919,13688 8919,13737 8907,13778 8883,13821 8858,13863 8828,13894 8785,13918 8743,13943 8701,13954 8652,13954 8603,13954 8561,13943 8519,13918 8476,13894 8446,13863 8421,13821 8397,13778 8386,13737 8386,13688 8386,13638 8397,13597 8421,13554 8446,13512 8476,13481 8519,13457 8561,13432 8603,13421 8652,13421 Z M 8652,13457 C 8694,13457 8731,13466 8767,13487 8804,13509 8831,13535 8852,13572 8873,13609 8883,13645 8883,13688 8883,13730 8873,13766 8852,13803 8831,13840 8804,13866 8767,13888 8731,13909 8694,13918 8652,13918 8610,13918 8573,13909 8537,13888 8500,13866 8473,13840 8452,13803 8431,13766 8421,13730 8421,13688 8421,13645 8431,13609 8452,13572 8473,13535 8500,13509 8537,13487 8573,13466 8610,13457 8652,13457 Z"/>
<path fill="rgb(255,109,109)" stroke="none" d="M 12183,12557 C 12183,12508 12194,12466 12219,12424 12243,12381 12274,12351 12316,12326 12359,12302 12400,12291 12450,12291 12499,12291 12540,12302 12583,12326 12625,12351 12656,12381 12680,12424 12705,12466 12716,12508 12716,12557 12716,12606 12705,12648 12680,12690 12656,12733 12625,12763 12583,12788 12540,12812 12499,12824 12450,12824 12400,12824 12359,12812 12316,12788 12274,12763 12243,12733 12219,12690 12194,12648 12183,12606 12183,12557 Z M 12219,12557 C 12219,12515 12228,12478 12249,12442 12271,12405 12297,12378 12334,12357 12371,12336 12407,12326 12450,12326 12492,12326 12528,12336 12565,12357 12602,12378 12628,12405 12650,12442 12671,12478 12680,12515 12680,12557 12680,12599 12671,12636 12650,12672 12628,12709 12602,12736 12565,12757 12528,12778 12492,12788 12450,12788 12407,12788 12371,12778 12334,12757 12297,12736 12271,12709 12249,12672 12228,12636 12219,12599 12219,12557 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id40">
<rect class="BoundingBox" stroke="none" fill="none" x="6620" y="7210" width="4446" height="852"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 7117,7731 L 7382,7731 8017,7731 8398,7731 8652,7985 9033,7985 9541,7477 10568,7477"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 7153,7731 C 7153,7780 7142,7822 7117,7864 7093,7907 7062,7937 7020,7962 6977,7986 6936,7998 6887,7998 6837,7998 6796,7986 6753,7962 6711,7937 6680,7907 6656,7864 6631,7822 6620,7780 6620,7731 6620,7682 6631,7640 6656,7598 6680,7555 6711,7525 6753,7500 6796,7476 6837,7465 6887,7465 6936,7465 6977,7476 7020,7500 7062,7525 7093,7555 7117,7598 7142,7640 7153,7682 7153,7731 Z M 7117,7731 C 7117,7773 7108,7810 7087,7846 7065,7883 7039,7910 7002,7931 6965,7952 6929,7962 6887,7962 6844,7962 6808,7952 6771,7931 6734,7910 6708,7883 6686,7846 6665,7810 6656,7773 6656,7731 6656,7689 6665,7652 6686,7616 6708,7579 6734,7552 6771,7531 6808,7510 6844,7500 6887,7500 6929,7500 6965,7510 7002,7531 7039,7552 7065,7579 7087,7616 7108,7652 7117,7689 7117,7731 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 10532,7477 C 10532,7428 10543,7386 10568,7344 10592,7301 10623,7271 10665,7246 10708,7222 10749,7211 10799,7211 10848,7211 10889,7222 10932,7246 10974,7271 11005,7301 11029,7344 11054,7386 11065,7428 11065,7477 11065,7526 11054,7568 11029,7610 11005,7653 10974,7683 10932,7708 10889,7732 10848,7744 10799,7744 10749,7744 10708,7732 10665,7708 10623,7683 10592,7653 10568,7610 10543,7568 10532,7526 10532,7477 Z M 10568,7477 C 10568,7435 10577,7398 10598,7362 10620,7325 10646,7298 10683,7277 10720,7256 10756,7246 10799,7246 10841,7246 10877,7256 10914,7277 10951,7298 10977,7325 10999,7362 11020,7398 11029,7435 11029,7477 11029,7519 11020,7556 10999,7592 10977,7629 10951,7656 10914,7677 10877,7698 10841,7708 10799,7708 10756,7708 10720,7698 10683,7677 10646,7656 10620,7629 10598,7592 10577,7556 10568,7519 10568,7477 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id41">
<rect class="BoundingBox" stroke="none" fill="none" x="8707" y="6692" width="5684" height="1665"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 9220,7111 L 9563,6768 10833,6768 11468,7403 12230,7403 12865,8038 13796,8038"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 9250,7081 C 9291,7122 9317,7167 9332,7223 9347,7280 9347,7331 9332,7388 9317,7444 9291,7489 9250,7530 9209,7571 9164,7597 9108,7612 9051,7627 9000,7627 8943,7612 8887,7597 8842,7571 8801,7530 8760,7489 8734,7444 8719,7388 8704,7331 8704,7280 8719,7223 8734,7167 8760,7122 8801,7081 8842,7040 8887,7014 8943,6999 9000,6984 9051,6984 9108,6999 9164,7014 9209,7040 9250,7081 Z M 9220,7111 C 9256,7147 9278,7185 9291,7234 9304,7283 9304,7328 9291,7377 9278,7426 9256,7464 9220,7500 9184,7536 9146,7558 9097,7571 9048,7584 9003,7584 8954,7571 8905,7558 8867,7536 8831,7500 8795,7464 8773,7426 8760,7377 8747,7328 8747,7283 8760,7234 8773,7185 8795,7147 8831,7111 8867,7075 8905,7053 8954,7040 9003,7027 9048,7027 9097,7040 9146,7053 9184,7075 9220,7111 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 13754,8038 C 13754,7980 13767,7930 13797,7879 13826,7829 13862,7792 13913,7763 13963,7734 14013,7721 14072,7721 14130,7721 14180,7734 14230,7763 14281,7792 14317,7829 14346,7879 14376,7930 14389,7980 14389,8038 14389,8096 14376,8146 14346,8197 14317,8247 14281,8284 14230,8313 14180,8342 14130,8356 14072,8356 14013,8356 13963,8342 13913,8313 13862,8284 13826,8247 13797,8197 13767,8146 13754,8096 13754,8038 Z M 13796,8038 C 13796,7987 13808,7944 13833,7900 13858,7857 13890,7825 13934,7800 13978,7774 14021,7763 14072,7763 14122,7763 14165,7774 14209,7800 14253,7825 14284,7857 14310,7900 14335,7944 14347,7987 14347,8038 14347,8089 14335,8132 14310,8176 14284,8219 14253,8251 14209,8276 14165,8302 14122,8313 14072,8313 14021,8313 13978,8302 13934,8276 13890,8251 13859,8219 13833,8176 13808,8132 13796,8089 13796,8038 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id42">
<rect class="BoundingBox" stroke="none" fill="none" x="13006" y="7268" width="3939" height="1170"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 13504,7535 L 13769,7535 14912,7535 15547,8170 16447,8170"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 13540,7535 C 13540,7584 13529,7626 13504,7668 13480,7711 13449,7741 13407,7766 13364,7790 13323,7802 13273,7802 13224,7802 13183,7790 13140,7766 13098,7741 13067,7711 13043,7668 13018,7626 13007,7584 13007,7535 13007,7486 13018,7444 13043,7402 13067,7359 13098,7329 13140,7304 13183,7280 13224,7269 13273,7269 13323,7269 13364,7280 13407,7304 13449,7329 13480,7359 13504,7402 13529,7444 13540,7486 13540,7535 Z M 13504,7535 C 13504,7577 13495,7614 13474,7650 13452,7687 13426,7714 13389,7735 13352,7756 13316,7766 13273,7766 13231,7766 13195,7756 13158,7735 13121,7714 13095,7687 13073,7650 13052,7614 13043,7577 13043,7535 13043,7493 13052,7456 13073,7420 13095,7383 13121,7356 13158,7335 13195,7314 13231,7304 13273,7304 13316,7304 13352,7314 13389,7335 13426,7356 13452,7383 13474,7420 13495,7456 13504,7493 13504,7535 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 16411,8170 C 16411,8121 16422,8079 16447,8037 16471,7994 16502,7964 16544,7939 16587,7915 16628,7904 16678,7904 16727,7904 16768,7915 16811,7939 16853,7964 16884,7994 16908,8037 16933,8079 16944,8121 16944,8170 16944,8219 16933,8261 16908,8303 16884,8346 16853,8376 16811,8401 16768,8425 16727,8437 16678,8437 16628,8437 16587,8425 16544,8401 16502,8376 16471,8346 16447,8303 16422,8261 16411,8219 16411,8170 Z M 16447,8170 C 16447,8128 16456,8091 16477,8055 16499,8018 16525,7991 16562,7970 16599,7949 16635,7939 16678,7939 16720,7939 16756,7949 16793,7970 16830,7991 16856,8018 16878,8055 16899,8091 16908,8128 16908,8170 16908,8212 16899,8249 16878,8285 16856,8322 16830,8349 16793,8370 16756,8391 16720,8401 16678,8401 16635,8401 16599,8391 16562,8370 16525,8349 16499,8322 16477,8285 16456,8249 16447,8212 16447,8170 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id43">
<rect class="BoundingBox" stroke="none" fill="none" x="10097" y="9623" width="1732" height="855"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 10528,10046 L 10684,9890 10938,9890 11330,9890"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 10553,10021 C 10588,10056 10609,10093 10622,10141 10635,10188 10635,10231 10622,10279 10609,10326 10588,10363 10553,10398 10518,10433 10481,10454 10433,10467 10386,10480 10343,10480 10295,10467 10248,10454 10211,10433 10176,10398 10141,10363 10120,10326 10107,10279 10094,10231 10094,10188 10107,10141 10120,10093 10141,10056 10176,10021 10211,9986 10248,9965 10295,9952 10343,9939 10386,9939 10433,9952 10481,9965 10518,9986 10553,10021 Z M 10528,10046 C 10558,10076 10577,10109 10588,10150 10599,10191 10598,10228 10588,10269 10577,10310 10558,10343 10528,10373 10498,10403 10465,10422 10424,10433 10383,10444 10346,10444 10305,10433 10264,10422 10231,10403 10201,10373 10171,10343 10152,10310 10141,10269 10130,10228 10130,10191 10141,10150 10152,10109 10171,10076 10201,10046 10231,10016 10264,9997 10305,9986 10346,9975 10383,9976 10424,9986 10465,9997 10498,10016 10528,10046 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 11294,9890 C 11294,9841 11305,9799 11330,9757 11354,9714 11385,9684 11427,9659 11470,9635 11511,9624 11561,9624 11610,9624 11651,9635 11694,9659 11736,9684 11767,9714 11791,9757 11816,9799 11827,9841 11827,9890 11827,9939 11816,9981 11791,10023 11767,10066 11736,10096 11694,10121 11651,10145 11610,10157 11561,10157 11511,10157 11470,10145 11427,10121 11385,10096 11354,10066 11330,10023 11305,9981 11294,9939 11294,9890 Z M 11330,9890 C 11330,9848 11339,9811 11360,9775 11382,9738 11408,9711 11445,9690 11482,9669 11518,9659 11561,9659 11603,9659 11639,9669 11676,9690 11713,9711 11739,9738 11761,9775 11782,9811 11791,9848 11791,9890 11791,9932 11782,9969 11761,10005 11739,10042 11713,10069 11676,10090 11639,10111 11603,10121 11561,10121 11518,10121 11482,10111 11445,10090 11408,10069 11382,10042 11360,10005 11339,9969 11330,9932 11330,9890 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id44">
<rect class="BoundingBox" stroke="none" fill="none" x="15637" y="11528" width="1284" height="1284"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 16653,12314 L 16653,12049 16780,12176 16399,11795 16134,11795"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 16653,12278 C 16702,12278 16744,12289 16786,12314 16829,12338 16859,12369 16884,12411 16908,12454 16920,12495 16920,12545 16920,12594 16908,12635 16884,12678 16859,12720 16829,12751 16786,12775 16744,12800 16702,12811 16653,12811 16604,12811 16562,12800 16520,12775 16477,12751 16447,12720 16422,12678 16398,12635 16387,12594 16387,12545 16387,12495 16398,12454 16422,12411 16447,12369 16477,12338 16520,12314 16562,12289 16604,12278 16653,12278 Z M 16653,12314 C 16695,12314 16732,12323 16768,12344 16805,12366 16832,12392 16853,12429 16874,12466 16884,12502 16884,12545 16884,12587 16874,12623 16853,12660 16832,12697 16805,12723 16768,12745 16732,12766 16695,12775 16653,12775 16611,12775 16574,12766 16538,12745 16501,12723 16474,12697 16453,12660 16432,12623 16422,12587 16422,12545 16422,12502 16432,12466 16453,12429 16474,12392 16501,12366 16538,12344 16574,12323 16611,12314 16653,12314 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 16170,11795 C 16170,11844 16159,11886 16134,11928 16110,11971 16079,12001 16037,12026 15994,12050 15953,12062 15904,12062 15854,12062 15813,12050 15770,12026 15728,12001 15697,11971 15673,11928 15648,11886 15637,11844 15637,11795 15637,11746 15648,11704 15673,11662 15697,11619 15728,11589 15770,11564 15813,11540 15854,11529 15904,11529 15953,11529 15994,11540 16037,11564 16079,11589 16110,11619 16134,11662 16159,11704 16170,11746 16170,11795 Z M 16134,11795 C 16134,11837 16125,11874 16104,11910 16082,11947 16056,11974 16019,11995 15982,12016 15946,12026 15904,12026 15861,12026 15825,12016 15788,11995 15751,11974 15725,11947 15703,11910 15682,11874 15673,11837 15673,11795 15673,11753 15682,11716 15703,11680 15725,11643 15751,11616 15788,11595 15825,11574 15861,11564 15904,11564 15946,11564 15982,11574 16019,11595 16056,11616 16082,11643 16104,11680 16125,11716 16134,11753 16134,11795 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id45">
<rect class="BoundingBox" stroke="none" fill="none" x="4382" y="10576" width="7275" height="3455"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 11364,11459 L 10557,10652 7890,10652 6747,11795 6747,12938 5731,13954 5477,13954 4813,13290"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 11331,11401 C 11379,11391 11423,11393 11469,11408 11516,11423 11552,11446 11585,11482 11619,11518 11638,11557 11649,11604 11660,11652 11658,11696 11643,11742 11628,11789 11605,11825 11568,11858 11532,11892 11494,11911 11446,11922 11398,11933 11355,11931 11308,11916 11261,11901 11225,11878 11192,11841 11159,11805 11139,11767 11128,11719 11118,11671 11120,11628 11135,11581 11150,11534 11173,11498 11209,11465 11245,11432 11284,11412 11331,11401 Z M 11339,11436 C 11381,11427 11418,11429 11459,11442 11499,11454 11531,11475 11559,11506 11588,11537 11605,11571 11614,11612 11623,11654 11622,11691 11609,11732 11596,11772 11576,11804 11545,11832 11513,11861 11480,11878 11438,11887 11397,11896 11359,11895 11319,11882 11278,11869 11247,11849 11218,11818 11189,11786 11172,11753 11163,11711 11154,11670 11156,11632 11169,11592 11181,11551 11202,11520 11233,11491 11264,11463 11298,11445 11339,11436 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 4838,13315 C 4803,13350 4766,13371 4718,13384 4671,13397 4628,13397 4580,13384 4533,13371 4496,13350 4461,13315 4426,13280 4405,13243 4392,13195 4379,13148 4379,13105 4392,13057 4405,13010 4426,12973 4461,12938 4496,12903 4533,12882 4580,12869 4628,12856 4671,12856 4718,12869 4766,12882 4803,12903 4838,12938 4873,12973 4894,13010 4907,13057 4920,13105 4920,13148 4907,13195 4894,13243 4873,13280 4838,13315 Z M 4813,13290 C 4783,13320 4750,13339 4709,13350 4668,13361 4631,13360 4590,13350 4549,13339 4516,13320 4486,13290 4456,13260 4437,13227 4426,13186 4415,13145 4415,13108 4426,13067 4437,13026 4456,12993 4486,12963 4516,12933 4549,12914 4590,12903 4631,12892 4668,12892 4709,12903 4750,12914 4783,12933 4813,12963 4843,12993 4862,13026 4873,13067 4884,13108 4883,13145 4873,13186 4862,13227 4843,13260 4813,13290 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id46">
<rect class="BoundingBox" stroke="none" fill="none" x="4001" y="11413" width="2633" height="1983"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 4432,12332 L 4588,12176 4969,12176 5223,12430 5223,13065 5477,13319 5858,13319 6366,12811 6366,11911"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 4457,12307 C 4492,12342 4513,12379 4526,12427 4539,12474 4539,12517 4526,12565 4513,12612 4492,12649 4457,12684 4422,12719 4385,12740 4337,12753 4290,12766 4247,12766 4199,12753 4152,12740 4115,12719 4080,12684 4045,12649 4024,12612 4011,12565 3998,12517 3998,12474 4011,12427 4024,12379 4045,12342 4080,12307 4115,12272 4152,12251 4199,12238 4247,12225 4290,12225 4337,12238 4385,12251 4422,12272 4457,12307 Z M 4432,12332 C 4462,12362 4481,12395 4492,12436 4503,12477 4502,12514 4492,12555 4481,12596 4462,12629 4432,12659 4402,12689 4369,12708 4328,12719 4287,12730 4250,12730 4209,12719 4168,12708 4135,12689 4105,12659 4075,12629 4056,12596 4045,12555 4034,12514 4034,12477 4045,12436 4056,12395 4075,12362 4105,12332 4135,12302 4168,12283 4209,12272 4250,12261 4287,12262 4328,12272 4369,12283 4402,12302 4432,12332 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 6366,11947 C 6317,11947 6275,11936 6233,11911 6190,11887 6160,11856 6135,11814 6111,11771 6099,11730 6099,11680 6099,11631 6111,11590 6135,11547 6160,11505 6190,11474 6233,11450 6275,11425 6317,11414 6366,11414 6415,11414 6457,11425 6499,11450 6542,11474 6572,11505 6597,11547 6621,11590 6632,11631 6632,11680 6632,11730 6621,11771 6597,11814 6572,11856 6542,11887 6499,11911 6457,11936 6415,11947 6366,11947 Z M 6366,11911 C 6324,11911 6287,11902 6251,11881 6214,11859 6187,11833 6166,11796 6145,11759 6135,11723 6135,11680 6135,11638 6145,11602 6166,11565 6187,11528 6214,11502 6251,11480 6287,11459 6324,11450 6366,11450 6408,11450 6445,11459 6481,11480 6518,11502 6545,11528 6566,11565 6587,11602 6597,11638 6597,11680 6597,11723 6587,11759 6566,11796 6545,11833 6518,11859 6481,11881 6445,11902 6408,11911 6366,11911 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id47">
<rect class="BoundingBox" stroke="none" fill="none" x="9160" y="13179" width="4271" height="1363"/>
<path fill="none" stroke="rgb(255,109,109)" stroke-width="152" stroke-linejoin="round" d="M 9657,13446 L 9668,13446 12335,13446 12999,14110"/>
<path fill="rgb(255,109,109)" stroke="none" d="M 9693,13446 C 9693,13495 9682,13537 9657,13579 9633,13622 9602,13652 9560,13677 9517,13701 9476,13713 9427,13713 9377,13713 9336,13701 9293,13677 9251,13652 9220,13622 9196,13579 9171,13537 9160,13495 9160,13446 9160,13397 9171,13355 9196,13313 9220,13270 9251,13240 9293,13215 9336,13191 9377,13180 9427,13180 9476,13180 9517,13191 9560,13215 9602,13240 9633,13270 9657,13313 9682,13355 9693,13397 9693,13446 Z M 9657,13446 C 9657,13488 9648,13525 9627,13561 9605,13598 9579,13625 9542,13646 9505,13667 9469,13677 9427,13677 9384,13677 9348,13667 9311,13646 9274,13625 9248,13598 9226,13561 9205,13525 9196,13488 9196,13446 9196,13404 9205,13367 9226,13331 9248,13294 9274,13267 9311,13246 9348,13225 9384,13215 9427,13215 9469,13215 9505,13225 9542,13246 9579,13267 9605,13294 9627,13331 9648,13367 9657,13404 9657,13446 Z"/>
<path fill="rgb(255,109,109)" stroke="none" d="M 12974,14085 C 13009,14050 13046,14029 13094,14016 13141,14003 13184,14003 13232,14016 13279,14029 13316,14050 13351,14085 13386,14120 13407,14157 13420,14205 13433,14252 13433,14295 13420,14343 13407,14390 13386,14427 13351,14462 13316,14497 13279,14518 13232,14531 13184,14544 13141,14544 13094,14531 13046,14518 13009,14497 12974,14462 12939,14427 12918,14390 12905,14343 12892,14295 12892,14252 12905,14205 12918,14157 12939,14120 12974,14085 Z M 12999,14110 C 13029,14080 13062,14061 13103,14050 13144,14039 13181,14040 13222,14050 13263,14061 13296,14080 13326,14110 13356,14140 13375,14173 13386,14214 13397,14255 13397,14292 13386,14333 13375,14374 13356,14407 13326,14437 13296,14467 13263,14486 13222,14497 13181,14508 13144,14508 13103,14497 13062,14486 13029,14467 12999,14437 12969,14407 12950,14374 12939,14333 12928,14292 12929,14255 12939,14214 12950,14173 12969,14140 12999,14110 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id48">
<rect class="BoundingBox" stroke="none" fill="none" x="15256" y="9750" width="3443" height="3697"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 15753,10017 L 16018,10017 16272,10271 17161,10271 18431,11541 18431,12949"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 15789,10017 C 15789,10066 15778,10108 15753,10150 15729,10193 15698,10223 15656,10248 15613,10272 15572,10284 15523,10284 15473,10284 15432,10272 15389,10248 15347,10223 15316,10193 15292,10150 15267,10108 15256,10066 15256,10017 15256,9968 15267,9926 15292,9884 15316,9841 15347,9811 15389,9786 15432,9762 15473,9751 15523,9751 15572,9751 15613,9762 15656,9786 15698,9811 15729,9841 15753,9884 15778,9926 15789,9968 15789,10017 Z M 15753,10017 C 15753,10059 15744,10096 15723,10132 15701,10169 15675,10196 15638,10217 15601,10238 15565,10248 15523,10248 15480,10248 15444,10238 15407,10217 15370,10196 15344,10169 15322,10132 15301,10096 15292,10059 15292,10017 15292,9975 15301,9938 15322,9902 15344,9865 15370,9838 15407,9817 15444,9796 15480,9786 15523,9786 15565,9786 15601,9796 15638,9817 15675,9838 15701,9865 15723,9902 15744,9938 15753,9975 15753,10017 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 18431,12913 C 18480,12913 18522,12924 18564,12949 18607,12973 18637,13004 18662,13046 18686,13089 18698,13130 18698,13180 18698,13229 18686,13270 18662,13313 18637,13355 18607,13386 18564,13410 18522,13435 18480,13446 18431,13446 18382,13446 18340,13435 18298,13410 18255,13386 18225,13355 18200,13313 18176,13270 18165,13229 18165,13180 18165,13130 18176,13089 18200,13046 18225,13004 18255,12973 18298,12949 18340,12924 18382,12913 18431,12913 Z M 18431,12949 C 18473,12949 18510,12958 18546,12979 18583,13001 18610,13027 18631,13064 18652,13101 18662,13137 18662,13180 18662,13222 18652,13258 18631,13295 18610,13332 18583,13358 18546,13380 18510,13401 18473,13410 18431,13410 18389,13410 18352,13401 18316,13380 18279,13358 18252,13332 18231,13295 18210,13258 18200,13222 18200,13180 18200,13137 18210,13101 18231,13064 18252,13027 18279,13001 18316,12979 18352,12958 18389,12949 18431,12949 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id49">
<rect class="BoundingBox" stroke="none" fill="none" x="14621" y="8353" width="4586" height="4078"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 15118,8620 L 15637,8620 16526,8620 17161,9255 17161,9763 18939,11541 18939,11933"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 15154,8620 C 15154,8669 15143,8711 15118,8753 15094,8796 15063,8826 15021,8851 14978,8875 14937,8887 14888,8887 14838,8887 14797,8875 14754,8851 14712,8826 14681,8796 14657,8753 14632,8711 14621,8669 14621,8620 14621,8571 14632,8529 14657,8487 14681,8444 14712,8414 14754,8389 14797,8365 14838,8354 14888,8354 14937,8354 14978,8365 15021,8389 15063,8414 15094,8444 15118,8487 15143,8529 15154,8571 15154,8620 Z M 15118,8620 C 15118,8662 15109,8699 15088,8735 15066,8772 15040,8799 15003,8820 14966,8841 14930,8851 14888,8851 14845,8851 14809,8841 14772,8820 14735,8799 14709,8772 14687,8735 14666,8699 14657,8662 14657,8620 14657,8578 14666,8541 14687,8505 14709,8468 14735,8441 14772,8420 14809,8399 14845,8389 14888,8389 14930,8389 14966,8399 15003,8420 15040,8441 15066,8468 15088,8505 15109,8541 15118,8578 15118,8620 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 18939,11897 C 18988,11897 19030,11908 19072,11933 19115,11957 19145,11988 19170,12030 19194,12073 19206,12114 19206,12164 19206,12213 19194,12254 19170,12297 19145,12339 19115,12370 19072,12394 19030,12419 18988,12430 18939,12430 18890,12430 18848,12419 18806,12394 18763,12370 18733,12339 18708,12297 18684,12254 18673,12213 18673,12164 18673,12114 18684,12073 18708,12030 18733,11988 18763,11957 18806,11933 18848,11908 18890,11897 18939,11897 Z M 18939,11933 C 18981,11933 19018,11942 19054,11963 19091,11985 19118,12011 19139,12048 19160,12085 19170,12121 19170,12164 19170,12206 19160,12242 19139,12279 19118,12316 19091,12342 19054,12364 19018,12385 18981,12394 18939,12394 18897,12394 18860,12385 18824,12364 18787,12342 18760,12316 18739,12279 18718,12242 18708,12206 18708,12164 18708,12121 18718,12085 18739,12048 18760,12011 18787,11985 18824,11963 18860,11942 18897,11933 18939,11933 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id50">
<rect class="BoundingBox" stroke="none" fill="none" x="17463" y="9303" width="2062" height="3969"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 19291,12840 L 19447,12684 19447,11287 17894,9734"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 19316,12815 C 19351,12850 19372,12887 19385,12935 19398,12982 19398,13025 19385,13073 19372,13120 19351,13157 19316,13192 19281,13227 19244,13248 19196,13261 19149,13274 19106,13274 19058,13261 19011,13248 18974,13227 18939,13192 18904,13157 18883,13120 18870,13073 18857,13025 18857,12982 18870,12935 18883,12887 18904,12850 18939,12815 18974,12780 19011,12759 19058,12746 19106,12733 19149,12733 19196,12746 19244,12759 19281,12780 19316,12815 Z M 19291,12840 C 19321,12870 19340,12903 19351,12944 19362,12985 19361,13022 19351,13063 19340,13104 19321,13137 19291,13167 19261,13197 19228,13216 19187,13227 19146,13238 19109,13238 19068,13227 19027,13216 18994,13197 18964,13167 18934,13137 18915,13104 18904,13063 18893,13022 18893,12985 18904,12944 18915,12903 18934,12870 18964,12840 18994,12810 19027,12791 19068,12780 19109,12769 19146,12770 19187,12780 19228,12791 19261,12810 19291,12840 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 17919,9759 C 17884,9794 17847,9815 17799,9828 17752,9841 17709,9841 17661,9828 17614,9815 17577,9794 17542,9759 17507,9724 17486,9687 17473,9639 17460,9592 17460,9549 17473,9501 17486,9454 17507,9417 17542,9382 17577,9347 17614,9326 17661,9313 17709,9300 17752,9300 17799,9313 17847,9326 17884,9347 17919,9382 17954,9417 17975,9454 17988,9501 18001,9549 18001,9592 17988,9639 17975,9687 17954,9724 17919,9759 Z M 17894,9734 C 17864,9764 17831,9783 17790,9794 17749,9805 17712,9804 17671,9794 17630,9783 17597,9764 17567,9734 17537,9704 17518,9671 17507,9630 17496,9589 17496,9552 17507,9511 17518,9470 17537,9437 17567,9407 17597,9377 17630,9358 17671,9347 17712,9336 17749,9336 17790,9347 17831,9358 17864,9377 17894,9407 17924,9437 17943,9470 17954,9511 17965,9552 17964,9589 17954,9630 17943,9671 17924,9704 17894,9734 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id51">
<rect class="BoundingBox" stroke="none" fill="none" x="2226" y="9496" width="2490" height="4726"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 4218,9763 L 3953,9763 3826,9763 2937,10652 2937,11541 2302,12176 2302,13573 2683,13954 3075,13954"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 4182,9763 C 4182,9714 4193,9672 4218,9630 4242,9587 4273,9557 4315,9532 4358,9508 4399,9497 4449,9497 4498,9497 4539,9508 4582,9532 4624,9557 4655,9587 4679,9630 4704,9672 4715,9714 4715,9763 4715,9812 4704,9854 4679,9896 4655,9939 4624,9969 4582,9994 4539,10018 4498,10030 4449,10030 4399,10030 4358,10018 4315,9994 4273,9969 4242,9939 4218,9896 4193,9854 4182,9812 4182,9763 Z M 4218,9763 C 4218,9721 4227,9684 4248,9648 4270,9611 4296,9584 4333,9563 4370,9542 4406,9532 4449,9532 4491,9532 4527,9542 4564,9563 4601,9584 4627,9611 4649,9648 4670,9684 4679,9721 4679,9763 4679,9805 4670,9842 4649,9878 4627,9915 4601,9942 4564,9963 4527,9984 4491,9994 4449,9994 4406,9994 4370,9984 4333,9963 4296,9942 4270,9915 4248,9878 4227,9842 4218,9805 4218,9763 Z"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 3039,13954 C 3039,13905 3050,13863 3075,13821 3099,13778 3130,13748 3172,13723 3215,13699 3256,13688 3306,13688 3355,13688 3396,13699 3439,13723 3481,13748 3512,13778 3536,13821 3561,13863 3572,13905 3572,13954 3572,14003 3561,14045 3536,14087 3512,14130 3481,14160 3439,14185 3396,14209 3355,14221 3306,14221 3256,14221 3215,14209 3172,14185 3130,14160 3099,14130 3075,14087 3050,14045 3039,14003 3039,13954 Z M 3075,13954 C 3075,13912 3084,13875 3105,13839 3127,13802 3153,13775 3190,13754 3227,13733 3263,13723 3306,13723 3348,13723 3384,13733 3421,13754 3458,13775 3484,13802 3506,13839 3527,13875 3536,13912 3536,13954 3536,13996 3527,14033 3506,14069 3484,14106 3458,14133 3421,14154 3384,14175 3348,14185 3306,14185 3263,14185 3227,14175 3190,14154 3153,14133 3127,14106 3105,14069 3084,14033 3075,13996 3075,13954 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id52">
<rect class="BoundingBox" stroke="none" fill="none" x="15338" y="3464" width="535" height="4268"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 15605,7234 L 15605,4588 15605,3540"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 15605,7198 C 15654,7198 15696,7209 15738,7234 15781,7258 15811,7289 15836,7331 15860,7374 15872,7415 15872,7465 15872,7514 15860,7555 15836,7598 15811,7640 15781,7671 15738,7695 15696,7720 15654,7731 15605,7731 15556,7731 15514,7720 15472,7695 15429,7671 15399,7640 15374,7598 15350,7555 15339,7514 15339,7465 15339,7415 15350,7374 15374,7331 15399,7289 15429,7258 15472,7234 15514,7209 15556,7198 15605,7198 Z M 15605,7234 C 15647,7234 15684,7243 15720,7264 15757,7286 15784,7312 15805,7349 15826,7386 15836,7422 15836,7465 15836,7507 15826,7543 15805,7580 15784,7617 15757,7643 15720,7665 15684,7686 15647,7695 15605,7695 15563,7695 15526,7686 15490,7665 15453,7643 15426,7617 15405,7580 15384,7543 15374,7507 15374,7465 15374,7422 15384,7386 15405,7349 15426,7312 15453,7286 15490,7264 15526,7243 15563,7234 15605,7234 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id53">
<rect class="BoundingBox" stroke="none" fill="none" x="15529" y="3464" width="1296" height="2694"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 16748,3540 L 16748,3794 16748,4556 16494,4810 15605,4810 16494,4810 16748,5064 16748,6080"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id54">
<rect class="BoundingBox" stroke="none" fill="none" x="2003" y="3464" width="1614" height="7697"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 2270,10663 L 2270,10271 2270,3921 2651,3540 3159,3540 3540,3921 3540,4175 3159,4556 3159,5064 3540,5445 3540,5699 3159,6080 2651,6080 2270,6461"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 2270,10627 C 2319,10627 2361,10638 2403,10663 2446,10687 2476,10718 2501,10760 2525,10803 2537,10844 2537,10894 2537,10943 2525,10984 2501,11027 2476,11069 2446,11100 2403,11124 2361,11149 2319,11160 2270,11160 2221,11160 2179,11149 2137,11124 2094,11100 2064,11069 2039,11027 2015,10984 2004,10943 2004,10894 2004,10844 2015,10803 2039,10760 2064,10718 2094,10687 2137,10663 2179,10638 2221,10627 2270,10627 Z M 2270,10663 C 2312,10663 2349,10672 2385,10693 2422,10715 2449,10741 2470,10778 2491,10815 2501,10851 2501,10894 2501,10936 2491,10972 2470,11009 2449,11046 2422,11072 2385,11094 2349,11115 2312,11124 2270,11124 2228,11124 2191,11115 2155,11094 2118,11072 2091,11046 2070,11009 2049,10972 2039,10936 2039,10894 2039,10851 2049,10815 2070,10778 2091,10741 2118,10715 2155,10693 2191,10672 2228,10663 2270,10663 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id55">
<rect class="BoundingBox" stroke="none" fill="none" x="5813" y="3464" width="1614" height="4395"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 6080,7361 L 6080,7096 6080,6461 6461,6080 6969,6080 7350,5699 7350,5191 6969,4810 6461,4810 6080,4429 6080,3921 6461,3540 6969,3540 7350,3921 7350,4429"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 6080,7325 C 6129,7325 6171,7336 6213,7361 6256,7385 6286,7416 6311,7458 6335,7501 6347,7542 6347,7592 6347,7641 6335,7682 6311,7725 6286,7767 6256,7798 6213,7822 6171,7847 6129,7858 6080,7858 6031,7858 5989,7847 5947,7822 5904,7798 5874,7767 5849,7725 5825,7682 5814,7641 5814,7592 5814,7542 5825,7501 5849,7458 5874,7416 5904,7385 5947,7361 5989,7336 6031,7325 6080,7325 Z M 6080,7361 C 6122,7361 6159,7370 6195,7391 6232,7413 6259,7439 6280,7476 6301,7513 6311,7549 6311,7592 6311,7634 6301,7670 6280,7707 6259,7744 6232,7770 6195,7792 6159,7813 6122,7822 6080,7822 6038,7822 6001,7813 5965,7792 5928,7770 5901,7744 5880,7707 5859,7670 5849,7634 5849,7592 5849,7549 5859,7513 5880,7476 5901,7439 5928,7413 5965,7391 6001,7370 6038,7361 6080,7361 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id56">
<rect class="BoundingBox" stroke="none" fill="none" x="9814" y="3463" width="1614" height="3126"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 11160,6091 L 11160,4810 11160,3921 10779,3540 10271,3540 9890,3921 9890,4175 10271,4556 10271,5191 9890,5572 9890,5826 10144,6080 10779,6080 11160,5699"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 11160,6055 C 11209,6055 11251,6066 11293,6091 11336,6115 11366,6146 11391,6188 11415,6231 11427,6272 11427,6322 11427,6371 11415,6412 11391,6455 11366,6497 11336,6528 11293,6552 11251,6577 11209,6588 11160,6588 11111,6588 11069,6577 11027,6552 10984,6528 10954,6497 10929,6455 10905,6412 10894,6371 10894,6322 10894,6272 10905,6231 10929,6188 10954,6146 10984,6115 11027,6091 11069,6066 11111,6055 11160,6055 Z M 11160,6091 C 11202,6091 11239,6100 11275,6121 11312,6143 11339,6169 11360,6206 11381,6243 11391,6279 11391,6322 11391,6364 11381,6400 11360,6437 11339,6474 11312,6500 11275,6522 11239,6543 11202,6552 11160,6552 11118,6552 11081,6543 11045,6522 11008,6500 10981,6474 10960,6437 10939,6400 10929,6364 10929,6322 10929,6279 10939,6243 10960,6206 10981,6169 11008,6143 11045,6121 11081,6100 11118,6091 11160,6091 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id57">
<rect class="BoundingBox" stroke="none" fill="none" x="3908" y="3464" width="1614" height="5792"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 4175,8758 L 4175,8366 4175,5445 4521,5064 4521,4556 4175,4175 4175,3921 4521,3540 5099,3540 5445,3921 5445,4175 5099,4556 5099,5064 5445,5445 5445,6080"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 4175,8722 C 4224,8722 4266,8733 4308,8758 4351,8782 4381,8813 4406,8855 4430,8898 4442,8939 4442,8989 4442,9038 4430,9079 4406,9122 4381,9164 4351,9195 4308,9219 4266,9244 4224,9255 4175,9255 4126,9255 4084,9244 4042,9219 3999,9195 3969,9164 3944,9122 3920,9079 3909,9038 3909,8989 3909,8939 3920,8898 3944,8855 3969,8813 3999,8782 4042,8758 4084,8733 4126,8722 4175,8722 Z M 4175,8758 C 4217,8758 4254,8767 4290,8788 4327,8810 4354,8836 4375,8873 4396,8910 4406,8946 4406,8989 4406,9031 4396,9067 4375,9104 4354,9141 4327,9167 4290,9189 4254,9210 4217,9219 4175,9219 4133,9219 4096,9210 4060,9189 4023,9167 3996,9141 3975,9104 3954,9067 3944,9031 3944,8989 3944,8946 3954,8910 3975,8873 3996,8836 4023,8810 4060,8788 4096,8767 4133,8758 4175,8758 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id58">
<rect class="BoundingBox" stroke="none" fill="none" x="7718" y="3464" width="1614" height="4141"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 7985,7107 L 7985,6715 7985,5445 8331,5064 8331,4556 7985,4175 7985,3921 8331,3540 8909,3540 9255,3921 9255,4175 8909,4556 8909,5064 9255,5445 9255,6080"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 7985,7071 C 8034,7071 8076,7082 8118,7107 8161,7131 8191,7162 8216,7204 8240,7247 8252,7288 8252,7338 8252,7387 8240,7428 8216,7471 8191,7513 8161,7544 8118,7568 8076,7593 8034,7604 7985,7604 7936,7604 7894,7593 7852,7568 7809,7544 7779,7513 7754,7471 7730,7428 7719,7387 7719,7338 7719,7288 7730,7247 7754,7204 7779,7162 7809,7131 7852,7107 7894,7082 7936,7071 7985,7071 Z M 7985,7107 C 8027,7107 8064,7116 8100,7137 8137,7159 8164,7185 8185,7222 8206,7259 8216,7295 8216,7338 8216,7380 8206,7416 8185,7453 8164,7490 8137,7516 8100,7538 8064,7559 8027,7568 7985,7568 7943,7568 7906,7559 7870,7538 7833,7516 7806,7490 7785,7453 7764,7416 7754,7380 7754,7338 7754,7295 7764,7259 7785,7222 7806,7185 7833,7159 7870,7137 7906,7116 7943,7107 7985,7107 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id59">
<rect class="BoundingBox" stroke="none" fill="none" x="13624" y="3464" width="1614" height="3760"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 14970,6726 L 14970,6207 14970,3540 14970,5699 14589,6080 14081,6080 13700,5699 13700,3540"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 14970,6690 C 15019,6690 15061,6701 15103,6726 15146,6750 15176,6781 15201,6823 15225,6866 15236,6907 15236,6957 15236,7006 15225,7047 15201,7090 15176,7132 15146,7163 15103,7187 15061,7212 15019,7223 14970,7223 14921,7223 14879,7212 14837,7187 14794,7163 14764,7132 14739,7090 14715,7047 14703,7006 14703,6957 14703,6907 14715,6866 14739,6823 14764,6781 14794,6750 14837,6726 14879,6701 14921,6690 14970,6690 Z M 14970,6726 C 15012,6726 15049,6735 15085,6756 15122,6778 15149,6804 15170,6841 15191,6878 15201,6914 15201,6957 15201,6999 15191,7035 15170,7072 15149,7109 15122,7135 15085,7157 15049,7178 15012,7187 14970,7187 14928,7187 14891,7178 14855,7157 14818,7135 14791,7109 14770,7072 14749,7035 14739,6999 14739,6957 14739,6914 14749,6878 14770,6841 14791,6804 14818,6778 14855,6756 14891,6735 14928,6726 14970,6726 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id60">
<rect class="BoundingBox" stroke="none" fill="none" x="11528" y="3464" width="1615" height="3633"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 11795,6599 L 11795,6334 11795,3540 11795,5699 12141,6080 12719,6080 13065,5699 13065,3540"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 11795,6563 C 11844,6563 11886,6574 11928,6599 11971,6623 12001,6654 12026,6696 12050,6739 12062,6780 12062,6830 12062,6879 12050,6920 12026,6963 12001,7005 11971,7036 11928,7060 11886,7085 11844,7096 11795,7096 11746,7096 11704,7085 11662,7060 11619,7036 11589,7005 11564,6963 11540,6920 11529,6879 11529,6830 11529,6780 11540,6739 11564,6696 11589,6654 11619,6623 11662,6599 11704,6574 11746,6563 11795,6563 Z M 11795,6599 C 11837,6599 11874,6608 11910,6629 11947,6651 11974,6677 11995,6714 12016,6751 12026,6787 12026,6830 12026,6872 12016,6908 11995,6945 11974,6982 11947,7008 11910,7030 11874,7051 11837,7060 11795,7060 11753,7060 11716,7051 11680,7030 11643,7008 11616,6982 11595,6945 11574,6908 11564,6872 11564,6830 11564,6787 11574,6751 11595,6714 11616,6677 11643,6651 11680,6629 11716,6608 11753,6599 11795,6599 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyLineShape">
<g id="id61">
<rect class="BoundingBox" stroke="none" fill="none" x="17434" y="3464" width="1614" height="6681"/>
<path fill="none" stroke="rgb(52,101,164)" stroke-width="152" stroke-linejoin="round" d="M 18780,9647 L 18780,9128 18780,5445 18399,5064 18399,4556 18780,4175 18780,3921 18399,3540 17891,3540 17510,3921 17510,4175 17891,4556 17891,5064 17510,5445 17510,6080"/>
<path fill="rgb(52,101,164)" stroke="none" d="M 18780,9611 C 18829,9611 18871,9622 18913,9647 18956,9671 18986,9702 19011,9744 19035,9787 19047,9828 19047,9878 19047,9927 19035,9968 19011,10011 18986,10053 18956,10084 18913,10108 18871,10133 18829,10144 18780,10144 18731,10144 18689,10133 18647,10108 18604,10084 18574,10053 18549,10011 18525,9968 18514,9927 18514,9878 18514,9828 18525,9787 18549,9744 18574,9702 18604,9671 18647,9647 18689,9622 18731,9611 18780,9611 Z M 18780,9647 C 18822,9647 18859,9656 18895,9677 18932,9699 18959,9725 18980,9762 19001,9799 19011,9835 19011,9878 19011,9920 19001,9956 18980,9993 18959,10030 18932,10056 18895,10078 18859,10099 18822,10108 18780,10108 18738,10108 18701,10099 18665,10078 18628,10056 18601,10030 18580,9993 18559,9956 18549,9920 18549,9878 18549,9835 18559,9799 18580,9762 18601,9725 18628,9699 18665,9677 18701,9656 18738,9647 18780,9647 Z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>
</a>
<p style="font-family: 'Lato', sans-serif;; font-size:11vw"><center><b>Ein Klick auf das Logo - und es geht zum Code</b></center></p>
<script src="jslib/vivus.js"></script>
<script src="jslib/pathformer.js"></script>
<script>
new Vivus('my-svg', {type: 'sync', duration: 800, dashGap: 0},
function () {
if (window.console) {
console.log('Animation finished. [log triggered from callback]');
}
});
function send_input_to_machine() {
var xhr1=new XMLHttpRequest();
var inputoutputText = JSON.stringify(document.getElementById('textarea_inputoutput').value);
console.log(document.getElementById('textarea_inputoutput').value);
var xhr3=new XMLHttpRequest();
// var array = document.getElementById('nodes').firstChild;
xhr1.open("POST",'public/data.json', true);
xhr3.open("GET",'public/data.json', true);
xhr1.send()
const timevalue = setInterval(function(){
xhr3.open("POST",'public/data.json', true);
xhr3.send()
xhr3.onreadystatechange = function () {
if (xhr3.readyState == 4) {
console.log(xhr3.responseText)
if (xhr3.responseText == 'It worked\n') {
alert(xhr3.responseText);
clearInterval(timevalue);
}
};
};
; }, 3000);
};
function scan_my_Neurons_Connections() {
var xhr2=new XMLHttpRequest();
var absendenText = JSON.stringify(document.getElementById('textarea_absenden').value);
console.log(document.getElementById('textarea_absenden').value);
// var array = document.getElementById('nodes').firstChild;
xhr2.open("POST",'public/data.json', true);
xhr2.send(absendenText);
xhr2.onreadystatechange = function () {
if (xhr2.readyState == 4) {
alert(xhr2.responseText);
};
};
};
</script>
<textarea class="center" id="textarea_inputoutput" placeholder="Hier den Text eingeben. &#10Darunter koennnen die Module aktiviert (gruen) oder deaktivert (pink) werden." rows="9" cols="100%" ></textarea>
<br/>
<input type="button" class="button button10" onclick="send_input_to_machine();" value="In Leichte Sprache übersetzen">
<br />
<br />
<br />
<div class="grid-container">
<div class="item1"><input type="button" onclick="exportnetwork();" value="Eine Aussage pro Satz" class="button button1"></div>
<div class="item2"><input type="button" onclick="exportnetwork();" value="Konjunktive ersetzen" class="button button2"></div>
<div class="item3"><input type="button" onclick="exportnetwork();" value="Genitiv ersetzen" class="button button3"></div>
<div class="item4"><input type="button" onclick="exportnetwork();" value="Passiv ersetzen" class="button button4"></div>
<div class="item5"><input type="button" onclick="exportnetwork();" value="Verneinungen ersetzen" class="button button5"></div>
<div class="item6"><input type="button" onclick="exportnetwork();" value="Abkürzungen erklären" class="button button6"></div>
<div class="item7"><input type="button" onclick="exportnetwork();" value="FremdWoerterbuch" class="button button7"></div>
<div class="item8"><input type="button" onclick="exportnetwork();" value="Charakterisierung pro Satz" class="button button8"></div>
<div class="item9"><input type="button" onclick="exportnetwork();" value="Mediopunkte" class="button button9"></div>
</div>
<br/>
<br/>
<br/>
<textarea class="center" rows="9" cols="100%" id="textarea_inputoutput" placeholder="Hier kommt der uebersetzte Text heraus."></textarea>
<br />
<textarea class="center" rows="9" cols="100%" id="textarea_absenden" placeholder="Textfeld für die verbesserte Übersetzung. Satzzeichen bitte nicht vergessen! &#10Falls ein neuer Eintrag ins Fremdwörterbuch vorgenommen werden soll, schreibe einfach unter die Verbesserungen einen Eintrag der Form: ['Abfall', 'Abfall sind Sachen die wir nicht mehr brauchen'] &#10Falls ein neuer Eintrag in die Mediopunkte-Datenbank vorgenommen werden soll, bitte schreibe unter die Verbesserungen einen Eintrag der Form: ['Mediopunkt', 'Medio·punkt']' "></textarea>
<br />
<input type="button" class="button button11" onclick="scan_my_Neurons_Connections();" value="Scanne die Verbindungen meiner Neuronen um die statistische Genauigkeit zu verbessern ">
<br />
<br />
<br />
</body>
</html>

+ 276
- 0
nodefrontend/jslib/pathformer.js View File

@ -0,0 +1,276 @@
'use strict';
/**
* Pathformer
* Beta version
*
* Take any SVG version 1.1 and transform
* child elements to 'path' elements
*
* This code is purely forked from
* https://github.com/Waest/SVGPathConverter
*/
/**
* Class constructor
*
* @param {DOM|String} element Dom element of the SVG or id of it
*/
function Pathformer(element) {
// Test params
if (typeof element === 'undefined') {
throw new Error('Pathformer [constructor]: "element" parameter is required');
}
// Set the element
if (element.constructor === String) {
element = document.getElementById(element);
if (!element) {
throw new Error('Pathformer [constructor]: "element" parameter is not related to an existing ID');
}
}
if (element instanceof window.SVGElement ||
element instanceof window.SVGGElement ||
/^svg$/i.test(element.nodeName)) {
this.el = element;
} else {
throw new Error('Pathformer [constructor]: "element" parameter must be a string or a SVGelement');
}
// Start
this.scan(element);
}
/**
* List of tags which can be transformed
* to path elements
*
* @type {Array}
*/
Pathformer.prototype.TYPES = ['line', 'ellipse', 'circle', 'polygon', 'polyline', 'rect'];
/**
* List of attribute names which contain
* data. This array list them to check if
* they contain bad values, like percentage.
*
* @type {Array}
*/
Pathformer.prototype.ATTR_WATCH = ['cx', 'cy', 'points', 'r', 'rx', 'ry', 'x', 'x1', 'x2', 'y', 'y1', 'y2'];
/**
* Finds the elements compatible for transform
* and apply the liked method
*
* @param {object} options Object from the constructor
*/
Pathformer.prototype.scan = function (svg) {
var fn, element, pathData, pathDom,
elements = svg.querySelectorAll(this.TYPES.join(','));
for (var i = 0; i < elements.length; i++) {
element = elements[i];
fn = this[element.tagName.toLowerCase() + 'ToPath'];
pathData = fn(this.parseAttr(element.attributes));
pathDom = this.pathMaker(element, pathData);
element.parentNode.replaceChild(pathDom, element);
}
};
/**
* Read `line` element to extract and transform
* data, to make it ready for a `path` object.
*
* @param {DOMelement} element Line element to transform
* @return {object} Data for a `path` element
*/
Pathformer.prototype.lineToPath = function (element) {
var newElement = {},
x1 = element.x1 || 0,
y1 = element.y1 || 0,
x2 = element.x2 || 0,
y2 = element.y2 || 0;
newElement.d = 'M' + x1 + ',' + y1 + 'L' + x2 + ',' + y2;
return newElement;
};
/**
* Read `rect` element to extract and transform
* data, to make it ready for a `path` object.
* The radius-border is not taken in charge yet.
* (your help is more than welcomed)
*
* @param {DOMelement} element Rect element to transform
* @return {object} Data for a `path` element
*/
Pathformer.prototype.rectToPath = function (element) {
var newElement = {},
x = parseFloat(element.x) || 0,
y = parseFloat(element.y) || 0,
width = parseFloat(element.width) || 0,
height = parseFloat(element.height) || 0;
if (element.rx || element.ry) {
var rx = parseInt(element.rx, 10) || -1,
ry = parseInt(element.ry, 10) || -1;
rx = Math.min(Math.max(rx < 0 ? ry : rx, 0), width/2);
ry = Math.min(Math.max(ry < 0 ? rx : ry, 0), height/2);
newElement.d = 'M ' + (x + rx) + ',' + y + ' ' +
'L ' + (x + width - rx) + ',' + y + ' ' +
'A ' + rx + ',' + ry + ',0,0,1,' + (x + width) + ',' + (y + ry) + ' ' +
'L ' + (x + width) + ',' + (y + height - ry) + ' ' +
'A ' + rx + ',' + ry + ',0,0,1,' + (x + width - rx) + ',' + (y + height) + ' ' +
'L ' + (x + rx) + ',' + (y + height) + ' ' +
'A ' + rx + ',' + ry + ',0,0,1,' + x + ',' + (y + height - ry) + ' ' +
'L ' + x + ',' + (y + ry) + ' ' +
'A ' + rx + ',' + ry + ',0,0,1,' + (x + rx) + ',' + y;
}
else {
newElement.d = 'M' + x + ' ' + y + ' ' +
'L' + (x + width) + ' ' + y + ' ' +
'L' + (x + width) + ' ' + (y + height) + ' ' +
'L' + x + ' ' + (y + height) + ' Z';
}
return newElement;
};
/**
* Read `polyline` element to extract and transform
* data, to make it ready for a `path` object.
*
* @param {DOMelement} element Polyline element to transform
* @return {object} Data for a `path` element
*/
Pathformer.prototype.polylineToPath = function (element) {
var newElement = {},
points = element.points.trim().split(' '),
i, path;
// Reformatting if points are defined without commas
if (element.points.indexOf(',') === -1) {
var formattedPoints = [];
for (i = 0; i < points.length; i+=2) {
formattedPoints.push(points[i] + ',' + points[i+1]);
}
points = formattedPoints;
}
// Generate the path.d value
path = 'M' + points[0];
for(i = 1; i < points.length; i++) {
if (points[i].indexOf(',') !== -1) {
path += 'L' + points[i];
}
}
newElement.d = path;
return newElement;
};
/**
* Read `polygon` element to extract and transform
* data, to make it ready for a `path` object.
* This method rely on polylineToPath, because the
* logic is similar. The path created is just closed,
* so it needs an 'Z' at the end.
*
* @param {DOMelement} element Polygon element to transform
* @return {object} Data for a `path` element
*/
Pathformer.prototype.polygonToPath = function (element) {
var newElement = Pathformer.prototype.polylineToPath(element);
newElement.d += 'Z';
return newElement;
};
/**
* Read `ellipse` element to extract and transform
* data, to make it ready for a `path` object.
*
* @param {DOMelement} element ellipse element to transform
* @return {object} Data for a `path` element
*/
Pathformer.prototype.ellipseToPath = function (element) {
var newElement = {},
rx = parseFloat(element.rx) || 0,
ry = parseFloat(element.ry) || 0,
cx = parseFloat(element.cx) || 0,
cy = parseFloat(element.cy) || 0,
startX = cx - rx,
startY = cy,
endX = parseFloat(cx) + parseFloat(rx),
endY = cy;
newElement.d = 'M' + startX + ',' + startY +
'A' + rx + ',' + ry + ' 0,1,1 ' + endX + ',' + endY +
'A' + rx + ',' + ry + ' 0,1,1 ' + startX + ',' + endY;
return newElement;
};
/**
* Read `circle` element to extract and transform
* data, to make it ready for a `path` object.
*
* @param {DOMelement} element Circle element to transform
* @return {object} Data for a `path` element
*/
Pathformer.prototype.circleToPath = function (element) {
var newElement = {},
r = parseFloat(element.r) || 0,
cx = parseFloat(element.cx) || 0,
cy = parseFloat(element.cy) || 0,
startX = cx - r,
startY = cy,
endX = parseFloat(cx) + parseFloat(r),
endY = cy;
newElement.d = 'M' + startX + ',' + startY +
'A' + r + ',' + r + ' 0,1,1 ' + endX + ',' + endY +
'A' + r + ',' + r + ' 0,1,1 ' + startX + ',' + endY;
return newElement;
};
/**
* Create `path` elements form original element
* and prepared objects
*
* @param {DOMelement} element Original element to transform
* @param {object} pathData Path data (from `toPath` methods)
* @return {DOMelement} Path element
*/
Pathformer.prototype.pathMaker = function (element, pathData) {
var i, attr, pathTag = document.createElementNS('http://www.w3.org/2000/svg','path');
for(i = 0; i < element.attributes.length; i++) {
attr = element.attributes[i];
if (this.ATTR_WATCH.indexOf(attr.name) === -1) {
pathTag.setAttribute(attr.name, attr.value);
}
}
for(i in pathData) {
pathTag.setAttribute(i, pathData[i]);
}
return pathTag;
};
/**
* Parse attributes of a DOM element to
* get an object of attribute => value
*
* @param {NamedNodeMap} attributes Attributes object from DOM element to parse
* @return {object} Object of attributes
*/
Pathformer.prototype.parseAttr = function (element) {
var attr, output = {};
for (var i = 0; i < element.length; i++) {
attr = element[i];
// Check if no data attribute contains '%', or the transformation is impossible
if (this.ATTR_WATCH.indexOf(attr.name) !== -1 && attr.value.indexOf('%') !== -1) {
throw new Error('Pathformer [parseAttr]: a SVG shape got values in percentage. This cannot be transformed into \'path\' tags. Please use \'viewBox\'.');
}
output[attr.name] = attr.value;
}
return output;
};

+ 859
- 0
nodefrontend/jslib/vivus.js View File

@ -0,0 +1,859 @@
'use strict';
var setupEnv, requestAnimFrame, cancelAnimFrame, parsePositiveInt;
/**
* Vivus
* Beta version
*
* Take any SVG and make the animation
* to give give the impression of live drawing
*
* This in more than just inspired from codrops
* At that point, it's a pure fork.
*/
/**
* Class constructor
* option structure
* type: 'delayed'|'sync'|'oneByOne'|'script' (to know if the items must be drawn synchronously or not, default: delayed)
* duration: <int> (in frames)
* start: 'inViewport'|'manual'|'autostart' (start automatically the animation, default: inViewport)
* delay: <int> (delay between the drawing of first and last path)
* dashGap <integer> whitespace extra margin between dashes
* pathTimingFunction <function> timing animation function for each path element of the SVG
* animTimingFunction <function> timing animation function for the complete SVG
* forceRender <boolean> force the browser to re-render all updated path items
* selfDestroy <boolean> removes all extra styling on the SVG, and leaves it as original
*
* The attribute 'type' is by default on 'delayed'.
* - 'delayed'
* all paths are draw at the same time but with a
* little delay between them before start
* - 'sync'
* all path are start and finish at the same time
* - 'oneByOne'
* only one path is draw at the time
* the end of the first one will trigger the draw
* of the next one
*
* All these values can be overwritten individually
* for each path item in the SVG
* The value of frames will always take the advantage of
* the duration value.
* If you fail somewhere, an error will be thrown.
* Good luck.
*
* @constructor
* @this {Vivus}
* @param {DOM|String} element Dom element of the SVG or id of it
* @param {Object} options Options about the animation
* @param {Function} callback Callback for the end of the animation
*/
function Vivus(element, options, callback) {
setupEnv();
// Setup
this.isReady = false;
this.setElement(element, options);
this.setOptions(options);
this.setCallback(callback);
if (this.isReady) {
this.init();
}
}
/**
* Timing functions
**************************************
*
* Default functions to help developers.
* It always take a number as parameter (between 0 to 1) then
* return a number (between 0 and 1)
*/
Vivus.LINEAR = function(x) {
return x;
};
Vivus.EASE = function(x) {
return -Math.cos(x * Math.PI) / 2 + 0.5;
};
Vivus.EASE_OUT = function(x) {
return 1 - Math.pow(1 - x, 3);
};
Vivus.EASE_IN = function(x) {
return Math.pow(x, 3);
};
Vivus.EASE_OUT_BOUNCE = function(x) {
var base = -Math.cos(x * (0.5 * Math.PI)) + 1,
rate = Math.pow(base, 1.5),
rateR = Math.pow(1 - x, 2),
progress = -Math.abs(Math.cos(rate * (2.5 * Math.PI))) + 1;
return 1 - rateR + progress * rateR;
};
/**
* Setters
**************************************
*/
/**
* Check and set the element in the instance
* The method will not return anything, but will throw an
* error if the parameter is invalid
*
* @param {DOM|String} element SVG Dom element or id of it
*/
Vivus.prototype.setElement = function(element, options) {
var onLoad, self;
// Basic check
if (typeof element === 'undefined') {
throw new Error('Vivus [constructor]: "element" parameter is required');
}
// Set the element
if (element.constructor === String) {
element = document.getElementById(element);
if (!element) {
throw new Error(
'Vivus [constructor]: "element" parameter is not related to an existing ID'
);
}
}
this.parentEl = element;
// Load the SVG with XMLHttpRequest and extract the SVG
if (options && options.file) {
self = this;
onLoad = function() {
var domSandbox = document.createElement('div');
domSandbox.innerHTML = this.responseText;
var svgTag = domSandbox.querySelector('svg');
if (!svgTag) {
throw new Error(
'Vivus [load]: Cannot find the SVG in the loaded file : ' +
options.file
);
}
self.el = svgTag;
self.el.setAttribute('width', '100%');
self.el.setAttribute('height', '100%');
self.parentEl.appendChild(self.el);
self.isReady = true;
self.init();
self = null;
};
var oReq = new window.XMLHttpRequest();
oReq.addEventListener('load', onLoad);
oReq.open('GET', options.file);
oReq.send();
return;
}
switch (element.constructor) {
case window.SVGSVGElement:
case window.SVGElement:
case window.SVGGElement:
this.el = element;
this.isReady = true;
break;
case window.HTMLObjectElement:
self = this;
onLoad = function(e) {
if (self.isReady) {
return;
}
self.el =
element.contentDocument &&
element.contentDocument.querySelector('svg');
if (!self.el && e) {
throw new Error(
'Vivus [constructor]: object loaded does not contain any SVG'
);
} else if (self.el) {
if (element.getAttribute('built-by-vivus')) {
self.parentEl.insertBefore(self.el, element);
self.parentEl.removeChild(element);
self.el.setAttribute('width', '100%');
self.el.setAttribute('height', '100%');
}
self.isReady = true;
self.init();
self = null;
}
};
if (!onLoad()) {
element.addEventListener('load', onLoad);
}
break;
default:
throw new Error(
'Vivus [constructor]: "element" parameter is not valid (or miss the "file" attribute)'
);
}
};
/**
* Set up user option to the instance
* The method will not return anything, but will throw an
* error if the parameter is invalid
*
* @param {object} options Object from the constructor
*/
Vivus.prototype.setOptions = function(options) {
var allowedTypes = [
'delayed',
'sync',
'async',
'nsync',
'oneByOne',
'scenario',
'scenario-sync'
];
var allowedStarts = ['inViewport', 'manual', 'autostart'];
// Basic check
if (options !== undefined && options.constructor !== Object) {
throw new Error(
'Vivus [constructor]: "options" parameter must be an object'
);
} else {
options = options || {};
}
// Set the animation type
if (options.type && allowedTypes.indexOf(options.type) === -1) {
throw new Error(
'Vivus [constructor]: ' +
options.type +
' is not an existing animation `type`'
);
} else {
this.type = options.type || allowedTypes[0];
}
// Set the start type
if (options.start && allowedStarts.indexOf(options.start) === -1) {
throw new Error(
'Vivus [constructor]: ' +
options.start +
' is not an existing `start` option'
);
} else {
this.start = options.start || allowedStarts[0];
}
this.isIE =
window.navigator.userAgent.indexOf('MSIE') !== -1 ||
window.navigator.userAgent.indexOf('Trident/') !== -1 ||
window.navigator.userAgent.indexOf('Edge/') !== -1;
this.duration = parsePositiveInt(options.duration, 120);
this.delay = parsePositiveInt(options.delay, null);
this.dashGap = parsePositiveInt(options.dashGap, 1);
this.forceRender = options.hasOwnProperty('forceRender')
? !!options.forceRender
: this.isIE;
this.reverseStack = !!options.reverseStack;
this.selfDestroy = !!options.selfDestroy;
this.onReady = options.onReady;
this.map = [];
this.frameLength = this.currentFrame = this.delayUnit = this.speed = this.handle = null;
this.ignoreInvisible = options.hasOwnProperty('ignoreInvisible')
? !!options.ignoreInvisible
: false;
this.animTimingFunction = options.animTimingFunction || Vivus.LINEAR;
this.pathTimingFunction = options.pathTimingFunction || Vivus.LINEAR;
if (this.delay >= this.duration) {
throw new Error('Vivus [constructor]: delay must be shorter than duration');
}
};
/**
* Set up callback to the instance
* The method will not return enything, but will throw an
* error if the parameter is invalid
*
* @param {Function} callback Callback for the animation end
*/
Vivus.prototype.setCallback = function(callback) {
// Basic check
if (!!callback && callback.constructor !== Function) {
throw new Error(
'Vivus [constructor]: "callback" parameter must be a function'
);
}
this.callback = callback || function() {};
};
/**
* Core
**************************************
*/
/**
* Map the svg, path by path.
* The method return nothing, it just fill the
* `map` array. Each item in this array represent
* a path element from the SVG, with informations for
* the animation.
*
* ```
* [
* {
* el: <DOMobj> the path element
* length: <number> length of the path line
* startAt: <number> time start of the path animation (in frames)
* duration: <number> path animation duration (in frames)
* },
* ...
* ]
* ```
*
*/
Vivus.prototype.mapping = function() {
var i, paths, path, pAttrs, pathObj, totalLength, lengthMeter, timePoint;
timePoint = totalLength = lengthMeter = 0;
paths = this.el.querySelectorAll('path');
for (i = 0; i < paths.length; i++) {
path = paths[i];
if (this.isInvisible(path)) {
continue;
}
pathObj = {
el: path,
length: Math.ceil(path.getTotalLength())
};
// Test if the path length is correct
if (isNaN(pathObj.length)) {
if (window.console && console.warn) {
console.warn(
'Vivus [mapping]: cannot retrieve a path element length',
path
);
}
continue;
}
this.map.push(pathObj);
path.style.strokeDasharray =
pathObj.length + ' ' + (pathObj.length + this.dashGap * 2);
path.style.strokeDashoffset = pathObj.length + this.dashGap;
pathObj.length += this.dashGap;
totalLength += pathObj.length;
this.renderPath(i);
}
totalLength = totalLength === 0 ? 1 : totalLength;
this.delay = this.delay === null ? this.duration / 3 : this.delay;
this.delayUnit = this.delay / (paths.length > 1 ? paths.length - 1 : 1);
// Reverse stack if asked
if (this.reverseStack) {
this.map.reverse();
}
for (i = 0; i < this.map.length; i++) {
pathObj = this.map[i];
switch (this.type) {
case 'delayed':
pathObj.startAt = this.delayUnit * i;
pathObj.duration = this.duration - this.delay;
break;
case 'oneByOne':
pathObj.startAt = (lengthMeter / totalLength) * this.duration;
pathObj.duration = (pathObj.length / totalLength) * this.duration;
break;
case 'sync':
case 'async':
case 'nsync':
pathObj.startAt = 0;
pathObj.duration = this.duration;
break;
case 'scenario-sync':
path = pathObj.el;
pAttrs = this.parseAttr(path);
pathObj.startAt =
timePoint +
(parsePositiveInt(pAttrs['data-delay'], this.delayUnit) || 0);
pathObj.duration = parsePositiveInt(
pAttrs['data-duration'],
this.duration
);
timePoint =
pAttrs['data-async'] !== undefined
? pathObj.startAt
: pathObj.startAt + pathObj.duration;
this.frameLength = Math.max(
this.frameLength,
pathObj.startAt + pathObj.duration
);
break;
case 'scenario':
path = pathObj.el;
pAttrs = this.parseAttr(path);
pathObj.startAt =
parsePositiveInt(pAttrs['data-start'], this.delayUnit) || 0;
pathObj.duration = parsePositiveInt(
pAttrs['data-duration'],
this.duration
);
this.frameLength = Math.max(
this.frameLength,
pathObj.startAt + pathObj.duration
);
break;
}
lengthMeter += pathObj.length;
this.frameLength = this.frameLength || this.duration;
}
};
/**
* Interval method to draw the SVG from current
* position of the animation. It update the value of
* `currentFrame` and re-trace the SVG.
*
* It use this.handle to store the requestAnimationFrame
* and clear it one the animation is stopped. So this
* attribute can be used to know if the animation is
* playing.
*
* Once the animation at the end, this method will
* trigger the Vivus callback.
*
*/
Vivus.prototype.drawer = function() {
var self = this;
this.currentFrame += this.speed;
if (this.currentFrame <= 0) {
this.stop();
this.reset();
} else if (this.currentFrame >= this.frameLength) {
this.stop();
this.currentFrame = this.frameLength;
this.trace();
if (this.selfDestroy) {
this.destroy();
}
} else {
this.trace();
this.handle = requestAnimFrame(function() {
self.drawer();
});
return;
}
this.callback(this);
if (this.instanceCallback) {
this.instanceCallback(this);
this.instanceCallback = null;
}
};
/**
* Draw the SVG at the current instant from the
* `currentFrame` value. Here is where most of the magic is.
* The trick is to use the `strokeDashoffset` style property.
*
* For optimisation reasons, a new property called `progress`
* is added in each item of `map`. This one contain the current
* progress of the path element. Only if the new value is different
* the new value will be applied to the DOM element. This
* method save a lot of resources to re-render the SVG. And could
* be improved if the animation couldn't be played forward.
*
*/
Vivus.prototype.trace = function() {
var i, progress, path, currentFrame;
currentFrame =
this.animTimingFunction(this.currentFrame / this.frameLength) *
this.frameLength;
for (i = 0; i < this.map.length; i++) {
path = this.map[i];
progress = (currentFrame - path.startAt) / path.duration;
progress = this.pathTimingFunction(Math.max(0, Math.min(1, progress)));
if (path.progress !== progress) {
path.progress = progress;
path.el.style.strokeDashoffset = Math.floor(path.length * (1 - progress));
this.renderPath(i);
}
}
};
/**
* Method forcing the browser to re-render a path element
* from it's index in the map. Depending on the `forceRender`
* value.
* The trick is to replace the path element by it's clone.
* This practice is not recommended because it's asking more
* ressources, too much DOM manupulation..
* but it's the only way to let the magic happen on IE.
* By default, this fallback is only applied on IE.
*
* @param {Number} index Path index
*/
Vivus.prototype.renderPath = function(index) {
if (this.forceRender && this.map && this.map[index]) {
var pathObj = this.map[index],
newPath = pathObj.el.cloneNode(true);
pathObj.el.parentNode.replaceChild(newPath, pathObj.el);
pathObj.el = newPath;
}
};
/**
* When the SVG object is loaded and ready,
* this method will continue the initialisation.
*
* This this mainly due to the case of passing an
* object tag in the constructor. It will wait
* the end of the loading to initialise.
*
*/
Vivus.prototype.init = function() {
// Set object variables
this.frameLength = 0;
this.currentFrame = 0;
this.map = [];
// Start
new Pathformer(this.el);
this.mapping();
this.starter();
if (this.onReady) {
this.onReady(this);
}
};
/**
* Trigger to start of the animation.
* Depending on the `start` value, a different script
* will be applied.
*
* If the `start` value is not valid, an error will be thrown.
* Even if technically, this is impossible.
*
*/
Vivus.prototype.starter = function() {
switch (this.start) {
case 'manual':
return;
case 'autostart':
this.play();
break;
case 'inViewport':
var self = this,
listener = function() {
if (self.isInViewport(self.parentEl, 1)) {
self.play();
window.removeEventListener('scroll', listener);
}
};
window.addEventListener('scroll', listener);
listener();
break;
}
};
/**
* Controls
**************************************
*/
/**
* Get the current status of the animation between
* three different states: 'start', 'progress', 'end'.
* @return {string} Instance status
*/
Vivus.prototype.getStatus = function() {
return this.currentFrame === 0
? 'start'
: this.currentFrame === this.frameLength
? 'end'
: 'progress';
};
/**
* Reset the instance to the initial state : undraw
* Be careful, it just reset the animation, if you're
* playing the animation, this won't stop it. But just
* make it start from start.
*
*/
Vivus.prototype.reset = function() {
return this.setFrameProgress(0);
};
/**
* Set the instance to the final state : drawn
* Be careful, it just set the animation, if you're
* playing the animation on rewind, this won't stop it.
* But just make it start from the end.
*
*/
Vivus.prototype.finish = function() {
return this.setFrameProgress(1);
};
/**
* Set the level of progress of the drawing.
*
* @param {number} progress Level of progress to set
*/
Vivus.prototype.setFrameProgress = function(progress) {
progress = Math.min(1, Math.max(0, progress));
this.currentFrame = Math.round(this.frameLength * progress);
this.trace();
return this;
};
/**
* Play the animation at the desired speed.
* Speed must be a valid number (no zero).
* By default, the speed value is 1.
* But a negative value is accepted to go forward.
*
* And works with float too.
* But don't forget we are in JavaScript, se be nice
* with him and give him a 1/2^x value.
*
* @param {number} speed Animation speed [optional]
*/
Vivus.prototype.play = function(speed, callback) {
this.instanceCallback = null;
if (speed && typeof speed === 'function') {
this.instanceCallback = speed; // first parameter is actually the callback function
speed = null;
} else if (speed && typeof speed !== 'number') {
throw new Error('Vivus [play]: invalid speed');
}
// if the first parameter wasn't the callback, check if the seconds was
if (callback && typeof callback === 'function' && !this.instanceCallback) {
this.instanceCallback = callback;
}
this.speed = speed || 1;
if (!this.handle) {
this.drawer();
}
return this;
};
/**
* Stop the current animation, if on progress.
* Should not trigger any error.
*
*/
Vivus.prototype.stop = function() {
if (this.handle) {
cancelAnimFrame(this.handle);
this.handle = null;
}
return this;
};
/**
* Destroy the instance.
* Remove all bad styling attributes on all
* path tags
*
*/
Vivus.prototype.destroy = function() {
this.stop();
var i, path;
for (i = 0; i < this.map.length; i++) {
path = this.map[i];
path.el.style.strokeDashoffset = null;
path.el.style.strokeDasharray = null;
this.renderPath(i);
}
};
/**
* Utils methods
* include methods from Codrops
**************************************
*/
/**
* Method to best guess if a path should added into
* the animation or not.
*
* 1. Use the `data-vivus-ignore` attribute if set
* 2. Check if the instance must ignore invisible paths
* 3. Check if the path is visible
*
* For now the visibility checking is unstable.
* It will be used for a beta phase.
*
* Other improvments are planned. Like detecting
* is the path got a stroke or a valid opacity.
*/
Vivus.prototype.isInvisible = function(el) {
var rect,
ignoreAttr = el.getAttribute('data-ignore');
if (ignoreAttr !== null) {
return ignoreAttr !== 'false';
}
if (this.ignoreInvisible) {
rect = el.getBoundingClientRect();
return !rect.width && !rect.height;
} else {
return false;
}
};
/**
* Parse attributes of a DOM element to
* get an object of {attributeName => attributeValue}
*
* @param {object} element DOM element to parse
* @return {object} Object of attributes
*/
Vivus.prototype.parseAttr = function(element) {
var attr,
output = {};
if (element && element.attributes) {
for (var i = 0; i < element.attributes.length; i++) {
attr = element.attributes[i];
output[attr.name] = attr.value;
}
}
return output;
};
/**
* Reply if an element is in the page viewport
*
* @param {object} el Element to observe
* @param {number} h Percentage of height
* @return {boolean}
*/
Vivus.prototype.isInViewport = function(el, h) {
var scrolled = this.scrollY(),
viewed = scrolled + this.getViewportH(),
elBCR = el.getBoundingClientRect(),
elHeight = elBCR.height,
elTop = scrolled + elBCR.top,
elBottom = elTop + elHeight;
// if 0, the element is considered in the viewport as soon as it enters.
// if 1, the element is considered in the viewport only when it's fully inside
// value in percentage (1 >= h >= 0)
h = h || 0;
return elTop + elHeight * h <= viewed && elBottom >= scrolled;
};
/**
* Get the viewport height in pixels
*
* @return {integer} Viewport height
*/
Vivus.prototype.getViewportH = function() {
var client = this.docElem.clientHeight,
inner = window.innerHeight;
if (client < inner) {
return inner;
} else {
return client;
}
};
/**
* Get the page Y offset
*
* @return {integer} Page Y offset
*/
Vivus.prototype.scrollY = function() {
return window.pageYOffset || this.docElem.scrollTop;
};
setupEnv = function() {
if (Vivus.prototype.docElem) {
return;
}
/**
* Alias for document element
*
* @type {DOMelement}
*/
Vivus.prototype.docElem = window.document.documentElement;
/**
* Alias for `requestAnimationFrame` or
* `setTimeout` function for deprecated browsers.
*
*/
requestAnimFrame = (function() {
return (
window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(/* function */ callback) {
return window.setTimeout(callback, 1000 / 60);
}
);
})();
/**
* Alias for `cancelAnimationFrame` or
* `cancelTimeout` function for deprecated browsers.
*
*/
cancelAnimFrame = (function() {
return (
window.cancelAnimationFrame ||
window.webkitCancelAnimationFrame ||
window.mozCancelAnimationFrame ||
window.oCancelAnimationFrame ||
window.msCancelAnimationFrame ||
function(id) {
return window.clearTimeout(id);
}
);
})();
};
/**
* Parse string to integer.
* If the number is not positive or null
* the method will return the default value
* or 0 if undefined
*
* @param {string} value String to parse
* @param {*} defaultValue Value to return if the result parsed is invalid
* @return {number}
*
*/
parsePositiveInt = function(value, defaultValue) {
var output = parseInt(value, 10);
return output >= 0 ? output : defaultValue;
};

+ 70
- 0
nodefrontend/node_modules/asap/CHANGES.md View File

@ -0,0 +1,70 @@
## 2.0.6
Version 2.0.4 adds support for React Native by clarifying in package.json that
the browser environment does not support Node.js domains.
Why this is necessary, we leave as an exercise for the user.
## 2.0.3
Version 2.0.3 fixes a bug when adjusting the capacity of the task queue.
## 2.0.1-2.02
Version 2.0.1 fixes a bug in the way redirects were expressed that affected the
function of Browserify, but which Mr would tolerate.
## 2.0.0
Version 2 of ASAP is a full rewrite with a few salient changes.
First, the ASAP source is CommonJS only and designed with [Browserify][] and
[Browserify-compatible][Mr] module loaders in mind.
[Browserify]: https://github.com/substack/node-browserify
[Mr]: https://github.com/montagejs/mr
The new version has been refactored in two dimensions.
Support for Node.js and browsers have been separated, using Browserify
redirects and ASAP has been divided into two modules.
The "raw" layer depends on the tasks to catch thrown exceptions and unravel
Node.js domains.
The full implementation of ASAP is loadable as `require("asap")` in both Node.js
and browsers.
The raw layer that lacks exception handling overhead is loadable as
`require("asap/raw")`.
The interface is the same for both layers.
Tasks are no longer required to be functions, but can rather be any object that
implements `task.call()`.
With this feature you can recycle task objects to avoid garbage collector churn
and avoid closures in general.
The implementation has been rigorously documented so that our successors can
understand the scope of the problem that this module solves and all of its
nuances, ensuring that the next generation of implementations know what details
are essential.
- [asap.js](https://github.com/kriskowal/asap/blob/master/asap.js)
- [raw.js](https://github.com/kriskowal/asap/blob/master/raw.js)
- [browser-asap.js](https://github.com/kriskowal/asap/blob/master/browser-asap.js)
- [browser-raw.js](https://github.com/kriskowal/asap/blob/master/browser-raw.js)
The new version has also been rigorously tested across a broad spectrum of
browsers, in both the window and worker context.
The following charts capture the browser test results for the most recent
release.
The first chart shows test results for ASAP running in the main window context.
The second chart shows test results for ASAP running in a web worker context.
Test results are inconclusive (grey) on browsers that do not support web
workers.
These data are captured automatically by [Continuous
Integration][].
![Browser Compatibility](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-results-matrix.svg)
![Compatibility in Web Workers](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-worker-results-matrix.svg)
[Continuous Integration]: https://github.com/kriskowal/asap/blob/master/CONTRIBUTING.md

+ 21
- 0
nodefrontend/node_modules/asap/LICENSE.md View File

@ -0,0 +1,21 @@
Copyright 2009–2014 Contributors. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.

+ 237
- 0
nodefrontend/node_modules/asap/README.md View File

@ -0,0 +1,237 @@
# ASAP
[![Build Status](https://travis-ci.org/kriskowal/asap.png?branch=master)](https://travis-ci.org/kriskowal/asap)
Promise and asynchronous observer libraries, as well as hand-rolled callback
programs and libraries, often need a mechanism to postpone the execution of a
callback until the next available event.
(See [Designing API’s for Asynchrony][Zalgo].)
The `asap` function executes a task **as soon as possible** but not before it
returns, waiting only for the completion of the current event and previously
scheduled tasks.
```javascript
asap(function () {
// ...
});
```
[Zalgo]: http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony
This CommonJS package provides an `asap` module that exports a function that
executes a task function *as soon as possible*.
ASAP strives to schedule events to occur before yielding for IO, reflow,
or redrawing.
Each event receives an independent stack, with only platform code in parent
frames and the events run in the order they are scheduled.
ASAP provides a fast event queue that will execute tasks until it is
empty before yielding to the JavaScript engine's underlying event-loop.
When a task gets added to a previously empty event queue, ASAP schedules a flush
event, preferring for that event to occur before the JavaScript engine has an
opportunity to perform IO tasks or rendering, thus making the first task and
subsequent tasks semantically indistinguishable.
ASAP uses a variety of techniques to preserve this invariant on different
versions of browsers and Node.js.
By design, ASAP prevents input events from being handled until the task
queue is empty.
If the process is busy enough, this may cause incoming connection requests to be
dropped, and may cause existing connections to inform the sender to reduce the
transmission rate or stall.
ASAP allows this on the theory that, if there is enough work to do, there is no
sense in looking for trouble.
As a consequence, ASAP can interfere with smooth animation.
If your task should be tied to the rendering loop, consider using
`requestAnimationFrame` instead.
A long sequence of tasks can also effect the long running script dialog.
If this is a problem, you may be able to use ASAP’s cousin `setImmediate` to
break long processes into shorter intervals and periodically allow the browser
to breathe.
`setImmediate` will yield for IO, reflow, and repaint events.
It also returns a handler and can be canceled.
For a `setImmediate` shim, consider [YuzuJS setImmediate][setImmediate].
[setImmediate]: https://github.com/YuzuJS/setImmediate
Take care.
ASAP can sustain infinite recursive calls without warning.
It will not halt from a stack overflow, and it will not consume unbounded
memory.
This is behaviorally equivalent to an infinite loop.
Just as with infinite loops, you can monitor a Node.js process for this behavior
with a heart-beat signal.
As with infinite loops, a very small amount of caution goes a long way to
avoiding problems.
```javascript
function loop() {
asap(loop);
}
loop();
```
In browsers, if a task throws an exception, it will not interrupt the flushing
of high-priority tasks.
The exception will be postponed to a later, low-priority event to avoid
slow-downs.
In Node.js, if a task throws an exception, ASAP will resume flushing only if—and
only after—the error is handled by `domain.on("error")` or
`process.on("uncaughtException")`.
## Raw ASAP
Checking for exceptions comes at a cost.
The package also provides an `asap/raw` module that exports the underlying
implementation which is faster but stalls if a task throws an exception.
This internal version of the ASAP function does not check for errors.
If a task does throw an error, it will stall the event queue unless you manually
call `rawAsap.requestFlush()` before throwing the error, or any time after.
In Node.js, `asap/raw` also runs all tasks outside any domain.
If you need a task to be bound to your domain, you will have to do it manually.
```js
if (process.domain) {
task = process.domain.bind(task);
}
rawAsap(task);
```
## Tasks
A task may be any object that implements `call()`.
A function will suffice, but closures tend not to be reusable and can cause
garbage collector churn.
Both `asap` and `rawAsap` accept task objects to give you the option of
recycling task objects or using higher callable object abstractions.
See the `asap` source for an illustration.
## Compatibility
ASAP is tested on Node.js v0.10 and in a broad spectrum of web browsers.
The following charts capture the browser test results for the most recent
release.
The first chart shows test results for ASAP running in the main window context.
The second chart shows test results for ASAP running in a web worker context.
Test results are inconclusive (grey) on browsers that do not support web
workers.
These data are captured automatically by [Continuous
Integration][].
[Continuous Integration]: https://github.com/kriskowal/asap/blob/master/CONTRIBUTING.md
![Browser Compatibility](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-results-matrix.svg)
![Compatibility in Web Workers](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-worker-results-matrix.svg)
## Caveats
When a task is added to an empty event queue, it is not always possible to
guarantee that the task queue will begin flushing immediately after the current
event.
However, once the task queue begins flushing, it will not yield until the queue
is empty, even if the queue grows while executing tasks.
The following browsers allow the use of [DOM mutation observers][] to access
the HTML [microtask queue][], and thus begin flushing ASAP's task queue
immediately at the end of the current event loop turn, before any rendering or
IO:
[microtask queue]: http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#microtask-queue
[DOM mutation observers]: http://dom.spec.whatwg.org/#mutation-observers
- Android 4–4.3
- Chrome 26–34
- Firefox 14–29
- Internet Explorer 11
- iPad Safari 6–7.1
- iPhone Safari 7–7.1
- Safari 6–7
In the absense of mutation observers, there are a few browsers, and situations
like web workers in some of the above browsers, where [message channels][]
would be a useful way to avoid falling back to timers.
Message channels give direct access to the HTML [task queue][], so the ASAP
task queue would flush after any already queued rendering and IO tasks, but
without having the minimum delay imposed by timers.
However, among these browsers, Internet Explorer 10 and Safari do not reliably
dispatch messages, so they are not worth the trouble to implement.
[message channels]: http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#message-channels
[task queue]: http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#concept-task
- Internet Explorer 10
- Safair 5.0-1
- Opera 11-12
In the absense of mutation observers, these browsers and the following browsers
all fall back to using `setTimeout` and `setInterval` to ensure that a `flush`
occurs.
The implementation uses both and cancels whatever handler loses the race, since
`setTimeout` tends to occasionally skip tasks in unisolated circumstances.
Timers generally delay the flushing of ASAP's task queue for four milliseconds.
- Firefox 3–13
- Internet Explorer 6–10
- iPad Safari 4.3
- Lynx 2.8.7
## Heritage
ASAP has been factored out of the [Q][] asynchronous promise library.
It originally had a naïve implementation in terms of `setTimeout`, but
[Malte Ubl][NonBlocking] provided an insight that `postMessage` might be
useful for creating a high-priority, no-delay event dispatch hack.
Since then, Internet Explorer proposed and implemented `setImmediate`.
Robert Katić began contributing to Q by measuring the performance of
the internal implementation of `asap`, paying particular attention to
error recovery.
Domenic, Robert, and Kris Kowal collectively settled on the current strategy of
unrolling the high-priority event queue internally regardless of what strategy
we used to dispatch the potentially lower-priority flush event.
Domenic went on to make ASAP cooperate with Node.js domains.
[Q]: https://github.com/kriskowal/q
[NonBlocking]: http://www.nonblocking.io/2011/06/windownexttick.html
For further reading, Nicholas Zakas provided a thorough article on [The
Case for setImmediate][NCZ].
[NCZ]: http://www.nczonline.net/blog/2013/07/09/the-case-for-setimmediate/
Ember’s RSVP promise implementation later [adopted][RSVP ASAP] the name ASAP but
further developed the implentation.
Particularly, The `MessagePort` implementation was abandoned due to interaction
[problems with Mobile Internet Explorer][IE Problems] in favor of an
implementation backed on the newer and more reliable DOM `MutationObserver`
interface.
These changes were back-ported into this library.
[IE Problems]: https://github.com/cujojs/when/issues/197
[RSVP ASAP]: https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js
In addition, ASAP factored into `asap` and `asap/raw`, such that `asap` remained
exception-safe, but `asap/raw` provided a tight kernel that could be used for
tasks that guaranteed that they would not throw exceptions.
This core is useful for promise implementations that capture thrown errors in
rejected promises and do not need a second safety net.
At the same time, the exception handling in `asap` was factored into separate
implementations for Node.js and browsers, using the the [Browserify][Browser
Config] `browser` property in `package.json` to instruct browser module loaders
and bundlers, including [Browserify][], [Mr][], and [Mop][], to use the
browser-only implementation.
[Browser Config]: https://gist.github.com/defunctzombie/4339901
[Browserify]: https://github.com/substack/node-browserify
[Mr]: https://github.com/montagejs/mr
[Mop]: https://github.com/montagejs/mop
## License
Copyright 2009-2014 by Contributors
MIT License (enclosed)

+ 65
- 0
nodefrontend/node_modules/asap/asap.js View File

@ -0,0 +1,65 @@
"use strict";
var rawAsap = require("./raw");
var freeTasks = [];
/**
* Calls a task as soon as possible after returning, in its own event, with
* priority over IO events. An exception thrown in a task can be handled by
* `process.on("uncaughtException") or `domain.on("error")`, but will otherwise
* crash the process. If the error is handled, all subsequent tasks will
* resume.
*
* @param {{call}} task A callable object, typically a function that takes no
* arguments.
*/
module.exports = asap;
function asap(task) {
var rawTask;
if (freeTasks.length) {
rawTask = freeTasks.pop();
} else {
rawTask = new RawTask();
}
rawTask.task = task;
rawTask.domain = process.domain;
rawAsap(rawTask);
}
function RawTask() {
this.task = null;
this.domain = null;
}
RawTask.prototype.call = function () {
if (this.domain) {
this.domain.enter();
}
var threw = true;
try {
this.task.call();
threw = false;
// If the task throws an exception (presumably) Node.js restores the
// domain stack for the next event.
if (this.domain) {
this.domain.exit();
}
} finally {
// We use try/finally and a threw flag to avoid messing up stack traces
// when we catch and release errors.
if (threw) {
// In Node.js, uncaught exceptions are considered fatal errors.
// Re-throw them to interrupt flushing!
// Ensure that flushing continues if an uncaught exception is
// suppressed listening process.on("uncaughtException") or
// domain.on("error").
rawAsap.requestFlush();
}
// If the task threw an error, we do not want to exit the domain here.
// Exiting the domain would prevent the domain from catching the error.
this.task = null;
this.domain = null;
freeTasks.push(this);
}
};

+ 66
- 0
nodefrontend/node_modules/asap/browser-asap.js View File

@ -0,0 +1,66 @@
"use strict";
// rawAsap provides everything we need except exception management.
var rawAsap = require("./raw");
// RawTasks are recycled to reduce GC churn.
var freeTasks = [];
// We queue errors to ensure they are thrown in right order (FIFO).
// Array-as-queue is good enough here, since we are just dealing with exceptions.
var pendingErrors = [];
var requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError);
function throwFirstError() {
if (pendingErrors.length) {
throw pendingErrors.shift();
}
}
/**
* Calls a task as soon as possible after returning, in its own event, with priority
* over other events like animation, reflow, and repaint. An error thrown from an
* event will not interrupt, nor even substantially slow down the processing of
* other events, but will be rather postponed to a lower priority event.
* @param {{call}} task A callable object, typically a function that takes no
* arguments.
*/
module.exports = asap;
function asap(task) {
var rawTask;
if (freeTasks.length) {
rawTask = freeTasks.pop();
} else {
rawTask = new RawTask();
}
rawTask.task = task;
rawAsap(rawTask);
}
// We wrap tasks with recyclable task objects. A task object implements
// `call`, just like a function.
function RawTask() {
this.task = null;
}
// The sole purpose of wrapping the task is to catch the exception and recycle
// the task object after its single use.
RawTask.prototype.call = function () {
try {
this.task.call();
} catch (error) {
if (asap.onerror) {
// This hook exists purely for testing purposes.
// Its name will be periodically randomized to break any code that
// depends on its existence.
asap.onerror(error);
} else {
// In a web browser, exceptions are not fatal. However, to avoid
// slowing down the queue of pending tasks, we rethrow the error in a
// lower priority turn.
pendingErrors.push(error);
requestErrorThrow();
}
} finally {
this.task = null;
freeTasks[freeTasks.length] = this;
}
};

+ 223
- 0
nodefrontend/node_modules/asap/browser-raw.js View File

@ -0,0 +1,223 @@
"use strict";
// Use the fastest means possible to execute a task in its own turn, with
// priority over other events including IO, animation, reflow, and redraw
// events in browsers.
//
// An exception thrown by a task will permanently interrupt the processing of
// subsequent tasks. The higher level `asap` function ensures that if an
// exception is thrown by a task, that the task queue will continue flushing as
// soon as possible, but if you use `rawAsap` directly, you are responsible to
// either ensure that no exceptions are thrown from your task, or to manually
// call `rawAsap.requestFlush` if an exception is thrown.
module.exports = rawAsap;
function rawAsap(task) {
if (!queue.length) {
requestFlush();
flushing = true;
}
// Equivalent to push, but avoids a function call.
queue[queue.length] = task;
}
var queue = [];
// Once a flush has been requested, no further calls to `requestFlush` are
// necessary until the next `flush` completes.
var flushing = false;
// `requestFlush` is an implementation-specific method that attempts to kick
// off a `flush` event as quickly as possible. `flush` will attempt to exhaust
// the event queue before yielding to the browser's own event loop.
var requestFlush;
// The position of the next task to execute in the task queue. This is
// preserved between calls to `flush` so that it can be resumed if
// a task throws an exception.
var index = 0;
// If a task schedules additional tasks recursively, the task queue can grow
// unbounded. To prevent memory exhaustion, the task queue will periodically
// truncate already-completed tasks.
var capacity = 1024;
// The flush function processes all tasks that have been scheduled with
// `rawAsap` unless and until one of those tasks throws an exception.
// If a task throws an exception, `flush` ensures that its state will remain
// consistent and will resume where it left off when called again.
// However, `flush` does not make any arrangements to be called again if an
// exception is thrown.
function flush() {
while (index < queue.length) {
var currentIndex = index;
// Advance the index before calling the task. This ensures that we will
// begin flushing on the next task the task throws an error.
index = index + 1;
queue[currentIndex].call();
// Prevent leaking memory for long chains of recursive calls to `asap`.
// If we call `asap` within tasks scheduled by `asap`, the queue will
// grow, but to avoid an O(n) walk for every task we execute, we don't
// shift tasks off the queue after they have been executed.
// Instead, we periodically shift 1024 tasks off the queue.
if (index > capacity) {
// Manually shift all values starting at the index back to the
// beginning of the queue.
for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {
queue[scan] = queue[scan + index];
}
queue.length -= index;
index = 0;
}
}
queue.length = 0;
index = 0;
flushing = false;
}
// `requestFlush` is implemented using a strategy based on data collected from
// every available SauceLabs Selenium web driver worker at time of writing.
// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593
// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that
// have WebKitMutationObserver but not un-prefixed MutationObserver.
// Must use `global` or `self` instead of `window` to work in both frames and web
// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.
/* globals self */
var scope = typeof global !== "undefined" ? global : self;
var BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;
// MutationObservers are desirable because they have high priority and work
// reliably everywhere they are implemented.
// They are implemented in all modern browsers.
//
// - Android 4-4.3
// - Chrome 26-34
// - Firefox 14-29
// - Internet Explorer 11
// - iPad Safari 6-7.1
// - iPhone Safari 7-7.1
// - Safari 6-7
if (typeof BrowserMutationObserver === "function") {
requestFlush = makeRequestCallFromMutationObserver(flush);
// MessageChannels are desirable because they give direct access to the HTML
// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera
// 11-12, and in web workers in many engines.
// Although message channels yield to any queued rendering and IO tasks, they
// would be better than imposing the 4ms delay of timers.
// However, they do not work reliably in Internet Explorer or Safari.
// Internet Explorer 10 is the only browser that has setImmediate but does
// not have MutationObservers.
// Although setImmediate yields to the browser's renderer, it would be
// preferrable to falling back to setTimeout since it does not have
// the minimum 4ms penalty.
// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and
// Desktop to a lesser extent) that renders both setImmediate and
// MessageChannel useless for the purposes of ASAP.
// https://github.com/kriskowal/q/issues/396
// Timers are implemented universally.
// We fall back to timers in workers in most engines, and in foreground
// contexts in the following browsers.
// However, note that even this simple case requires nuances to operate in a
// broad spectrum of browsers.
//
// - Firefox 3-13
// - Internet Explorer 6-9
// - iPad Safari 4.3
// - Lynx 2.8.7
} else {
requestFlush = makeRequestCallFromTimer(flush);
}
// `requestFlush` requests that the high priority event queue be flushed as
// soon as possible.
// This is useful to prevent an error thrown in a task from stalling the event
// queue if the exception handled by Node.js’s
// `process.on("uncaughtException")` or by a domain.
rawAsap.requestFlush = requestFlush;
// To request a high priority event, we induce a mutation observer by toggling
// the text of a text node between "1" and "-1".
function makeRequestCallFromMutationObserver(callback) {
var toggle = 1;
var observer = new BrowserMutationObserver(callback);
var node = document.createTextNode("");
observer.observe(node, {characterData: true});
return function requestCall() {
toggle = -toggle;
node.data = toggle;
};
}
// The message channel technique was discovered by Malte Ubl and was the
// original foundation for this library.
// http://www.nonblocking.io/2011/06/windownexttick.html
// Safari 6.0.5 (at least) intermittently fails to create message ports on a
// page's first load. Thankfully, this version of Safari supports
// MutationObservers, so we don't need to fall back in that case.
// function makeRequestCallFromMessageChannel(callback) {
// var channel = new MessageChannel();
// channel.port1.onmessage = callback;
// return function requestCall() {
// channel.port2.postMessage(0);
// };
// }
// For reasons explained above, we are also unable to use `setImmediate`
// under any circumstances.
// Even if we were, there is another bug in Internet Explorer 10.
// It is not sufficient to assign `setImmediate` to `requestFlush` because
// `setImmediate` must be called *by name* and therefore must be wrapped in a
// closure.
// Never forget.
// function makeRequestCallFromSetImmediate(callback) {
// return function requestCall() {
// setImmediate(callback);
// };
// }
// Safari 6.0 has a problem where timers will get lost while the user is
// scrolling. This problem does not impact ASAP because Safari 6.0 supports
// mutation observers, so that implementation is used instead.
// However, if we ever elect to use timers in Safari, the prevalent work-around
// is to add a scroll event listener that calls for a flush.
// `setTimeout` does not call the passed callback if the delay is less than
// approximately 7 in web workers in Firefox 8 through 18, and sometimes not
// even then.
function makeRequestCallFromTimer(callback) {
return function requestCall() {
// We dispatch a timeout with a specified delay of 0 for engines that
// can reliably accommodate that request. This will usually be snapped
// to a 4 milisecond delay, but once we're flushing, there's no delay
// between events.
var timeoutHandle = setTimeout(handleTimer, 0);
// However, since this timer gets frequently dropped in Firefox
// workers, we enlist an interval handle that will try to fire
// an event 20 times per second until it succeeds.
var intervalHandle = setInterval(handleTimer, 50);
function handleTimer() {
// Whichever timer succeeds will cancel both timers and
// execute the callback.
clearTimeout(timeoutHandle);
clearInterval(intervalHandle);
callback();
}
};
}
// This is for `asap.js` only.
// Its name will be periodically randomized to break any code that depends on
// its existence.
rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer;
// ASAP was originally a nextTick shim included in Q. This was factored out
// into this ASAP package. It was later adapted to RSVP which made further
// amendments. These decisions, particularly to marginalize MessageChannel and
// to capture the MutationObserver implementation in a closure, were integrated
// back into ASAP proper.
// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js

+ 87
- 0
nodefrontend/node_modules/asap/package.json View File

@ -0,0 +1,87 @@
{
"_from": "asap@~2.0.6",
"_id": "asap@2.0.6",
"_inBundle": false,
"_integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
"_location": "/asap",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "asap@~2.0.6",
"name": "asap",
"escapedName": "asap",
"rawSpec": "~2.0.6",
"saveSpec": null,
"fetchSpec": "~2.0.6"
},
"_requiredBy": [
"/promise"
],
"_resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"_shasum": "e50347611d7e690943208bbdafebcbc2fb866d46",
"_spec": "asap@~2.0.6",
"_where": "/home/alpcentaur/ProjektA/PrototypeWebApp/nodefrontend/node_modules/promise",
"browser": {
"./asap": "./browser-asap.js",
"./asap.js": "./browser-asap.js",
"./raw": "./browser-raw.js",
"./raw.js": "./browser-raw.js",
"./test/domain.js": "./test/browser-domain.js"
},
"bugs": {
"url": "https://github.com/kriskowal/asap/issues"
},
"bundleDependencies": false,
"deprecated": false,
"description": "High-priority task queue for Node.js and browsers",
"devDependencies": {
"benchmark": "^1.0.0",
"events": "^1.0.1",
"jshint": "^2.5.1",
"knox": "^0.8.10",
"mr": "^2.0.5",
"opener": "^1.3.0",
"q": "^2.0.3",
"q-io": "^2.0.3",
"saucelabs": "^0.1.1",
"wd": "^0.2.21",
"weak-map": "^1.0.5"
},
"files": [
"raw.js",
"asap.js",
"browser-raw.js",
"browser-asap.js"
],
"homepage": "https://github.com/kriskowal/asap#readme",
"keywords": [
"event",
"task",
"queue"
],
"license": "MIT",
"main": "./asap.js",
"name": "asap",
"react-native": {
"domain": false
},
"repository": {
"type": "git",
"url": "git+https://github.com/kriskowal/asap.git"
},
"scripts": {
"benchmarks": "node benchmarks",
"lint": "jshint raw.js asap.js browser-raw.js browser-asap.js $(find scripts -name '*.js' | grep -v gauntlet)",
"test": "npm run lint && npm run test-node",
"test-browser": "node scripts/publish-bundle.js test/asap-test.js | xargs opener",
"test-node": "node test/asap-test.js",
"test-publish": "node scripts/publish-bundle.js test/asap-test.js | pbcopy",
"test-saucelabs": "node scripts/saucelabs.js test/asap-test.js scripts/saucelabs-spot-configurations.json",
"test-saucelabs-all": "node scripts/saucelabs.js test/asap-test.js scripts/saucelabs-all-configurations.json",
"test-saucelabs-worker": "node scripts/saucelabs-worker-test.js scripts/saucelabs-spot-configurations.json",
"test-saucelabs-worker-all": "node scripts/saucelabs-worker-test.js scripts/saucelabs-all-configurations.json",
"test-travis": "npm run lint && npm run test-node && npm run test-saucelabs && npm run test-saucelabs-worker"
},
"version": "2.0.6"
}

+ 101
- 0
nodefrontend/node_modules/asap/raw.js View File

@ -0,0 +1,101 @@
"use strict";
var domain; // The domain module is executed on demand
var hasSetImmediate = typeof setImmediate === "function";
// Use the fastest means possible to execute a task in its own turn, with
// priority over other events including network IO events in Node.js.
//
// An exception thrown by a task will permanently interrupt the processing of
// subsequent tasks. The higher level `asap` function ensures that if an
// exception is thrown by a task, that the task queue will continue flushing as
// soon as possible, but if you use `rawAsap` directly, you are responsible to
// either ensure that no exceptions are thrown from your task, or to manually
// call `rawAsap.requestFlush` if an exception is thrown.
module.exports = rawAsap;
function rawAsap(task) {
if (!queue.length) {
requestFlush();
flushing = true;
}
// Avoids a function call
queue[queue.length] = task;
}
var queue = [];
// Once a flush has been requested, no further calls to `requestFlush` are
// necessary until the next `flush` completes.
var flushing = false;
// The position of the next task to execute in the task queue. This is
// preserved between calls to `flush` so that it can be resumed if
// a task throws an exception.
var index = 0;
// If a task schedules additional tasks recursively, the task queue can grow
// unbounded. To prevent memory excaustion, the task queue will periodically
// truncate already-completed tasks.
var capacity = 1024;
// The flush function processes all tasks that have been scheduled with
// `rawAsap` unless and until one of those tasks throws an exception.
// If a task throws an exception, `flush` ensures that its state will remain
// consistent and will resume where it left off when called again.
// However, `flush` does not make any arrangements to be called again if an
// exception is thrown.
function flush() {
while (index < queue.length) {
var currentIndex = index;
// Advance the index before calling the task. This ensures that we will
// begin flushing on the next task the task throws an error.
index = index + 1;
queue[currentIndex].call();
// Prevent leaking memory for long chains of recursive calls to `asap`.
// If we call `asap` within tasks scheduled by `asap`, the queue will
// grow, but to avoid an O(n) walk for every task we execute, we don't
// shift tasks off the queue after they have been executed.
// Instead, we periodically shift 1024 tasks off the queue.
if (index > capacity) {
// Manually shift all values starting at the index back to the
// beginning of the queue.
for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {
queue[scan] = queue[scan + index];
}
queue.length -= index;
index = 0;
}
}
queue.length = 0;
index = 0;
flushing = false;
}
rawAsap.requestFlush = requestFlush;
function requestFlush() {
// Ensure flushing is not bound to any domain.
// It is not sufficient to exit the domain, because domains exist on a stack.
// To execute code outside of any domain, the following dance is necessary.
var parentDomain = process.domain;
if (parentDomain) {
if (!domain) {
// Lazy execute the domain module.
// Only employed if the user elects to use domains.
domain = require("domain");
}
domain.active = process.domain = null;
}
// `setImmediate` is slower that `process.nextTick`, but `process.nextTick`
// cannot handle recursion.
// `requestFlush` will only be called recursively from `asap.js`, to resume
// flushing after an error is thrown into a domain.
// Conveniently, `setImmediate` was introduced in the same version
// `process.nextTick` started throwing recursion errors.
if (flushing && hasSetImmediate) {
setImmediate(flush);
} else {
process.nextTick(flush);
}
if (parentDomain) {
domain.active = process.domain = parentDomain;
}
}

+ 12
- 0
nodefrontend/node_modules/promise/.github/FUNDING.yml View File

@ -0,0 +1,12 @@
# These are supported funding model platforms
github: [ForbesLindesay]# Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: npm/promise # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

+ 5
- 0
nodefrontend/node_modules/promise/.jshintrc View File

@ -0,0 +1,5 @@
{
"asi": true,
"node": true,
"strict": true
}

+ 19
- 0
nodefrontend/node_modules/promise/LICENSE View File

@ -0,0 +1,19 @@
Copyright (c) 2014 Forbes Lindesay
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

+ 256
- 0
nodefrontend/node_modules/promise/Readme.md View File

@ -0,0 +1,256 @@
<a href="https://promisesaplus.com/"><img src="https://promisesaplus.com/assets/logo-small.png" align="right" /></a>
# promise
This is a simple implementation of Promises. It is a super set of ES6 Promises designed to have readable, performant code and to provide just the extensions that are absolutely necessary for using promises today.
For detailed tutorials on its use, see www.promisejs.org
**N.B.** This promise exposes internals via underscore (`_`) prefixed properties. If you use these, your code will break with each new release.
[![travis][travis-image]][travis-url]
[![dep][dep-image]][dep-url]
[![npm][npm-image]][npm-url]
[![downloads][downloads-image]][downloads-url]
[travis-image]: https://img.shields.io/travis/then/promise.svg?style=flat
[travis-url]: https://travis-ci.org/then/promise
[dep-image]: https://img.shields.io/david/then/promise.svg?style=flat
[dep-url]: https://david-dm.org/then/promise
[npm-image]: https://img.shields.io/npm/v/promise.svg?style=flat
[npm-url]: https://npmjs.org/package/promise
[downloads-image]: https://img.shields.io/npm/dm/promise.svg?style=flat
[downloads-url]: https://npmjs.org/package/promise
## Installation
**Server:**
$ npm install promise
**Client:**
You can use browserify on the client, or use the pre-compiled script that acts as a polyfill.
```html
<script src="https://www.promisejs.org/polyfills/promise-6.1.0.js"></script>
```
Note that the [es5-shim](https://github.com/es-shims/es5-shim) must be loaded before this library to support browsers pre IE9.
```html
<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/3.4.0/es5-shim.min.js"></script>
```
## Usage
The example below shows how you can load the promise library (in a way that works on both client and server using node or browserify). It then demonstrates creating a promise from scratch. You simply call `new Promise(fn)`. There is a complete specification for what is returned by this method in [Promises/A+](http://promises-aplus.github.com/promises-spec/).
```javascript
var Promise = require('promise');
var promise = new Promise(function (resolve, reject) {
get('http://www.google.com', function (err, res) {
if (err) reject(err);
else resolve(res);
});
});
```
If you need [domains](https://nodejs.org/api/domain.html) support, you should instead use:
```js
var Promise = require('promise/domains');
```
If you are in an environment that implements `setImmediate` and don't want the optimisations provided by asap, you can use:
```js
var Promise = require('promise/setimmediate');
```
If you only want part of the features, e.g. just a pure ES6 polyfill:
```js
var Promise = require('promise/lib/es6-extensions');
// or require('promise/domains/es6-extensions');
// or require('promise/setimmediate/es6-extensions');
```
## Unhandled Rejections
By default, promises silence any unhandled rejections.
You can enable logging of unhandled ReferenceErrors and TypeErrors via:
```js
require('promise/lib/rejection-tracking').enable();
```
Due to the performance cost, you should only do this during development.
You can enable logging of all unhandled rejections if you need to debug an exception you think is being swallowed by promises:
```js
require('promise/lib/rejection-tracking').enable(
{allRejections: true}
);
```
Due to the high probability of false positives, I only recommend using this when debugging specific issues that you think may be being swallowed. For the preferred debugging method, see `Promise#done(onFulfilled, onRejected)`.
`rejection-tracking.enable(options)` takes the following options:
- allRejections (`boolean`) - track all exceptions, not just reference errors and type errors. Note that this has a high probability of resulting in false positives if your code loads data optimistically
- whitelist (`Array<ErrorConstructor>`) - this defaults to `[ReferenceError, TypeError]` but you can override it with your own list of error constructors to track.
- `onUnhandled(id, error)` and `onHandled(id, error)` - you can use these to provide your own customised display for errors. Note that if possible you should indicate that the error was a false positive if `onHandled` is called. `onHandled` is only called if `onUnhandled` has already been called.
To reduce the chance of false-positives there is a delay of up to 2 seconds before errors are logged. This means that if you attach an error handler within 2 seconds, it won't be logged as a false positive. ReferenceErrors and TypeErrors are only subject to a 100ms delay due to the higher likelihood that the error is due to programmer error.
## API
Detailed API reference docs are available at https://www.promisejs.org/api/.
Before all examples, you will need:
```js
var Promise = require('promise');
```
### new Promise(resolver)
This creates and returns a new promise. `resolver` must be a function. The `resolver` function is passed two arguments:
1. `resolve` should be called with a single argument. If it is called with a non-promise value then the promise is fulfilled with that value. If it is called with a promise (A) then the returned promise takes on the state of that new promise (A).
2. `reject` should be called with a single argument. The returned promise will be rejected with that argument.
### Static Functions
These methods are invoked by calling `Promise.methodName`.
#### Promise.resolve(value)
(deprecated aliases: `Promise.from(value)`, `Promise.cast(value)`)
Converts values and foreign promises into Promises/A+ promises. If you pass it a value then it returns a Promise for that value. If you pass it something that is close to a promise (such as a jQuery attempt at a promise) it returns a Promise that takes on the state of `value` (rejected or fulfilled).
#### Promise.reject(value)
Returns a rejected promise with the given value.
#### Promise.all(array)
Returns a promise for an array. If it is called with a single argument that `Array.isArray` then this returns a promise for a copy of that array with any promises replaced by their fulfilled values. e.g.
```js
Promise.all([Promise.resolve('a'), 'b', Promise.resolve('c')])
.then(function (res) {
assert(res[0] === 'a')
assert(res[1] === 'b')
assert(res[2] === 'c')
})
```
#### Promise.race(array)
Returns a promise that resolves or rejects with the result of the first promise to resolve/reject, e.g.
```js
var rejected = Promise.reject(new Error('Whatever'));
var fulfilled = new Promise(function (resolve) {
setTimeout(() => resolve('success'), 500);
});
var race = Promise.race([rejected, fulfilled]);
// => immediately rejected with `new Error('Whatever')`
var success = Promise.resolve('immediate success');
var first = Promise.race([success, fulfilled]);
// => immediately succeeds with `immediate success`
```
#### Promise.denodeify(fn)
_Non Standard_
Takes a function which accepts a node style callback and returns a new function that returns a promise instead.
e.g.
```javascript
var fs = require('fs')
var read = Promise.denodeify(fs.readFile)
var write = Promise.denodeify(fs.writeFile)
var p = read('foo.json', 'utf8')
.then(function (str) {
return write('foo.json', JSON.stringify(JSON.parse(str), null, ' '), 'utf8')
})
```
#### Promise.nodeify(fn)
_Non Standard_
The twin to `denodeify` is useful when you want to export an API that can be used by people who haven't learnt about the brilliance of promises yet.
```javascript
module.exports = Promise.nodeify(awesomeAPI)
function awesomeAPI(a, b) {
return download(a, b)
}
```
If the last argument passed to `module.exports` is a function, then it will be treated like a node.js callback and not parsed on to the child function, otherwise the API will just return a promise.
### Prototype Methods
These methods are invoked on a promise instance by calling `myPromise.methodName`
### Promise#then(onFulfilled, onRejected)
This method follows the [Promises/A+ spec](http://promises-aplus.github.io/promises-spec/). It explains things very clearly so I recommend you read it.
Either `onFulfilled` or `onRejected` will be called and they will not be called more than once. They will be passed a single argument and will always be called asynchronously (in the next turn of the event loop).
If the promise is fulfilled then `onFulfilled` is called. If the promise is rejected then `onRejected` is called.
The call to `.then` also returns a promise. If the handler that is called returns a promise, the promise returned by `.then` takes on the state of that returned promise. If the handler that is called returns a value that is not a promise, the promise returned by `.then` will be fulfilled with that value. If the handler that is called throws an exception then the promise returned by `.then` is rejected with that exception.
#### Promise#catch(onRejected)
Sugar for `Promise#then(null, onRejected)`, to mirror `catch` in synchronous code.
#### Promise#done(onFulfilled, onRejected)
_Non Standard_
The same semantics as `.then` except that it does not return a promise and any exceptions are re-thrown so that they can be logged (crashing the application in non-browser environments)
#### Promise#nodeify(callback)
_Non Standard_
If `callback` is `null` or `undefined` it just returns `this`. If `callback` is a function it is called with rejection reason as the first argument and result as the second argument (as per the node.js convention).
This lets you write API functions that look like:
```javascript
function awesomeAPI(foo, bar, callback) {
return internalAPI(foo, bar)
.then(parseResult)
.then(null, retryErrors)
.nodeify(callback)
}
```
People who use typical node.js style callbacks will be able to just pass a callback and get the expected behavior. The enlightened people can not pass a callback and will get awesome promises.
## Enterprise Support
Available as part of the Tidelift Subscription
The maintainers of promise and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-promise?utm_source=npm-promise&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
## License
MIT

+ 66
- 0
nodefrontend/node_modules/promise/build.js View File

@ -0,0 +1,66 @@
'use strict';
var fs = require('fs');
var rimraf = require('rimraf');
var acorn = require('acorn');
var walk = require('acorn/dist/walk');
var crypto = require('crypto');
var shasum = crypto.createHash('sha512');
fs.readdirSync(__dirname + '/src').sort().forEach(function (filename) {
shasum.update(fs.readFileSync(__dirname + '/src/' + filename, 'utf8'));
});
const names = {};
const characterSet = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
let i = characterSet.indexOf(shasum.digest('base64').replace(/[^0-9a-zA-Z]/g, '')[0]);
function getIdFor(name) {
if (names[name]) return names[name];
return names[name] = '_' + characterSet[i++ % characterSet.length]
}
function fixup(src) {
var ast = acorn.parse(src);
src = src.split('');
walk.simple(ast, {
MemberExpression: function (node) {
if (node.computed) return;
if (node.property.type !== 'Identifier') return;
if (node.property.name[0] !== '_') return;
replace(node.property, getIdFor(node.property.name));
}
});
function replace(node, str) {
for (var i = node.start; i < node.end; i++) {
src[i] = '';
}
src[node.start] = str;
}
return src.join('');
}
rimraf.sync(__dirname + '/lib/');
fs.mkdirSync(__dirname + '/lib/');
fs.readdirSync(__dirname + '/src').forEach(function (filename) {
var src = fs.readFileSync(__dirname + '/src/' + filename, 'utf8');
var out = fixup(src);
fs.writeFileSync(__dirname + '/lib/' + filename, out);
});
rimraf.sync(__dirname + '/domains/');
fs.mkdirSync(__dirname + '/domains/');
fs.readdirSync(__dirname + '/src').forEach(function (filename) {
var src = fs.readFileSync(__dirname + '/src/' + filename, 'utf8');
var out = fixup(src);
out = out.replace(/require\(\'asap\/raw\'\)/g, "require('asap')");
fs.writeFileSync(__dirname + '/domains/' + filename, out);
});
rimraf.sync(__dirname + '/setimmediate/');
fs.mkdirSync(__dirname + '/setimmediate/');
fs.readdirSync(__dirname + '/src').forEach(function (filename) {
var src = fs.readFileSync(__dirname + '/src/' + filename, 'utf8');
var out = fixup(src);
out = out.replace(/var asap \= require\(\'([a-z\/]+)\'\);/g, '');
out = out.replace(/asap/g, "setImmediate");
fs.writeFileSync(__dirname + '/setimmediate/' + filename, out);
});

+ 5
- 0
nodefrontend/node_modules/promise/core.js View File

@ -0,0 +1,5 @@
'use strict';
module.exports = require('./lib/core.js');
console.error('require("promise/core") is deprecated, use require("promise/lib/core") instead.');

+ 213
- 0
nodefrontend/node_modules/promise/domains/core.js View File

@ -0,0 +1,213 @@
'use strict';
var asap = require('asap');
function noop() {}
// States:
//
// 0 - pending
// 1 - fulfilled with _value
// 2 - rejected with _value
// 3 - adopted the state of another promise, _value
//
// once the state is no longer pending (0) it is immutable
// All `_` prefixed properties will be reduced to `_{random number}`
// at build time to obfuscate them and discourage their use.
// We don't use symbols or Object.defineProperty to fully hide them
// because the performance isn't good enough.
// to avoid using try/catch inside critical functions, we
// extract them to here.
var LAST_ERROR = null;
var IS_ERROR = {};
function getThen(obj) {
try {
return obj.then;
} catch (ex) {
LAST_ERROR = ex;
return IS_ERROR;
}
}
function tryCallOne(fn, a) {
try {
return fn(a);
} catch (ex) {
LAST_ERROR = ex;
return IS_ERROR;
}
}
function tryCallTwo(fn, a, b) {
try {
fn(a, b);
} catch (ex) {
LAST_ERROR = ex;
return IS_ERROR;
}
}
module.exports = Promise;
function Promise(fn) {
if (typeof this !== 'object') {
throw new TypeError('Promises must be constructed via new');
}
if (typeof fn !== 'function') {
throw new TypeError('Promise constructor\'s argument is not a function');
}
this._U = 0;
this._V = 0;
this._W = null;
this._X = null;
if (fn === noop) return;
doResolve(fn, this);
}
Promise._Y = null;
Promise._Z = null;
Promise._0 = noop;
Promise.prototype.then = function(onFulfilled, onRejected) {
if (this.constructor !== Promise) {
return safeThen(this, onFulfilled, onRejected);
}
var res = new Promise(noop);
handle(this, new Handler(onFulfilled, onRejected, res));
return res;
};
function safeThen(self, onFulfilled, onRejected) {
return new self.constructor(function (resolve, reject) {
var res = new Promise(noop);
res.then(resolve, reject);
handle(self, new Handler(onFulfilled, onRejected, res));
});
}
function handle(self, deferred) {
while (self._V === 3) {
self = self._W;
}
if (Promise._Y) {
Promise._Y(self);
}
if (self._V === 0) {
if (self._U === 0) {
self._U = 1;
self._X = deferred;
return;
}
if (self._U === 1) {
self._U = 2;
self._X = [self._X, deferred];
return;
}
self._X.push(deferred);
return;
}
handleResolved(self, deferred);
}
function handleResolved(self, deferred) {
asap(function() {
var cb = self._V === 1 ? deferred.onFulfilled : deferred.onRejected;
if (cb === null) {
if (self._V === 1) {
resolve(deferred.promise, self._W);
} else {
reject(deferred.promise, self._W);
}
return;
}
var ret = tryCallOne(cb, self._W);
if (ret === IS_ERROR) {
reject(deferred.promise, LAST_ERROR);
} else {
resolve(deferred.promise, ret);
}
});
}
function resolve(self, newValue) {
// Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
if (newValue === self) {
return reject(
self,
new TypeError('A promise cannot be resolved with itself.')
);
}
if (
newValue &&
(typeof newValue === 'object' || typeof newValue === 'function')
) {
var then = getThen(newValue);
if (then === IS_ERROR) {
return reject(self, LAST_ERROR);
}
if (
then === self.then &&
newValue instanceof Promise
) {
self._V = 3;
self._W = newValue;
finale(self);
return;
} else if (typeof then === 'function') {
doResolve(then.bind(newValue), self);
return;
}
}
self._V = 1;
self._W = newValue;
finale(self);
}
function reject(self, newValue) {
self._V = 2;
self._W = newValue;
if (Promise._Z) {
Promise._Z(self, newValue);
}
finale(self);
}
function finale(self) {
if (self._U === 1) {
handle(self, self._X);
self._X = null;
}
if (self._U === 2) {
for (var i = 0; i < self._X.length; i++) {
handle(self, self._X[i]);
}
self._X = null;
}
}
function Handler(onFulfilled, onRejected, promise){
this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
this.onRejected = typeof onRejected === 'function' ? onRejected : null;
this.promise = promise;
}
/**
* Take a potentially misbehaving resolver function and make sure
* onFulfilled and onRejected are only called once.
*
* Makes no guarantees about asynchrony.
*/
function doResolve(fn, promise) {
var done = false;
var res = tryCallTwo(fn, function (value) {
if (done) return;
done = true;
resolve(promise, value);
}, function (reason) {
if (done) return;
done = true;
reject(promise, reason);
});
if (!done && res === IS_ERROR) {
done = true;
reject(promise, LAST_ERROR);
}
}

+ 13
- 0
nodefrontend/node_modules/promise/domains/done.js View File

@ -0,0 +1,13 @@
'use strict';
var Promise = require('./core.js');
module.exports = Promise;
Promise.prototype.done = function (onFulfilled, onRejected) {
var self = arguments.length ? this.then.apply(this, arguments) : this;
self.then(null, function (err) {
setTimeout(function () {
throw err;
}, 0);
});
};

+ 119
- 0
nodefrontend/node_modules/promise/domains/es6-extensions.js View File

@ -0,0 +1,119 @@
'use strict';
//This file contains the ES6 extensions to the core Promises/A+ API
var Promise = require('./core.js');
module.exports = Promise;
/* Static Functions */
var TRUE = valuePromise(true);
var FALSE = valuePromise(false);
var NULL = valuePromise(null);
var UNDEFINED = valuePromise(undefined);
var ZERO = valuePromise(0);
var EMPTYSTRING = valuePromise('');
function valuePromise(value) {
var p = new Promise(Promise._0);
p._V = 1;
p._W = value;
return p;
}
Promise.resolve = function (value) {
if (value instanceof Promise) return value;
if (value === null) return NULL;
if (value === undefined) return UNDEFINED;
if (value === true) return TRUE;
if (value === false) return FALSE;
if (value === 0) return ZERO;
if (value === '') return EMPTYSTRING;
if (typeof value === 'object' || typeof value === 'function') {
try {
var then = value.then;
if (typeof then === 'function') {
return new Promise(then.bind(value));
}
} catch (ex) {
return new Promise(function (resolve, reject) {
reject(ex);
});
}
}
return valuePromise(value);
};
var iterableToArray = function (iterable) {
if (typeof Array.from === 'function') {
// ES2015+, iterables exist
iterableToArray = Array.from;
return Array.from(iterable);
}
// ES5, only arrays and array-likes exist
iterableToArray = function (x) { return Array.prototype.slice.call(x); };
return Array.prototype.slice.call(iterable);
}
Promise.all = function (arr) {
var args = iterableToArray(arr);
return new Promise(function (resolve, reject) {
if (args.length === 0) return resolve([]);
var remaining = args.length;
function res(i, val) {
if (val && (typeof val === 'object' || typeof val === 'function')) {
if (val instanceof Promise && val.then === Promise.prototype.then) {
while (val._V === 3) {
val = val._W;
}
if (val._V === 1) return res(i, val._W);
if (val._V === 2) reject(val._W);
val.then(function (val) {
res(i, val);
}, reject);
return;
} else {
var then = val.then;
if (typeof then === 'function') {
var p = new Promise(then.bind(val));
p.then(function (val) {
res(i, val);
}, reject);
return;
}
}
}
args[i] = val;
if (--remaining === 0) {
resolve(args);
}
}
for (var i = 0; i < args.length; i++) {
res(i, args[i]);
}
});
};
Promise.reject = function (value) {
return new Promise(function (resolve, reject) {
reject(value);
});
};
Promise.race = function (values) {
return new Promise(function (resolve, reject) {
iterableToArray(values).forEach(function(value){
Promise.resolve(value).then(resolve, reject);
});
});
};
/* Prototype Methods */
Promise.prototype['catch'] = function (onRejected) {
return this.then(null, onRejected);
};

+ 16
- 0
nodefrontend/node_modules/promise/domains/finally.js View File

@ -0,0 +1,16 @@
'use strict';
var Promise = require('./core.js');
module.exports = Promise;
Promise.prototype.finally = function (f) {
return this.then(function (value) {
return Promise.resolve(f()).then(function () {
return value;
});
}, function (err) {
return Promise.resolve(f()).then(function () {
throw err;
});
});
};

+ 8
- 0
nodefrontend/node_modules/promise/domains/index.js View File

@ -0,0 +1,8 @@
'use strict';
module.exports = require('./core.js');
require('./done.js');
require('./finally.js');
require('./es6-extensions.js');
require('./node-extensions.js');
require('./synchronous.js');

+ 130
- 0
nodefrontend/node_modules/promise/domains/node-extensions.js View File

@ -0,0 +1,130 @@
'use strict';
// This file contains then/promise specific extensions that are only useful
// for node.js interop
var Promise = require('./core.js');
var asap = require('asap');
module.exports = Promise;
/* Static Functions */
Promise.denodeify = function (fn, argumentCount) {
if (
typeof argumentCount === 'number' && argumentCount !== Infinity
) {
return denodeifyWithCount(fn, argumentCount);
} else {
return denodeifyWithoutCount(fn);
}
};
var callbackFn = (
'function (err, res) {' +
'if (err) { rj(err); } else { rs(res); }' +
'}'
);
function denodeifyWithCount(fn, argumentCount) {
var args = [];
for (var i = 0; i < argumentCount; i++) {
args.push('a' + i);
}
var body = [
'return function (' + args.join(',') + ') {',
'var self = this;',
'return new Promise(function (rs, rj) {',
'var res = fn.call(',
['self'].concat(args).concat([callbackFn]).join(','),
');',
'if (res &&',
'(typeof res === "object" || typeof res === "function") &&',
'typeof res.then === "function"',
') {rs(res);}',
'});',
'};'
].join('');
return Function(['Promise', 'fn'], body)(Promise, fn);
}
function denodeifyWithoutCount(fn) {
var fnLength = Math.max(fn.length - 1, 3);
var args = [];
for (var i = 0; i < fnLength; i++) {
args.push('a' + i);
}
var body = [
'return function (' + args.join(',') + ') {',
'var self = this;',
'var args;',
'var argLength = arguments.length;',
'if (arguments.length > ' + fnLength + ') {',
'args = new Array(arguments.length + 1);',
'for (var i = 0; i < arguments.length; i++) {',
'args[i] = arguments[i];',
'}',
'}',
'return new Promise(function (rs, rj) {',
'var cb = ' + callbackFn + ';',
'var res;',
'switch (argLength) {',
args.concat(['extra']).map(function (_, index) {
return (
'case ' + (index) + ':' +
'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' +
'break;'
);
}).join(''),
'default:',
'args[argLength] = cb;',
'res = fn.apply(self, args);',
'}',
'if (res &&',
'(typeof res === "object" || typeof res === "function") &&',
'typeof res.then === "function"',
') {rs(res);}',
'});',
'};'
].join('');
return Function(
['Promise', 'fn'],
body
)(Promise, fn);
}
Promise.nodeify = function (fn) {
return function () {
var args = Array.prototype.slice.call(arguments);
var callback =
typeof args[args.length - 1] === 'function' ? args.pop() : null;
var ctx = this;
try {
return fn.apply(this, arguments).nodeify(callback, ctx);
} catch (ex) {
if (callback === null || typeof callback == 'undefined') {
return new Promise(function (resolve, reject) {
reject(ex);
});
} else {
asap(function () {
callback.call(ctx, ex);
})
}
}
}
};
Promise.prototype.nodeify = function (callback, ctx) {
if (typeof callback != 'function') return this;
this.then(function (value) {
asap(function () {
callback.call(ctx, null, value);
});
}, function (err) {
asap(function () {
callback.call(ctx, err);
});
});
};

+ 113
- 0
nodefrontend/node_modules/promise/domains/rejection-tracking.js View File

@ -0,0 +1,113 @@
'use strict';
var Promise = require('./core');
var DEFAULT_WHITELIST = [
ReferenceError,
TypeError,
RangeError
];
var enabled = false;
exports.disable = disable;
function disable() {
enabled = false;
Promise._Y = null;
Promise._Z = null;
}
exports.enable = enable;
function enable(options) {
options = options || {};
if (enabled) disable();
enabled = true;
var id = 0;
var displayId = 0;
var rejections = {};
Promise._Y = function (promise) {
if (
promise._V === 2 && // IS REJECTED
rejections[promise._1]
) {
if (rejections[promise._1].logged) {
onHandled(promise._1);
} else {
clearTimeout(rejections[promise._1].timeout);
}
delete rejections[promise._1];
}
};
Promise._Z = function (promise, err) {
if (promise._U === 0) { // not yet handled
promise._1 = id++;
rejections[promise._1] = {
displayId: null,
error: err,
timeout: setTimeout(
onUnhandled.bind(null, promise._1),
// For reference errors and type errors, this almost always
// means the programmer made a mistake, so log them after just
// 100ms
// otherwise, wait 2 seconds to see if they get handled
matchWhitelist(err, DEFAULT_WHITELIST)
? 100
: 2000
),
logged: false
};
}
};
function onUnhandled(id) {
if (
options.allRejections ||
matchWhitelist(
rejections[id].error,
options.whitelist || DEFAULT_WHITELIST
)
) {
rejections[id].displayId = displayId++;
if (options.onUnhandled) {
rejections[id].logged = true;
options.onUnhandled(
rejections[id].displayId,
rejections[id].error
);
} else {
rejections[id].logged = true;
logError(
rejections[id].displayId,
rejections[id].error
);
}
}
}
function onHandled(id) {
if (rejections[id].logged) {
if (options.onHandled) {
options.onHandled(rejections[id].displayId, rejections[id].error);
} else if (!rejections[id].onUnhandled) {
console.warn(
'Promise Rejection Handled (id: ' + rejections[id].displayId + '):'
);
console.warn(
' This means you can ignore any previous messages of the form "Possible Unhandled Promise Rejection" with id ' +
rejections[id].displayId + '.'
);
}
}
}
}
function logError(id, error) {
console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):');
var errStr = (error && (error.stack || error)) + '';
errStr.split('\n').forEach(function (line) {
console.warn(' ' + line);
});
}
function matchWhitelist(error, list) {
return list.some(function (cls) {
return error instanceof cls;
});
}

+ 62
- 0
nodefrontend/node_modules/promise/domains/synchronous.js View File

@ -0,0 +1,62 @@
'use strict';
var Promise = require('./core.js');
module.exports = Promise;
Promise.enableSynchronous = function () {
Promise.prototype.isPending = function() {
return this.getState() == 0;
};
Promise.prototype.isFulfilled = function() {
return this.getState() == 1;
};
Promise.prototype.isRejected = function() {
return this.getState() == 2;
};
Promise.prototype.getValue = function () {
if (this._V === 3) {
return this._W.getValue();
}
if (!this.isFulfilled()) {
throw new Error('Cannot get a value of an unfulfilled promise.');
}
return this._W;
};
Promise.prototype.getReason = function () {
if (this._V === 3) {
return this._W.getReason();
}
if (!this.isRejected()) {
throw new Error('Cannot get a rejection reason of a non-rejected promise.');
}
return this._W;
};
Promise.prototype.getState = function () {
if (this._V === 3) {
return this._W.getState();
}
if (this._V === -1 || this._V === -2) {
return 0;
}
return this._V;
};
};
Promise.disableSynchronous = function() {
Promise.prototype.isPending = undefined;
Promise.prototype.isFulfilled = undefined;
Promise.prototype.isRejected = undefined;
Promise.prototype.getValue = undefined;
Promise.prototype.getReason = undefined;
Promise.prototype.getState = undefined;
};

+ 246
- 0
nodefrontend/node_modules/promise/index.d.ts View File

@ -0,0 +1,246 @@
/**
* Represents the completion of an asynchronous operation
*/
interface ThenPromise<T> extends Promise<T> {
/**
* Attaches callbacks for the resolution and/or rejection of the ThenPromise.
* @param onfulfilled The callback to execute when the ThenPromise is resolved.
* @param onrejected The callback to execute when the ThenPromise is rejected.
* @returns A ThenPromise for the completion of which ever callback is executed.
*/
then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): ThenPromise<TResult1 | TResult2>;
/**
* Attaches a callback for only the rejection of the ThenPromise.
* @param onrejected The callback to execute when the ThenPromise is rejected.
* @returns A ThenPromise for the completion of the callback.
*/
catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): ThenPromise<T | TResult>;
// Extensions specific to then/promise
/**
* Attaches callbacks for the resolution and/or rejection of the ThenPromise, without returning a new promise.
* @param onfulfilled The callback to execute when the ThenPromise is resolved.
* @param onrejected The callback to execute when the ThenPromise is rejected.
*/
done(onfulfilled?: ((value: T) => any) | undefined | null, onrejected?: ((reason: any) => any) | undefined | null): void;
/**
* Calls a node.js style callback. If none is provided, the promise is returned.
*/
nodeify(callback: void | null): ThenPromise<T>;
nodeify(callback: (err: Error, value: T) => void): void;
}
interface ThenPromiseConstructor {
/**
* A reference to the prototype.
*/
readonly prototype: ThenPromise<any>;
/**
* Creates a new ThenPromise.
* @param executor A callback used to initialize the promise. This callback is passed two arguments:
* a resolve callback used resolve the promise with a value or the result of another promise,
* and a reject callback used to reject the promise with a provided reason or error.
*/
new <T>(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => any): ThenPromise<T>;
/**
* Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
* resolve, or rejected when any ThenPromise is rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
all<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>, T10 | PromiseLike<T10>]): ThenPromise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>;
/**
* Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
* resolve, or rejected when any ThenPromise is rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
all<T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>]): ThenPromise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>;
/**
* Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
* resolve, or rejected when any ThenPromise is rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
all<T1, T2, T3, T4, T5, T6, T7, T8>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>]): ThenPromise<[T1, T2, T3, T4, T5, T6, T7, T8]>;
/**
* Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
* resolve, or rejected when any ThenPromise is rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
all<T1, T2, T3, T4, T5, T6, T7>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>]): ThenPromise<[T1, T2, T3, T4, T5, T6, T7]>;
/**
* Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
* resolve, or rejected when any ThenPromise is rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
all<T1, T2, T3, T4, T5, T6>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>]): ThenPromise<[T1, T2, T3, T4, T5, T6]>;
/**
* Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
* resolve, or rejected when any ThenPromise is rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
all<T1, T2, T3, T4, T5>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>, T5 | PromiseLike<T5>]): ThenPromise<[T1, T2, T3, T4, T5]>;
/**
* Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
* resolve, or rejected when any ThenPromise is rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
all<T1, T2, T3, T4>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike <T4>]): ThenPromise<[T1, T2, T3, T4]>;
/**
* Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
* resolve, or rejected when any ThenPromise is rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
all<T1, T2, T3>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>]): ThenPromise<[T1, T2, T3]>;
/**
* Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
* resolve, or rejected when any ThenPromise is rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
all<T1, T2>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>]): ThenPromise<[T1, T2]>;
/**
* Creates a ThenPromise that is resolved with an array of results when all of the provided Promises
* resolve, or rejected when any ThenPromise is rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
all<T>(values: (T | PromiseLike<T>)[]): ThenPromise<T[]>;
/**
* Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
* or rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
race<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>, T10 | PromiseLike<T10>]): ThenPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10>;
/**
* Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
* or rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
race<T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>]): ThenPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9>;
/**
* Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
* or rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
race<T1, T2, T3, T4, T5, T6, T7, T8>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>]): ThenPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8>;
/**
* Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
* or rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
race<T1, T2, T3, T4, T5, T6, T7>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>]): ThenPromise<T1 | T2 | T3 | T4 | T5 | T6 | T7>;
/**
* Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
* or rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
race<T1, T2, T3, T4, T5, T6>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>]): ThenPromise<T1 | T2 | T3 | T4 | T5 | T6>;
/**
* Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
* or rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
race<T1, T2, T3, T4, T5>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>]): ThenPromise<T1 | T2 | T3 | T4 | T5>;
/**
* Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
* or rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
race<T1, T2, T3, T4>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>]): ThenPromise<T1 | T2 | T3 | T4>;
/**
* Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
* or rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
race<T1, T2, T3>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>]): ThenPromise<T1 | T2 | T3>;
/**
* Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
* or rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
race<T1, T2>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>]): ThenPromise<T1 | T2>;
/**
* Creates a ThenPromise that is resolved or rejected when any of the provided Promises are resolved
* or rejected.
* @param values An array of Promises.
* @returns A new ThenPromise.
*/
race<T>(values: (T | PromiseLike<T>)[]): ThenPromise<T>;
/**
* Creates a new rejected promise for the provided reason.
* @param reason The reason the promise was rejected.
* @returns A new rejected ThenPromise.
*/
reject(reason: any): ThenPromise<never>;
/**
* Creates a new rejected promise for the provided reason.
* @param reason The reason the promise was rejected.
* @returns A new rejected ThenPromise.
*/
reject<T>(reason: any): ThenPromise<T>;
/**
* Creates a new resolved promise for the provided value.
* @param value A promise.
* @returns A promise whose internal state matches the provided promise.
*/
resolve<T>(value: T | PromiseLike<T>): ThenPromise<T>;
/**
* Creates a new resolved promise .
* @returns A resolved promise.
*/
resolve(): ThenPromise<void>;
// Extensions specific to then/promise
denodeify: (fn: Function) => (...args: any[]) => ThenPromise<any>;
nodeify: (fn: Function) => Function;
}
declare var ThenPromise: ThenPromiseConstructor;
export = ThenPromise;

+ 3
- 0
nodefrontend/node_modules/promise/index.js View File

@ -0,0 +1,3 @@
'use strict';
module.exports = require('./lib')

+ 52
- 0
nodefrontend/node_modules/promise/index.js.flow View File

@ -0,0 +1,52 @@
// @flow
declare class ThenPromise<+R> extends Promise<R> {
constructor(callback: (
resolve: (result: Promise<R> | R) => void,
reject: (error: any) => void
) => mixed): void;
then(onFulfill: null | void, onReject: null | void): ThenPromise<R>;
then<U>(
onFulfill: null | void,
onReject: (error: any) => Promise<U> | U
): ThenPromise<R | U>;
then<U>(
onFulfill: (value: R) => Promise<U> | U,
onReject: null | void | ((error: any) => Promise<U> | U)
): ThenPromise<U>;
catch(onReject: null | void): ThenPromise<R>;
catch<U>(
onReject: (error: any) => Promise<U> | U
): ThenPromise<R | U>;
// Extensions specific to then/promise
/**
* Attaches callbacks for the resolution and/or rejection of the ThenPromise, without returning a new promise.
* @param onfulfilled The callback to execute when the ThenPromise is resolved.
* @param onrejected The callback to execute when the ThenPromise is rejected.
*/
done(onfulfilled?: (value: R) => any, onrejected?: (reason: any) => any): void;
/**
* Calls a node.js style callback. If none is provided, the promise is returned.
*/
nodeify(callback: void | null): ThenPromise<R>;
nodeify(callback: (err: Error, value: R) => void): void;
static resolve<T>(object: Promise<T> | T): ThenPromise<T>;
static reject<T>(error?: any): ThenPromise<T>;
static all<T: Iterable<mixed>>(promises: T): ThenPromise<$TupleMap<T, typeof $await>>;
static race<T, Elem: Promise<T> | T>(promises: Iterable<Elem>): ThenPromise<T>;
// Extensions specific to then/promise
static denodeify(fn: Function): (...args: any[]) => ThenPromise<any>;
static nodeify(fn: Function): Function;
}
module.exports = ThenPromise;

+ 213
- 0
nodefrontend/node_modules/promise/lib/core.js View File

@ -0,0 +1,213 @@
'use strict';
var asap = require('asap/raw');
function noop() {}
// States:
//
// 0 - pending
// 1 - fulfilled with _value
// 2 - rejected with _value
// 3 - adopted the state of another promise, _value
//
// once the state is no longer pending (0) it is immutable
// All `_` prefixed properties will be reduced to `_{random number}`
// at build time to obfuscate them and discourage their use.
// We don't use symbols or Object.defineProperty to fully hide them
// because the performance isn't good enough.
// to avoid using try/catch inside critical functions, we
// extract them to here.
var LAST_ERROR = null;
var IS_ERROR = {};
function getThen(obj) {
try {
return obj.then;
} catch (ex) {
LAST_ERROR = ex;
return IS_ERROR;
}
}
function tryCallOne(fn, a) {
try {
return fn(a);
} catch (ex) {
LAST_ERROR = ex;
return IS_ERROR;
}
}
function tryCallTwo(fn, a, b) {
try {
fn(a, b);
} catch (ex) {
LAST_ERROR = ex;
return IS_ERROR;
}
}
module.exports = Promise;
function Promise(fn) {
if (typeof this !== 'object') {
throw new TypeError('Promises must be constructed via new');
}
if (typeof fn !== 'function') {
throw new TypeError('Promise constructor\'s argument is not a function');
}
this._U = 0;
this._V = 0;
this._W = null;
this._X = null;
if (fn === noop) return;
doResolve(fn, this);
}
Promise._Y = null;
Promise._Z = null;
Promise._0 = noop;
Promise.prototype.then = function(onFulfilled, onRejected) {
if (this.constructor !== Promise) {
return safeThen(this, onFulfilled, onRejected);
}
var res = new Promise(noop);
handle(this, new Handler(onFulfilled, onRejected, res));
return res;
};
function safeThen(self, onFulfilled, onRejected) {
return new self.constructor(function (resolve, reject) {
var res = new Promise(noop);
res.then(resolve, reject);
handle(self, new Handler(onFulfilled, onRejected, res));
});
}
function handle(self, deferred) {
while (self._V === 3) {
self = self._W;
}
if (Promise._Y) {
Promise._Y(self);
}
if (self._V === 0) {
if (self._U === 0) {
self._U = 1;
self._X = deferred;
return;
}
if (self._U === 1) {
self._U = 2;
self._X = [self._X, deferred];
return;
}
self._X.push(deferred);
return;
}
handleResolved(self, deferred);
}
function handleResolved(self, deferred) {
asap(function() {
var cb = self._V === 1 ? deferred.onFulfilled : deferred.onRejected;
if (cb === null) {
if (self._V === 1) {
resolve(deferred.promise, self._W);
} else {
reject(deferred.promise, self._W);
}
return;
}
var ret = tryCallOne(cb, self._W);
if (ret === IS_ERROR) {
reject(deferred.promise, LAST_ERROR);
} else {
resolve(deferred.promise, ret);
}
});
}
function resolve(self, newValue) {
// Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
if (newValue === self) {
return reject(
self,
new TypeError('A promise cannot be resolved with itself.')
);
}
if (
newValue &&
(typeof newValue === 'object' || typeof newValue === 'function')
) {
var then = getThen(newValue);
if (then === IS_ERROR) {
return reject(self, LAST_ERROR);
}
if (
then === self.then &&
newValue instanceof Promise
) {
self._V = 3;
self._W = newValue;
finale(self);
return;
} else if (typeof then === 'function') {
doResolve(then.bind(newValue), self);
return;
}
}
self._V = 1;
self._W = newValue;
finale(self);
}
function reject(self, newValue) {
self._V = 2;
self._W = newValue;
if (Promise._Z) {
Promise._Z(self, newValue);
}
finale(self);
}
function finale(self) {
if (self._U === 1) {
handle(self, self._X);
self._X = null;
}
if (self._U === 2) {
for (var i = 0; i < self._X.length; i++) {
handle(self, self._X[i]);
}
self._X = null;
}
}
function Handler(onFulfilled, onRejected, promise){
this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
this.onRejected = typeof onRejected === 'function' ? onRejected : null;
this.promise = promise;
}
/**
* Take a potentially misbehaving resolver function and make sure
* onFulfilled and onRejected are only called once.
*
* Makes no guarantees about asynchrony.
*/
function doResolve(fn, promise) {
var done = false;
var res = tryCallTwo(fn, function (value) {
if (done) return;
done = true;
resolve(promise, value);
}, function (reason) {
if (done) return;
done = true;
reject(promise, reason);
});
if (!done && res === IS_ERROR) {
done = true;
reject(promise, LAST_ERROR);
}
}

+ 13
- 0
nodefrontend/node_modules/promise/lib/done.js View File

@ -0,0 +1,13 @@
'use strict';
var Promise = require('./core.js');
module.exports = Promise;
Promise.prototype.done = function (onFulfilled, onRejected) {
var self = arguments.length ? this.then.apply(this, arguments) : this;
self.then(null, function (err) {
setTimeout(function () {
throw err;
}, 0);
});
};

+ 119
- 0
nodefrontend/node_modules/promise/lib/es6-extensions.js View File

@ -0,0 +1,119 @@
'use strict';
//This file contains the ES6 extensions to the core Promises/A+ API
var Promise = require('./core.js');
module.exports = Promise;
/* Static Functions */
var TRUE = valuePromise(true);
var FALSE = valuePromise(false);
var NULL = valuePromise(null);
var UNDEFINED = valuePromise(undefined);
var ZERO = valuePromise(0);
var EMPTYSTRING = valuePromise('');
function valuePromise(value) {
var p = new Promise(Promise._0);
p._V = 1;
p._W = value;
return p;
}
Promise.resolve = function (value) {
if (value instanceof Promise) return value;
if (value === null) return NULL;
if (value === undefined) return UNDEFINED;
if (value === true) return TRUE;
if (value === false) return FALSE;
if (value === 0) return ZERO;
if (value === '') return EMPTYSTRING;
if (typeof value === 'object' || typeof value === 'function') {
try {
var then = value.then;
if (typeof then === 'function') {
return new Promise(then.bind(value));
}
} catch (ex) {
return new Promise(function (resolve, reject) {
reject(ex);
});
}
}
return valuePromise(value);
};
var iterableToArray = function (iterable) {
if (typeof Array.from === 'function') {
// ES2015+, iterables exist
iterableToArray = Array.from;
return Array.from(iterable);
}
// ES5, only arrays and array-likes exist
iterableToArray = function (x) { return Array.prototype.slice.call(x); };
return Array.prototype.slice.call(iterable);
}
Promise.all = function (arr) {
var args = iterableToArray(arr);
return new Promise(function (resolve, reject) {
if (args.length === 0) return resolve([]);
var remaining = args.length;
function res(i, val) {
if (val && (typeof val === 'object' || typeof val === 'function')) {
if (val instanceof Promise && val.then === Promise.prototype.then) {
while (val._V === 3) {
val = val._W;
}
if (val._V === 1) return res(i, val._W);
if (val._V === 2) reject(val._W);
val.then(function (val) {
res(i, val);
}, reject);
return;
} else {
var then = val.then;
if (typeof then === 'function') {
var p = new Promise(then.bind(val));
p.then(function (val) {
res(i, val);
}, reject);
return;
}
}
}
args[i] = val;
if (--remaining === 0) {
resolve(args);
}
}
for (var i = 0; i < args.length; i++) {
res(i, args[i]);
}
});
};
Promise.reject = function (value) {
return new Promise(function (resolve, reject) {
reject(value);
});
};
Promise.race = function (values) {
return new Promise(function (resolve, reject) {
iterableToArray(values).forEach(function(value){
Promise.resolve(value).then(resolve, reject);
});
});
};
/* Prototype Methods */
Promise.prototype['catch'] = function (onRejected) {
return this.then(null, onRejected);
};

+ 16
- 0
nodefrontend/node_modules/promise/lib/finally.js View File

@ -0,0 +1,16 @@
'use strict';
var Promise = require('./core.js');
module.exports = Promise;
Promise.prototype.finally = function (f) {
return this.then(function (value) {
return Promise.resolve(f()).then(function () {
return value;
});
}, function (err) {
return Promise.resolve(f()).then(function () {
throw err;
});
});
};

+ 8
- 0
nodefrontend/node_modules/promise/lib/index.js View File

@ -0,0 +1,8 @@
'use strict';
module.exports = require('./core.js');
require('./done.js');
require('./finally.js');
require('./es6-extensions.js');
require('./node-extensions.js');
require('./synchronous.js');

+ 130
- 0
nodefrontend/node_modules/promise/lib/node-extensions.js View File

@ -0,0 +1,130 @@
'use strict';
// This file contains then/promise specific extensions that are only useful
// for node.js interop
var Promise = require('./core.js');
var asap = require('asap');
module.exports = Promise;
/* Static Functions */
Promise.denodeify = function (fn, argumentCount) {
if (
typeof argumentCount === 'number' && argumentCount !== Infinity
) {
return denodeifyWithCount(fn, argumentCount);
} else {
return denodeifyWithoutCount(fn);
}
};
var callbackFn = (
'function (err, res) {' +
'if (err) { rj(err); } else { rs(res); }' +
'}'
);
function denodeifyWithCount(fn, argumentCount) {
var args = [];
for (var i = 0; i < argumentCount; i++) {
args.push('a' + i);
}
var body = [
'return function (' + args.join(',') + ') {',
'var self = this;',
'return new Promise(function (rs, rj) {',
'var res = fn.call(',
['self'].concat(args).concat([callbackFn]).join(','),
');',
'if (res &&',
'(typeof res === "object" || typeof res === "function") &&',
'typeof res.then === "function"',
') {rs(res);}',
'});',
'};'
].join('');
return Function(['Promise', 'fn'], body)(Promise, fn);
}
function denodeifyWithoutCount(fn) {
var fnLength = Math.max(fn.length - 1, 3);
var args = [];
for (var i = 0; i < fnLength; i++) {
args.push('a' + i);
}
var body = [
'return function (' + args.join(',') + ') {',
'var self = this;',
'var args;',
'var argLength = arguments.length;',
'if (arguments.length > ' + fnLength + ') {',
'args = new Array(arguments.length + 1);',
'for (var i = 0; i < arguments.length; i++) {',
'args[i] = arguments[i];',
'}',
'}',
'return new Promise(function (rs, rj) {',
'var cb = ' + callbackFn + ';',
'var res;',
'switch (argLength) {',
args.concat(['extra']).map(function (_, index) {
return (
'case ' + (index) + ':' +
'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' +
'break;'
);
}).join(''),
'default:',
'args[argLength] = cb;',
'res = fn.apply(self, args);',
'}',
'if (res &&',
'(typeof res === "object" || typeof res === "function") &&',
'typeof res.then === "function"',
') {rs(res);}',
'});',
'};'
].join('');
return Function(
['Promise', 'fn'],
body
)(Promise, fn);
}
Promise.nodeify = function (fn) {
return function () {
var args = Array.prototype.slice.call(arguments);
var callback =
typeof args[args.length - 1] === 'function' ? args.pop() : null;
var ctx = this;
try {
return fn.apply(this, arguments).nodeify(callback, ctx);
} catch (ex) {
if (callback === null || typeof callback == 'undefined') {
return new Promise(function (resolve, reject) {
reject(ex);
});
} else {
asap(function () {
callback.call(ctx, ex);
})
}
}
}
};
Promise.prototype.nodeify = function (callback, ctx) {
if (typeof callback != 'function') return this;
this.then(function (value) {
asap(function () {
callback.call(ctx, null, value);
});
}, function (err) {
asap(function () {
callback.call(ctx, err);
});
});
};

+ 113
- 0
nodefrontend/node_modules/promise/lib/rejection-tracking.js View File

@ -0,0 +1,113 @@
'use strict';
var Promise = require('./core');
var DEFAULT_WHITELIST = [
ReferenceError,
TypeError,
RangeError
];
var enabled = false;
exports.disable = disable;
function disable() {
enabled = false;
Promise._Y = null;
Promise._Z = null;
}
exports.enable = enable;
function enable(options) {
options = options || {};
if (enabled) disable();
enabled = true;
var id = 0;
var displayId = 0;
var rejections = {};
Promise._Y = function (promise) {
if (
promise._V === 2 && // IS REJECTED
rejections[promise._1]
) {
if (rejections[promise._1].logged) {
onHandled(promise._1);
} else {
clearTimeout(rejections[promise._1].timeout);
}
delete rejections[promise._1];
}
};
Promise._Z = function (promise, err) {
if (promise._U === 0) { // not yet handled
promise._1 = id++;
rejections[promise._1] = {
displayId: null,
error: err,
timeout: setTimeout(
onUnhandled.bind(null, promise._1),
// For reference errors and type errors, this almost always
// means the programmer made a mistake, so log them after just
// 100ms
// otherwise, wait 2 seconds to see if they get handled
matchWhitelist(err, DEFAULT_WHITELIST)
? 100
: 2000
),
logged: false
};
}
};
function onUnhandled(id) {
if (
options.allRejections ||
matchWhitelist(
rejections[id].error,
options.whitelist || DEFAULT_WHITELIST
)
) {
rejections[id].displayId = displayId++;
if (options.onUnhandled) {
rejections[id].logged = true;
options.onUnhandled(
rejections[id].displayId,
rejections[id].error
);
} else {
rejections[id].logged = true;
logError(
rejections[id].displayId,
rejections[id].error
);
}
}
}
function onHandled(id) {
if (rejections[id].logged) {
if (options.onHandled) {
options.onHandled(rejections[id].displayId, rejections[id].error);
} else if (!rejections[id].onUnhandled) {
console.warn(
'Promise Rejection Handled (id: ' + rejections[id].displayId + '):'
);
console.warn(
' This means you can ignore any previous messages of the form "Possible Unhandled Promise Rejection" with id ' +
rejections[id].displayId + '.'
);
}
}
}
}
function logError(id, error) {
console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):');
var errStr = (error && (error.stack || error)) + '';
errStr.split('\n').forEach(function (line) {
console.warn(' ' + line);
});
}
function matchWhitelist(error, list) {
return list.some(function (cls) {
return error instanceof cls;
});
}

+ 62
- 0
nodefrontend/node_modules/promise/lib/synchronous.js View File

@ -0,0 +1,62 @@
'use strict';
var Promise = require('./core.js');
module.exports = Promise;
Promise.enableSynchronous = function () {
Promise.prototype.isPending = function() {
return this.getState() == 0;
};
Promise.prototype.isFulfilled = function() {
return this.getState() == 1;
};
Promise.prototype.isRejected = function() {
return this.getState() == 2;
};
Promise.prototype.getValue = function () {
if (this._V === 3) {
return this._W.getValue();
}
if (!this.isFulfilled()) {
throw new Error('Cannot get a value of an unfulfilled promise.');
}
return this._W;
};
Promise.prototype.getReason = function () {
if (this._V === 3) {
return this._W.getReason();
}
if (!this.isRejected()) {
throw new Error('Cannot get a rejection reason of a non-rejected promise.');
}
return this._W;
};
Promise.prototype.getState = function () {
if (this._V === 3) {
return this._W.getState();
}
if (this._V === -1 || this._V === -2) {
return 0;
}
return this._V;
};
};
Promise.disableSynchronous = function() {
Promise.prototype.isPending = undefined;
Promise.prototype.isFulfilled = undefined;
Promise.prototype.isRejected = undefined;
Promise.prototype.getValue = undefined;
Promise.prototype.getReason = undefined;
Promise.prototype.getState = undefined;
};

+ 67
- 0
nodefrontend/node_modules/promise/package.json View File

@ -0,0 +1,67 @@
{
"_from": "promise",
"_id": "promise@8.1.0",
"_inBundle": false,
"_integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==",
"_location": "/promise",
"_phantomChildren": {},
"_requested": {
"type": "tag",
"registry": true,
"raw": "promise",
"name": "promise",
"escapedName": "promise",
"rawSpec": "",
"saveSpec": null,
"fetchSpec": "latest"
},
"_requiredBy": [
"#USER",
"/"
],
"_resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz",
"_shasum": "697c25c3dfe7435dd79fcd58c38a135888eaf05e",
"_spec": "promise",
"_where": "/home/alpcentaur/ProjektA/PrototypeWebApp/nodefrontend",
"author": {
"name": "ForbesLindesay"
},
"bugs": {
"url": "https://github.com/then/promise/issues"
},
"bundleDependencies": false,
"dependencies": {
"asap": "~2.0.6"
},
"deprecated": false,
"description": "Bare bones Promises/A+ implementation",
"devDependencies": {
"acorn": "^1.0.1",
"better-assert": "*",
"istanbul": "^0.3.13",
"mocha": "*",
"promises-aplus-tests": "*",
"rimraf": "^2.3.2"
},
"homepage": "https://github.com/then/promise#readme",
"license": "MIT",
"main": "index.js",
"name": "promise",
"repository": {
"type": "git",
"url": "git+https://github.com/then/promise.git"
},
"scripts": {
"coverage": "istanbul cover node_modules/mocha/bin/_mocha -- --bail --timeout 200 --slow 99999 -R dot",
"prepublish": "node build",
"pretest": "node build",
"pretest-extensions": "node build",
"pretest-memory-leak": "node build",
"pretest-resolve": "node build",
"test": "mocha --bail --timeout 200 --slow 99999 -R dot && npm run test-memory-leak",
"test-extensions": "mocha test/extensions-tests.js --timeout 200 --slow 999999",
"test-memory-leak": "node --expose-gc test/memory-leak.js",
"test-resolve": "mocha test/resolver-tests.js --timeout 200 --slow 999999"
},
"version": "8.1.0"
}

+ 12
- 0
nodefrontend/node_modules/promise/polyfill-done.js View File

@ -0,0 +1,12 @@
// should work in any browser without browserify
if (typeof Promise.prototype.done !== 'function') {
Promise.prototype.done = function (onFulfilled, onRejected) {
var self = arguments.length ? this.then.apply(this, arguments) : this
self.then(null, function (err) {
setTimeout(function () {
throw err
}, 0)
})
}
}

+ 10
- 0
nodefrontend/node_modules/promise/polyfill.js View File

@ -0,0 +1,10 @@
// not "use strict" so we can declare global "Promise"
var asap = require('asap');
if (typeof Promise === 'undefined') {
Promise = require('./lib/core.js')
require('./lib/es6-extensions.js')
}
require('./polyfill-done.js');

+ 213
- 0
nodefrontend/node_modules/promise/setimmediate/core.js View File

@ -0,0 +1,213 @@
'use strict';
function noop() {}
// States:
//
// 0 - pending
// 1 - fulfilled with _value
// 2 - rejected with _value
// 3 - adopted the state of another promise, _value
//
// once the state is no longer pending (0) it is immutable
// All `_` prefixed properties will be reduced to `_{random number}`
// at build time to obfuscate them and discourage their use.
// We don't use symbols or Object.defineProperty to fully hide them
// because the performance isn't good enough.
// to avoid using try/catch inside critical functions, we
// extract them to here.
var LAST_ERROR = null;
var IS_ERROR = {};
function getThen(obj) {
try {
return obj.then;
} catch (ex) {
LAST_ERROR = ex;
return IS_ERROR;
}
}
function tryCallOne(fn, a) {
try {
return fn(a);
} catch (ex) {
LAST_ERROR = ex;
return IS_ERROR;
}
}
function tryCallTwo(fn, a, b) {
try {
fn(a, b);
} catch (ex) {
LAST_ERROR = ex;
return IS_ERROR;
}
}
module.exports = Promise;
function Promise(fn) {
if (typeof this !== 'object') {
throw new TypeError('Promises must be constructed via new');
}
if (typeof fn !== 'function') {
throw new TypeError('Promise constructor\'s argument is not a function');
}
this._U = 0;
this._V = 0;
this._W = null;
this._X = null;
if (fn === noop) return;
doResolve(fn, this);
}
Promise._Y = null;
Promise._Z = null;
Promise._0 = noop;
Promise.prototype.then = function(onFulfilled, onRejected) {
if (this.constructor !== Promise) {
return safeThen(this, onFulfilled, onRejected);
}
var res = new Promise(noop);
handle(this, new Handler(onFulfilled, onRejected, res));
return res;
};
function safeThen(self, onFulfilled, onRejected) {
return new self.constructor(function (resolve, reject) {
var res = new Promise(noop);
res.then(resolve, reject);
handle(self, new Handler(onFulfilled, onRejected, res));
});
}
function handle(self, deferred) {
while (self._V === 3) {
self = self._W;
}
if (Promise._Y) {
Promise._Y(self);
}
if (self._V === 0) {
if (self._U === 0) {
self._U = 1;
self._X = deferred;
return;
}
if (self._U === 1) {
self._U = 2;
self._X = [self._X, deferred];
return;
}
self._X.push(deferred);
return;
}
handleResolved(self, deferred);
}
function handleResolved(self, deferred) {
setImmediate(function() {
var cb = self._V === 1 ? deferred.onFulfilled : deferred.onRejected;
if (cb === null) {
if (self._V === 1) {
resolve(deferred.promise, self._W);
} else {
reject(deferred.promise, self._W);
}
return;
}
var ret = tryCallOne(cb, self._W);
if (ret === IS_ERROR) {
reject(deferred.promise, LAST_ERROR);
} else {
resolve(deferred.promise, ret);
}
});
}
function resolve(self, newValue) {
// Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
if (newValue === self) {
return reject(
self,
new TypeError('A promise cannot be resolved with itself.')
);
}
if (
newValue &&
(typeof newValue === 'object' || typeof newValue === 'function')
) {
var then = getThen(newValue);
if (then === IS_ERROR) {
return reject(self, LAST_ERROR);
}
if (
then === self.then &&
newValue instanceof Promise
) {
self._V = 3;
self._W = newValue;
finale(self);
return;
} else if (typeof then === 'function') {
doResolve(then.bind(newValue), self);
return;
}
}
self._V = 1;
self._W = newValue;
finale(self);
}
function reject(self, newValue) {
self._V = 2;
self._W = newValue;
if (Promise._Z) {
Promise._Z(self, newValue);
}
finale(self);
}
function finale(self) {
if (self._U === 1) {
handle(self, self._X);
self._X = null;
}
if (self._U === 2) {
for (var i = 0; i < self._X.length; i++) {
handle(self, self._X[i]);
}
self._X = null;
}
}
function Handler(onFulfilled, onRejected, promise){
this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
this.onRejected = typeof onRejected === 'function' ? onRejected : null;
this.promise = promise;
}
/**
* Take a potentially misbehaving resolver function and make sure
* onFulfilled and onRejected are only called once.
*
* Makes no guarantees about asynchrony.
*/
function doResolve(fn, promise) {
var done = false;
var res = tryCallTwo(fn, function (value) {
if (done) return;
done = true;
resolve(promise, value);
}, function (reason) {
if (done) return;
done = true;
reject(promise, reason);
});
if (!done && res === IS_ERROR) {
done = true;
reject(promise, LAST_ERROR);
}
}

+ 13
- 0
nodefrontend/node_modules/promise/setimmediate/done.js View File

@ -0,0 +1,13 @@
'use strict';
var Promise = require('./core.js');
module.exports = Promise;
Promise.prototype.done = function (onFulfilled, onRejected) {
var self = arguments.length ? this.then.apply(this, arguments) : this;
self.then(null, function (err) {
setTimeout(function () {
throw err;
}, 0);
});
};

+ 119
- 0
nodefrontend/node_modules/promise/setimmediate/es6-extensions.js View File

@ -0,0 +1,119 @@
'use strict';
//This file contains the ES6 extensions to the core Promises/A+ API
var Promise = require('./core.js');
module.exports = Promise;
/* Static Functions */
var TRUE = valuePromise(true);
var FALSE = valuePromise(false);
var NULL = valuePromise(null);
var UNDEFINED = valuePromise(undefined);
var ZERO = valuePromise(0);
var EMPTYSTRING = valuePromise('');
function valuePromise(value) {
var p = new Promise(Promise._0);
p._V = 1;
p._W = value;
return p;
}
Promise.resolve = function (value) {
if (value instanceof Promise) return value;
if (value === null) return NULL;
if (value === undefined) return UNDEFINED;
if (value === true) return TRUE;
if (value === false) return FALSE;
if (value === 0) return ZERO;
if (value === '') return EMPTYSTRING;
if (typeof value === 'object' || typeof value === 'function') {
try {
var then = value.then;
if (typeof then === 'function') {
return new Promise(then.bind(value));
}
} catch (ex) {
return new Promise(function (resolve, reject) {
reject(ex);
});
}
}
return valuePromise(value);
};
var iterableToArray = function (iterable) {
if (typeof Array.from === 'function') {
// ES2015+, iterables exist
iterableToArray = Array.from;
return Array.from(iterable);
}
// ES5, only arrays and array-likes exist
iterableToArray = function (x) { return Array.prototype.slice.call(x); };
return Array.prototype.slice.call(iterable);
}
Promise.all = function (arr) {
var args = iterableToArray(arr);
return new Promise(function (resolve, reject) {
if (args.length === 0) return resolve([]);
var remaining = args.length;
function res(i, val) {
if (val && (typeof val === 'object' || typeof val === 'function')) {
if (val instanceof Promise && val.then === Promise.prototype.then) {
while (val._V === 3) {
val = val._W;
}
if (val._V === 1) return res(i, val._W);
if (val._V === 2) reject(val._W);
val.then(function (val) {
res(i, val);
}, reject);
return;
} else {
var then = val.then;
if (typeof then === 'function') {
var p = new Promise(then.bind(val));
p.then(function (val) {
res(i, val);
}, reject);
return;
}
}
}
args[i] = val;
if (--remaining === 0) {
resolve(args);
}
}
for (var i = 0; i < args.length; i++) {
res(i, args[i]);
}
});
};
Promise.reject = function (value) {
return new Promise(function (resolve, reject) {
reject(value);
});
};
Promise.race = function (values) {
return new Promise(function (resolve, reject) {
iterableToArray(values).forEach(function(value){
Promise.resolve(value).then(resolve, reject);
});
});
};
/* Prototype Methods */
Promise.prototype['catch'] = function (onRejected) {
return this.then(null, onRejected);
};

+ 16
- 0
nodefrontend/node_modules/promise/setimmediate/finally.js View File

@ -0,0 +1,16 @@
'use strict';
var Promise = require('./core.js');
module.exports = Promise;
Promise.prototype.finally = function (f) {
return this.then(function (value) {
return Promise.resolve(f()).then(function () {
return value;
});
}, function (err) {
return Promise.resolve(f()).then(function () {
throw err;
});
});
};

+ 8
- 0
nodefrontend/node_modules/promise/setimmediate/index.js View File

@ -0,0 +1,8 @@
'use strict';
module.exports = require('./core.js');
require('./done.js');
require('./finally.js');
require('./es6-extensions.js');
require('./node-extensions.js');
require('./synchronous.js');

+ 130
- 0
nodefrontend/node_modules/promise/setimmediate/node-extensions.js View File

@ -0,0 +1,130 @@
'use strict';
// This file contains then/promise specific extensions that are only useful
// for node.js interop
var Promise = require('./core.js');
module.exports = Promise;
/* Static Functions */
Promise.denodeify = function (fn, argumentCount) {
if (
typeof argumentCount === 'number' && argumentCount !== Infinity
) {
return denodeifyWithCount(fn, argumentCount);
} else {
return denodeifyWithoutCount(fn);
}
};
var callbackFn = (
'function (err, res) {' +
'if (err) { rj(err); } else { rs(res); }' +
'}'
);
function denodeifyWithCount(fn, argumentCount) {
var args = [];
for (var i = 0; i < argumentCount; i++) {
args.push('a' + i);
}
var body = [
'return function (' + args.join(',') + ') {',
'var self = this;',
'return new Promise(function (rs, rj) {',
'var res = fn.call(',
['self'].concat(args).concat([callbackFn]).join(','),
');',
'if (res &&',
'(typeof res === "object" || typeof res === "function") &&',
'typeof res.then === "function"',
') {rs(res);}',
'});',
'};'
].join('');
return Function(['Promise', 'fn'], body)(Promise, fn);
}
function denodeifyWithoutCount(fn) {
var fnLength = Math.max(fn.length - 1, 3);
var args = [];
for (var i = 0; i < fnLength; i++) {
args.push('a' + i);
}
var body = [
'return function (' + args.join(',') + ') {',
'var self = this;',
'var args;',
'var argLength = arguments.length;',
'if (arguments.length > ' + fnLength + ') {',
'args = new Array(arguments.length + 1);',
'for (var i = 0; i < arguments.length; i++) {',
'args[i] = arguments[i];',
'}',
'}',
'return new Promise(function (rs, rj) {',
'var cb = ' + callbackFn + ';',
'var res;',
'switch (argLength) {',
args.concat(['extra']).map(function (_, index) {
return (
'case ' + (index) + ':' +
'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' +
'break;'
);
}).join(''),
'default:',
'args[argLength] = cb;',
'res = fn.apply(self, args);',
'}',
'if (res &&',
'(typeof res === "object" || typeof res === "function") &&',
'typeof res.then === "function"',
') {rs(res);}',
'});',
'};'
].join('');
return Function(
['Promise', 'fn'],
body
)(Promise, fn);
}
Promise.nodeify = function (fn) {
return function () {
var args = Array.prototype.slice.call(arguments);
var callback =
typeof args[args.length - 1] === 'function' ? args.pop() : null;
var ctx = this;
try {
return fn.apply(this, arguments).nodeify(callback, ctx);
} catch (ex) {
if (callback === null || typeof callback == 'undefined') {
return new Promise(function (resolve, reject) {
reject(ex);
});
} else {
setImmediate(function () {
callback.call(ctx, ex);
})
}
}
}
};
Promise.prototype.nodeify = function (callback, ctx) {
if (typeof callback != 'function') return this;
this.then(function (value) {
setImmediate(function () {
callback.call(ctx, null, value);
});
}, function (err) {
setImmediate(function () {
callback.call(ctx, err);
});
});
};

+ 113
- 0
nodefrontend/node_modules/promise/setimmediate/rejection-tracking.js View File

@ -0,0 +1,113 @@
'use strict';
var Promise = require('./core');
var DEFAULT_WHITELIST = [
ReferenceError,
TypeError,
RangeError
];
var enabled = false;
exports.disable = disable;
function disable() {
enabled = false;
Promise._Y = null;
Promise._Z = null;
}
exports.enable = enable;
function enable(options) {
options = options || {};
if (enabled) disable();
enabled = true;
var id = 0;
var displayId = 0;
var rejections = {};
Promise._Y = function (promise) {
if (
promise._V === 2 && // IS REJECTED
rejections[promise._1]
) {
if (rejections[promise._1].logged) {
onHandled(promise._1);
} else {
clearTimeout(rejections[promise._1].timeout);
}
delete rejections[promise._1];
}
};
Promise._Z = function (promise, err) {
if (promise._U === 0) { // not yet handled
promise._1 = id++;
rejections[promise._1] = {
displayId: null,
error: err,
timeout: setTimeout(
onUnhandled.bind(null, promise._1),
// For reference errors and type errors, this almost always
// means the programmer made a mistake, so log them after just
// 100ms
// otherwise, wait 2 seconds to see if they get handled
matchWhitelist(err, DEFAULT_WHITELIST)
? 100
: 2000
),
logged: false
};
}
};
function onUnhandled(id) {
if (
options.allRejections ||
matchWhitelist(
rejections[id].error,
options.whitelist || DEFAULT_WHITELIST
)
) {
rejections[id].displayId = displayId++;
if (options.onUnhandled) {
rejections[id].logged = true;
options.onUnhandled(
rejections[id].displayId,
rejections[id].error
);
} else {
rejections[id].logged = true;
logError(
rejections[id].displayId,
rejections[id].error
);
}
}
}
function onHandled(id) {
if (rejections[id].logged) {
if (options.onHandled) {
options.onHandled(rejections[id].displayId, rejections[id].error);
} else if (!rejections[id].onUnhandled) {
console.warn(
'Promise Rejection Handled (id: ' + rejections[id].displayId + '):'
);
console.warn(
' This means you can ignore any previous messages of the form "Possible Unhandled Promise Rejection" with id ' +
rejections[id].displayId + '.'
);
}
}
}
}
function logError(id, error) {
console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):');
var errStr = (error && (error.stack || error)) + '';
errStr.split('\n').forEach(function (line) {
console.warn(' ' + line);
});
}
function matchWhitelist(error, list) {
return list.some(function (cls) {
return error instanceof cls;
});
}

+ 62
- 0
nodefrontend/node_modules/promise/setimmediate/synchronous.js View File

@ -0,0 +1,62 @@
'use strict';
var Promise = require('./core.js');
module.exports = Promise;
Promise.enableSynchronous = function () {
Promise.prototype.isPending = function() {
return this.getState() == 0;
};
Promise.prototype.isFulfilled = function() {
return this.getState() == 1;
};
Promise.prototype.isRejected = function() {
return this.getState() == 2;
};
Promise.prototype.getValue = function () {
if (this._V === 3) {
return this._W.getValue();
}
if (!this.isFulfilled()) {
throw new Error('Cannot get a value of an unfulfilled promise.');
}
return this._W;
};
Promise.prototype.getReason = function () {
if (this._V === 3) {
return this._W.getReason();
}
if (!this.isRejected()) {
throw new Error('Cannot get a rejection reason of a non-rejected promise.');
}
return this._W;
};
Promise.prototype.getState = function () {
if (this._V === 3) {
return this._W.getState();
}
if (this._V === -1 || this._V === -2) {
return 0;
}
return this._V;
};
};
Promise.disableSynchronous = function() {
Promise.prototype.isPending = undefined;
Promise.prototype.isFulfilled = undefined;
Promise.prototype.isRejected = undefined;
Promise.prototype.getValue = undefined;
Promise.prototype.getReason = undefined;
Promise.prototype.getState = undefined;
};

+ 213
- 0
nodefrontend/node_modules/promise/src/core.js View File

@ -0,0 +1,213 @@
'use strict';
var asap = require('asap/raw');
function noop() {}
// States:
//
// 0 - pending
// 1 - fulfilled with _value
// 2 - rejected with _value
// 3 - adopted the state of another promise, _value
//
// once the state is no longer pending (0) it is immutable
// All `_` prefixed properties will be reduced to `_{random number}`
// at build time to obfuscate them and discourage their use.
// We don't use symbols or Object.defineProperty to fully hide them
// because the performance isn't good enough.
// to avoid using try/catch inside critical functions, we
// extract them to here.
var LAST_ERROR = null;
var IS_ERROR = {};
function getThen(obj) {
try {
return obj.then;
} catch (ex) {
LAST_ERROR = ex;
return IS_ERROR;
}
}
function tryCallOne(fn, a) {
try {
return fn(a);
} catch (ex) {
LAST_ERROR = ex;
return IS_ERROR;
}
}
function tryCallTwo(fn, a, b) {
try {
fn(a, b);
} catch (ex) {
LAST_ERROR = ex;
return IS_ERROR;
}
}
module.exports = Promise;
function Promise(fn) {
if (typeof this !== 'object') {
throw new TypeError('Promises must be constructed via new');
}
if (typeof fn !== 'function') {
throw new TypeError('Promise constructor\'s argument is not a function');
}
this._deferredState = 0;
this._state = 0;
this._value = null;
this._deferreds = null;
if (fn === noop) return;
doResolve(fn, this);
}
Promise._onHandle = null;
Promise._onReject = null;
Promise._noop = noop;
Promise.prototype.then = function(onFulfilled, onRejected) {
if (this.constructor !== Promise) {
return safeThen(this, onFulfilled, onRejected);
}
var res = new Promise(noop);
handle(this, new Handler(onFulfilled, onRejected, res));
return res;
};
function safeThen(self, onFulfilled, onRejected) {
return new self.constructor(function (resolve, reject) {
var res = new Promise(noop);
res.then(resolve, reject);
handle(self, new Handler(onFulfilled, onRejected, res));
});
}
function handle(self, deferred) {
while (self._state === 3) {
self = self._value;
}
if (Promise._onHandle) {
Promise._onHandle(self);
}
if (self._state === 0) {
if (self._deferredState === 0) {
self._deferredState = 1;
self._deferreds = deferred;
return;
}
if (self._deferredState === 1) {
self._deferredState = 2;
self._deferreds = [self._deferreds, deferred];
return;
}
self._deferreds.push(deferred);
return;
}
handleResolved(self, deferred);
}
function handleResolved(self, deferred) {
asap(function() {
var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;
if (cb === null) {
if (self._state === 1) {
resolve(deferred.promise, self._value);
} else {
reject(deferred.promise, self._value);
}
return;
}
var ret = tryCallOne(cb, self._value);
if (ret === IS_ERROR) {
reject(deferred.promise, LAST_ERROR);
} else {
resolve(deferred.promise, ret);
}
});
}
function resolve(self, newValue) {
// Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
if (newValue === self) {
return reject(
self,
new TypeError('A promise cannot be resolved with itself.')
);
}
if (
newValue &&
(typeof newValue === 'object' || typeof newValue === 'function')
) {
var then = getThen(newValue);
if (then === IS_ERROR) {
return reject(self, LAST_ERROR);
}
if (
then === self.then &&
newValue instanceof Promise
) {
self._state = 3;
self._value = newValue;
finale(self);
return;
} else if (typeof then === 'function') {
doResolve(then.bind(newValue), self);
return;
}
}
self._state = 1;
self._value = newValue;
finale(self);
}
function reject(self, newValue) {
self._state = 2;
self._value = newValue;
if (Promise._onReject) {
Promise._onReject(self, newValue);
}
finale(self);
}
function finale(self) {
if (self._deferredState === 1) {
handle(self, self._deferreds);
self._deferreds = null;
}
if (self._deferredState === 2) {
for (var i = 0; i < self._deferreds.length; i++) {
handle(self, self._deferreds[i]);
}
self._deferreds = null;
}
}
function Handler(onFulfilled, onRejected, promise){
this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
this.onRejected = typeof onRejected === 'function' ? onRejected : null;
this.promise = promise;
}
/**
* Take a potentially misbehaving resolver function and make sure
* onFulfilled and onRejected are only called once.
*
* Makes no guarantees about asynchrony.
*/
function doResolve(fn, promise) {
var done = false;
var res = tryCallTwo(fn, function (value) {
if (done) return;
done = true;
resolve(promise, value);
}, function (reason) {
if (done) return;
done = true;
reject(promise, reason);
});
if (!done && res === IS_ERROR) {
done = true;
reject(promise, LAST_ERROR);
}
}

+ 13
- 0
nodefrontend/node_modules/promise/src/done.js View File

@ -0,0 +1,13 @@
'use strict';
var Promise = require('./core.js');
module.exports = Promise;
Promise.prototype.done = function (onFulfilled, onRejected) {
var self = arguments.length ? this.then.apply(this, arguments) : this;
self.then(null, function (err) {
setTimeout(function () {
throw err;
}, 0);
});
};

+ 119
- 0
nodefrontend/node_modules/promise/src/es6-extensions.js View File

@ -0,0 +1,119 @@
'use strict';
//This file contains the ES6 extensions to the core Promises/A+ API
var Promise = require('./core.js');
module.exports = Promise;
/* Static Functions */
var TRUE = valuePromise(true);
var FALSE = valuePromise(false);
var NULL = valuePromise(null);
var UNDEFINED = valuePromise(undefined);
var ZERO = valuePromise(0);
var EMPTYSTRING = valuePromise('');
function valuePromise(value) {
var p = new Promise(Promise._noop);
p._state = 1;
p._value = value;
return p;
}
Promise.resolve = function (value) {
if (value instanceof Promise) return value;
if (value === null) return NULL;
if (value === undefined) return UNDEFINED;
if (value === true) return TRUE;
if (value === false) return FALSE;
if (value === 0) return ZERO;
if (value === '') return EMPTYSTRING;
if (typeof value === 'object' || typeof value === 'function') {
try {
var then = value.then;
if (typeof then === 'function') {
return new Promise(then.bind(value));
}
} catch (ex) {
return new Promise(function (resolve, reject) {
reject(ex);
});
}
}
return valuePromise(value);
};
var iterableToArray = function (iterable) {
if (typeof Array.from === 'function') {
// ES2015+, iterables exist
iterableToArray = Array.from;
return Array.from(iterable);
}
// ES5, only arrays and array-likes exist
iterableToArray = function (x) { return Array.prototype.slice.call(x); };
return Array.prototype.slice.call(iterable);
}
Promise.all = function (arr) {
var args = iterableToArray(arr);
return new Promise(function (resolve, reject) {
if (args.length === 0) return resolve([]);
var remaining = args.length;
function res(i, val) {
if (val && (typeof val === 'object' || typeof val === 'function')) {
if (val instanceof Promise && val.then === Promise.prototype.then) {
while (val._state === 3) {
val = val._value;
}
if (val._state === 1) return res(i, val._value);
if (val._state === 2) reject(val._value);
val.then(function (val) {
res(i, val);
}, reject);
return;
} else {
var then = val.then;
if (typeof then === 'function') {
var p = new Promise(then.bind(val));
p.then(function (val) {
res(i, val);
}, reject);
return;
}
}
}
args[i] = val;
if (--remaining === 0) {
resolve(args);
}
}
for (var i = 0; i < args.length; i++) {
res(i, args[i]);
}
});
};
Promise.reject = function (value) {
return new Promise(function (resolve, reject) {
reject(value);
});
};
Promise.race = function (values) {
return new Promise(function (resolve, reject) {
iterableToArray(values).forEach(function(value){
Promise.resolve(value).then(resolve, reject);
});
});
};
/* Prototype Methods */
Promise.prototype['catch'] = function (onRejected) {
return this.then(null, onRejected);
};

+ 16
- 0
nodefrontend/node_modules/promise/src/finally.js View File

@ -0,0 +1,16 @@
'use strict';
var Promise = require('./core.js');
module.exports = Promise;
Promise.prototype.finally = function (f) {
return this.then(function (value) {
return Promise.resolve(f()).then(function () {
return value;
});
}, function (err) {
return Promise.resolve(f()).then(function () {
throw err;
});
});
};

+ 8
- 0
nodefrontend/node_modules/promise/src/index.js View File

@ -0,0 +1,8 @@
'use strict';
module.exports = require('./core.js');
require('./done.js');
require('./finally.js');
require('./es6-extensions.js');
require('./node-extensions.js');
require('./synchronous.js');

+ 130
- 0
nodefrontend/node_modules/promise/src/node-extensions.js View File

@ -0,0 +1,130 @@
'use strict';
// This file contains then/promise specific extensions that are only useful
// for node.js interop
var Promise = require('./core.js');
var asap = require('asap');
module.exports = Promise;
/* Static Functions */
Promise.denodeify = function (fn, argumentCount) {
if (
typeof argumentCount === 'number' && argumentCount !== Infinity
) {
return denodeifyWithCount(fn, argumentCount);
} else {
return denodeifyWithoutCount(fn);
}
};
var callbackFn = (
'function (err, res) {' +
'if (err) { rj(err); } else { rs(res); }' +
'}'
);
function denodeifyWithCount(fn, argumentCount) {
var args = [];
for (var i = 0; i < argumentCount; i++) {
args.push('a' + i);
}
var body = [
'return function (' + args.join(',') + ') {',
'var self = this;',
'return new Promise(function (rs, rj) {',
'var res = fn.call(',
['self'].concat(args).concat([callbackFn]).join(','),
');',
'if (res &&',
'(typeof res === "object" || typeof res === "function") &&',
'typeof res.then === "function"',
') {rs(res);}',
'});',
'};'
].join('');
return Function(['Promise', 'fn'], body)(Promise, fn);
}
function denodeifyWithoutCount(fn) {
var fnLength = Math.max(fn.length - 1, 3);
var args = [];
for (var i = 0; i < fnLength; i++) {
args.push('a' + i);
}
var body = [
'return function (' + args.join(',') + ') {',
'var self = this;',
'var args;',
'var argLength = arguments.length;',
'if (arguments.length > ' + fnLength + ') {',
'args = new Array(arguments.length + 1);',
'for (var i = 0; i < arguments.length; i++) {',
'args[i] = arguments[i];',
'}',
'}',
'return new Promise(function (rs, rj) {',
'var cb = ' + callbackFn + ';',
'var res;',
'switch (argLength) {',
args.concat(['extra']).map(function (_, index) {
return (
'case ' + (index) + ':' +
'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' +
'break;'
);
}).join(''),
'default:',
'args[argLength] = cb;',
'res = fn.apply(self, args);',
'}',
'if (res &&',
'(typeof res === "object" || typeof res === "function") &&',
'typeof res.then === "function"',
') {rs(res);}',
'});',
'};'
].join('');
return Function(
['Promise', 'fn'],
body
)(Promise, fn);
}
Promise.nodeify = function (fn) {
return function () {
var args = Array.prototype.slice.call(arguments);
var callback =
typeof args[args.length - 1] === 'function' ? args.pop() : null;
var ctx = this;
try {
return fn.apply(this, arguments).nodeify(callback, ctx);
} catch (ex) {
if (callback === null || typeof callback == 'undefined') {
return new Promise(function (resolve, reject) {
reject(ex);
});
} else {
asap(function () {
callback.call(ctx, ex);
})
}
}
}
};
Promise.prototype.nodeify = function (callback, ctx) {
if (typeof callback != 'function') return this;
this.then(function (value) {
asap(function () {
callback.call(ctx, null, value);
});
}, function (err) {
asap(function () {
callback.call(ctx, err);
});
});
};

+ 113
- 0
nodefrontend/node_modules/promise/src/rejection-tracking.js View File

@ -0,0 +1,113 @@
'use strict';
var Promise = require('./core');
var DEFAULT_WHITELIST = [
ReferenceError,
TypeError,
RangeError
];
var enabled = false;
exports.disable = disable;
function disable() {
enabled = false;
Promise._onHandle = null;
Promise._onReject = null;
}
exports.enable = enable;
function enable(options) {
options = options || {};
if (enabled) disable();
enabled = true;
var id = 0;
var displayId = 0;
var rejections = {};
Promise._onHandle = function (promise) {
if (
promise._state === 2 && // IS REJECTED
rejections[promise._rejectionId]
) {
if (rejections[promise._rejectionId].logged) {
onHandled(promise._rejectionId);
} else {
clearTimeout(rejections[promise._rejectionId].timeout);
}
delete rejections[promise._rejectionId];
}
};
Promise._onReject = function (promise, err) {
if (promise._deferredState === 0) { // not yet handled
promise._rejectionId = id++;
rejections[promise._rejectionId] = {
displayId: null,
error: err,
timeout: setTimeout(
onUnhandled.bind(null, promise._rejectionId),
// For reference errors and type errors, this almost always
// means the programmer made a mistake, so log them after just
// 100ms
// otherwise, wait 2 seconds to see if they get handled
matchWhitelist(err, DEFAULT_WHITELIST)
? 100
: 2000
),
logged: false
};
}
};
function onUnhandled(id) {
if (
options.allRejections ||
matchWhitelist(
rejections[id].error,
options.whitelist || DEFAULT_WHITELIST
)
) {
rejections[id].displayId = displayId++;
if (options.onUnhandled) {
rejections[id].logged = true;
options.onUnhandled(
rejections[id].displayId,
rejections[id].error
);
} else {
rejections[id].logged = true;
logError(
rejections[id].displayId,
rejections[id].error
);
}
}
}
function onHandled(id) {
if (rejections[id].logged) {
if (options.onHandled) {
options.onHandled(rejections[id].displayId, rejections[id].error);
} else if (!rejections[id].onUnhandled) {
console.warn(
'Promise Rejection Handled (id: ' + rejections[id].displayId + '):'
);
console.warn(
' This means you can ignore any previous messages of the form "Possible Unhandled Promise Rejection" with id ' +
rejections[id].displayId + '.'
);
}
}
}
}
function logError(id, error) {
console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):');
var errStr = (error && (error.stack || error)) + '';
errStr.split('\n').forEach(function (line) {
console.warn(' ' + line);
});
}
function matchWhitelist(error, list) {
return list.some(function (cls) {
return error instanceof cls;
});
}

+ 62
- 0
nodefrontend/node_modules/promise/src/synchronous.js View File

@ -0,0 +1,62 @@
'use strict';
var Promise = require('./core.js');
module.exports = Promise;
Promise.enableSynchronous = function () {
Promise.prototype.isPending = function() {
return this.getState() == 0;
};
Promise.prototype.isFulfilled = function() {
return this.getState() == 1;
};
Promise.prototype.isRejected = function() {
return this.getState() == 2;
};
Promise.prototype.getValue = function () {
if (this._state === 3) {
return this._value.getValue();
}
if (!this.isFulfilled()) {
throw new Error('Cannot get a value of an unfulfilled promise.');
}
return this._value;
};
Promise.prototype.getReason = function () {
if (this._state === 3) {
return this._value.getReason();
}
if (!this.isRejected()) {
throw new Error('Cannot get a rejection reason of a non-rejected promise.');
}
return this._value;
};
Promise.prototype.getState = function () {
if (this._state === 3) {
return this._value.getState();
}
if (this._state === -1 || this._state === -2) {
return 0;
}
return this._state;
};
};
Promise.disableSynchronous = function() {
Promise.prototype.isPending = undefined;
Promise.prototype.isFulfilled = undefined;
Promise.prototype.isRejected = undefined;
Promise.prototype.getValue = undefined;
Promise.prototype.getReason = undefined;
Promise.prototype.getState = undefined;
};

+ 20
- 0
nodefrontend/node_modules/python-shell/CHANGELOG.md View File

@ -0,0 +1,20 @@
## 1.0.8
* @joaoe fixed a bug with pythonshell not working with unset std streams
* https://github.com/extrabacon/python-shell/milestone/9
## 1.0.7
* default python path updated to py on windows
## 1.0.4
* added getVersionSync
## 0.0.3
* fixed buffering in `PythonShell.receive`, fixing [#1](https://github.com/extrabacon/python-shell/issues/1)
## 0.0.2
* improved documentation
## 0.0.1
* initial version
* independent module moved from [extrabacon/pyspreadsheet](https://github.com/extrabacon/pyspreadsheet)

+ 358
- 0
nodefrontend/node_modules/python-shell/README.md View File

@ -0,0 +1,358 @@
# [python-shell](https://www.npmjs.com/package/python-shell) [![Build status](https://ci.appveyor.com/api/projects/status/m8e3h53vvxg5wb2q/branch/master?svg=true)](https://ci.appveyor.com/project/Almenon/python-shell/branch/master) [![codecov](https://codecov.io/gh/extrabacon/python-shell/branch/master/graph/badge.svg)](https://codecov.io/gh/extrabacon/python-shell)
<!-- chage above url accroding to repo -->
A simple way to run Python scripts from Node.js with basic but efficient inter-process communication and better error handling.
## Features
+ Reliably spawn Python scripts in a child process
+ Built-in text, JSON and binary modes
+ Custom parsers and formatters
+ Simple and efficient data transfers through stdin and stdout streams
+ Extended stack traces when an error is thrown
## Installation
```bash
npm install python-shell
```
To run the tests:
```bash
npm test
```
## Documentation
### Running python code:
```typescript
import {PythonShell} from 'python-shell';
PythonShell.runString('x=1+1;print(x)', null, function (err) {
if (err) throw err;
console.log('finished');
});
```
If the script exits with a non-zero code, an error will be thrown.
Note the use of imports! If you're not using typescript ಠ_ಠ you can [still get imports to work with this guide](https://github.com/extrabacon/python-shell/issues/148#issuecomment-419120209).
Or you can use require like so:
```javascript
let {PythonShell} = require('python-shell')
```
### Running a Python script:
```typescript
import {PythonShell} from 'python-shell';
PythonShell.run('my_script.py', null, function (err) {
if (err) throw err;
console.log('finished');
});
```
If the script exits with a non-zero code, an error will be thrown.
### Running a Python script with arguments and options:
```typescript
import {PythonShell} from 'python-shell';
let options = {
mode: 'text',
pythonPath: 'path/to/python',
pythonOptions: ['-u'], // get print results in real-time
scriptPath: 'path/to/my/scripts',
args: ['value1', 'value2', 'value3']
};
PythonShell.run('my_script.py', options, function (err, results) {
if (err) throw err;
// results is an array consisting of messages collected during execution
console.log('results: %j', results);
});
```
### Exchanging data between Node and Python:
```typescript
import {PythonShell} from 'python-shell';
let pyshell = new PythonShell('my_script.py');
// sends a message to the Python script via stdin
pyshell.send('hello');
pyshell.on('message', function (message) {
// received a message sent from the Python script (a simple "print" statement)
console.log(message);
});
// end the input stream and allow the process to exit
pyshell.end(function (err,code,signal) {
if (err) throw err;
console.log('The exit code was: ' + code);
console.log('The exit signal was: ' + signal);
console.log('finished');
});
```
Use `.send(message)` to send a message to the Python script. Attach the `message` event to listen to messages emitted from the Python script.
Use `options.mode` to quickly setup how data is sent and received between your Node and Python applications.
* use `text` mode for exchanging lines of text ending with a [newline character](http://hayne.net/MacDev/Notes/unixFAQ.html#endOfLine).
* use `json` mode for exchanging JSON fragments
* use `binary` mode for anything else (data is sent and received as-is)
Stderr always uses text mode.
For more details and examples including Python source code, take a look at the tests.
### Error Handling and extended stack traces
An error will be thrown if the process exits with a non-zero exit code. Additionally, if "stderr" contains a formatted Python traceback, the error is augmented with Python exception details including a concatenated stack trace.
Sample error with traceback (from test/python/error.py):
```
Traceback (most recent call last):
File "test/python/error.py", line 6, in <module>
divide_by_zero()
File "test/python/error.py", line 4, in divide_by_zero
print 1/0
ZeroDivisionError: integer division or modulo by zero
```
would result into the following error:
```typescript
{ [Error: ZeroDivisionError: integer division or modulo by zero]
traceback: 'Traceback (most recent call last):\n File "test/python/error.py", line 6, in <module>\n divide_by_zero()\n File "test/python/error.py", line 4, in divide_by_zero\n print 1/0\nZeroDivisionError: integer division or modulo by zero\n',
executable: 'python',
options: null,
script: 'test/python/error.py',
args: null,
exitCode: 1 }
```
and `err.stack` would look like this:
```
Error: ZeroDivisionError: integer division or modulo by zero
at PythonShell.parseError (python-shell/index.js:131:17)
at ChildProcess.<anonymous> (python-shell/index.js:67:28)
at ChildProcess.EventEmitter.emit (events.js:98:17)
at Process.ChildProcess._handle.onexit (child_process.js:797:12)
----- Python Traceback -----
File "test/python/error.py", line 6, in <module>
divide_by_zero()
File "test/python/error.py", line 4, in divide_by_zero
print 1/0
```
## API Reference
#### `PythonShell(script, options)` constructor
Creates an instance of `PythonShell` and starts the Python process
* `script`: the path of the script to execute
* `options`: the execution options, consisting of:
* `mode`: Configures how data is exchanged when data flows through stdin and stdout. The possible values are:
* `text`: each line of data (ending with "\n") is emitted as a message (default)
* `json`: each line of data (ending with "\n") is parsed as JSON and emitted as a message
* `binary`: data is streamed as-is through `stdout` and `stdin`
* `formatter`: each message to send is transformed using this method, then appended with "\n"
* `parser`: each line of data (ending with "\n") is parsed with this function and its result is emitted as a message
* `stderrParser`: each line of logs (ending with "\n") is parsed with this function and its result is emitted as a message
* `encoding`: the text encoding to apply on the child process streams (default: "utf8")
* `pythonPath`: The path where to locate the "python" executable. Default: "python"
* `pythonOptions`: Array of option switches to pass to "python"
* `scriptPath`: The default path where to look for scripts. Default is the current working directory.
* `args`: Array of arguments to pass to the script
Other options are forwarded to `child_process.spawn`.
PythonShell instances have the following properties:
* `script`: the path of the script to execute
* `command`: the full command arguments passed to the Python executable
* `stdin`: the Python stdin stream, used to send data to the child process
* `stdout`: the Python stdout stream, used for receiving data from the child process
* `stderr`: the Python stderr stream, used for communicating logs & errors
* `childProcess`: the process instance created via `child_process.spawn`
* `terminated`: boolean indicating whether the process has exited
* `exitCode`: the process exit code, available after the process has ended
Example:
```typescript
// create a new instance
let shell = new PythonShell('script.py', options);
```
#### `#defaultOptions`
Configures default options for all new instances of PythonShell.
Example:
```typescript
// setup a default "scriptPath"
PythonShell.defaultOptions = { scriptPath: '../scripts' };
```
#### `#run(script, options, callback)`
Runs the Python script and invokes `callback` with the results. The callback contains the execution error (if any) as well as an array of messages emitted from the Python script.
This method is also returning the `PythonShell` instance.
Example:
```typescript
// run a simple script
PythonShell.run('script.py', null, function (err, results) {
// script finished
});
```
#### `#runString(code, options, callback)`
Runs the Python code and invokes `callback` with the results. The callback contains the execution error (if any) as well as an array of messages emitted from the Python script.
This method is also returning the `PythonShell` instance.
Example:
```typescript
// run a simple script
PythonShell.runString('x=1;print(x)', null, function (err, results) {
// script finished
});
```
#### `#checkSyntax(code:string)`
Checks the syntax of the code and returns a promise.
Promise is rejected if there is a syntax error.
#### `#checkSyntaxFile(filePath:string)`
Checks the syntax of the file and returns a promise.
Promise is rejected if there is a syntax error.
#### `#getVersion(pythonPath?:string)`
Returns the python version. Optional pythonPath param to get the version
of a specific python interpreter.
#### `#getVersionSync(pythonPath?:string)`
Returns the python version. Optional pythonPath param to get the version
of a specific python interpreter.
#### `.send(message)`
Sends a message to the Python script via stdin. The data is formatted according to the selected mode (text or JSON), or through a custom function when `formatter` is specified.
Example:
```typescript
// send a message in text mode
let shell = new PythonShell('script.py', { mode: 'text'});
shell.send('hello world!');
// send a message in JSON mode
let shell = new PythonShell('script.py', { mode: 'json'});
shell.send({ command: "do_stuff", args: [1, 2, 3] });
```
#### `.receive(data)`
Parses incoming data from the Python script written via stdout and emits `message` events. This method is called automatically as data is being received from stdout.
#### `.receiveStderr(data)`
Parses incoming logs from the Python script written via stderr and emits `stderr` events. This method is called automatically as data is being received from stderr.
#### `.end(callback)`
Closes the stdin stream, allowing the Python script to finish and exit. The optional callback is invoked when the process is terminated.
#### `.kill(signal)`
Terminates the python script. A kill signal may be provided by `signal`, if `signal` is not specified SIGTERM is sent.
#### event: `message`
Fires when a chunk of data is parsed from the stdout stream via the `receive` method. If a `parser` method is specified, the result of this function will be the message value. This event is not emitted in binary mode.
Example:
```typescript
// receive a message in text mode
let shell = new PythonShell('script.py', { mode: 'text'});
shell.on('message', function (message) {
// handle message (a line of text from stdout)
});
// receive a message in JSON mode
let shell = new PythonShell('script.py', { mode: 'json'});
shell.on('message', function (message) {
// handle message (a line of text from stdout, parsed as JSON)
});
```
#### event: `stderr`
Fires when a chunk of logs is parsed from the stderr stream via the `receiveStderr` method. If a `stderrParser` method is specified, the result of this function will be the message value. This event is not emitted in binary mode.
Example:
```typescript
// receive a message in text mode
let shell = new PythonShell('script.py', { mode: 'text'});
shell.on('stderr', function (stderr) {
// handle stderr (a line of text from stderr)
});
```
#### event: `close`
Fires when the process has been terminated, with an error or not.
#### event: `error`
Fires when the process terminates with a non-zero exit code.
## Used By:
Python-Shell is used by [arepl-vscode](https://github.com/almenon/arepl-vscode), [gitinspector](https://github.com/ejwa/gitinspector), [pyspreadsheet](https://github.com/extrabacon/pyspreadsheet), [AtlantOS Ocean Data QC](https://github.com/ocean-data-qc/ocean-data-qc) and more!
## License
The MIT License (MIT)
Copyright (c) 2014 Nicolas Mercier
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

+ 179
- 0
nodefrontend/node_modules/python-shell/index.d.ts View File

@ -0,0 +1,179 @@
/// <reference types="node" />
import { EventEmitter } from 'events';
import { ChildProcess, SpawnOptions } from 'child_process';
import { Readable, Writable } from 'stream';
export interface Options extends SpawnOptions {
/**
* if binary is enabled message and stderr events will not be emitted
*/
mode?: 'text' | 'json' | 'binary';
formatter?: (param: string) => any;
parser?: (param: string) => any;
stderrParser?: (param: string) => any;
encoding?: string;
pythonPath?: string;
/**
* see https://docs.python.org/3.7/using/cmdline.html
*/
pythonOptions?: string[];
/**
* overrides scriptPath passed into PythonShell constructor
*/
scriptPath?: string;
/**
* arguments to your program
*/
args?: string[];
}
export declare class PythonShellError extends Error {
traceback: string | Buffer;
exitCode?: number;
}
/**
* An interactive Python shell exchanging data through stdio
* @param {string} script The python script to execute
* @param {object} [options] The launch options (also passed to child_process.spawn)
* @constructor
*/
export declare class PythonShell extends EventEmitter {
scriptPath: string;
command: string[];
mode: string;
formatter: (param: string | Object) => any;
parser: (param: string) => any;
stderrParser: (param: string) => any;
terminated: boolean;
childProcess: ChildProcess;
stdin: Writable;
stdout: Readable;
stderr: Readable;
exitSignal: string;
exitCode: number;
private stderrHasEnded;
private stdoutHasEnded;
private _remaining;
private _endCallback;
static defaultPythonPath: string;
static defaultOptions: Options;
/**
* spawns a python process
* @param scriptPath path to script. Relative to current directory or options.scriptFolder if specified
* @param options
*/
constructor(scriptPath: string, options?: Options);
static format: {
text: (data: any) => string;
json: (data: any) => string;
};
static parse: {
text: (data: any) => string;
json: (data: string) => any;
};
/**
* checks syntax without executing code
* @returns {Promise} rejects w/ stderr if syntax failure
*/
static checkSyntax(code: string): Promise<unknown>;
static getPythonPath(): string;
/**
* checks syntax without executing code
* @returns {Promise} rejects w/ stderr if syntax failure
*/
static checkSyntaxFile(filePath: string): Promise<string>;
/**
* Runs a Python script and returns collected messages
* @param {string} scriptPath The path to the script to execute
* @param {Options} options The execution options
* @param {Function} callback The callback function to invoke with the script results
* @return {PythonShell} The PythonShell instance
*/
static run(scriptPath: string, options?: Options, callback?: (err?: PythonShellError, output?: any[]) => any): PythonShell;
/**
* Runs the inputted string of python code and returns collected messages. DO NOT ALLOW UNTRUSTED USER INPUT HERE!
* @param {string} code The python code to execute
* @param {Options} options The execution options
* @param {Function} callback The callback function to invoke with the script results
* @return {PythonShell} The PythonShell instance
*/
static runString(code: string, options?: Options, callback?: (err: PythonShellError, output?: any[]) => any): PythonShell;
static getVersion(pythonPath?: string): Promise<{
stdout: string;
stderr: string;
}>;
static getVersionSync(pythonPath?: string): string;
/**
* Parses an error thrown from the Python process through stderr
* @param {string|Buffer} data The stderr contents to parse
* @return {Error} The parsed error with extended stack trace when traceback is available
*/
private parseError;
/**
* Sends a message to the Python shell through stdin
* Override this method to format data to be sent to the Python process
* @returns {PythonShell} The same instance for chaining calls
*/
send(message: string | Object): this;
/**
* Parses data received from the Python shell stdout stream and emits "message" events
* This method is not used in binary mode
* Override this method to parse incoming data from the Python process into messages
* @param {string|Buffer} data The data to parse into messages
*/
receive(data: string | Buffer): this;
/**
* Parses data received from the Python shell stderr stream and emits "stderr" events
* This method is not used in binary mode
* Override this method to parse incoming logs from the Python process into messages
* @param {string|Buffer} data The data to parse into messages
*/
receiveStderr(data: string | Buffer): this;
private receiveInternal;
/**
* Closes the stdin stream. Unless python is listening for stdin in a loop
* this should cause the process to finish its work and close.
* @returns {PythonShell} The same instance for chaining calls
*/
end(callback: (err: PythonShellError, exitCode: number, exitSignal: string) => any): this;
/**
* Sends a kill signal to the process
* @returns {PythonShell} The same instance for chaining calls
*/
kill(signal?: NodeJS.Signals): this;
/**
* Alias for kill.
* @deprecated
*/
terminate(signal?: NodeJS.Signals): this;
}
export interface PythonShell {
addListener(event: string, listener: (...args: any[]) => void): this;
emit(event: string | symbol, ...args: any[]): boolean;
on(event: string, listener: (...args: any[]) => void): this;
once(event: string, listener: (...args: any[]) => void): this;
prependListener(event: string, listener: (...args: any[]) => void): this;
prependOnceListener(event: string, listener: (...args: any[]) => void): this;
addListener(event: "message", listener: (parsedChunk: any) => void): this;
emit(event: "message", parsedChunk: any): boolean;
on(event: "message", listener: (parsedChunk: any) => void): this;
once(event: "message", listener: (parsedChunk: any) => void): this;
prependListener(event: "message", listener: (parsedChunk: any) => void): this;
prependOnceListener(event: "message", listener: (parsedChunk: any) => void): this;
addListener(event: "stderr", listener: (parsedChunk: any) => void): this;
emit(event: "stderr", parsedChunk: any): boolean;
on(event: "stderr", listener: (parsedChunk: any) => void): this;
once(event: "stderr", listener: (parsedChunk: any) => void): this;
prependListener(event: "stderr", listener: (parsedChunk: any) => void): this;
prependOnceListener(event: "stderr", listener: (parsedChunk: any) => void): this;
addListener(event: "close", listener: () => void): this;
emit(event: "close"): boolean;
on(event: "close", listener: () => void): this;
once(event: "close", listener: () => void): this;
prependListener(event: "close", listener: () => void): this;
prependOnceListener(event: "close", listener: () => void): this;
addListener(event: "error", listener: (error: PythonShellError) => void): this;
emit(event: "error", error: PythonShellError): boolean;
on(event: "error", listener: (error: PythonShellError) => void): this;
once(event: "error", listener: (error: PythonShellError) => void): this;
prependListener(event: "error", listener: (error: PythonShellError) => void): this;
prependOnceListener(event: "error", listener: (error: PythonShellError) => void): this;
}

+ 389
- 0
nodefrontend/node_modules/python-shell/index.js View File

@ -0,0 +1,389 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PythonShell = exports.PythonShellError = void 0;
const events_1 = require("events");
const child_process_1 = require("child_process");
const os_1 = require("os");
const path_1 = require("path");
const fs_1 = require("fs");
const util_1 = require("util");
function toArray(source) {
if (typeof source === 'undefined' || source === null) {
return [];
}
else if (!Array.isArray(source)) {
return [source];
}
return source;
}
/**
* adds arguments as properties to obj
*/
function extend(obj, ...args) {
Array.prototype.slice.call(arguments, 1).forEach(function (source) {
if (source) {
for (let key in source) {
obj[key] = source[key];
}
}
});
return obj;
}
/**
* gets a random int from 0-10000000000
*/
function getRandomInt() {
return Math.floor(Math.random() * 10000000000);
}
class PythonShellError extends Error {
}
exports.PythonShellError = PythonShellError;
/**
* An interactive Python shell exchanging data through stdio
* @param {string} script The python script to execute
* @param {object} [options] The launch options (also passed to child_process.spawn)
* @constructor
*/
class PythonShell extends events_1.EventEmitter {
/**
* spawns a python process
* @param scriptPath path to script. Relative to current directory or options.scriptFolder if specified
* @param options
*/
constructor(scriptPath, options) {
super();
/**
* returns either pythonshell func (if val string) or custom func (if val Function)
*/
function resolve(type, val) {
if (typeof val === 'string') {
// use a built-in function using its name
return PythonShell[type][val];
}
else if (typeof val === 'function') {
// use a custom function
return val;
}
}
if (scriptPath.trim().length == 0)
throw Error("scriptPath cannot be empty! You must give a script for python to run");
let self = this;
let errorData = '';
events_1.EventEmitter.call(this);
options = extend({}, PythonShell.defaultOptions, options);
let pythonPath;
if (!options.pythonPath) {
pythonPath = PythonShell.defaultPythonPath;
}
else
pythonPath = options.pythonPath;
let pythonOptions = toArray(options.pythonOptions);
let scriptArgs = toArray(options.args);
this.scriptPath = path_1.join(options.scriptPath || '', scriptPath);
this.command = pythonOptions.concat(this.scriptPath, scriptArgs);
this.mode = options.mode || 'text';
this.formatter = resolve('format', options.formatter || this.mode);
this.parser = resolve('parse', options.parser || this.mode);
// We don't expect users to ever format stderr as JSON so we default to text mode
this.stderrParser = resolve('parse', options.stderrParser || 'text');
this.terminated = false;
this.childProcess = child_process_1.spawn(pythonPath, this.command, options);
['stdout', 'stdin', 'stderr'].forEach(function (name) {
self[name] = self.childProcess[name];
self.parser && self[name] && self[name].setEncoding(options.encoding || 'utf8');
});
// parse incoming data on stdout
if (this.parser && this.stdout) {
this.stdout.on('data', this.receive.bind(this));
}
// listen to stderr and emit errors for incoming data
if (this.stderrParser && this.stderr) {
this.stderr.on('data', this.receiveStderr.bind(this));
}
if (this.stderr) {
this.stderr.on('data', function (data) {
errorData += '' + data;
});
this.stderr.on('end', function () {
self.stderrHasEnded = true;
terminateIfNeeded();
});
}
else {
self.stderrHasEnded = true;
}
if (this.stdout) {
this.stdout.on('end', function () {
self.stdoutHasEnded = true;
terminateIfNeeded();
});
}
else {
self.stdoutHasEnded = true;
}
this.childProcess.on('exit', function (code, signal) {
self.exitCode = code;
self.exitSignal = signal;
terminateIfNeeded();
});
function terminateIfNeeded() {
if (!self.stderrHasEnded || !self.stdoutHasEnded || (self.exitCode == null && self.exitSignal == null))
return;
let err;
if (self.exitCode && self.exitCode !== 0) {
if (errorData) {
err = self.parseError(errorData);
}
else {
err = new PythonShellError('process exited with code ' + self.exitCode);
}
err = extend(err, {
executable: pythonPath,
options: pythonOptions.length ? pythonOptions : null,
script: self.scriptPath,
args: scriptArgs.length ? scriptArgs : null,
exitCode: self.exitCode
});
// do not emit error if only a callback is used
if (self.listeners('error').length || !self._endCallback) {
self.emit('error', err);
}
}
self.terminated = true;
self.emit('close');
self._endCallback && self._endCallback(err, self.exitCode, self.exitSignal);
}
;
}
/**
* checks syntax without executing code
* @returns {Promise} rejects w/ stderr if syntax failure
*/
static checkSyntax(code) {
return __awaiter(this, void 0, void 0, function* () {
const randomInt = getRandomInt();
const filePath = os_1.tmpdir() + path_1.sep + `pythonShellSyntaxCheck${randomInt}.py`;
// todo: replace this with util.promisify (once we no longer support node v7)
return new Promise((resolve, reject) => {
fs_1.writeFile(filePath, code, (err) => {
if (err)
reject(err);
resolve(this.checkSyntaxFile(filePath));
});
});
});
}
static getPythonPath() {
return this.defaultOptions.pythonPath ? this.defaultOptions.pythonPath : this.defaultPythonPath;
}
/**
* checks syntax without executing code
* @returns {Promise} rejects w/ stderr if syntax failure
*/
static checkSyntaxFile(filePath) {
return __awaiter(this, void 0, void 0, function* () {
const pythonPath = this.getPythonPath();
const compileCommand = `${pythonPath} -m py_compile ${filePath}`;
return new Promise((resolve, reject) => {
child_process_1.exec(compileCommand, (error, stdout, stderr) => {
if (error == null)
resolve();
else
reject(stderr);
});
});
});
}
/**
* Runs a Python script and returns collected messages
* @param {string} scriptPath The path to the script to execute
* @param {Options} options The execution options
* @param {Function} callback The callback function to invoke with the script results
* @return {PythonShell} The PythonShell instance
*/
static run(scriptPath, options, callback) {
let pyshell = new PythonShell(scriptPath, options);
let output = [];
return pyshell.on('message', function (message) {
output.push(message);
}).end(function (err) {
return callback(err ? err : null, output.length ? output : null);
});
}
;
/**
* Runs the inputted string of python code and returns collected messages. DO NOT ALLOW UNTRUSTED USER INPUT HERE!
* @param {string} code The python code to execute
* @param {Options} options The execution options
* @param {Function} callback The callback function to invoke with the script results
* @return {PythonShell} The PythonShell instance
*/
static runString(code, options, callback) {
// put code in temp file
const randomInt = getRandomInt();
const filePath = os_1.tmpdir + path_1.sep + `pythonShellFile${randomInt}.py`;
fs_1.writeFileSync(filePath, code);
return PythonShell.run(filePath, options, callback);
}
;
static getVersion(pythonPath) {
if (!pythonPath)
pythonPath = this.getPythonPath();
const execPromise = util_1.promisify(child_process_1.exec);
return execPromise(pythonPath + " --version");
}
static getVersionSync(pythonPath) {
if (!pythonPath)
pythonPath = this.getPythonPath();
return child_process_1.execSync(pythonPath + " --version").toString();
}
/**
* Parses an error thrown from the Python process through stderr
* @param {string|Buffer} data The stderr contents to parse
* @return {Error} The parsed error with extended stack trace when traceback is available
*/
parseError(data) {
let text = '' + data;
let error;
if (/^Traceback/.test(text)) {
// traceback data is available
let lines = text.trim().split(os_1.EOL);
let exception = lines.pop();
error = new PythonShellError(exception);
error.traceback = data;
// extend stack trace
error.stack += os_1.EOL + ' ----- Python Traceback -----' + os_1.EOL + ' ';
error.stack += lines.slice(1).join(os_1.EOL + ' ');
}
else {
// otherwise, create a simpler error with stderr contents
error = new PythonShellError(text);
}
return error;
}
;
/**
* Sends a message to the Python shell through stdin
* Override this method to format data to be sent to the Python process
* @returns {PythonShell} The same instance for chaining calls
*/
send(message) {
if (!this.stdin)
throw new Error("stdin not open for writing");
let data = this.formatter ? this.formatter(message) : message;
if (this.mode !== 'binary')
data += os_1.EOL;
this.stdin.write(data);
return this;
}
;
/**
* Parses data received from the Python shell stdout stream and emits "message" events
* This method is not used in binary mode
* Override this method to parse incoming data from the Python process into messages
* @param {string|Buffer} data The data to parse into messages
*/
receive(data) {
return this.receiveInternal(data, 'message');
}
;
/**
* Parses data received from the Python shell stderr stream and emits "stderr" events
* This method is not used in binary mode
* Override this method to parse incoming logs from the Python process into messages
* @param {string|Buffer} data The data to parse into messages
*/
receiveStderr(data) {
return this.receiveInternal(data, 'stderr');
}
;
receiveInternal(data, emitType) {
let self = this;
let parts = ('' + data).split(os_1.EOL);
if (parts.length === 1) {
// an incomplete record, keep buffering
this._remaining = (this._remaining || '') + parts[0];
return this;
}
let lastLine = parts.pop();
// fix the first line with the remaining from the previous iteration of 'receive'
parts[0] = (this._remaining || '') + parts[0];
// keep the remaining for the next iteration of 'receive'
this._remaining = lastLine;
parts.forEach(function (part) {
if (emitType == 'message')
self.emit(emitType, self.parser(part));
else if (emitType == 'stderr')
self.emit(emitType, self.stderrParser(part));
});
return this;
}
/**
* Closes the stdin stream. Unless python is listening for stdin in a loop
* this should cause the process to finish its work and close.
* @returns {PythonShell} The same instance for chaining calls
*/
end(callback) {
if (this.childProcess.stdin) {
this.childProcess.stdin.end();
}
this._endCallback = callback;
return this;
}
;
/**
* Sends a kill signal to the process
* @returns {PythonShell} The same instance for chaining calls
*/
kill(signal) {
this.childProcess.kill(signal);
this.terminated = true;
return this;
}
;
/**
* Alias for kill.
* @deprecated
*/
terminate(signal) {
// todo: remove this next breaking release
return this.kill(signal);
}
}
exports.PythonShell = PythonShell;
// starting 2020 python2 is deprecated so we choose 3 as default
PythonShell.defaultPythonPath = process.platform != "win32" ? "python3" : "py";
PythonShell.defaultOptions = {}; //allow global overrides for options
// built-in formatters
PythonShell.format = {
text: function toText(data) {
if (!data)
return '';
else if (typeof data !== 'string')
return data.toString();
return data;
},
json: function toJson(data) {
return JSON.stringify(data);
}
};
//built-in parsers
PythonShell.parse = {
text: function asText(data) {
return data;
},
json: function asJson(data) {
return JSON.parse(data);
}
};
;
//# sourceMappingURL=index.js.map

+ 1
- 0
nodefrontend/node_modules/python-shell/index.js.map
File diff suppressed because it is too large
View File


+ 73
- 0
nodefrontend/node_modules/python-shell/package.json View File

@ -0,0 +1,73 @@
{
"_from": "python-shell",
"_id": "python-shell@2.0.3",
"_inBundle": false,
"_integrity": "sha512-SBYQzXjexcxmmgzpjdIVxum9tj4Zaov1jNuSGMLssPxRhZ7lxqlpuEtLT0TEed0RAqhGfx2YFVC+imCJOmkVHg==",
"_location": "/python-shell",
"_phantomChildren": {},
"_requested": {
"type": "tag",
"registry": true,
"raw": "python-shell",
"name": "python-shell",
"escapedName": "python-shell",
"rawSpec": "",
"saveSpec": null,
"fetchSpec": "latest"
},
"_requiredBy": [
"#USER",
"/"
],
"_resolved": "https://registry.npmjs.org/python-shell/-/python-shell-2.0.3.tgz",
"_shasum": "03040cae27934d88e1226fd34316b39dfb2fddf0",
"_spec": "python-shell",
"_where": "/home/alpcentaur/ProjektA/PrototypeWebApp/nodefrontend",
"author": {
"name": "Nicolas Mercier",
"email": "nicolas@extrabacon.net"
},
"bugs": {
"url": "http://github.com/extrabacon/python-shell/issues"
},
"bundleDependencies": false,
"dependencies": {},
"deprecated": false,
"description": "Run Python scripts from Node.js with simple (but efficient) inter-process communication through stdio",
"devDependencies": {
"@types/mocha": "^5.2.5",
"@types/node": "^10.5.2",
"mocha": "^5.2.0",
"mocha-appveyor-reporter": "^0.4.0",
"should": "^13.2.1",
"ts-node": "^9.0.0",
"typescript": "^3.8.3"
},
"engines": {
"node": ">=0.10"
},
"files": [
"*.d.ts",
"*.js",
"*.js.map",
"CHANGELOG.md",
"README.md"
],
"homepage": "http://github.com/extrabacon/python-shell",
"keywords": [
"python"
],
"license": "MIT",
"name": "python-shell",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/extrabacon/python-shell.git"
},
"scripts": {
"appveyorTest": "tsc -p ./ && nyc mocha --reporter mocha-appveyor-reporter test/*.js",
"compile": "tsc -watch -p ./",
"test": "tsc -p ./ && mocha -r ts-node/register"
},
"version": "2.0.3"
}

+ 24
- 0
nodefrontend/package-lock.json View File

@ -0,0 +1,24 @@
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
},
"promise": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz",
"integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==",
"requires": {
"asap": "~2.0.6"
}
},
"python-shell": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/python-shell/-/python-shell-2.0.3.tgz",
"integrity": "sha512-SBYQzXjexcxmmgzpjdIVxum9tj4Zaov1jNuSGMLssPxRhZ7lxqlpuEtLT0TEed0RAqhGfx2YFVC+imCJOmkVHg=="
}
}
}

+ 1
- 0
nodefrontend/public/data.json View File

@ -0,0 +1 @@
It worked

+ 5
- 0
nodefrontend/script.py View File

@ -0,0 +1,5 @@
import time
time.sleep(5)
print('It worked')

+ 232
- 0
nodefrontend/server.js View File

@ -0,0 +1,232 @@
var http = require('http');
const fs = require('fs');
var url = require('url');
var path = require('path');
var StringDecoder = require('string_decoder').StringDecoder;
var exec = require("child_process").exec;
var Promise= require('promise');
var mimeTypes = {
"html": "text/html",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"png": "image/png",
"js": "text/javascript",
"css": "text/css",
"json": "text/plain"};
function writenodes(nodes) {
fs.writeFile('public/Verbesserungen.txt', nodes, { flag: 'w' }, (err) => {
if (err)
console.log(err);
else {
console.log("File written successfully\n");
console.log("The written has the following contents:");
console.log(fs.readFileSync("public/nodes.txt", "utf8"));
}
})};
// function writeedges(edges) {
//
// fs.writeFile('public/edges.txt', edges, { flag: 'w' }, (err) => {
// if (err)
// console.log(err);
// else {
// console.log("File written successfully\n");
// console.log("The written has the following contents:");
// console.log(fs.readFileSync("public/edges.txt", "utf8"));
// }
// })};
// the following read funcitons are not asyncronous, that means they will block the process..
// for scalability this has to be changed in future
// function readnodes() {
// var input = fs.readFileSync('public/nodes.txt', 'utf8')
// // console.log('input ooohyeah',input)
// // // var danodes = JSON.parse(input);
// //
// // const lines = input.split(/\r?\n/);
// // console.log('line numbaaa 1', lines, lines[1], lines[1].length)
// // var string = '';
// // var i;
// //
// // for (i = 0; i < (lines.length - 2); i++) {
// // string += '"data' + i.toString() + '":' + lines[i] + ' ,' ;
// // };
// // string += '"data' + lines.length.toString() + '":' + lines[lines.length - 2] ;
// // string = '{' + string + '}' ;
// // const jsonlines = JSON.parse(string)
// //
// //
// // let sortedlines = [];
// // sortedlines = [].slice.call(jsonlines).sort(function(a,b) {
// // var x = a.length;
// // var y = b.length;
// // if (x < y) {
// // return -1;
// // }
// // if (x > y) {
// // return 1;
// // }
// // return 0;
// //
// // });
// // console.log('daline1 in nodes', sortedlines)
// return input
// };
// function readedges() {
//
// var daedges = fs.readFileSync('public/edges.txt', 'utf8');
// // const lines = daedges.split(/\r?\n/);
// // // console.log(lines)
// // sortedlines = lines.sort(function(a,b) {
// // var x = a.length;
// // var y = b.length;
// // if (x < y) {
// // return -1;
// // }
// // if (x > y) {
// // return 1;
// // }
// // return 0;
// //
// // });
// // console.log('daline1 in edges', sortedlines[0])
// return daedges
// };
//
http.createServer((request, response)=>{
var pathname = url.parse(request.url).pathname;
var filename;
if(pathname === "/"){
filename = "Prototyp.html";
}
else{
filename = path.join(process.cwd(), pathname);
}
try{
fs.accessSync(filename, fs.F_OK);
var fileStream = fs.createReadStream(filename);
var mimeType = mimeTypes[path.extname(filename).split(".")[1]];
response.writeHead(200, {'Content-Type':mimeType});
fileStream.pipe(response);
if (mimeType === "text/plain"){
// Get the payload,if any
var decoder = new StringDecoder('utf-8');
var buffer = '';
var theanswer = '';
request.on('data', function(data) {
buffer += decoder.write(data);
});
var theanswer = '';
console.log('i am at least come til here')
request.on('end', function() {
buffer += decoder.end();
if (buffer[3] === 'i'){
console.log(buffer);
}
if (buffer[3] === 'f'){
console.log(buffer);
theanswer = 'your changes were taken into the\n\nM A T R I X'
}
console.log(buffer[3])
if (buffer[3] === 'e'){
// console.log('oleola',nodes)
}
const execpython = new Promise((resolve, reject) => {
exec("python script.py > public/data.json", (error, stdout, stderr) => {
if (error) {
console.log(`error: ${error.message}`);
reject(error)
} else {
console.log(`stdout: ${stdout}`);
resolve(stdout)
}
});
})
const checkIfItsDone = () => {
execpython
.then(ok => {
console.log(ok)
})
.catch(err => {
console.log(err)
})
}
checkIfItsDone()
// var string = 'oi';
// // var string = execpython('oi');
// // console.log('output of execpython', string);
// Promise.resolve(string)
// .then(execpython(string))
// .then(s => response.end(s))
// Log the request/response
console.log('Payload received: ',buffer);
});
}
}
catch(e) {
console.log('File not exists: ' + filename);
response.writeHead(404, {'Content-Type': 'text/plain'});
response.write('404 Not Found\n');
response.end();
return;
}
return;
}
).listen(5000);

BIN
nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb View File


+ 12
- 2
requirements.txt View File

@ -7,13 +7,14 @@ appmode==0.7.0
argh==0.26.2
asn1crypto==0.24.0
astor==0.7.1
astunparse==1.6.3
async-generator==1.10
async-timeout==3.0.1
attrs==18.2.0
Automat==0.7.0
backcall==0.1.0
beautifulsoup4==4.6.3
bleach==3.0.2
bleach==1.5.0
blis==0.4.1
boto==2.49.0
boto3==1.9.71
@ -21,6 +22,7 @@ botocore==1.12.71
bqplot==0.12.6
bz2file==0.98
CacheControl==0.12.5
cachetools==4.1.1
catalogue==1.0.0
certifi==2019.6.16
cffi==1.11.5
@ -52,7 +54,7 @@ grpcio==1.17.0
gunicorn==19.9.0
h5py==2.8.0
hickle==3.3.2
html5lib==1.0.1
html5lib==0.9999999
hyperlink==18.0.0
idna==2.7
idna-ssl==1.1.0
@ -90,6 +92,7 @@ Markdown==2.6.11
MarkupSafe==1.1.0
matplotlib==3.0.2
mistune==0.8.4
mock==3.0.5
more-itertools==8.1.0
msgpack==0.5.6
msgpack-numpy==0.4.3.2
@ -101,7 +104,9 @@ ngrok==0.0.1
nltk==3.4.1
notebook==5.7.2
numpy==1.15.4
oauthlib==3.1.0
olefile==0.46
opt-einsum==3.3.0
packaging==18.0
pandas==0.23.4
pandocfilters==1.4.2
@ -150,7 +155,9 @@ QtPy==1.5.1
queuelib==1.5.0
regex==2018.1.10
requests==2.20.1
requests-oauthlib==1.3.0
retrying==1.3.3
rsa==4.6
s3transfer==0.1.13
scikit-learn==0.20.0
scipy==1.1.0
@ -163,8 +170,11 @@ smart-open==1.7.1
spacy==2.0.18
srsly==1.0.1
tensorboard==1.12.0
tensorboard-plugin-wit==1.7.0
tensorflow==1.12.0
tensorflow-gpu==1.12.0
tensorflow-serving-api==1.12.0
tensorflow-tensorboard==1.5.1
termcolor==1.1.0
terminado==0.8.1
testpath==0.4.2

+ 8
- 0
venv/bin/pyrsa-decrypt View File

@ -0,0 +1,8 @@
#!/home/alpcentaur/ProjektA/PrototypeWebApp/venv/bin/python3.5
# -*- coding: utf-8 -*-
import re
import sys
from rsa.cli import decrypt
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(decrypt())

+ 8
- 0
venv/bin/pyrsa-encrypt View File

@ -0,0 +1,8 @@
#!/home/alpcentaur/ProjektA/PrototypeWebApp/venv/bin/python3.5
# -*- coding: utf-8 -*-
import re
import sys
from rsa.cli import encrypt
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(encrypt())

+ 8
- 0
venv/bin/pyrsa-keygen View File

@ -0,0 +1,8 @@
#!/home/alpcentaur/ProjektA/PrototypeWebApp/venv/bin/python3.5
# -*- coding: utf-8 -*-
import re
import sys
from rsa.cli import keygen
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(keygen())

+ 8
- 0
venv/bin/pyrsa-priv2pub View File

@ -0,0 +1,8 @@
#!/home/alpcentaur/ProjektA/PrototypeWebApp/venv/bin/python3.5
# -*- coding: utf-8 -*-
import re
import sys
from rsa.util import private_to_public
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(private_to_public())

+ 8
- 0
venv/bin/pyrsa-sign View File

@ -0,0 +1,8 @@
#!/home/alpcentaur/ProjektA/PrototypeWebApp/venv/bin/python3.5
# -*- coding: utf-8 -*-
import re
import sys
from rsa.cli import sign
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(sign())

+ 8
- 0
venv/bin/pyrsa-verify View File

@ -0,0 +1,8 @@
#!/home/alpcentaur/ProjektA/PrototypeWebApp/venv/bin/python3.5
# -*- coding: utf-8 -*-
import re
import sys
from rsa.cli import verify
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(verify())

+ 7
- 0
venv/etc/jupyter/jupyter_notebook_config.json View File

@ -0,0 +1,7 @@
{
"NotebookApp": {
"nbserver_extensions": {
"appmode.server_extension": true
}
}
}

+ 5
- 0
venv/etc/jupyter/nbconfig/notebook.json View File

@ -0,0 +1,5 @@
{
"load_extensions": {
"appmode/main": true
}
}

BIN
venv/lib/python3.5/site-packages/absl/__pycache__/__init__.cpython-35.pyc View File


BIN
venv/lib/python3.5/site-packages/absl/__pycache__/_enum_module.cpython-35.pyc View File


BIN
venv/lib/python3.5/site-packages/absl/__pycache__/app.cpython-35.pyc View File


BIN
venv/lib/python3.5/site-packages/absl/__pycache__/command_name.cpython-35.pyc View File


BIN
venv/lib/python3.5/site-packages/absl/flags/__pycache__/__init__.cpython-35.pyc View File


BIN
venv/lib/python3.5/site-packages/absl/flags/__pycache__/_argument_parser.cpython-35.pyc View File


BIN
venv/lib/python3.5/site-packages/absl/flags/__pycache__/_defines.cpython-35.pyc View File


BIN
venv/lib/python3.5/site-packages/absl/flags/__pycache__/_exceptions.cpython-35.pyc View File


BIN
venv/lib/python3.5/site-packages/absl/flags/__pycache__/_flag.cpython-35.pyc View File


BIN
venv/lib/python3.5/site-packages/absl/flags/__pycache__/_flagvalues.cpython-35.pyc View File


BIN
venv/lib/python3.5/site-packages/absl/flags/__pycache__/_helpers.cpython-35.pyc View File


BIN
venv/lib/python3.5/site-packages/absl/flags/__pycache__/_validators.cpython-35.pyc View File


BIN
venv/lib/python3.5/site-packages/absl/flags/__pycache__/argparse_flags.cpython-35.pyc View File


BIN
venv/lib/python3.5/site-packages/absl/logging/__pycache__/__init__.cpython-35.pyc View File


BIN
venv/lib/python3.5/site-packages/absl/logging/__pycache__/converter.cpython-35.pyc View File


BIN
venv/lib/python3.5/site-packages/absl/testing/__pycache__/__init__.cpython-35.pyc View File


BIN
venv/lib/python3.5/site-packages/absl/testing/__pycache__/_bazelize_command.cpython-35.pyc View File


BIN
venv/lib/python3.5/site-packages/absl/testing/__pycache__/_pretty_print_reporter.cpython-35.pyc View File


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save