Add ipydrawio-jupyter-templates, first template (Lab mockup) (#46)

pull/50/head
Nicholas Bollweg 2021-06-03 07:19:51 -04:00 zatwierdzone przez GitHub
rodzic a80f3a7df4
commit 383d02c807
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
66 zmienionych plików z 5016 dodań i 310 usunięć

Wyświetl plik

@ -26,12 +26,14 @@ env:
PYTHONUNBUFFERED: '1'
PYTHONIOENCODING: 'utf-8'
PIP_DISABLE_PIP_VERSION_CHECK: '1'
CONDARC: .github/.condarc
# our stuff
ATEST_RETRIES: '3'
CACHE_EPOCH: '1'
DOIT_N_BUILD: '-n4'
DOIT_N_TEST: '-n4'
CONDA_BUILDERER: mambabuild
jobs:
build:
@ -134,7 +136,7 @@ jobs:
strategy:
fail-fast: false
matrix:
os: ['ubuntu', 'macos', 'windows']
os: ['ubuntu']
steps:
- name: configure line endings
run: |
@ -168,10 +170,8 @@ jobs:
- name: build (conda)
shell: bash -l {0}
env:
CONDA_BUILDERER: mambabuild
run: |
doit -s conda
doit -s conda_build
- name: upload (conda)
uses: actions/upload-artifact@v2
@ -179,6 +179,50 @@ jobs:
name: ipydrawio ${{ github.run_number }} conda
path: ./build/conda-bld
conda-test:
needs: [conda-build]
runs-on: ${{ matrix.os }}-latest
strategy:
fail-fast: false
matrix:
os: ['ubuntu', 'macos', 'windows']
steps:
- name: configure line endings
run: |
git config --global core.autocrlf false
- name: checkout
uses: actions/checkout@v2
- name: cache (conda)
uses: actions/cache@v2
with:
path: ~/conda_pkgs_dir
key: |
${{ env.CACHE_EPOCH }}-${{ runner.os }}-conda-build-${{ hashFiles('.github/environment-conda-build.yml') }}
restore-keys: |
${{ env.CACHE_EPOCH }}-${{ runner.os }}-conda-build-
- name: install (conda)
uses: conda-incubator/setup-miniconda@v2
with:
condarc-file: .github/.condarc
environment-file: .github/environment-conda-build.yml
miniforge-variant: Mambaforge
use-mamba: true
- name: download (conda)
uses: actions/download-artifact@v2
with:
name: ipydrawio ${{ github.run_number }} conda
path: ./build/conda-bld
- name: build (conda)
shell: bash -l {0}
run: |
conda index build/conda-bld
doit -s conda_test
test:
needs: [build]
name: ${{ matrix.os }} ${{ matrix.python-version }}

Wyświetl plik

@ -8,12 +8,22 @@
#### @deathbeds/ipydrawio-notebook 1.1.1
#### @deathbeds/ipydrawio-webpack 14.7.101
#### @deathbeds/ipydrawio-webpack 14.7.400
- upgrade to drawio 14.7.4 for layer enhancements and various bugfixes
#### @deathbeds/ipydrawio-jupyter-templates 1.1.1
- adds some (unofficial) Jupyter-branded templates [#44]
### ipydrawio-export 1.1.1
- upgrades `draw-image-export` for `xmldom` version and bugfixes [#44]
#### @deathbeds/ipydrawio-pdf 1.1.1
[#44]: https://github.com/deathbeds/ipydrawio/issues/44
---
## Releases

Wyświetl plik

@ -30,6 +30,8 @@ pip install ipydrawio ipydrawio
- in many file formats
- Drawio/mxgraph XML, SVG, PNG
- or Jupyter Notebooks
- with all the Drawio templates
- plus some Jupyter ones
- Jupyter [rich display][] output
- Jupyter [Widgets][]
- `ipydrawio-export`

Wyświetl plik

@ -38,7 +38,11 @@ Kennedy Flowchart PNG
Sketch Business Model SVG
[Documentation] Kennedy Classes PNG?
Validate Custom Create kfp dio.svg sketch business_model_1.xml
Validate Custom Create sbp dio.svg sketch business_model_1.xml
Atlas JupyterLab Diagram Notebook
[Documentation] Atlas JupyterLab Diagram Notebook?
Validate Custom Create ajn dio.ipynb atlas JupyterLab Mockups.dio
*** Keywords ***
Validate Custom Create

Wyświetl plik

@ -70,9 +70,12 @@ Update The Diagram Widget Value
[Arguments] ${path}
${xml} = Get File ${path}
Add and Run JupyterLab Code Cell d.source.value = '''${xml.strip()}'''
Press Keys None ESC
Press Keys None UP
Change Paper Size
[Arguments] ${size}=letter
Scroll Element Into View ${CSS DIO IFRAME}
Select Frame ${CSS DIO IFRAME}
Maybe Open Format Pane
${el} = Get WebElement xpath:${XP DIO PAGE SIZE}

Wyświetl plik

@ -86,7 +86,7 @@ ${JW XP ACCORD CHILD HEAD} ${JW XP ACCORD CHILD}/div[contains(@class, 'p-Coll
${JLAB CSS ICON ADD} .jp-ToolbarButtonComponent [data-icon='ui-components:add']
${JLAB CSS ICON RUN} .jp-ToolbarButtonComponent [data-icon='ui-components:run']
${XP DIO FORMAT TITLE} //*[contains(@class, 'mxWindowTitle')][contains(text(), 'Format')]
${XP DIO FORMAT TOGGLE} ${XP DIO FORMAT TITLE}/div
${XP DIO FORMAT TOGGLE} ${XP DIO FORMAT TITLE}/div/img[@title="Normalize"]
${XP DIO FORMAT PANE} ${XP DIO FORMAT TITLE}/../..//td/div[contains(@class, 'mxWindowPane')]
${XP DIO FORMAT PANE VISIBLE} ${XP DIO FORMAT PANE}\[not(contains(@style, 'display: none'))]
${XP DIO PAGE SIZE} //div[contains(@class, "geFormatSection")][contains(., "Paper Size")]//select

Wyświetl plik

@ -1 +1,13 @@
<mxfile host="localhost" modified="2020-08-28T03:18:03.905Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36" version="13.6.2" etag="sRvBxgpFvqvJ6ZOE7QqG"><diagram id="Kgp7oERnrECbv33cBmmy" name="Page-1"><mxGraphModel dx="1841" dy="728" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="3" value="A" style="ellipse;whiteSpace=wrap;html=1;fontSize=48;fontFamily=sans-serif;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#496082;" vertex="1" parent="1"><mxGeometry x="20" y="20" width="285" height="280" as="geometry"/></mxCell></root></mxGraphModel></diagram></mxfile>
<mxfile version="13.6.2">
<diagram id="Kgp7oERnrECbv33cBmmy" name="Page-1">
<mxGraphModel dx="1841" dy="728" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="3" value="A" style="ellipse;whiteSpace=wrap;html=1;fontSize=48;fontFamily=sans-serif;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#496082;" vertex="1" parent="1">
<mxGeometry x="20" y="20" width="285" height="280" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

File diff suppressed because one or more lines are too long

Wyświetl plik

@ -1 +1,22 @@
<mxfile host="127.0.0.1" modified="2020-06-29T04:14:26.435Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) snap Chromium/83.0.4103.106 Chrome/83.0.4103.106 Safari/537.36" etag="xt03xUONJWfqor6j0LBr" version="13.3.4"><diagram id="nSHWkRglQPOUJ5_LHxTB" name="title page"><mxGraphModel dx="1257" dy="872" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1654" pageHeight="1169" background="#FFFCF2" math="0" shadow="0" extFonts="Merriweather^https://fonts.googleapis.com/css?family=Merriweather|Noto Sans^https://fonts.googleapis.com/css?family=Noto+Sans|Delius Unicase^https://fonts.googleapis.com/css?family=Delius+Unicase|Sedgwick Ave Display^https://fonts.googleapis.com/css?family=Sedgwick+Ave+Display"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="11" value="{{ hero}}" style="whiteSpace=wrap;html=1;dashed=1;strokeWidth=2;fontSize=100;fontColor=#66B2FF;align=right;fontFamily=Noto Sans;sketch=1;FType=g;verticalAlign=bottom;opacity=10;shadow=1;fillColor=none;strokeColor=none;" parent="1" vertex="1"><mxGeometry x="1190" y="40" width="430" height="1070" as="geometry"/></mxCell><mxCell id="2" value="&lt;h1 style=&quot;font-size: 100px&quot;&gt;{{ title }}&lt;/h1&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Noto Sans;FType=g;fontSize=100;fontStyle=0;sketch=0;" parent="1" vertex="1"><mxGeometry x="80" y="80" width="1420" height="360" as="geometry"/></mxCell><mxCell id="3" value="{{ abstract }}" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=bottom;whiteSpace=wrap;rounded=0;fontSize=72;fontFamily=Noto Sans;FType=g;lineHeight=1.1;fontColor=#000066;" parent="1" vertex="1"><mxGeometry x="80" y="610" width="1000" height="490" as="geometry"/></mxCell><mxCell id="5" value="&lt;h1 style=&quot;font-size: 48px&quot;&gt;{{ authors }}&lt;/h1&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Noto Sans;FType=g;fontSize=100;fontStyle=0;fontColor=#666666;" parent="1" vertex="1"><mxGeometry x="80" y="480" width="980" height="120" as="geometry"/></mxCell></root></mxGraphModel></diagram></mxfile>
<mxfile version="13.3.4">
<diagram id="nSHWkRglQPOUJ5_LHxTB" name="title page">
<mxGraphModel dx="1257" dy="872" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1654" pageHeight="1169" background="#FFFCF2" math="0" shadow="0" extFonts="Merriweather^https://fonts.googleapis.com/css?family=Merriweather|Noto Sans^https://fonts.googleapis.com/css?family=Noto+Sans|Delius Unicase^https://fonts.googleapis.com/css?family=Delius+Unicase|Sedgwick Ave Display^https://fonts.googleapis.com/css?family=Sedgwick+Ave+Display">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="11" value="{{ hero}}" style="whiteSpace=wrap;html=1;dashed=1;strokeWidth=2;fontSize=100;fontColor=#66B2FF;align=right;fontFamily=Noto Sans;sketch=1;FType=g;verticalAlign=bottom;opacity=10;shadow=1;fillColor=none;strokeColor=none;" parent="1" vertex="1">
<mxGeometry x="1190" y="40" width="430" height="1070" as="geometry"/>
</mxCell>
<mxCell id="2" value="&lt;h1 style=&quot;font-size: 100px&quot;&gt;{{ title }}&lt;/h1&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Noto Sans;FType=g;fontSize=100;fontStyle=0;sketch=0;" parent="1" vertex="1">
<mxGeometry x="80" y="80" width="1420" height="360" as="geometry"/>
</mxCell>
<mxCell id="3" value="{{ abstract }}" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=bottom;whiteSpace=wrap;rounded=0;fontSize=72;fontFamily=Noto Sans;FType=g;lineHeight=1.1;fontColor=#000066;" parent="1" vertex="1">
<mxGeometry x="80" y="610" width="1000" height="490" as="geometry"/>
</mxCell>
<mxCell id="5" value="&lt;h1 style=&quot;font-size: 48px&quot;&gt;{{ authors }}&lt;/h1&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Noto Sans;FType=g;fontSize=100;fontStyle=0;fontColor=#666666;" parent="1" vertex="1">
<mxGeometry x="80" y="480" width="980" height="120" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Wyświetl plik

@ -1 +1,13 @@
<mxfile version="13.6.10"><diagram name="Page-1"><mxGraphModel dx="1556" dy="728" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="3" value="TEST123" style="whiteSpace=wrap;html=1;fontSize=100;fontStyle=1;fontColor=#FF0000;" vertex="1" parent="1"><mxGeometry x="110" y="10" width="680" height="260" as="geometry"/></mxCell></root></mxGraphModel></diagram></mxfile>
<mxfile version="13.6.10">
<diagram name="Page-1">
<mxGraphModel dx="1556" dy="728" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="3" value="TEST123" style="whiteSpace=wrap;html=1;fontSize=100;fontStyle=1;fontColor=#FF0000;" vertex="1" parent="1">
<mxGeometry x="110" y="10" width="680" height="260" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Wyświetl plik

@ -46,6 +46,8 @@ outputs:
noarch: python
script:
- cd ipydrawio && {{ PYTHON }} -m pip install . -vv --no-deps
entry_points:
- jupyter-ipydrawio = ipydrawio.app:main
requirements:
host:
- pip
@ -54,19 +56,26 @@ outputs:
- ipywidgets >=7.6
- jupyterlab ==3.*
- jupyterlab_widgets >=1
- lxml
- python >=3.6
test:
imports:
- ipydrawio
requires:
- pip
- pytest-console-scripts
- pytest-cov
- m2-grep # [win]
commands:
- pip check
- jupyter ipydrawio --version
- jupyter labextension list
- jupyter labextension list 1>labextensions 2>&1
- cat labextensions | grep "@deathbeds/ipydrawio.*OK" # [unix]
- pytest -vv --pyargs ipydrawio --cov=ipydrawio --cov-fail-under=100 --cov-report=term-missing:skip-covered
- cat labextensions | grep -ie "@deathbeds/ipydrawio .*OK"
- cat labextensions | grep -ie "@deathbeds/ipydrawio-webpack .*OK"
- cat labextensions | grep -ie "@deathbeds/ipydrawio-notebook .*OK"
- cat labextensions | grep -ie "@deathbeds/ipydrawio-jupyter-templates .*OK"
- pytest -vv --pyargs ipydrawio --cov=ipydrawio --cov-report=term-missing:skip-covered
about:
home: https://github.com/deathbeds/ipydrawio
summary: Draw.io Diagrams as Jupyter Widgets
@ -99,21 +108,20 @@ outputs:
- ipydrawio_export
requires:
- pip
- pytest-console-scripts # [unix]
- pytest-cov # [unix]
- pytest-tornasync # [unix]
- pytest-console-scripts # [unix]
- m2-grep # [win]
commands:
- pip check
- jupyter ipydrawio-export --version
- jupyter labextension list
- jupyter labextension list 1>labextensions 2>&1
- cat labextensions | grep "@deathbeds/ipydrawio-pdf.*OK" # [unix]
- cat labextensions | grep -ie "@deathbeds/ipydrawio-pdf.*OK"
- jupyter serverextension list
- jupyter serverextension list 1>serverextensions 2>&1
- cat serverextensions | grep "ipydrawio_export.*OK" # [unix]
{% set pytest_args = "--cov-fail-under=96" %} # [unix]
# TODO: investigate potential docker/locale issues upstream to restore coverage
# {% set pytest_args = "--cov-fail-under=54 -k 'not (export_empty or export_merged or serverextension_export)'" %} # [linux]
- pytest -vv --pyargs ipydrawio_export --script-launch-mode=subprocess --cov=ipydrawio_export --cov-report=term-missing:skip-covered {{ pytest_args }} # [unix]
- cat serverextensions | grep -ie "ipydrawio_export .*OK"
- pytest -vv --pyargs ipydrawio_export --script-launch-mode=subprocess --cov=ipydrawio_export --cov-report=term-missing:skip-covered # [unix]
about:
home: https://github.com/deathbeds/ipydrawio
summary: PDF export for IPyDrawio

File diff suppressed because one or more lines are too long

Przed

Szerokość:  |  Wysokość:  |  Rozmiar: 65 KiB

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 66 KiB

File diff suppressed because one or more lines are too long

Przed

Szerokość:  |  Wysokość:  |  Rozmiar: 141 KiB

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 146 KiB

Wyświetl plik

@ -0,0 +1,472 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1755px" height="1293px" viewBox="-0.5 -0.5 1755 1293" content="&lt;mxfile version=&quot;14.7.3&quot; type=&quot;embed&quot;&gt;&#10; &lt;diagram id=&quot;7Mb5FK2Zsu-GJq336r9_&quot; name=&quot;Page-1&quot;&gt;7V1bU6Q4FP41PkqRe3jUUWe3aqdmanzYZ4TYjdMSiqa97K/fQ3ORkHbXwQ7T7UQtbQIkkHzny5eTk3hCPt0/fS7jYvlFp2p1gsP06YRcnGCMo5DAnzrluUlBQoZNyqLM0iZtkHCd/aPaC7vUTZaqdZvWJFVar6qsMBMTnecqqYy0uCz1o3nZrV6lRkIRL5TxGHXCdRKvlHXZ31laLZtUyQZX/6GyxbIrGYXtmfu4u7hNWC/jVD8OksjlCflUal01n+6fPqlVXXtmvVy9crZ/sFLl1VtuwM0ND/Fq075bUOSL9tmq5+6F4TGL+mOuK/hzfhMnPxal3uTp1021yvL6FIL0NC5/fC3iJKvqlg2DkEHibbZafdIrXW6zIkmqbuQNpK+rUv9QgzOEk4ik7R3XbeFrvaqf9TzNSmjJTOeQ9qjW8HLnizJOM3jPi8GpXJd1DZ+vf6gqWbaP1Vfy9qBBE9QLFKTzqkUXlXB8ly0W21KhHc4LneWVKi8foIh1e/MyTpabUn2Oi/qWNoer+D5b1S98VibLrIJnWUPtXcQbAIAqu2L0pkzqrJdVBSjFjJzBL2iX+ld9wTpYaA2lx0W2DhJ9vz2RrLeXXt02RcBHoxCGzwfFtE2pyko9vQoH1IMMzFPpe1WVkG/Y3iBC3tzSWiaVtDl+fIE5oi12l0OI8zYxbk1r0ef9gj740ALwFfRSC3gqBcNrD3NdA+082ZQPKm0bZAvC7VE4bvUaCXqh83j1l9ZFm3inquq5bfJ4U+kDa8IBILcAVXl6VvMVHOtC5VuricvuEkSbS4aH6+1DflNlBtWvyuvaGsGgyUWNb7h3oapXTjZ1X1f4f4MH2qerCDhsqbzJecjSNsZKtYqr7MHM/j14ITvIK7315PW7khcWBnlhKWYkL2qBMQfhc7d2Ccerq6voHFtwbIlyD0jszpll4jM0BaWYepSC+uXSQOlpJwVnQan0Peyx9bDc7mHpTB0stzgNRlRp7CnNU9qQ0qiITEpDaE5OExZKfwXJ7SCSyUQxQBjiB4aX/6PHaSS3i+XIbtANMdX1nW9mvja7b7WVvgC4x2anHMewbJuyuWvoThll1N/4WkZts48zAuTEz4PLtiyytoygr4W3DadDyzBuat+XKr0o9QxuMDgKO59sC1wW8RkZHCELkF6WHrgsxTZhv9vxs5tUKWImqWIRCBQiiQUXHNMQTyNrJM2RGBEswDKSSGACB/xNzD2Fl22n+92meIZ2WcU3Lpn59jZJoujgvFeegreiWY5ENHDwnBTMLFCmOtncqxbuXix4pHZIJdEIqoTNiVTbK+HVw7Gph64PNOQDcyIfWEhNaSsCyoWgKCKMSsLFxKHeSD1wFDACucuQU4b46DH3qB5sd8eXP79cepL2JG2SNDOn8rEkc5K09CT9MUlaeJJ+A/wjD/8PCX/sxsWBCAsQAlxiIRFl3AxkQAxNgz/CplePdF6+/SMe285m6Gggc+9r9spk5OgwQSnmjNLpHncA0yIrPEQ9RIcQ7W/pCLiTs/Ng1I5r9OLh2MRDvy5hqJ2xE/Ewnh/ho05+slh2JxbsYMmseE7L+DHTLrk4SRS7vbW42E+A7MdA22rruth3MTAxGZiJWRnYngzxDPzrGHib867SrrK6CbcVPJGl6Y4hnhOSxqEMuACe4ZJQJEKTaieP8Cgb+U26Ywekbc+79KR9elKfJWiLjKcCAO5p3NN4HRlqwhOHc4YVHUhk6ME18HEJ6V0UzZ1wNBmFYHBOA4IH39M4mhEzKJQzAV3By/fIt71Hxj6MSRgfGf2eyOifgL+LyOiQ0EBSGYF+4YSEpoGgLhDkZ02Cc1PeE/kL46SxPVkTrB/8IvijVDB7EC1ihHIu0IyihdgTKV60/DZjz8gLm7fYiD2L423k6IR9ZOPf0QoCC/8RDziSImQhYZFAU/GPwiAafDHTDy8oCohEOKIRp2G/G4EDc8CWOXy/PLu4/H7tUsP4ic0jd86gft1Vv+hrzmW7hHjOPjbO7paUGst03TjMI8oCySmjSBIQLJEJVRqNlme9lbMjIQNEGGUS1e54K+zQWUgg8ZtbfUgZv2Ph+mu8+06LECOwChQIjnAdLkgFDek0g2BiJGJGI4UA1JNglEBjsrHR7dE67BnXu1Vx71K/+NWQh+yD6TRtvxpSzKpN/BqzQ2LviQPMXQ4WN9Q8HmAyCeJFogiYUwhgk4lihY1GlBShACEZAunXGA27wC8HfOynTj+AAcynTQjBQUTrTRkE54IxyUf2AH3w4AtPswciMXTl9RYNdYGUIlMQ1aeHUkY6s47DmFj11rHv5T3EzRJkwk0eZyxAmBNGRBRyRCSbZg5gAWa2PJCCcMpxGBHJHfYO9oyp++Bdr9cPWK+foshkfD7rFoDUT5oePyGTHRNC797qdKpccSRQnC2poH5K9PgtYMeA1ZEiQSE1IT85lEvS0X7WCOOAcoKYkBEFORJhZ5i35z2D1PEKIh+4dbgiBEtTZks256Ihai/bDLLiOXe6pZ/H4wHjkWEzPkp2WcyDR3uRpVcEx6YIdmniptvbuyQ4JaPlvxENEKMMBDKFfjwcedPe7KTo4jz6aFoSSMoo6GPGsEt14BdxHhL+5w2kbTrj4wkkNKNbZoscpH6e85BsZBr+d+5T5cZvgigDGcpfJnJM/8Yp4+Y0z0R7QKN/KMLGwS17tAA/0Xn8FrBzpt9RKDmM6kKJaPeDTaBOdhyyMIiQZN3PaGf68fYAe8S/n8r8mPh3tFHnh4t0oX6rzg9qAG485/32bL0B8ADBOJ3DeBn0kZzoRj8l0WjTT+4s2Jb52dJDgvzMI2M33qMjHxnDYal1Nby8jIvlF52q+op/AQ==&lt;/diagram&gt;&#10;&lt;/mxfile&gt;&#10;">
<defs>
<linearGradient x1="0%" y1="100%" x2="0%" y2="0%" id="mx-gradient-fff2a1-1-fff9b2-1-s-0">
<stop offset="0%" style="stop-color:#FFF9B2"/>
<stop offset="100%" style="stop-color:#FFF2A1"/>
</linearGradient>
<style type="text/css">/* latin */
@font-face {
font-family: 'Architects Daughter';
font-style: normal;
font-weight: 400;
src: url("https://fonts.gstatic.com/s/architectsdaughter/v11/KtkxAKiDZI_td1Lkx62xHZHDtgO_Y-bvTYlg4w.woff2") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin */
@font-face {
font-family: 'Rock Salt';
font-style: normal;
font-weight: 400;
src: url("https://fonts.gstatic.com/s/rocksalt/v11/MwQ0bhv11fWD6QsAVOZrt0M6.woff2") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin */
@font-face {
font-family: 'Permanent Marker';
font-style: normal;
font-weight: 400;
src: url("https://fonts.gstatic.com/s/permanentmarker/v10/Fh4uPib9Iyv2ucM6pGQMWimMp004La2Cfw.woff2") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
</style>
</defs>
<g>
<g id="cell-2">
<path d="M 1105 754 L 1225 754 L 1245 774 L 1245 914 L 1105 914 L 1105 754 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,1175,834)" pointer-events="all" opacity="0.25"/>
<path d="M 1105 754 L 1225 754 L 1245 774 L 1245 914 L 1105 914 L 1105 754 Z" fill="none" stroke="none" transform="rotate(180,1175,834)" pointer-events="all"/>
<path d="M 1225 754 L 1225 774 L 1245 774 Z" fill="none" stroke="none" transform="rotate(180,1175,834)" pointer-events="all"/>
<path d="M 1225 754 L 1225 774 L 1245 774" fill="none" stroke="none" transform="rotate(180,1175,834)" pointer-events="all"/>
<path d="M 1101.01 757.1 L 1226.66 756.88 L 1241.15 770.2 L 1241.43 911.26 L 1104.71 913.44 L 1104.56 755.18" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,1175,834)" pointer-events="all" opacity="0.25"/>
<path d="M 1101.01 757.1 L 1226.66 756.88 L 1241.15 770.2 L 1241.43 911.26 L 1104.71 913.44 L 1104.56 755.18" fill="#cdeb8b" stroke="none" transform="rotate(180,1175,834)" pointer-events="all"/>
<path d="M 1105 754 M 1105 754 C 1132.84 753.68 1164.85 759.29 1225 754 M 1105 754 C 1136.55 752.85 1172.34 752.13 1225 754 M 1225 754 C 1231.55 756.56 1235.06 765.83 1245 774 M 1225 754 C 1231.82 759.26 1237.61 768.21 1245 774 M 1245 774 C 1247.72 821.93 1242.2 872.82 1245 914 M 1245 774 C 1243.56 824.57 1243.54 876.63 1245 914 M 1245 914 C 1204.88 914.56 1172.03 919.76 1105 914 M 1245 914 C 1211.94 911.04 1177.29 913.83 1105 914 M 1105 914 C 1098.63 851.55 1105.98 785.45 1105 754 M 1105 914 C 1107.37 865.57 1107.02 820.74 1105 754 M 1105 754 C 1105 754 1105 754 1105 754 M 1105 754 C 1105 754 1105 754 1105 754" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="translate(2,3)rotate(180,1175,834)" pointer-events="all" opacity="0.25"/>
<path d="M 1105 754 M 1105 754 C 1132.84 753.68 1164.85 759.29 1225 754 M 1105 754 C 1136.55 752.85 1172.34 752.13 1225 754 M 1225 754 C 1231.55 756.56 1235.06 765.83 1245 774 M 1225 754 C 1231.82 759.26 1237.61 768.21 1245 774 M 1245 774 C 1247.72 821.93 1242.2 872.82 1245 914 M 1245 774 C 1243.56 824.57 1243.54 876.63 1245 914 M 1245 914 C 1204.88 914.56 1172.03 919.76 1105 914 M 1245 914 C 1211.94 911.04 1177.29 913.83 1105 914 M 1105 914 C 1098.63 851.55 1105.98 785.45 1105 754 M 1105 914 C 1107.37 865.57 1107.02 820.74 1105 754 M 1105 754 C 1105 754 1105 754 1105 754 M 1105 754 C 1105 754 1105 754 1105 754" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,1175,834)" pointer-events="all"/>
<path d="M 1221.01 757.1 L 1226.66 776.88 L 1241.15 770.2 L 1221.43 751.26" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,1175,834)" pointer-events="all"/>
<path d="M 1225 754 M 1225 754 C 1226.12 757.89 1228.82 763.55 1225 774 M 1225 754 C 1226.83 758.4 1226.82 765.69 1225 774 M 1225 774 C 1230.3 770.4 1235.73 773.11 1245 774 M 1225 774 C 1233.61 774.67 1238.05 774.15 1245 774 M 1245 774 C 1240.39 769.66 1233.7 765.22 1225 754 M 1245 774 C 1238.32 767.87 1229.71 759 1225 754" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,1175,834)" pointer-events="all"/>
<path d="M 1225 754 M 1225 754 C 1228.19 754.16 1221.51 758.45 1225 774 M 1225 754 C 1224.75 759.22 1223.99 765.2 1225 774 M 1225 774 C 1229.55 778.15 1233.9 778.12 1245 774 M 1225 774 C 1233.91 774.23 1239.21 774.77 1245 774" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,1175,834)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" text-anchor="middle" font-size="48px">
<text x="1174.5" y="856.5">.png</text>
</g>
</g>
<g id="cell-14">
<path d="M 1274 724.33 Q 1274 724.33 1392.51 857.01" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 1377.67 851.65 L 1393.26 857.84 L 1388.86 841.66" fill="none" stroke="none" pointer-events="all"/>
<path d="M 1274 724.33 M 1274 724.33 C 1272.23 723.54 1313.76 769.15 1392.51 857.01 M 1274 724.33 C 1272.34 724.77 1312.53 768.29 1392.51 857.01" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 1377.67 851.65 M 1377.67 851.65 C 1381.44 851.73 1384.56 853.53 1393.26 857.84 M 1377.67 851.65 C 1381.95 853.08 1387.52 855.26 1393.26 857.84 M 1393.26 857.84 C 1390.33 851.61 1391.42 845.39 1388.86 841.66 M 1393.26 857.84 C 1392.76 854.78 1391.54 851.12 1388.86 841.66" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-3">
<path d="M 1126 557 L 1246 557 L 1266 577 L 1266 717 L 1126 717 L 1126 557 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,1196,637)" pointer-events="all" opacity="0.25"/>
<path d="M 1126 557 L 1246 557 L 1266 577 L 1266 717 L 1126 717 L 1126 557 Z" fill="none" stroke="none" transform="rotate(180,1196,637)" pointer-events="all"/>
<path d="M 1246 557 L 1246 577 L 1266 577 Z" fill="none" stroke="none" transform="rotate(180,1196,637)" pointer-events="all"/>
<path d="M 1246 557 L 1246 577 L 1266 577" fill="none" stroke="none" transform="rotate(180,1196,637)" pointer-events="all"/>
<path d="M 1122.01 560.78 L 1244.47 557.59 L 1268.08 576.56 L 1268.76 717.14 L 1126.25 718.85 L 1122.34 559.03" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,1196,637)" pointer-events="all" opacity="0.25"/>
<path d="M 1122.01 560.78 L 1244.47 557.59 L 1268.08 576.56 L 1268.76 717.14 L 1126.25 718.85 L 1122.34 559.03" fill="#cdeb8b" stroke="none" transform="rotate(180,1196,637)" pointer-events="all"/>
<path d="M 1126 557 M 1126 557 C 1168.16 553.6 1203.63 557.79 1246 557 M 1126 557 C 1148.83 553.52 1173.65 555.26 1246 557 M 1246 557 C 1252.2 560.68 1255.16 563.74 1266 577 M 1246 557 C 1249.31 559.87 1256.36 566.06 1266 577 M 1266 577 C 1263.41 629.27 1265.52 683.21 1266 717 M 1266 577 C 1264.87 621.25 1268.3 666.21 1266 717 M 1266 717 C 1219.17 714.32 1166.1 714.94 1126 717 M 1266 717 C 1215.12 718.91 1164.64 719.07 1126 717 M 1126 717 C 1130.51 672.49 1126.39 626.81 1126 557 M 1126 717 C 1126.33 680.49 1129.18 646.27 1126 557 M 1126 557 C 1126 557 1126 557 1126 557 M 1126 557 C 1126 557 1126 557 1126 557" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="translate(2,3)rotate(180,1196,637)" pointer-events="all" opacity="0.25"/>
<path d="M 1126 557 M 1126 557 C 1168.16 553.6 1203.63 557.79 1246 557 M 1126 557 C 1148.83 553.52 1173.65 555.26 1246 557 M 1246 557 C 1252.2 560.68 1255.16 563.74 1266 577 M 1246 557 C 1249.31 559.87 1256.36 566.06 1266 577 M 1266 577 C 1263.41 629.27 1265.52 683.21 1266 717 M 1266 577 C 1264.87 621.25 1268.3 666.21 1266 717 M 1266 717 C 1219.17 714.32 1166.1 714.94 1126 717 M 1266 717 C 1215.12 718.91 1164.64 719.07 1126 717 M 1126 717 C 1130.51 672.49 1126.39 626.81 1126 557 M 1126 717 C 1126.33 680.49 1129.18 646.27 1126 557 M 1126 557 C 1126 557 1126 557 1126 557 M 1126 557 C 1126 557 1126 557 1126 557" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,1196,637)" pointer-events="all"/>
<path d="M 1242.01 560.78 L 1244.47 577.59 L 1268.08 576.56 L 1248.76 557.14" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,1196,637)" pointer-events="all"/>
<path d="M 1246 557 M 1246 557 C 1248.22 564.25 1247.79 568.49 1246 577 M 1246 557 C 1245.78 562.41 1244.43 573.25 1246 577 M 1246 577 C 1250.72 574.21 1255.63 574.88 1266 577 M 1246 577 C 1251.53 575.16 1261.26 578.09 1266 577 M 1266 577 C 1263.28 575.62 1253.54 569.16 1246 557 M 1266 577 C 1260.53 571.73 1255.02 564.12 1246 557" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,1196,637)" pointer-events="all"/>
<path d="M 1246 557 M 1246 557 C 1246.97 563.08 1245.94 567.77 1246 577 M 1246 557 C 1244.2 564.09 1246.59 569.94 1246 577 M 1246 577 C 1250.51 577.72 1253.28 575.02 1266 577 M 1246 577 C 1252.87 577.35 1259.47 577.45 1266 577" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,1196,637)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" text-anchor="middle" font-size="48px">
<text x="1195.5" y="659.5">.pdf</text>
</g>
</g>
<g id="cell-4">
<path d="M 1367 250 L 1487 250 L 1507 270 L 1507 410 L 1367 410 L 1367 250 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,1437,330)" pointer-events="all" opacity="0.25"/>
<path d="M 1367 250 L 1487 250 L 1507 270 L 1507 410 L 1367 410 L 1367 250 Z" fill="none" stroke="none" transform="rotate(180,1437,330)" pointer-events="all"/>
<path d="M 1487 250 L 1487 270 L 1507 270 Z" fill="none" stroke="none" transform="rotate(180,1437,330)" pointer-events="all"/>
<path d="M 1487 250 L 1487 270 L 1507 270" fill="none" stroke="none" transform="rotate(180,1437,330)" pointer-events="all"/>
<path d="M 1363.01 246.46 L 1490.28 248.31 L 1507 272.92 L 1508.09 413.02 L 1367.79 406.26 L 1368.13 252.89" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,1437,330)" pointer-events="all" opacity="0.25"/>
<path d="M 1363.01 246.46 L 1490.28 248.31 L 1507 272.92 L 1508.09 413.02 L 1367.79 406.26 L 1368.13 252.89" fill="url(#mx-gradient-fff2a1-1-fff9b2-1-s-0)" stroke="none" transform="rotate(180,1437,330)" pointer-events="all"/>
<path d="M 1483.01 246.46 L 1490.28 268.31 L 1507 272.92 L 1488.09 253.02" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,1437,330)" pointer-events="all"/>
<path d="M 1487 250 M 1487 250 C 1489.51 252.61 1485.96 263.44 1487 270 M 1487 250 C 1485.53 256.43 1486.85 262.81 1487 270 M 1487 270 C 1491.15 267.22 1495.53 265.85 1507 270 M 1487 270 C 1493.45 269.65 1500.47 272.03 1507 270 M 1507 270 C 1502.16 258.79 1493.37 254.29 1487 250 M 1507 270 C 1502.74 264.78 1496.34 262.45 1487 250" fill="none" stroke="none" transform="rotate(180,1437,330)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" text-anchor="middle" font-size="24px">
<text x="1436.5" y="340.5">nodejs</text>
</g>
</g>
<g id="cell-8">
<path d="M 1026 254.36 Q 1026 254.36 1356.8 315.24" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 1341.79 320.1 L 1357.9 315.44 L 1344.51 305.35" fill="none" stroke="none" pointer-events="all"/>
<path d="M 1026 254.36 M 1026 254.36 C 1024.01 253.95 1135.53 273.24 1356.8 315.24 M 1026 254.36 C 1025.84 254.57 1137.64 273.81 1356.8 315.24" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 1341.79 320.1 M 1341.79 320.1 C 1343.84 319.11 1348.41 319.29 1357.9 315.44 M 1341.79 320.1 C 1345.22 318.6 1350.36 317.36 1357.9 315.44 M 1357.9 315.44 C 1355.89 312.07 1349.84 309.47 1344.51 305.35 M 1357.9 315.44 C 1354.41 313.61 1351.11 310.22 1344.51 305.35" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-6">
<path d="M 878 160 L 998 160 L 1018 180 L 1018 320 L 878 320 L 878 160 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,948,240)" pointer-events="all" opacity="0.25"/>
<path d="M 878 160 L 998 160 L 1018 180 L 1018 320 L 878 320 L 878 160 Z" fill="none" stroke="none" transform="rotate(180,948,240)" pointer-events="all"/>
<path d="M 998 160 L 998 180 L 1018 180 Z" fill="none" stroke="none" transform="rotate(180,948,240)" pointer-events="all"/>
<path d="M 998 160 L 998 180 L 1018 180" fill="none" stroke="none" transform="rotate(180,948,240)" pointer-events="all"/>
<path d="M 874.02 157.82 L 994.9 161.73 L 1021.86 181.64 L 1015.74 320.78 L 879.87 321.09 L 880.7 156.6" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,948,240)" pointer-events="all" opacity="0.25"/>
<path d="M 874.02 157.82 L 994.9 161.73 L 1021.86 181.64 L 1015.74 320.78 L 879.87 321.09 L 880.7 156.6" fill="url(#mx-gradient-fff2a1-1-fff9b2-1-s-0)" stroke="none" transform="rotate(180,948,240)" pointer-events="all"/>
<path d="M 994.02 157.82 L 994.9 181.73 L 1021.86 181.64 L 995.74 160.78" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,948,240)" pointer-events="all"/>
<path d="M 998 160 M 998 160 C 994.71 169.32 1000.89 177.33 998 180 M 998 160 C 996.43 168.47 999.08 173.94 998 180 M 998 180 C 1000.99 178.84 1012.32 181.39 1018 180 M 998 180 C 1002.29 178.63 1011.89 179.91 1018 180 M 1018 180 C 1016.93 173.92 1010.05 173.36 998 160 M 1018 180 C 1012.16 175.69 1007.97 167.9 998 160" fill="none" stroke="none" transform="rotate(180,948,240)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" text-anchor="middle" font-size="24px">
<text x="947.5" y="250.5">conda</text>
</g>
</g>
<g id="cell-7">
<path d="M 1021 580.97 Q 1021 580.97 1115.87 611.35" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 1100.36 614.26 L 1116.94 611.69 L 1104.94 599.97" fill="none" stroke="none" pointer-events="all"/>
<path d="M 1021 580.97 M 1021 580.97 C 1019.01 580.22 1053.48 590.82 1115.87 611.35 M 1021 580.97 C 1022.03 579.25 1050.36 593.2 1115.87 611.35" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 1100.36 614.26 M 1100.36 614.26 C 1103.46 614.42 1105.76 611.51 1116.94 611.69 M 1100.36 614.26 C 1106.73 612.57 1112.79 612.21 1116.94 611.69 M 1116.94 611.69 C 1115.95 609.91 1111.63 605.06 1104.94 599.97 M 1116.94 611.69 C 1114.16 607.62 1110.16 605.39 1104.94 599.97" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-10">
<path d="M 1402 866 L 1522 866 L 1542 886 L 1542 1026 L 1402 1026 L 1402 866 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,1472,946)" pointer-events="all" opacity="0.25"/>
<path d="M 1402 866 L 1522 866 L 1542 886 L 1542 1026 L 1402 1026 L 1402 866 Z" fill="none" stroke="none" transform="rotate(180,1472,946)" pointer-events="all"/>
<path d="M 1522 866 L 1522 886 L 1542 886 Z" fill="none" stroke="none" transform="rotate(180,1472,946)" pointer-events="all"/>
<path d="M 1522 866 L 1522 886 L 1542 886" fill="none" stroke="none" transform="rotate(180,1472,946)" pointer-events="all"/>
<path d="M 1398.45 869.7 L 1519.26 868.32 L 1539.4 889.32 L 1538.99 1022.01 L 1402.29 1025.59 L 1405.65 869.1" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,1472,946)" pointer-events="all" opacity="0.25"/>
<path d="M 1398.45 869.7 L 1519.26 868.32 L 1539.4 889.32 L 1538.99 1022.01 L 1402.29 1025.59 L 1405.65 869.1" fill="url(#mx-gradient-fff2a1-1-fff9b2-1-s-0)" stroke="none" transform="rotate(180,1472,946)" pointer-events="all"/>
<path d="M 1518.45 869.7 L 1519.26 888.32 L 1539.4 889.32 L 1518.99 862.01" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,1472,946)" pointer-events="all"/>
<path d="M 1522 866 M 1522 866 C 1525.06 871.72 1523.47 874.98 1522 886 M 1522 866 C 1520.77 871.61 1521.6 877.86 1522 886 M 1522 886 C 1524.49 885.01 1531.9 886.33 1542 886 M 1522 886 C 1528.5 885.83 1536.06 884.11 1542 886 M 1542 886 C 1539.26 882.67 1531.89 874.56 1522 866 M 1542 886 C 1537.07 880.19 1530.85 874.69 1522 866" fill="none" stroke="none" transform="rotate(180,1472,946)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" text-anchor="middle" font-size="24px">
<text x="1471.5" y="956.5">browsers</text>
</g>
</g>
<g id="cell-11">
<path d="M 1253 863.41 Q 1253 863.41 1391.91 915.8" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 1376.27 917.92 L 1392.95 916.19 L 1381.57 903.88" fill="none" stroke="none" pointer-events="all"/>
<path d="M 1253 863.41 M 1253 863.41 C 1251.23 861.6 1300.34 880.89 1391.91 915.8 M 1253 863.41 C 1254.91 862.65 1301.21 880.24 1391.91 915.8" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 1376.27 917.92 M 1376.27 917.92 C 1379.83 918.86 1382.79 918.49 1392.95 916.19 M 1376.27 917.92 C 1380.9 918.2 1385.91 916.73 1392.95 916.19 M 1392.95 916.19 C 1389.92 913.83 1385.87 910.29 1381.57 903.88 M 1392.95 916.19 C 1390.46 911.99 1386.33 908.79 1381.57 903.88" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-12">
<path d="M 310 11 L 430 11 L 450 31 L 450 171 L 310 171 L 310 11 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,380,91)" pointer-events="all" opacity="0.25"/>
<path d="M 310 11 L 430 11 L 450 31 L 450 171 L 310 171 L 310 11 Z" fill="none" stroke="none" transform="rotate(180,380,91)" pointer-events="all"/>
<path d="M 430 11 L 430 31 L 450 31 Z" fill="none" stroke="none" transform="rotate(180,380,91)" pointer-events="all"/>
<path d="M 430 11 L 430 31 L 450 31" fill="none" stroke="none" transform="rotate(180,380,91)" pointer-events="all"/>
<path d="M 306.45 8.06 L 428.88 8.75 L 451.26 33.05 L 451.65 172.77 L 311.37 167.41 L 307.22 7.81" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,380,91)" pointer-events="all" opacity="0.25"/>
<path d="M 306.45 8.06 L 428.88 8.75 L 451.26 33.05 L 451.65 172.77 L 311.37 167.41 L 307.22 7.81" fill="#ffcc99" stroke="none" transform="rotate(180,380,91)" pointer-events="all"/>
<path d="M 310 11 M 310 11 C 340.99 14.56 367.14 9.59 430 11 M 310 11 C 350.27 13.59 391.51 13.76 430 11 M 430 11 C 435.21 14.82 441.68 20.22 450 31 M 430 11 C 434.85 17.5 438.1 22.45 450 31 M 450 31 C 450.99 83.32 448.91 138.84 450 171 M 450 31 C 454.43 82.63 451.32 137.47 450 171 M 450 171 C 402.73 169.28 348.23 171.48 310 171 M 450 171 C 402.62 171.77 351.63 168.26 310 171 M 310 171 C 311.29 111.94 313.17 58.88 310 11 M 310 171 C 311.23 128.16 313.08 87.93 310 11 M 310 11 C 310 11 310 11 310 11 M 310 11 C 310 11 310 11 310 11" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="translate(2,3)rotate(180,380,91)" pointer-events="all" opacity="0.25"/>
<path d="M 310 11 M 310 11 C 340.99 14.56 367.14 9.59 430 11 M 310 11 C 350.27 13.59 391.51 13.76 430 11 M 430 11 C 435.21 14.82 441.68 20.22 450 31 M 430 11 C 434.85 17.5 438.1 22.45 450 31 M 450 31 C 450.99 83.32 448.91 138.84 450 171 M 450 31 C 454.43 82.63 451.32 137.47 450 171 M 450 171 C 402.73 169.28 348.23 171.48 310 171 M 450 171 C 402.62 171.77 351.63 168.26 310 171 M 310 171 C 311.29 111.94 313.17 58.88 310 11 M 310 171 C 311.23 128.16 313.08 87.93 310 11 M 310 11 C 310 11 310 11 310 11 M 310 11 C 310 11 310 11 310 11" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,380,91)" pointer-events="all"/>
<path d="M 426.45 8.06 L 428.88 28.75 L 451.26 33.05 L 431.65 12.77" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,380,91)" pointer-events="all"/>
<path d="M 430 11 M 430 11 C 426.45 15.43 426.6 23.87 430 31 M 430 11 C 429.47 18.64 431.63 23.99 430 31 M 430 31 C 439.34 30.83 437.69 28.07 450 31 M 430 31 C 434.35 29.81 440.49 30.99 450 31 M 450 31 C 447.03 27.99 437.57 19.83 430 11 M 450 31 C 443.49 26.1 439.48 19.14 430 11" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,380,91)" pointer-events="all"/>
<path d="M 430 11 M 430 11 C 427.46 16.48 431.75 21.1 430 31 M 430 11 C 428.75 16.29 429.01 23.26 430 31 M 430 31 C 434.39 28.96 443.06 33.29 450 31 M 430 31 C 435.45 32.52 440.43 28.89 450 31" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,380,91)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" text-anchor="middle" font-size="24px">
<text x="379.5" y="101.5">jupyterlab</text>
</g>
</g>
<g id="cell-15">
<path d="M 0 235 L 120 235 L 140 255 L 140 395 L 0 395 L 0 235 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,70,315)" pointer-events="all" opacity="0.25"/>
<path d="M 0 235 L 120 235 L 140 255 L 140 395 L 0 395 L 0 235 Z" fill="none" stroke="none" transform="rotate(180,70,315)" pointer-events="all"/>
<path d="M 120 235 L 120 255 L 140 255 Z" fill="none" stroke="none" transform="rotate(180,70,315)" pointer-events="all"/>
<path d="M 120 235 L 120 255 L 140 255" fill="none" stroke="none" transform="rotate(180,70,315)" pointer-events="all"/>
<path d="M -3.54 234.1 L 117.31 233.9 L 143.04 251.13 L 136.63 397.41 L 2.98 398.65 L 3.57 234.37" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,70,315)" pointer-events="all" opacity="0.25"/>
<path d="M -3.54 234.1 L 117.31 233.9 L 143.04 251.13 L 136.63 397.41 L 2.98 398.65 L 3.57 234.37" fill="url(#mx-gradient-fff2a1-1-fff9b2-1-s-0)" stroke="none" transform="rotate(180,70,315)" pointer-events="all"/>
<path d="M 116.46 234.1 L 117.31 253.9 L 143.04 251.13 L 116.63 237.41" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,70,315)" pointer-events="all"/>
<path d="M 120 235 M 120 235 C 119.74 241.5 118.51 253.7 120 255 M 120 235 C 121.32 241.7 119.48 249.68 120 255 M 120 255 C 127.61 256.46 132.39 255.57 140 255 M 120 255 C 127.11 254.28 129.12 253.81 140 255 M 140 255 C 131.48 247.28 124.89 245.03 120 235 M 140 255 C 133.13 247.06 126.43 239.92 120 235" fill="none" stroke="none" transform="rotate(180,70,315)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" text-anchor="middle" font-size="24px">
<text x="69.5" y="325.5">document</text>
</g>
</g>
<g id="cell-16">
<path d="M 302 147.36 Q 302 147.36 149.81 257.33" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 156.67 243.12 L 148.91 257.98 L 165.46 255.28" fill="none" stroke="none" pointer-events="all"/>
<path d="M 302 147.36 M 302 147.36 C 300.23 147.25 252.33 182.32 149.81 257.33 M 302 147.36 C 302.56 147.07 252.97 182.46 149.81 257.33" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 156.67 243.12 M 156.67 243.12 C 153.6 246.71 153.17 250.68 148.91 257.98 M 156.67 243.12 C 155.07 246.58 153.63 250.8 148.91 257.98 M 148.91 257.98 C 154.23 257.13 155.41 257.21 165.46 255.28 M 148.91 257.98 C 154.09 256.84 161.32 255.28 165.46 255.28" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-17">
<path d="M 43 553 L 163 553 L 183 573 L 183 713 L 43 713 L 43 553 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,113,633)" pointer-events="all" opacity="0.25"/>
<path d="M 43 553 L 163 553 L 183 573 L 183 713 L 43 713 L 43 553 Z" fill="none" stroke="none" transform="rotate(180,113,633)" pointer-events="all"/>
<path d="M 163 553 L 163 573 L 183 573 Z" fill="none" stroke="none" transform="rotate(180,113,633)" pointer-events="all"/>
<path d="M 163 553 L 163 573 L 183 573" fill="none" stroke="none" transform="rotate(180,113,633)" pointer-events="all"/>
<path d="M 39.46 553.46 L 161.94 555.33 L 181.9 575.85 L 184.28 713.17 L 39.06 713.48 L 40.14 554.08" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,113,633)" pointer-events="all" opacity="0.25"/>
<path d="M 39.46 553.46 L 161.94 555.33 L 181.9 575.85 L 184.28 713.17 L 39.06 713.48 L 40.14 554.08" fill="url(#mx-gradient-fff2a1-1-fff9b2-1-s-0)" stroke="none" transform="rotate(180,113,633)" pointer-events="all"/>
<path d="M 159.46 553.46 L 161.94 575.33 L 181.9 575.85 L 164.28 553.17" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,113,633)" pointer-events="all"/>
<path d="M 163 553 M 163 553 C 164.13 554.22 164.65 559.59 163 573 M 163 553 C 161.01 561.73 164.51 568.81 163 573 M 163 573 C 169.46 575.28 181.18 570.31 183 573 M 163 573 C 167.95 574.46 172.54 572.89 183 573 M 183 573 C 174.25 566.41 165.56 556.1 163 553 M 183 573 C 174.55 565.96 166.06 557.37 163 553" fill="none" stroke="none" transform="rotate(180,113,633)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" text-anchor="middle" font-size="24px">
<text x="112.5" y="643.5">MIME</text>
</g>
</g>
<g id="cell-18">
<path d="M 336.65 179 Q 336.65 179 157.34 542.99" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 156.75 527.23 L 156.84 544 L 170.2 533.86" fill="none" stroke="none" pointer-events="all"/>
<path d="M 336.65 179 M 336.65 179 C 334.88 179.57 278.75 300.35 157.34 542.99 M 336.65 179 C 334.82 177.97 276.65 302.09 157.34 542.99" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 156.75 527.23 M 156.75 527.23 C 156.83 529.44 156.08 534.15 156.84 544 M 156.75 527.23 C 157.05 533.95 156.73 539.71 156.84 544 M 156.84 544 C 161.73 541.2 164.56 536.63 170.2 533.86 M 156.84 544 C 160.5 540.42 165.75 537.96 170.2 533.86" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-19">
<path d="M 381.57 179 Q 381.57 179 384.39 336.76" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 376.64 323.02 L 384.41 337.88 L 391.64 322.75" fill="none" stroke="none" pointer-events="all"/>
<path d="M 381.57 179 M 381.57 179 C 379.8 179.91 382.79 230.46 384.39 336.76 M 381.57 179 C 383.15 179.9 381.32 230.4 384.39 336.76" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 376.64 323.02 M 376.64 323.02 C 377.41 327.3 380.65 328.42 384.41 337.88 M 376.64 323.02 C 378.19 327.35 381.1 329.83 384.41 337.88 M 384.41 337.88 C 387.53 331.39 387.83 327.04 391.64 322.75 M 384.41 337.88 C 387.23 332.88 389.45 329.05 391.64 322.75" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-20">
<path d="M 316 347 L 436 347 L 456 367 L 456 507 L 316 507 L 316 347 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,386,427)" pointer-events="all" opacity="0.25"/>
<path d="M 316 347 L 436 347 L 456 367 L 456 507 L 316 507 L 316 347 Z" fill="none" stroke="none" transform="rotate(180,386,427)" pointer-events="all"/>
<path d="M 436 347 L 436 367 L 456 367 Z" fill="none" stroke="none" transform="rotate(180,386,427)" pointer-events="all"/>
<path d="M 436 347 L 436 367 L 456 367" fill="none" stroke="none" transform="rotate(180,386,427)" pointer-events="all"/>
<path d="M 312.46 347.78 L 438.39 350.47 L 453.16 370.5 L 457.11 504.29 L 317.02 509.38 L 315.97 344.58" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,386,427)" pointer-events="all" opacity="0.25"/>
<path d="M 312.46 347.78 L 438.39 350.47 L 453.16 370.5 L 457.11 504.29 L 317.02 509.38 L 315.97 344.58" fill="url(#mx-gradient-fff2a1-1-fff9b2-1-s-0)" stroke="none" transform="rotate(180,386,427)" pointer-events="all"/>
<path d="M 432.46 347.78 L 438.39 370.47 L 453.16 370.5 L 437.11 344.29" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,386,427)" pointer-events="all"/>
<path d="M 436 347 M 436 347 C 433.82 352.78 439.28 360.27 436 367 M 436 347 C 434.38 352.15 437.87 356.34 436 367 M 436 367 C 444.62 365.51 451.73 367.57 456 367 M 436 367 C 443.06 365.81 450.59 367.05 456 367 M 456 367 C 454.06 363.54 444.28 352.51 436 347 M 456 367 C 450.22 360.43 448.22 358.39 436 347" fill="none" stroke="none" transform="rotate(180,386,427)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" text-anchor="middle" font-size="24px">
<text x="385.5" y="437.5">widgets</text>
</g>
</g>
<g id="cell-21">
<path d="M 620 388 L 740 388 L 760 408 L 760 548 L 620 548 L 620 388 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,690,468)" pointer-events="all" opacity="0.25"/>
<path d="M 620 388 L 740 388 L 760 408 L 760 548 L 620 548 L 620 388 Z" fill="none" stroke="none" transform="rotate(180,690,468)" pointer-events="all"/>
<path d="M 740 388 L 740 408 L 760 408 Z" fill="none" stroke="none" transform="rotate(180,690,468)" pointer-events="all"/>
<path d="M 740 388 L 740 408 L 760 408" fill="none" stroke="none" transform="rotate(180,690,468)" pointer-events="all"/>
<path d="M 616.46 389.46 L 739.2 389.19 L 763.09 406.86 L 759.44 548.17 L 621.56 544.8 L 616.76 386.43" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,690,468)" pointer-events="all" opacity="0.25"/>
<path d="M 616.46 389.46 L 739.2 389.19 L 763.09 406.86 L 759.44 548.17 L 621.56 544.8 L 616.76 386.43" fill="url(#mx-gradient-fff2a1-1-fff9b2-1-s-0)" stroke="none" transform="rotate(180,690,468)" pointer-events="all"/>
<path d="M 736.46 389.46 L 739.2 409.19 L 763.09 406.86 L 739.44 388.17" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,690,468)" pointer-events="all"/>
<path d="M 740 388 M 740 388 C 738.11 397.13 740.45 403.22 740 408 M 740 388 C 740.33 394.16 738.48 401.91 740 408 M 740 408 C 744.04 406.52 746.63 406.54 760 408 M 740 408 C 747.98 407.5 756.8 408.19 760 408 M 760 408 C 751.94 407.5 755.12 402.44 740 388 M 760 408 C 751.43 401.48 744.53 392.72 740 388" fill="none" stroke="none" transform="rotate(180,690,468)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" text-anchor="middle" font-size="24px">
<text x="689.5" y="478.5">pip</text>
</g>
</g>
<g id="cell-23">
<path d="M 617.64 380 Q 617.64 380 453.78 180.73" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 468.39 186.69 L 453.07 179.86 L 456.8 196.21" fill="none" stroke="none" pointer-events="all"/>
<path d="M 617.64 380 M 617.64 380 C 615.87 381.41 563.43 311.89 453.78 180.73 M 617.64 380 C 617.03 378.61 560.77 312.38 453.78 180.73" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 468.39 186.69 M 468.39 186.69 C 463.68 184.83 460.85 182.19 453.07 179.86 M 468.39 186.69 C 464.19 185.09 460.85 182.57 453.07 179.86 M 453.07 179.86 C 453.5 183.86 455.13 186.89 456.8 196.21 M 453.07 179.86 C 453.48 183.89 454.98 189.32 456.8 196.21" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-24">
<path d="M 630 848 L 750 848 L 770 868 L 770 1008 L 630 1008 L 630 848 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,700,928)" pointer-events="all" opacity="0.25"/>
<path d="M 630 848 L 750 848 L 770 868 L 770 1008 L 630 1008 L 630 848 Z" fill="none" stroke="none" transform="rotate(180,700,928)" pointer-events="all"/>
<path d="M 750 848 L 750 868 L 770 868 Z" fill="none" stroke="none" transform="rotate(180,700,928)" pointer-events="all"/>
<path d="M 750 848 L 750 868 L 770 868" fill="none" stroke="none" transform="rotate(180,700,928)" pointer-events="all"/>
<path d="M 626.46 851.51 L 747.63 850.33 L 766.87 868.94 L 772.42 1008.81 L 633.17 1004.03 L 633.11 849" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,700,928)" pointer-events="all" opacity="0.25"/>
<path d="M 626.46 851.51 L 747.63 850.33 L 766.87 868.94 L 772.42 1008.81 L 633.17 1004.03 L 633.11 849" fill="#cce5ff" stroke="none" transform="rotate(180,700,928)" pointer-events="all"/>
<path d="M 630 848 M 630 848 C 677.52 850.54 721.75 846.97 750 848 M 630 848 C 658.46 850.49 689.84 847.85 750 848 M 750 848 C 758.1 851.28 762.45 859.86 770 868 M 750 848 C 758.19 853.09 762.92 859.17 770 868 M 770 868 C 773.21 907.7 767.11 939.8 770 1008 M 770 868 C 772.6 899.26 771.55 927.47 770 1008 M 770 1008 C 713.05 1009.04 659.69 1012.17 630 1008 M 770 1008 C 726.71 1007.63 681.16 1009.25 630 1008 M 630 1008 C 626.94 965.13 626.49 929.87 630 848 M 630 1008 C 630.32 954.54 629.94 900.34 630 848 M 630 848 C 630 848 630 848 630 848 M 630 848 C 630 848 630 848 630 848" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="translate(2,3)rotate(180,700,928)" pointer-events="all" opacity="0.25"/>
<path d="M 630 848 M 630 848 C 677.52 850.54 721.75 846.97 750 848 M 630 848 C 658.46 850.49 689.84 847.85 750 848 M 750 848 C 758.1 851.28 762.45 859.86 770 868 M 750 848 C 758.19 853.09 762.92 859.17 770 868 M 770 868 C 773.21 907.7 767.11 939.8 770 1008 M 770 868 C 772.6 899.26 771.55 927.47 770 1008 M 770 1008 C 713.05 1009.04 659.69 1012.17 630 1008 M 770 1008 C 726.71 1007.63 681.16 1009.25 630 1008 M 630 1008 C 626.94 965.13 626.49 929.87 630 848 M 630 1008 C 630.32 954.54 629.94 900.34 630 848 M 630 848 C 630 848 630 848 630 848 M 630 848 C 630 848 630 848 630 848" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,700,928)" pointer-events="all"/>
<path d="M 746.46 851.51 L 747.63 870.33 L 766.87 868.94 L 752.42 848.81" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,700,928)" pointer-events="all"/>
<path d="M 750 848 M 750 848 C 750.6 859.2 751.55 861.05 750 868 M 750 848 C 748.97 853.21 751.13 859.6 750 868 M 750 868 C 752.31 868.15 761.32 870.05 770 868 M 750 868 C 756.74 867.97 765.43 867.01 770 868 M 770 868 C 760.39 858.8 754.43 855.64 750 848 M 770 868 C 761.07 858.44 755.48 853.5 750 848" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,700,928)" pointer-events="all"/>
<path d="M 750 848 M 750 848 C 752.68 849.1 751.29 858.88 750 868 M 750 848 C 751.87 854.9 752.13 861.78 750 868 M 750 868 C 752.99 865.57 757.64 869.88 770 868 M 750 868 C 756.19 866.33 760.07 868.25 770 868" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,700,928)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" font-weight="bold" text-anchor="middle" font-size="24px">
<text x="699.5" y="938.5">ipydrawio</text>
</g>
</g>
<g id="cell-25">
<path d="M 780.19 912.13 Q 780.19 912.13 1094.81 849.87" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 792.36 902.08 L 779.1 912.35 L 795.27 916.79" fill="none" stroke="none" pointer-events="all"/>
<path d="M 1082.64 859.92 L 1095.9 849.65 L 1079.73 845.21" fill="none" stroke="none" pointer-events="all"/>
<path d="M 780.19 912.13 M 780.19 912.13 C 778.42 910.22 886.29 891.4 1094.81 849.87 M 780.19 912.13 C 781.8 910 885.49 893.5 1094.81 849.87" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 792.36 902.08 M 792.36 902.08 C 789.48 905.51 785.1 906.82 779.1 912.35 M 792.36 902.08 C 787.23 906.44 781.78 910.02 779.1 912.35 M 779.1 912.35 C 782.51 914.5 789.35 916.44 795.27 916.79 M 779.1 912.35 C 782.56 912.68 786.46 914.29 795.27 916.79" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 1082.64 859.92 M 1082.64 859.92 C 1085.56 858.84 1086.8 855.81 1095.9 849.65 M 1082.64 859.92 C 1087.72 856.33 1092.67 851.85 1095.9 849.65 M 1095.9 849.65 C 1090.23 849.21 1087.95 848.65 1079.73 845.21 M 1095.9 849.65 C 1092.2 847.73 1088.92 847.37 1079.73 845.21" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-26">
<path d="M 873 476 L 993 476 L 1013 496 L 1013 636 L 873 636 L 873 476 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,943,556)" pointer-events="all" opacity="0.25"/>
<path d="M 873 476 L 993 476 L 1013 496 L 1013 636 L 873 636 L 873 476 Z" fill="none" stroke="none" transform="rotate(180,943,556)" pointer-events="all"/>
<path d="M 993 476 L 993 496 L 1013 496 Z" fill="none" stroke="none" transform="rotate(180,943,556)" pointer-events="all"/>
<path d="M 993 476 L 993 496 L 1013 496" fill="none" stroke="none" transform="rotate(180,943,556)" pointer-events="all"/>
<path d="M 869.46 472.87 L 992.25 473.76 L 1013.73 495.66 L 1012.07 634.57 L 869.25 636.86 L 869.68 478.7" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,943,556)" pointer-events="all" opacity="0.25"/>
<path d="M 869.46 472.87 L 992.25 473.76 L 1013.73 495.66 L 1012.07 634.57 L 869.25 636.86 L 869.68 478.7" fill="#cce5ff" stroke="none" transform="rotate(180,943,556)" pointer-events="all"/>
<path d="M 873 476 M 873 476 C 917.15 472.37 952.3 473.97 993 476 M 873 476 C 908.01 473.03 941.46 475.31 993 476 M 993 476 C 1000.4 481.52 1003.65 485.69 1013 496 M 993 476 C 996.57 480.3 1003.81 484.87 1013 496 M 1013 496 C 1011.18 544.39 1012.35 582.59 1013 636 M 1013 496 C 1014.62 542.64 1012.48 584.62 1013 636 M 1013 636 C 962.61 636.17 912.84 638.14 873 636 M 1013 636 C 962.08 635.75 908.85 636.11 873 636 M 873 636 C 877.29 597.02 869.91 562.6 873 476 M 873 636 C 875.64 570.38 873.67 509.4 873 476 M 873 476 C 873 476 873 476 873 476 M 873 476 C 873 476 873 476 873 476" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="translate(2,3)rotate(180,943,556)" pointer-events="all" opacity="0.25"/>
<path d="M 873 476 M 873 476 C 917.15 472.37 952.3 473.97 993 476 M 873 476 C 908.01 473.03 941.46 475.31 993 476 M 993 476 C 1000.4 481.52 1003.65 485.69 1013 496 M 993 476 C 996.57 480.3 1003.81 484.87 1013 496 M 1013 496 C 1011.18 544.39 1012.35 582.59 1013 636 M 1013 496 C 1014.62 542.64 1012.48 584.62 1013 636 M 1013 636 C 962.61 636.17 912.84 638.14 873 636 M 1013 636 C 962.08 635.75 908.85 636.11 873 636 M 873 636 C 877.29 597.02 869.91 562.6 873 476 M 873 636 C 875.64 570.38 873.67 509.4 873 476 M 873 476 C 873 476 873 476 873 476 M 873 476 C 873 476 873 476 873 476" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,943,556)" pointer-events="all"/>
<path d="M 989.46 472.87 L 992.25 493.76 L 1013.73 495.66 L 992.07 474.57" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,943,556)" pointer-events="all"/>
<path d="M 993 476 M 993 476 C 995.79 481.92 990.49 484.94 993 496 M 993 476 C 991.87 483.25 991.36 492.73 993 496 M 993 496 C 1002.16 497.77 1002.12 495.59 1013 496 M 993 496 C 997.58 494.95 1004.85 496.89 1013 496 M 1013 496 C 1007.16 491.92 1003.11 484.71 993 476 M 1013 496 C 1006.49 491.34 1003.11 484.95 993 476" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,943,556)" pointer-events="all"/>
<path d="M 993 476 M 993 476 C 990.45 480.96 992.35 483.53 993 496 M 993 476 C 990.97 482.63 993.52 485.27 993 496 M 993 496 C 995.9 494.71 1005.41 493.68 1013 496 M 993 496 C 999.11 497.77 1009.59 494.82 1013 496" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,943,556)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" font-weight="bold" text-anchor="middle" font-size="24px">
<text x="942.5" y="552">ipydrawio-</text>
<text x="942.5" y="581">export</text>
</g>
</g>
<g id="cell-27">
<path d="M 757.48 840 Q 757.48 840 884.29 645.87" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 882.98 661.6 L 884.9 644.94 L 870.42 653.39" fill="none" stroke="none" pointer-events="all"/>
<path d="M 757.48 840 M 757.48 840 C 755.71 838.77 797.78 777.03 884.29 645.87 M 757.48 840 C 756.71 841.74 798.25 776.12 884.29 645.87" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 882.98 661.6 M 882.98 661.6 C 884.95 657.53 885.16 653.48 884.9 644.94 M 882.98 661.6 C 884.07 656.73 883.75 651.04 884.9 644.94 M 884.9 644.94 C 881.39 649.15 873.3 650.58 870.42 653.39 M 884.9 644.94 C 879.78 648.62 874.52 652.02 870.42 653.39" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-28">
<path d="M 1359 365.68 Q 1359 365.68 1023.03 519.39" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 1032.54 506.79 L 1022.02 519.85 L 1038.78 520.43" fill="none" stroke="none" pointer-events="all"/>
<path d="M 1359 365.68 M 1359 365.68 C 1357.23 364.79 1247.45 417.51 1023.03 519.39 M 1359 365.68 C 1357.04 364.75 1249.15 414.8 1023.03 519.39" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 1032.54 506.79 M 1032.54 506.79 C 1030.76 508.14 1027.35 513.9 1022.02 519.85 M 1032.54 506.79 C 1029.9 508.7 1028.07 512.35 1022.02 519.85 M 1022.02 519.85 C 1029.8 519.68 1035.71 520.59 1038.78 520.43 M 1022.02 519.85 C 1027.47 520.23 1034.19 520.5 1038.78 520.43" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-29">
<path d="M 1108 941 L 1228 941 L 1248 961 L 1248 1101 L 1108 1101 L 1108 941 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,1178,1021)" pointer-events="all" opacity="0.25"/>
<path d="M 1108 941 L 1228 941 L 1248 961 L 1248 1101 L 1108 1101 L 1108 941 Z" fill="none" stroke="none" transform="rotate(180,1178,1021)" pointer-events="all"/>
<path d="M 1228 941 L 1228 961 L 1248 961 Z" fill="none" stroke="none" transform="rotate(180,1178,1021)" pointer-events="all"/>
<path d="M 1228 941 L 1228 961 L 1248 961" fill="none" stroke="none" transform="rotate(180,1178,1021)" pointer-events="all"/>
<path d="M 1104.46 939.91 L 1225.69 939.91 L 1250.51 962.74 L 1250.05 1100.2 L 1105.87 1101.1 L 1111.04 938.27" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,1178,1021)" pointer-events="all" opacity="0.25"/>
<path d="M 1104.46 939.91 L 1225.69 939.91 L 1250.51 962.74 L 1250.05 1100.2 L 1105.87 1101.1 L 1111.04 938.27" fill="#cdeb8b" stroke="none" transform="rotate(180,1178,1021)" pointer-events="all"/>
<path d="M 1108 941 M 1108 941 C 1155.11 940.91 1200.63 946.28 1228 941 M 1108 941 C 1140.85 939.04 1173.4 940.7 1228 941 M 1228 941 C 1235.16 949.09 1244.76 958.64 1248 961 M 1228 941 C 1231.43 946.91 1238.45 951.23 1248 961 M 1248 961 C 1243.84 1014.42 1243.91 1069.76 1248 1101 M 1248 961 C 1248.94 1012.69 1249.17 1065.34 1248 1101 M 1248 1101 C 1197.46 1102.65 1139.06 1098.89 1108 1101 M 1248 1101 C 1199.63 1100.14 1150.9 1100.6 1108 1101 M 1108 1101 C 1108.12 1051.85 1106.34 998.69 1108 941 M 1108 1101 C 1108.52 1039.14 1108.17 977.98 1108 941 M 1108 941 C 1108 941 1108 941 1108 941 M 1108 941 C 1108 941 1108 941 1108 941" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="translate(2,3)rotate(180,1178,1021)" pointer-events="all" opacity="0.25"/>
<path d="M 1108 941 M 1108 941 C 1155.11 940.91 1200.63 946.28 1228 941 M 1108 941 C 1140.85 939.04 1173.4 940.7 1228 941 M 1228 941 C 1235.16 949.09 1244.76 958.64 1248 961 M 1228 941 C 1231.43 946.91 1238.45 951.23 1248 961 M 1248 961 C 1243.84 1014.42 1243.91 1069.76 1248 1101 M 1248 961 C 1248.94 1012.69 1249.17 1065.34 1248 1101 M 1248 1101 C 1197.46 1102.65 1139.06 1098.89 1108 1101 M 1248 1101 C 1199.63 1100.14 1150.9 1100.6 1108 1101 M 1108 1101 C 1108.12 1051.85 1106.34 998.69 1108 941 M 1108 1101 C 1108.52 1039.14 1108.17 977.98 1108 941 M 1108 941 C 1108 941 1108 941 1108 941 M 1108 941 C 1108 941 1108 941 1108 941" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,1178,1021)" pointer-events="all"/>
<path d="M 1224.46 939.91 L 1225.69 959.91 L 1250.51 962.74 L 1230.05 940.2" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,1178,1021)" pointer-events="all"/>
<path d="M 1228 941 M 1228 941 C 1225.28 948.99 1226.59 947.78 1228 961 M 1228 941 C 1229.52 947.3 1229 955.42 1228 961 M 1228 961 C 1235.43 963.6 1241.81 963.3 1248 961 M 1228 961 C 1235.35 959.62 1238.48 959.91 1248 961 M 1248 961 C 1243.81 960.21 1234.62 950.91 1228 941 M 1248 961 C 1241.92 957.3 1239.85 950.72 1228 941" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,1178,1021)" pointer-events="all"/>
<path d="M 1228 941 M 1228 941 C 1226.8 947.74 1229.64 951.51 1228 961 M 1228 941 C 1229.3 945.24 1229.31 951.5 1228 961 M 1228 961 C 1234.77 964.62 1235.55 963.59 1248 961 M 1228 961 C 1236 961.54 1242.38 961.27 1248 961" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,1178,1021)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" text-anchor="middle" font-size="48px">
<text x="1177.5" y="1043.5">.svg</text>
</g>
</g>
<g id="cell-30">
<path d="M 780.19 943.6 Q 780.19 943.6 1097.81 1005.4" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 795.25 938.89 L 779.1 943.39 L 792.39 953.62" fill="none" stroke="none" pointer-events="all"/>
<path d="M 1082.75 1010.11 L 1098.9 1005.61 L 1085.61 995.38" fill="none" stroke="none" pointer-events="all"/>
<path d="M 780.19 943.6 M 780.19 943.6 C 778.42 942.54 885.82 962.51 1097.81 1005.4 M 780.19 943.6 C 778.42 945.71 884.47 963.37 1097.81 1005.4" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 795.25 938.89 M 795.25 938.89 C 790.39 938.53 789.93 939.61 779.1 943.39 M 795.25 938.89 C 790.23 939.98 786.53 940.43 779.1 943.39 M 779.1 943.39 C 785.2 948.81 788.02 951.31 792.39 953.62 M 779.1 943.39 C 783.99 946.57 788.78 951.33 792.39 953.62" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 1082.75 1010.11 M 1082.75 1010.11 C 1084.78 1007.89 1091.15 1007.06 1098.9 1005.61 M 1082.75 1010.11 C 1086.22 1009.05 1091.04 1007.13 1098.9 1005.61 M 1098.9 1005.61 C 1094.42 1002.72 1086.73 997.12 1085.61 995.38 M 1098.9 1005.61 C 1093.65 1000.8 1088.35 997.8 1085.61 995.38" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-31">
<path d="M 1256 1001.1 Q 1256 1001.1 1391.83 966.45" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 1380.24 977.15 L 1392.92 966.17 L 1376.53 962.61" fill="none" stroke="none" pointer-events="all"/>
<path d="M 1256 1001.1 M 1256 1001.1 C 1254.23 1000.38 1299.44 990.72 1391.83 966.45 M 1256 1001.1 C 1257.64 1000.55 1303.32 990.38 1391.83 966.45" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 1380.24 977.15 M 1380.24 977.15 C 1383.94 976.14 1385.24 974.11 1392.92 966.17 M 1380.24 977.15 C 1384.66 973.66 1389.13 970.27 1392.92 966.17 M 1392.92 966.17 C 1389.65 965.19 1385.83 965.05 1376.53 962.61 M 1392.92 966.17 C 1386.27 965.53 1380.95 963.28 1376.53 962.61" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-32">
<path d="M 1610 860 L 1730 860 L 1750 880 L 1750 1020 L 1610 1020 L 1610 860 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,1680,940)" pointer-events="all" opacity="0.25"/>
<path d="M 1610 860 L 1730 860 L 1750 880 L 1750 1020 L 1610 1020 L 1610 860 Z" fill="none" stroke="none" transform="rotate(180,1680,940)" pointer-events="all"/>
<path d="M 1730 860 L 1730 880 L 1750 880 Z" fill="none" stroke="none" transform="rotate(180,1680,940)" pointer-events="all"/>
<path d="M 1730 860 L 1730 880 L 1750 880" fill="none" stroke="none" transform="rotate(180,1680,940)" pointer-events="all"/>
<path d="M 1606.47 859.23 L 1731.14 860.05 L 1750.78 882.4 L 1751.88 1016.32 L 1612.82 1022.01 L 1607.87 861.76" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,1680,940)" pointer-events="all" opacity="0.25"/>
<path d="M 1606.47 859.23 L 1731.14 860.05 L 1750.78 882.4 L 1751.88 1016.32 L 1612.82 1022.01 L 1607.87 861.76" fill="url(#mx-gradient-fff2a1-1-fff9b2-1-s-0)" stroke="none" transform="rotate(180,1680,940)" pointer-events="all"/>
<path d="M 1726.47 859.23 L 1731.14 880.05 L 1750.78 882.4 L 1731.88 856.32" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,1680,940)" pointer-events="all"/>
<path d="M 1730 860 M 1730 860 C 1731.96 864.55 1730.23 873.46 1730 880 M 1730 860 C 1731.88 866.71 1731.36 875.96 1730 880 M 1730 880 C 1739.59 878.84 1741.36 877.56 1750 880 M 1730 880 C 1735.45 879.98 1741.53 879.07 1750 880 M 1750 880 C 1741.43 870.34 1735.14 864.32 1730 860 M 1750 880 C 1742.6 872.77 1739.01 868.75 1730 860" fill="none" stroke="none" transform="rotate(180,1680,940)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" font-weight="bold" text-anchor="middle" font-size="24px">
<text x="1679.5" y="950.5">READERS</text>
</g>
</g>
<g id="cell-33">
<path d="M 1550 943.75 Q 1550 943.75 1599.76 942.31" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 1586.1 950.21 L 1600.88 942.28 L 1585.67 935.22" fill="none" stroke="none" pointer-events="all"/>
<path d="M 1550 943.75 M 1550 943.75 C 1548.23 943.71 1565.56 942.15 1599.76 942.31 M 1550 943.75 C 1549.26 942.46 1566.71 942.81 1599.76 942.31" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 1586.1 950.21 M 1586.1 950.21 C 1588.29 948.06 1591.42 947.02 1600.88 942.28 M 1586.1 950.21 C 1590.73 948.67 1594.36 945.43 1600.88 942.28 M 1600.88 942.28 C 1596.16 940.1 1592.99 936.43 1585.67 935.22 M 1600.88 942.28 C 1595.74 940.52 1591.42 938.7 1585.67 935.22" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-34">
<path d="M 868.32 310.41 Q 868.32 310.41 769.68 397.59" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 862.89 325.22 L 869.16 309.67 L 852.96 313.98" fill="none" stroke="none" pointer-events="all"/>
<path d="M 775.11 382.78 L 768.84 398.33 L 785.04 394.02" fill="none" stroke="none" pointer-events="all"/>
<path d="M 868.32 310.41 M 868.32 310.41 C 866.55 310.71 836.82 341.21 769.68 397.59 M 868.32 310.41 C 866.38 311.05 834.6 340.67 769.68 397.59" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 862.89 325.22 M 862.89 325.22 C 865.65 320.47 865.99 317.98 869.16 309.67 M 862.89 325.22 C 864.83 320.49 867.85 315.02 869.16 309.67 M 869.16 309.67 C 863.25 309.77 858.25 311.9 852.96 313.98 M 869.16 309.67 C 865.16 310.85 860.02 312.21 852.96 313.98" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 775.11 382.78 M 775.11 382.78 C 775.27 384.7 772.95 388.79 768.84 398.33 M 775.11 382.78 C 772.94 388.96 771.54 394.44 768.84 398.33 M 768.84 398.33 C 773.87 395.22 779.77 394.46 785.04 394.02 M 768.84 398.33 C 774.01 397.32 777.96 396.26 785.04 394.02" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-35">
<path d="M 1131 0 L 1251 0 L 1271 20 L 1271 160 L 1131 160 L 1131 0 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,1201,80)" pointer-events="all" opacity="0.25"/>
<path d="M 1131 0 L 1251 0 L 1271 20 L 1271 160 L 1131 160 L 1131 0 Z" fill="none" stroke="none" transform="rotate(180,1201,80)" pointer-events="all"/>
<path d="M 1251 0 L 1251 20 L 1271 20 Z" fill="none" stroke="none" transform="rotate(180,1201,80)" pointer-events="all"/>
<path d="M 1251 0 L 1251 20 L 1271 20" fill="none" stroke="none" transform="rotate(180,1201,80)" pointer-events="all"/>
<path d="M 1127.47 1.27 L 1250.57 1.2 L 1273.56 16.48 L 1267.86 156.96 L 1127.44 161.24 L 1127.22 -3.67" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,1201,80)" pointer-events="all" opacity="0.25"/>
<path d="M 1127.47 1.27 L 1250.57 1.2 L 1273.56 16.48 L 1267.86 156.96 L 1127.44 161.24 L 1127.22 -3.67" fill="#ffcc99" stroke="none" transform="rotate(180,1201,80)" pointer-events="all"/>
<path d="M 1131 0 M 1131 0 C 1164.72 -0.19 1191.58 -0.96 1251 0 M 1131 0 C 1156.37 0.73 1184.85 0.81 1251 0 M 1251 0 C 1253.54 2.41 1264.31 12.38 1271 20 M 1251 0 C 1258.04 5.27 1262.98 11.23 1271 20 M 1271 20 C 1273.74 62.73 1271.98 104.37 1271 160 M 1271 20 C 1267.46 61.22 1269.02 105.89 1271 160 M 1271 160 C 1219.09 161.44 1171.07 162.08 1131 160 M 1271 160 C 1221.61 161.62 1169.33 159.01 1131 160 M 1131 160 C 1133.53 123.37 1134.2 77.51 1131 0 M 1131 160 C 1134.84 116 1133.04 69.23 1131 0 M 1131 0 C 1131 0 1131 0 1131 0 M 1131 0 C 1131 0 1131 0 1131 0" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="translate(2,3)rotate(180,1201,80)" pointer-events="all" opacity="0.25"/>
<path d="M 1131 0 M 1131 0 C 1164.72 -0.19 1191.58 -0.96 1251 0 M 1131 0 C 1156.37 0.73 1184.85 0.81 1251 0 M 1251 0 C 1253.54 2.41 1264.31 12.38 1271 20 M 1251 0 C 1258.04 5.27 1262.98 11.23 1271 20 M 1271 20 C 1273.74 62.73 1271.98 104.37 1271 160 M 1271 20 C 1267.46 61.22 1269.02 105.89 1271 160 M 1271 160 C 1219.09 161.44 1171.07 162.08 1131 160 M 1271 160 C 1221.61 161.62 1169.33 159.01 1131 160 M 1131 160 C 1133.53 123.37 1134.2 77.51 1131 0 M 1131 160 C 1134.84 116 1133.04 69.23 1131 0 M 1131 0 C 1131 0 1131 0 1131 0 M 1131 0 C 1131 0 1131 0 1131 0" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,1201,80)" pointer-events="all"/>
<path d="M 1247.47 1.27 L 1250.57 21.2 L 1273.56 16.48 L 1247.86 -3.04" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,1201,80)" pointer-events="all"/>
<path d="M 1251 0 M 1251 0 C 1247.45 2.62 1252.33 11.3 1251 20 M 1251 0 C 1251.53 5.77 1251.01 13.65 1251 20 M 1251 20 C 1254.86 20.47 1259.05 21.07 1271 20 M 1251 20 C 1255.22 19.65 1261.17 21.1 1271 20 M 1271 20 C 1264.08 13.63 1260.66 5.52 1251 0 M 1271 20 C 1263.23 13.73 1256.95 9.52 1251 0" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,1201,80)" pointer-events="all"/>
<path d="M 1251 0 M 1251 0 C 1252.32 6.8 1247.61 5.33 1251 20 M 1251 0 C 1248.76 2.64 1249.84 9.56 1251 20 M 1251 20 C 1256.63 20.6 1262.85 19.56 1271 20 M 1251 20 C 1255.97 19.81 1261.45 19.72 1271 20" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,1201,80)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" text-anchor="middle" font-size="24px">
<text x="1200.5" y="90.5">jlpm</text>
</g>
</g>
<g id="cell-36">
<path d="M 698.09 840 Q 698.09 840 691.96 558.24" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 699.76 571.95 L 691.94 557.12 L 684.77 572.28" fill="none" stroke="none" pointer-events="all"/>
<path d="M 698.09 840 M 698.09 840 C 696.32 840.98 694.24 745.54 691.96 558.24 M 698.09 840 C 698.37 839.91 697.88 745.99 691.96 558.24" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 699.76 571.95 M 699.76 571.95 C 697.58 568.95 696.31 566.94 691.94 557.12 M 699.76 571.95 C 697.77 567.04 695.55 563.02 691.94 557.12 M 691.94 557.12 C 689.38 559.02 689.79 563.95 684.77 572.28 M 691.94 557.12 C 689.48 560.35 688.73 563.63 684.77 572.28" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-37">
<path d="M 865 528.87 Q 865 528.87 770.11 495.87" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 785.69 493.34 L 769.06 495.5 L 780.76 507.51" fill="none" stroke="none" pointer-events="all"/>
<path d="M 865 528.87 M 865 528.87 C 863.23 530.19 833.97 516.18 770.11 495.87 M 865 528.87 C 864.09 530.71 834.24 519.43 770.11 495.87" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 785.69 493.34 M 785.69 493.34 C 780.77 493.18 780 494.94 769.06 495.5 M 785.69 493.34 C 779.09 493.64 772.72 494.15 769.06 495.5 M 769.06 495.5 C 770.41 499.09 774.17 502.68 780.76 507.51 M 769.06 495.5 C 771.74 497.38 774.13 501.13 780.76 507.51" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-38">
<path d="M 458 89.95 Q 458 89.95 1120.76 81.08" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 1106.98 88.76 L 1121.88 81.06 L 1106.78 73.76" fill="none" stroke="none" pointer-events="all"/>
<path d="M 458 89.95 M 458 89.95 C 456.23 91.61 677.92 88.16 1120.76 81.08 M 458 89.95 C 455.9 89.12 678.83 85.61 1120.76 81.08" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 1106.98 88.76 M 1106.98 88.76 C 1111.05 85.67 1112.62 85.51 1121.88 81.06 M 1106.98 88.76 C 1111.13 86.66 1114.1 85.55 1121.88 81.06 M 1121.88 81.06 C 1119.33 78.22 1115.14 75.76 1106.78 73.76 M 1121.88 81.06 C 1115.81 77.5 1110.79 75.81 1106.78 73.76" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-39">
<path d="M 203 880 L 323 880 L 343 900 L 343 1040 L 203 1040 L 203 880 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,273,960)" pointer-events="all" opacity="0.25"/>
<path d="M 203 880 L 323 880 L 343 900 L 343 1040 L 203 1040 L 203 880 Z" fill="none" stroke="none" transform="rotate(180,273,960)" pointer-events="all"/>
<path d="M 323 880 L 323 900 L 343 900 Z" fill="none" stroke="none" transform="rotate(180,273,960)" pointer-events="all"/>
<path d="M 323 880 L 323 900 L 343 900" fill="none" stroke="none" transform="rotate(180,273,960)" pointer-events="all"/>
<path d="M 199.47 883.99 L 325.82 880.06 L 345.27 901.92 L 341.16 1040.48 L 201.6 1042.89 L 202.36 879.74" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,273,960)" pointer-events="all" opacity="0.25"/>
<path d="M 199.47 883.99 L 325.82 880.06 L 345.27 901.92 L 341.16 1040.48 L 201.6 1042.89 L 202.36 879.74" fill="#ffcc99" stroke="none" transform="rotate(180,273,960)" pointer-events="all"/>
<path d="M 203 880 M 203 880 C 246 880.26 294.68 881.85 323 880 M 203 880 C 241.48 878.61 282.1 880.53 323 880 M 323 880 C 332.94 886.1 333.52 895.25 343 900 M 323 880 C 329.6 888.49 335.57 895.44 343 900 M 343 900 C 343.69 932.11 348.46 957.94 343 1040 M 343 900 C 343.1 943.96 346.47 988.19 343 1040 M 343 1040 C 304.22 1039.69 271.37 1038.02 203 1040 M 343 1040 C 306.35 1041.87 266.73 1040.73 203 1040 M 203 1040 C 205.83 1003.15 200.64 966.96 203 880 M 203 1040 C 202.68 1007.68 201.71 975.34 203 880 M 203 880 C 203 880 203 880 203 880 M 203 880 C 203 880 203 880 203 880" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="translate(2,3)rotate(180,273,960)" pointer-events="all" opacity="0.25"/>
<path d="M 203 880 M 203 880 C 246 880.26 294.68 881.85 323 880 M 203 880 C 241.48 878.61 282.1 880.53 323 880 M 323 880 C 332.94 886.1 333.52 895.25 343 900 M 323 880 C 329.6 888.49 335.57 895.44 343 900 M 343 900 C 343.69 932.11 348.46 957.94 343 1040 M 343 900 C 343.1 943.96 346.47 988.19 343 1040 M 343 1040 C 304.22 1039.69 271.37 1038.02 203 1040 M 343 1040 C 306.35 1041.87 266.73 1040.73 203 1040 M 203 1040 C 205.83 1003.15 200.64 966.96 203 880 M 203 1040 C 202.68 1007.68 201.71 975.34 203 880 M 203 880 C 203 880 203 880 203 880 M 203 880 C 203 880 203 880 203 880" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,273,960)" pointer-events="all"/>
<path d="M 319.47 883.99 L 325.82 900.06 L 345.27 901.92 L 321.16 880.48" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,273,960)" pointer-events="all"/>
<path d="M 323 880 M 323 880 C 323.03 888.05 323.41 891.08 323 900 M 323 880 C 324.12 885.84 322.27 891.9 323 900 M 323 900 C 332.56 902.11 334.65 902.55 343 900 M 323 900 C 330.9 901.6 338.01 900.86 343 900 M 343 900 C 339.61 891.09 336.01 886.85 323 880 M 343 900 C 336.07 895.54 334.21 888.43 323 880" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,273,960)" pointer-events="all"/>
<path d="M 323 880 M 323 880 C 323.45 886.51 325.32 886.63 323 900 M 323 880 C 322.54 886.11 324.23 892.54 323 900 M 323 900 C 332.46 902.08 336.38 898.37 343 900 M 323 900 C 331.82 901.9 338.5 900.06 343 900" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,273,960)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" text-anchor="middle" font-size="24px">
<text x="272.5" y="970.5">drawio</text>
</g>
</g>
<g id="cell-40">
<path d="M 351 954.15 Q 351 954.15 619.77 934.01" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 606.49 942.53 L 620.89 933.93 L 605.37 927.57" fill="none" stroke="none" pointer-events="all"/>
<path d="M 351 954.15 M 351 954.15 C 349.24 955.63 438.92 946.32 619.77 934.01 M 351 954.15 C 349.09 956.36 441.36 947.34 619.77 934.01" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 606.49 942.53 M 606.49 942.53 C 608.54 939.44 614.14 939.57 620.89 933.93 M 606.49 942.53 C 610.83 940.52 614.67 937.05 620.89 933.93 M 620.89 933.93 C 617.69 932.82 611.4 931.68 605.37 927.57 M 620.89 933.93 C 617.48 932.42 613.76 931.29 605.37 927.57" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-41">
<path d="M 1359 247.37 Q 1359 247.37 1280.53 164.25" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 1295.52 169.2 L 1279.77 163.44 L 1284.61 179.5" fill="none" stroke="none" pointer-events="all"/>
<path d="M 1359 247.37 M 1359 247.37 C 1357.24 249.19 1333.57 221.41 1280.53 164.25 M 1359 247.37 C 1360.5 246.92 1332.65 221.22 1280.53 164.25" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 1295.52 169.2 M 1295.52 169.2 C 1293.59 169.13 1288.47 166.68 1279.77 163.44 M 1295.52 169.2 C 1289.14 167.89 1284.26 165.86 1279.77 163.44 M 1279.77 163.44 C 1282.32 167.81 1284.4 172.51 1284.61 179.5 M 1279.77 163.44 C 1280.87 169.34 1283.09 175.61 1284.61 179.5" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-42">
<path d="M 684 1128 L 804 1128 L 824 1148 L 824 1288 L 684 1288 L 684 1128 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,754,1208)" pointer-events="all" opacity="0.25"/>
<path d="M 684 1128 L 804 1128 L 824 1148 L 824 1288 L 684 1288 L 684 1128 Z" fill="none" stroke="none" transform="rotate(180,754,1208)" pointer-events="all"/>
<path d="M 804 1128 L 804 1148 L 824 1148 Z" fill="none" stroke="none" transform="rotate(180,754,1208)" pointer-events="all"/>
<path d="M 804 1128 L 804 1148 L 824 1148" fill="none" stroke="none" transform="rotate(180,754,1208)" pointer-events="all"/>
<path d="M 680.47 1124.32 L 802.27 1129.2 L 824.54 1150.57 L 822 1285.59 L 687.55 1284.8 L 686.19 1124.24" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,754,1208)" pointer-events="all" opacity="0.25"/>
<path d="M 680.47 1124.32 L 802.27 1129.2 L 824.54 1150.57 L 822 1285.59 L 687.55 1284.8 L 686.19 1124.24" fill="#cdeb8b" stroke="none" transform="rotate(180,754,1208)" pointer-events="all"/>
<path d="M 684 1128 M 684 1128 C 710.65 1129.42 738.31 1129.11 804 1128 M 684 1128 C 721.16 1128.28 758.61 1125.25 804 1128 M 804 1128 C 809.57 1133.85 812.97 1138.04 824 1148 M 804 1128 C 809.54 1131.03 813.67 1135.89 824 1148 M 824 1148 C 822.74 1184.39 826.77 1223.37 824 1288 M 824 1148 C 825.89 1200.42 824.23 1254.01 824 1288 M 824 1288 C 772 1285.99 722.15 1286.45 684 1288 M 824 1288 C 783.78 1287.36 740.11 1287.05 684 1288 M 684 1288 C 679.01 1241.83 678.67 1199.69 684 1128 M 684 1288 C 682.73 1237.78 682.68 1188 684 1128 M 684 1128 C 684 1128 684 1128 684 1128 M 684 1128 C 684 1128 684 1128 684 1128" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="translate(2,3)rotate(180,754,1208)" pointer-events="all" opacity="0.25"/>
<path d="M 684 1128 M 684 1128 C 710.65 1129.42 738.31 1129.11 804 1128 M 684 1128 C 721.16 1128.28 758.61 1125.25 804 1128 M 804 1128 C 809.57 1133.85 812.97 1138.04 824 1148 M 804 1128 C 809.54 1131.03 813.67 1135.89 824 1148 M 824 1148 C 822.74 1184.39 826.77 1223.37 824 1288 M 824 1148 C 825.89 1200.42 824.23 1254.01 824 1288 M 824 1288 C 772 1285.99 722.15 1286.45 684 1288 M 824 1288 C 783.78 1287.36 740.11 1287.05 684 1288 M 684 1288 C 679.01 1241.83 678.67 1199.69 684 1128 M 684 1288 C 682.73 1237.78 682.68 1188 684 1128 M 684 1128 C 684 1128 684 1128 684 1128 M 684 1128 C 684 1128 684 1128 684 1128" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,754,1208)" pointer-events="all"/>
<path d="M 800.47 1124.32 L 802.27 1149.2 L 824.54 1150.57 L 802 1125.59" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,754,1208)" pointer-events="all"/>
<path d="M 804 1128 M 804 1128 C 799.92 1132.61 805.24 1145.76 804 1148 M 804 1128 C 805.49 1134.25 803.63 1141.44 804 1148 M 804 1148 C 807.72 1146.35 813.2 1145.81 824 1148 M 804 1148 C 810.01 1146.16 816.06 1148.22 824 1148 M 824 1148 C 816.23 1139.02 807.53 1130.06 804 1128 M 824 1148 C 819.75 1144.01 812.37 1135.45 804 1128" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,754,1208)" pointer-events="all"/>
<path d="M 804 1128 M 804 1128 C 804.84 1132.78 806.2 1134.47 804 1148 M 804 1128 C 805.45 1130.92 802.77 1138.37 804 1148 M 804 1148 C 812.44 1150.15 818.53 1146.44 824 1148 M 804 1148 C 811.9 1146.41 817.78 1146.07 824 1148" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,754,1208)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" text-anchor="middle" font-size="48px">
<text x="753.5" y="1230.5">.dio</text>
</g>
</g>
<g id="cell-43">
<path d="M 919 1091 L 1039 1091 L 1059 1111 L 1059 1251 L 919 1251 L 919 1091 Z" fill="none" stroke="none" transform="translate(2,3)rotate(180,989,1171)" pointer-events="all" opacity="0.25"/>
<path d="M 919 1091 L 1039 1091 L 1059 1111 L 1059 1251 L 919 1251 L 919 1091 Z" fill="none" stroke="none" transform="rotate(180,989,1171)" pointer-events="all"/>
<path d="M 1039 1091 L 1039 1111 L 1059 1111 Z" fill="none" stroke="none" transform="rotate(180,989,1171)" pointer-events="all"/>
<path d="M 1039 1091 L 1039 1111 L 1059 1111" fill="none" stroke="none" transform="rotate(180,989,1171)" pointer-events="all"/>
<path d="M 915.47 1088 L 1042.08 1089.92 L 1057.47 1108.93 L 1055.32 1251.47 L 915.09 1250.22 L 917.98 1088.09" fill="#000000" stroke="none" transform="translate(2,3)rotate(180,989,1171)" pointer-events="all" opacity="0.25"/>
<path d="M 915.47 1088 L 1042.08 1089.92 L 1057.47 1108.93 L 1055.32 1251.47 L 915.09 1250.22 L 917.98 1088.09" fill="#cdeb8b" stroke="none" transform="rotate(180,989,1171)" pointer-events="all"/>
<path d="M 919 1091 M 919 1091 C 951.97 1089.33 991.08 1087.61 1039 1091 M 919 1091 C 947.44 1088.95 973.92 1088.38 1039 1091 M 1039 1091 C 1045.02 1097.98 1047.87 1103.96 1059 1111 M 1039 1091 C 1044.23 1095.64 1049.61 1101.74 1059 1111 M 1059 1111 C 1058.02 1151.73 1061.69 1193.76 1059 1251 M 1059 1111 C 1061.2 1157.11 1062.99 1203.58 1059 1251 M 1059 1251 C 1020.28 1251.35 986.23 1255.24 919 1251 M 1059 1251 C 1028.96 1255.23 997.46 1252.28 919 1251 M 919 1251 C 916.89 1190.77 921.08 1129.05 919 1091 M 919 1251 C 915.69 1212.7 918.85 1173.53 919 1091 M 919 1091 C 919 1091 919 1091 919 1091 M 919 1091 C 919 1091 919 1091 919 1091" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="translate(2,3)rotate(180,989,1171)" pointer-events="all" opacity="0.25"/>
<path d="M 919 1091 M 919 1091 C 951.97 1089.33 991.08 1087.61 1039 1091 M 919 1091 C 947.44 1088.95 973.92 1088.38 1039 1091 M 1039 1091 C 1045.02 1097.98 1047.87 1103.96 1059 1111 M 1039 1091 C 1044.23 1095.64 1049.61 1101.74 1059 1111 M 1059 1111 C 1058.02 1151.73 1061.69 1193.76 1059 1251 M 1059 1111 C 1061.2 1157.11 1062.99 1203.58 1059 1251 M 1059 1251 C 1020.28 1251.35 986.23 1255.24 919 1251 M 1059 1251 C 1028.96 1255.23 997.46 1252.28 919 1251 M 919 1251 C 916.89 1190.77 921.08 1129.05 919 1091 M 919 1251 C 915.69 1212.7 918.85 1173.53 919 1091 M 919 1091 C 919 1091 919 1091 919 1091 M 919 1091 C 919 1091 919 1091 919 1091" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,989,1171)" pointer-events="all"/>
<path d="M 1035.47 1088 L 1042.08 1109.92 L 1057.47 1108.93 L 1035.32 1091.47" fill-opacity="0.05" fill="#000000" stroke="none" transform="rotate(180,989,1171)" pointer-events="all"/>
<path d="M 1039 1091 M 1039 1091 C 1036.02 1094.96 1038.21 1102.7 1039 1111 M 1039 1091 C 1038.44 1094.27 1039.25 1101 1039 1111 M 1039 1111 C 1042.14 1110.16 1055.09 1107.58 1059 1111 M 1039 1111 C 1045.93 1110.65 1049.27 1112.16 1059 1111 M 1059 1111 C 1053.11 1104.18 1049.37 1101.19 1039 1091 M 1059 1111 C 1055.96 1107.06 1051.68 1103.78 1039 1091" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,989,1171)" pointer-events="all"/>
<path d="M 1039 1091 M 1039 1091 C 1037.62 1093.7 1036.63 1095.79 1039 1111 M 1039 1091 C 1038.1 1095.78 1038.57 1103.12 1039 1111 M 1039 1111 C 1047.39 1109.72 1051.91 1111.34 1059 1111 M 1039 1111 C 1044.86 1109.54 1052.04 1112.75 1059 1111" fill="none" stroke="#36393d" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" transform="rotate(180,989,1171)" pointer-events="all"/>
<g fill="#000000" font-family="Architects Daughter" text-anchor="middle" font-size="48px">
<text x="988.5" y="1193.5">.ipynb</text>
</g>
</g>
<g id="cell-44">
<path d="M 351 1000.22 Q 351 1000.22 674.01 1166.76" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 658.24 1167.06 L 675.01 1167.27 L 665.11 1153.73" fill="none" stroke="none" pointer-events="all"/>
<path d="M 351 1000.22 M 351 1000.22 C 349.24 999.06 458.62 1054.05 674.01 1166.76 M 351 1000.22 C 348.93 1000.96 460.19 1057.66 674.01 1166.76" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 658.24 1167.06 M 658.24 1167.06 C 660.38 1165.6 665.88 1168.26 675.01 1167.27 M 658.24 1167.06 C 665.46 1166.64 671.74 1166.53 675.01 1167.27 M 675.01 1167.27 C 672.64 1165.48 671.43 1161.99 665.11 1153.73 M 675.01 1167.27 C 672.49 1163.79 668.62 1159.02 665.11 1153.73" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-45">
<path d="M 779.71 995.02 Q 779.71 995.02 909.29 1103.98" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 795.16 998.22 L 778.86 994.3 L 785.51 1009.7" fill="none" stroke="none" pointer-events="all"/>
<path d="M 893.84 1100.78 L 910.14 1104.7 L 903.49 1089.3" fill="none" stroke="none" pointer-events="all"/>
<path d="M 779.71 995.02 M 779.71 995.02 C 777.95 994.2 821.25 1032.51 909.29 1103.98 M 779.71 995.02 C 781.05 993.1 823.46 1030.32 909.29 1103.98" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 795.16 998.22 M 795.16 998.22 C 792.71 998.23 786.87 996.83 778.86 994.3 M 795.16 998.22 C 791.13 996.81 786.45 996.63 778.86 994.3 M 778.86 994.3 C 780.19 998.15 781.99 1003.96 785.51 1009.7 M 778.86 994.3 C 780.88 999.3 782.8 1003.06 785.51 1009.7" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 893.84 1100.78 M 893.84 1100.78 C 898.26 1102.72 899.33 1102.98 910.14 1104.7 M 893.84 1100.78 C 898.1 1101.69 901.75 1103.52 910.14 1104.7 M 910.14 1104.7 C 908.06 1100.4 906.39 1098.18 903.49 1089.3 M 910.14 1104.7 C 908.12 1100.86 906.19 1095.7 903.49 1089.3" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-46">
<path d="M 413.64 179 Q 413.64 179 665.56 837.91" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 653.59 827.62 L 665.96 838.96 L 667.61 822.27" fill="none" stroke="none" pointer-events="all"/>
<path d="M 413.64 179 M 413.64 179 C 411.88 178.52 498.37 398.67 665.56 837.91 M 413.64 179 C 413.78 179.01 497.21 399.28 665.56 837.91" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 653.59 827.62 M 653.59 827.62 C 656.21 830.08 658.81 832.08 665.96 838.96 M 653.59 827.62 C 657.02 831.31 661.88 835.2 665.96 838.96 M 665.96 838.96 C 665.91 835.62 665.51 828.01 667.61 822.27 M 665.96 838.96 C 665.62 834.94 666.8 829.65 667.61 822.27" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-47">
<path d="M 644.85 840 Q 644.85 840 442.34 516.89" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 456.07 524.67 L 441.75 515.95 L 443.36 532.64" fill="none" stroke="none" pointer-events="all"/>
<path d="M 644.85 840 M 644.85 840 C 643.09 839.86 576.51 731.19 442.34 516.89 M 644.85 840 C 643.8 841.94 575.98 734.59 442.34 516.89" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 456.07 524.67 M 456.07 524.67 C 452.11 522 451.42 519.92 441.75 515.95 M 456.07 524.67 C 450.83 521.32 443.88 517.35 441.75 515.95 M 441.75 515.95 C 441.34 521.54 443.38 526.62 443.36 532.64 M 441.75 515.95 C 442.68 520.15 442.89 524.77 443.36 532.64" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-48">
<path d="M 622 888.8 Q 622 888.8 193 673.2" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 208.77 672.74 L 192 672.7 L 202.03 686.14" fill="none" stroke="none" pointer-events="all"/>
<path d="M 622 888.8 M 622 888.8 C 620.24 889 480.57 818.68 193 673.2 M 622 888.8 C 619.76 888.07 481.27 816.28 193 673.2" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 208.77 672.74 M 208.77 672.74 C 206.68 671.23 201.13 674.51 192 672.7 M 208.77 672.74 C 203.98 673.15 199.52 673.68 192 672.7 M 192 672.7 C 194.3 676.22 198.53 682.93 202.03 686.14 M 192 672.7 C 193.78 675.58 196.51 678.9 202.03 686.14" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-49">
<path d="M 622 852.1 Q 622 852.1 149.6 392.45" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 164.78 396.76 L 148.8 391.67 L 154.32 407.51" fill="none" stroke="none" pointer-events="all"/>
<path d="M 622 852.1 M 622 852.1 C 620.24 852.64 464.51 699.49 149.6 392.45 M 622 852.1 C 623.17 853.3 465.84 699.89 149.6 392.45" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 164.78 396.76 M 164.78 396.76 C 161.89 396.53 158.87 395.56 148.8 391.67 M 164.78 396.76 C 160.07 395.38 154.31 393.51 148.8 391.67 M 148.8 391.67 C 148.42 395.17 152.49 399.03 154.32 407.51 M 148.8 391.67 C 151.61 397.62 153.42 404.06 154.32 407.51" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-50">
<path d="M 717.39 1018.2 Q 717.39 1018.2 736.61 1117.8" fill="none" stroke="none" pointer-events="stroke"/>
<path d="M 727.39 1030.41 L 717.18 1017.1 L 712.66 1033.25" fill="none" stroke="none" pointer-events="all"/>
<path d="M 726.61 1105.59 L 736.82 1118.9 L 741.34 1102.75" fill="none" stroke="none" pointer-events="all"/>
<path d="M 717.39 1018.2 M 717.39 1018.2 C 715.63 1018.22 724.69 1050.86 736.61 1117.8 M 717.39 1018.2 C 715.35 1015.91 722.34 1052.03 736.61 1117.8" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 727.39 1030.41 M 727.39 1030.41 C 724.77 1026.14 721.39 1023.75 717.18 1017.1 M 727.39 1030.41 C 723.3 1025.49 720.25 1021.68 717.18 1017.1 M 717.18 1017.1 C 717.17 1023.35 714.18 1028.94 712.66 1033.25 M 717.18 1017.1 C 715.87 1021.67 714.19 1025.22 712.66 1033.25" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
<path d="M 726.61 1105.59 M 726.61 1105.59 C 728.32 1106.87 729.27 1110.12 736.82 1118.9 M 726.61 1105.59 C 729.42 1109.25 733.06 1114.16 736.82 1118.9 M 736.82 1118.9 C 739.96 1113.03 740.35 1106.55 741.34 1102.75 M 736.82 1118.9 C 738.01 1115.45 738.56 1111.03 741.34 1102.75" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
</g>
</svg>

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 83 KiB

File diff suppressed because one or more lines are too long

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 308 KiB

Wyświetl plik

@ -0,0 +1,102 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1001px" height="361px" viewBox="-0.5 -0.5 1001 361" content="&lt;mxfile version=&quot;14.7.3&quot; type=&quot;embed&quot;&gt;&#10; &lt;diagram id=&quot;5VtAhx_Kaj5QVmaxudvQ&quot; name=&quot;Page-1&quot;&gt;7VpNc5swEP01PqYjPk2OSZqmh3aaSabTY0aGtU2CESPk2PTXV4AEQsRfsTF2kxwy6LES0u57q0V4YN3MlncUJ9OfJIBoYKJgObC+DkzTsS/5/xzISmCI3BKY0DAoIaMGHsO/IEAk0HkYQNowZIRELEyaoE/iGHzWwDClZNE0G5Oo+dQET6AFPPo4aqN/woBNBWogVN/4DuFkKh7tOeLGDEtjAaRTHJCFAlm3A+uGEsLKq9nyBqLcd9IvZb9vK+5WE6MQs206eGWHVxzNxdrEvFgmFwsBX7toEsqmZEJiHN3W6DUl8ziAfETEW7XND0ISDhocfAbGMhFIPGeEQ+2pitmnZE598XDBC4bpBITVsITyaSndxPLugMyA0YwbUIgwC1+bIcMi8pPKTnS9ohRnikFCwpilysj3OcANBIdNW0Qwk9TUHL3J3mvY84tyBrKlLKWGiuAVzd8p0F+j55zcJorwiOurnHb2lGD/hfMvFZ6jAA8FnRQvyOi7yvoEMZTA4yicxPzS5wECyiPmkyjCSRqOCgtUIDHDYZzfLcJMwZ/TlDv9AdIy2GhdpF+BMliujaK4q3lPOA8tFPW5ApsqwpPd3gq74nrVs7ypOHets8MkCyhehKTp1eHZeLXyY6b58Dh+bWWjy/PLRnJLOnA6auWPam+RodJDUM5T9KqjsHNec3bMa+vtD5XXKqk9wTLhMW0qzkCDc5XccTNZu2A4dckZsr5TNeedRAng7VgCtOw7KgG23/8N1W+nrRuvV93sWAGUBO3er+Mwim5IRGgxrhVg8MY+x1NGyQsod1zfg9H4MJFwdRr3XDTIV6mzSmHSruuywXW1YA27KRv2zYWm223ZcLGAUZ4Ymzo1j5T/TkKnlf760ql5jjq1jqPToanpx0ZfkPIn53FisrXsjmUbEwYjQnTdWh9It5bZs27tc9St83/r1thRt+vtD6/bJBhrknV6kezY88F/U7Ijz7GdA72c6JLt+aVenlOdl2K7Odc/GcXuudPaZseKfZ4nGZfeBYNZwh0szw8qTh3pVPsktlwb9SzgbT7LxcFV/imTt2IS54INcDot9GqIxj1mPBhxgZjIqrwov1lyj1xvzgPvzaiakDcnBbRqG2/HTYmL80ZYJLZnqnCGWiXmaeFekRvab+FazrEsbaByza2BNuu6TZ1tDnR7os7WYt6VOsM2cxpHcEdnjq1/FTHey5xNAx2OOZKTH505q/aKnphzeSjm6AOtYM6uhY2jnzB66wsb3X7Pk782jbc5ZvoINFbPSD5p3DWN9zwJa9PY+qRx673jk8Zd03jP10zerH+7WJrXPwC1bv8B&lt;/diagram&gt;&#10;&lt;/mxfile&gt;&#10;">
<defs/>
<g>
<g id="cell-8">
<path d="M 160 20 L 200 20 L 200 100 L 233.63 100" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 238.88 100 L 231.88 103.5 L 233.63 100 L 231.88 96.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-6" content="&lt;UserObject label=&quot;py_packages&quot; treeRoot=&quot;1&quot;/&gt;" data-label="py_packages" data-treeRoot="1">
<rect x="0" y="0" width="160" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/>
<g fill="#000000" font-family="Helvetica" text-anchor="middle" font-size="12px">
<text x="79.5" y="24.5">py_packages</text>
</g>
</g>
<g id="cell-7" content="&lt;UserObject label=&quot;ipydrawio&quot;/&gt;" data-label="ipydrawio">
<rect x="240" y="80" width="160" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/>
<g fill="#000000" font-family="Helvetica" text-anchor="middle" font-size="12px">
<text x="319.5" y="104.5">ipydrawio</text>
</g>
</g>
<g id="cell-9">
<path d="M 160 20 L 210 20 L 233.63 20" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 238.88 20 L 231.88 23.5 L 233.63 20 L 231.88 16.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-10" content="&lt;UserObject label=&quot;ipydrawio_export&quot;/&gt;" data-label="ipydrawio_export">
<rect x="240" y="0" width="160" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/>
<g fill="#000000" font-family="Helvetica" text-anchor="middle" font-size="12px">
<text x="319.5" y="24.5">ipydrawio_export</text>
</g>
</g>
<g id="cell-19">
<path d="M 840 20 L 800 20 L 800 100 L 766.37 100" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 761.12 100 L 768.12 96.5 L 766.37 100 L 768.12 103.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-11" content="&lt;UserObject label=&quot;packages&quot; treeRoot=&quot;1&quot;/&gt;" data-label="packages" data-treeRoot="1">
<rect x="840" y="0" width="160" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/>
<g fill="#000000" font-family="Helvetica" text-anchor="middle" font-size="12px">
<text x="919.5" y="24.5">packages</text>
</g>
</g>
<g id="cell-18" content="&lt;UserObject label=&quot;ipydrawio&quot;/&gt;" data-label="ipydrawio">
<rect x="600" y="80" width="160" height="40" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/>
<g fill="#000000" font-family="Helvetica" text-anchor="middle" font-size="12px">
<text x="679.5" y="104.5">ipydrawio</text>
</g>
</g>
<g id="cell-20">
<path d="M 840 20 L 800 20 L 800 180 L 766.37 180" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 761.12 180 L 768.12 176.5 L 766.37 180 L 768.12 183.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-21" content="&lt;UserObject label=&quot;ipydrawio-webpack&quot;/&gt;" data-label="ipydrawio-webpack">
<rect x="600" y="160" width="160" height="40" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/>
<g fill="#000000" font-family="Helvetica" text-anchor="middle" font-size="12px">
<text x="679.5" y="184.5">ipydrawio-webpack</text>
</g>
</g>
<g id="cell-22">
<path d="M 840 20 L 800 20 L 800 260 L 766.37 260" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 761.12 260 L 768.12 256.5 L 766.37 260 L 768.12 263.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-23" content="&lt;UserObject label=&quot;ipydrawio-notebook&quot;/&gt;" data-label="ipydrawio-notebook">
<rect x="600" y="240" width="160" height="40" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/>
<g fill="#000000" font-family="Helvetica" text-anchor="middle" font-size="12px">
<text x="679.5" y="264.5">ipydrawio-notebook</text>
</g>
</g>
<g id="cell-24">
<path d="M 840 20 L 770 20 L 766.37 20" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 761.12 20 L 768.12 16.5 L 766.37 20 L 768.12 23.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-25" content="&lt;UserObject label=&quot;ipydrawio-pdf&quot;/&gt;" data-label="ipydrawio-pdf">
<rect x="600" y="0" width="160" height="40" fill="#f8cecc" stroke="#b85450" pointer-events="all"/>
<g fill="#000000" font-family="Helvetica" text-anchor="middle" font-size="12px">
<text x="679.5" y="24.5">ipydrawio-pdf</text>
</g>
</g>
<g id="cell-26">
<path d="M 840 20 L 800 20 L 800 340 L 766.37 340" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 761.12 340 L 768.12 336.5 L 766.37 340 L 768.12 343.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-27" content="&lt;UserObject label=&quot;ipydrawio-jupyter-templates&quot;/&gt;" data-label="ipydrawio-jupyter-templates">
<rect x="600" y="320" width="160" height="40" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/>
<g fill="#000000" font-family="Helvetica" text-anchor="middle" font-size="12px">
<text x="679.5" y="344.5">ipydrawio-jupyter-templates</text>
</g>
</g>
<g id="cell-28">
<path d="M 400 20 L 600 20" fill="none" stroke="#b85450" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="2 6" pointer-events="stroke"/>
</g>
<g id="cell-29">
<path d="M 400 100 L 600 100" fill="none" stroke="#6c8ebf" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="2 6" pointer-events="stroke"/>
</g>
<g id="cell-30">
<path d="M 400 100 L 510 100 Q 520 100 520 110 L 520 170 Q 520 180 530 180 L 600 180" fill="none" stroke="#6c8ebf" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="2 6" pointer-events="stroke"/>
</g>
<g id="cell-32">
<path d="M 400 100 L 510 100 Q 520 100 520 110 L 520 250 Q 520 260 530 260 L 600 260" fill="none" stroke="#6c8ebf" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="2 6" pointer-events="stroke"/>
</g>
<g id="cell-33">
<path d="M 400 100 L 510 100 Q 520 100 520 110 L 520 330 Q 520 340 530 340 L 600 340" fill="none" stroke="#6c8ebf" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="2 6" pointer-events="stroke"/>
</g>
</g>
</svg>

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 8.3 KiB

File diff suppressed because one or more lines are too long

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 50 KiB

Wyświetl plik

@ -0,0 +1,343 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1144px" height="729px" viewBox="-0.5 -0.5 1144 729" content="&lt;mxfile version=&quot;14.7.3&quot; type=&quot;embed&quot;&gt;&#10; &lt;diagram id=&quot;6a731a19-8d31-9384-78a2-239565b7b9f0&quot; name=&quot;Page-1&quot;&gt;7Zxdb6M4FIZ/TS634pvksk2bmZF2pV1Vq7124IS4QzAypmn2168dTAJ4pso0WRsq56IKxzZgn6evjw8mM3+5e/tCUbn9g6SQzzwnfZv5jzPPW0QO/ysMh8YQunFjyChOG5N7Njzjf0EaZbusxilUvYqMkJzhsm9MSFFAwno2RCnZ96ttSN6/aokyUAzPCcpV6z84ZVtpdaPFueAr4GwrLz33ZP/WKPmeUVIX8noFKaAp2aH2NLKP1RalZN8x+U8zf0kJYc233dsScjGq7Yg17VY/KT3dMoWCXdQgDsKmzSvKa9lxeWvs0I4EpHxg5OGxM/7DsXsgzuLwo5d6Vw4qbNku50cu/3rqpKiaozXkD6cRWpKc0HOriiHK7oXzBrYVznN5BijStkaSo6rCSWOUVcQVX4CxgyQK1YxwE6FsSzJSoPx3Qsr2zhgl36G9h5nne6vwIV6eSlq/+9yyIQVboR3OBc5fIX8FhhMkC+S13Eged0/pB0H4KE5ZogQXGbeG/Ej1lHReRWqawMk9EjY+Bhm0FeMoaKzCMZ3G0sdfgOyA0QOvQCFHDL/2iUbyHyM71TsTwr9ISH4KTGSBmRwwsWsQmNgCMzlg2snbCDBzC8zkgAl9g8AsFGC+/Xl4pGiPiULOGRMx3PstZvDMh0GU7nkcewUnXcf1jD2fcSR+5N2P+nJ1/HA7ynFWCAC594C2DWW/XcXZiCbyrDE/KoFiPvBAn0+VvPeIeAXK4O1dP8vSYCEDTLkK8OfOnbTsO1F1KPVm2wmoY+cWcLRn/rCauLrV5MNS8TQPo8D7uFQE7+DVp2fI1oDqtQM+RJdLSiseA0mJzElK6FpqJkpNaJAaz1IzUWoMrqjbO+pQ83fFp3DPeXoTEzMUCYw8jIGWhqt9r4Qx78OgK4zhEcogjAkvDWOi24QxgQIJJeu6YgVU1cjp2DhzmLua6XA00hH14QidQDMcahK3JHshIZYLk1y4gWHRUHO1GzHMGFHMDpaOUamGF+pWDZuY7dDiRovFEcP/PaC9MFBtnTxIzBrMs4U2MTtBYDyDwKiJWQvM6IEx+KwwUpO138ScTfgsjNY8cBl91CKcnN7EpSNdCQ8T+mF8cUL/NmFLpKZm12K3D9Cxr4OjYL0GHVkSbRHsgIUo1M2CmnB9qcsD7yv332/pFJ4AfjoohgIRu5FmKNR8aopRRtGuuiv4PGd50MqDZ1wk1NTpI+Z+wOuaiZ6Om4eVM4+dUAMPYwkoPEc3H2r2tCh3I8diE6INX49/HpkYxhKuqxsDu7H1R7IzmsWqVPHBYtXg0/5IzZ8mpEiRVQ6zAaf2+MKmRScoHLFB4VDToiUurWyYXZdoDzjia3emWt0woBsLc7oRq5nPv3ir+5Erh+shtP7MK9hY2eMe3gWLzkerqqgp0RwXE0h0RG4SiWt/2v0e83gQp3qaN3zEamL01yac6WxPdr37+wcts8mNtye3Gj94f9MzOOuo6VOuJ5A1W8gcBpUVF/Pi4jpOX10CX7e6XPtLAlZdTKmLwZcfYjXrWheYWWEZrbD42sOWa/epWmExJSwG3+CM1awsShIoGTq+TmXlZRzyMlwUeYFudbl2j6pVF1PqMtekLvzw/JNcx7LOL575T/8B&lt;/diagram&gt;&#10;&lt;/mxfile&gt;&#10;">
<defs/>
<g>
<g id="cell-1745">
<path d="M 557 329.5 L 557 223.6" fill="none" stroke="#2f5b7c" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 557 216.85 L 561.5 225.85 L 557 223.6 L 552.5 225.85 Z" fill="#2f5b7c" stroke="#2f5b7c" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-1746">
<path d="M 634 366.5 L 769.9 366.5" fill="none" stroke="#2f5b7c" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 776.65 366.5 L 767.65 371 L 769.9 366.5 L 767.65 362 Z" fill="#2f5b7c" stroke="#2f5b7c" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-1747">
<path d="M 557 403.5 L 557 509.4" fill="none" stroke="#2f5b7c" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 557 516.15 L 552.5 507.15 L 557 509.4 L 561.5 507.15 Z" fill="#2f5b7c" stroke="#2f5b7c" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-1748">
<path d="M 480 366.5 L 364.1 366.5" fill="none" stroke="#2f5b7c" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 357.35 366.5 L 366.35 362 L 364.1 366.5 L 366.35 371 Z" fill="#2f5b7c" stroke="#2f5b7c" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-1749">
<rect x="482" y="331.5" width="150" height="70" rx="4.9" ry="4.9" fill="#2f5b7c" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 367px; margin-left: 486px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">IPyDrawio</div>
</div>
</div>
</foreignObject>
<text x="557" y="371" fill="#FFFFFF" font-family="Helvetica" font-size="16px" text-anchor="middle" font-weight="bold">IPyDrawio</text>
</switch>
</g>
</g>
<g id="cell-1750">
<path d="M 240.36 334.5 L 171.25 274.15" fill="none" stroke="#e85642" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 166.17 269.71 L 175.91 272.24 L 171.25 274.15 L 169.99 279.02 Z" fill="#e85642" stroke="#e85642" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-1751">
<path d="M 200 366.5 L 163.1 366.5" fill="none" stroke="#e85642" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 156.35 366.5 L 165.35 362 L 163.1 366.5 L 165.35 371 Z" fill="#e85642" stroke="#e85642" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-1752">
<path d="M 236.66 398.5 L 175.25 447.22" fill="none" stroke="#e85642" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 169.96 451.42 L 174.22 442.3 L 175.25 447.22 L 179.81 449.35 Z" fill="#e85642" stroke="#e85642" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-1753">
<rect x="202" y="336.5" width="150" height="60" rx="4.2" ry="4.2" fill="#e85642" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 367px; margin-left: 206px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">User Experience</div>
</div>
</div>
</foreignObject>
<text x="277" y="371" fill="#FFFFFF" font-family="Helvetica" font-size="14px" text-anchor="middle" font-weight="bold">User Experience</text>
</switch>
</g>
</g>
<g id="cell-1754">
<rect x="52" y="455.5" width="150" height="60" rx="4.2" ry="4.2" fill="#f08e81" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 486px; margin-left: 56px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">robustness</div>
</div>
</div>
</foreignObject>
<text x="127" y="490" fill="#FFFFFF" font-family="Helvetica" font-size="14px" text-anchor="middle">robustness</text>
</switch>
</g>
</g>
<g id="cell-1755">
<rect x="1" y="336.5" width="150" height="60" rx="4.2" ry="4.2" fill="#f08e81" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 367px; margin-left: 5px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">power</div>
</div>
</div>
</foreignObject>
<text x="76" y="371" fill="#FFFFFF" font-family="Helvetica" font-size="14px" text-anchor="middle">power</text>
</switch>
</g>
</g>
<g id="cell-1756">
<rect x="52" y="205.5" width="150" height="60" rx="4.2" ry="4.2" fill="#f08e81" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 236px; margin-left: 56px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">familiarity</div>
</div>
</div>
</foreignObject>
<text x="127" y="240" fill="#FFFFFF" font-family="Helvetica" font-size="14px" text-anchor="middle">familiarity</text>
</switch>
</g>
</g>
<g id="cell-1757">
<path d="M 480 582.3 L 443.38 596.95" fill="none" stroke="#1699d3" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 437.11 599.45 L 443.8 591.93 L 443.38 596.95 L 447.14 600.29 Z" fill="#1699d3" stroke="#1699d3" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-1758">
<path d="M 557 583.5 L 557 655.4" fill="none" stroke="#1699d3" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 557 662.15 L 552.5 653.15 L 557 655.4 L 561.5 653.15 Z" fill="#1699d3" stroke="#1699d3" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-1759">
<path d="M 634 582.3 L 670.62 596.95" fill="none" stroke="#1699d3" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 676.89 599.45 L 666.86 600.29 L 670.62 596.95 L 670.2 591.93 Z" fill="#1699d3" stroke="#1699d3" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-1760">
<rect x="482" y="521.5" width="150" height="60" rx="4.2" ry="4.2" fill="#1699d3" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 552px; margin-left: 486px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">Interoperability</div>
</div>
</div>
</foreignObject>
<text x="557" y="556" fill="#FFFFFF" font-family="Helvetica" font-size="14px" text-anchor="middle" font-weight="bold">Interoperability</text>
</switch>
</g>
</g>
<g id="cell-1761">
<rect x="682" y="601.5" width="150" height="60" rx="4.2" ry="4.2" fill="#64bbe2" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 632px; margin-left: 686px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">browsers</div>
</div>
</div>
</foreignObject>
<text x="757" y="636" fill="#FFFFFF" font-family="Helvetica" font-size="14px" text-anchor="middle">browsers</text>
</switch>
</g>
</g>
<g id="cell-1762">
<rect x="482" y="667.5" width="150" height="60" rx="4.2" ry="4.2" fill="#64bbe2" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 698px; margin-left: 486px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">jupyterlab-drawio</div>
</div>
</div>
</foreignObject>
<text x="557" y="702" fill="#FFFFFF" font-family="Helvetica" font-size="14px" text-anchor="middle">jupyterlab-drawio</text>
</switch>
</g>
</g>
<g id="cell-1763">
<rect x="282" y="601.5" width="150" height="60" rx="4.2" ry="4.2" fill="#64bbe2" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 632px; margin-left: 286px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">diagrams.net</div>
</div>
</div>
</foreignObject>
<text x="357" y="636" fill="#FFFFFF" font-family="Helvetica" font-size="14px" text-anchor="middle">diagrams.net</text>
</switch>
</g>
</g>
<g id="cell-1764">
<rect x="482" y="151.5" width="150" height="60" rx="4.2" ry="4.2" fill="#f08705" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 182px; margin-left: 486px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">Distributing</div>
</div>
</div>
</foreignObject>
<text x="557" y="186" fill="#FFFFFF" font-family="Helvetica" font-size="14px" text-anchor="middle" font-weight="bold">Distributing</text>
</switch>
</g>
</g>
<g id="cell-1765">
<rect x="682" y="61.5" width="150" height="60" rx="4.2" ry="4.2" fill="#f5af58" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 92px; margin-left: 686px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">npm</div>
</div>
</div>
</foreignObject>
<text x="757" y="96" fill="#FFFFFF" font-family="Helvetica" font-size="14px" text-anchor="middle">npm</text>
</switch>
</g>
</g>
<g id="cell-1766">
<path d="M 628.11 149.5 L 676.67 127.65" fill="none" stroke="#f08705" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 682.83 124.88 L 676.47 132.67 L 676.67 127.65 L 672.78 124.47 Z" fill="#f08705" stroke="#f08705" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-1767">
<rect x="482" y="1.5" width="150" height="60" rx="4.2" ry="4.2" fill="#f5af58" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 32px; margin-left: 486px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">conda</div>
</div>
</div>
</foreignObject>
<text x="557" y="36" fill="#FFFFFF" font-family="Helvetica" font-size="14px" text-anchor="middle">conda</text>
</switch>
</g>
</g>
<g id="cell-1768">
<path d="M 557 149.5 L 557 73.6" fill="none" stroke="#f08705" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 557 66.85 L 561.5 75.85 L 557 73.6 L 552.5 75.85 Z" fill="#f08705" stroke="#f08705" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-1769">
<rect x="282" y="61.5" width="150" height="60" rx="4.2" ry="4.2" fill="#f5af58" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 92px; margin-left: 286px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">pip</div>
</div>
</div>
</foreignObject>
<text x="357" y="96" fill="#FFFFFF" font-family="Helvetica" font-size="14px" text-anchor="middle">pip</text>
</switch>
</g>
</g>
<g id="cell-1770">
<path d="M 485.89 149.5 L 437.33 127.65" fill="none" stroke="#f08705" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 431.17 124.88 L 441.22 124.47 L 437.33 127.65 L 437.53 132.67 Z" fill="#f08705" stroke="#f08705" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-1771">
<rect x="782" y="336.5" width="150" height="60" rx="4.2" ry="4.2" fill="#12aab5" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 366px; margin-left: 786px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">Q/A</div>
</div>
</div>
</foreignObject>
<text x="857" y="371" fill="#FFFFFF" font-family="Helvetica" font-size="14px" text-anchor="middle" font-weight="bold">Q/A</text>
</switch>
</g>
</g>
<g id="cell-1772">
<rect x="862" y="475.5" width="150" height="60" rx="4.2" ry="4.2" fill="#61c6ce" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 506px; margin-left: 866px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">linting</div>
</div>
</div>
</foreignObject>
<text x="937" y="510" fill="#FFFFFF" font-family="Helvetica" font-size="14px" text-anchor="middle">linting</text>
</switch>
</g>
</g>
<g id="cell-1773">
<path d="M 875.42 398.5 L 913.54 464.74" fill="none" stroke="#12aab5" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 916.91 470.59 L 908.52 465.04 L 913.54 464.74 L 916.32 460.55 Z" fill="#12aab5" stroke="#12aab5" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-1774">
<rect x="992" y="385.5" width="150" height="60" rx="4.2" ry="4.2" fill="#61c6ce" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 416px; margin-left: 996px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">integrity testing</div>
</div>
</div>
</foreignObject>
<text x="1067" y="420" fill="#FFFFFF" font-family="Helvetica" font-size="14px" text-anchor="middle">integrity testing</text>
</switch>
</g>
</g>
<g id="cell-1775">
<path d="M 934 384.47 L 980.16 395.24" fill="none" stroke="#12aab5" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 986.73 396.77 L 976.95 399.11 L 980.16 395.24 L 978.99 390.34 Z" fill="#12aab5" stroke="#12aab5" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-1776">
<rect x="992" y="275.5" width="150" height="60" rx="4.2" ry="4.2" fill="#61c6ce" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 306px; margin-left: 996px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">unit testing</div>
</div>
</div>
</foreignObject>
<text x="1067" y="310" fill="#FFFFFF" font-family="Helvetica" font-size="14px" text-anchor="middle">unit testing</text>
</switch>
</g>
</g>
<g id="cell-1777">
<path d="M 934 344.13 L 980.3 330.69" fill="none" stroke="#12aab5" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 986.78 328.8 L 979.39 335.63 L 980.3 330.69 L 976.88 326.99 Z" fill="#12aab5" stroke="#12aab5" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-1778">
<rect x="862" y="195.5" width="150" height="60" rx="4.2" ry="4.2" fill="#61c6ce" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 142px; height: 1px; padding-top: 226px; margin-left: 866px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: #FFFFFF; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">acceptance testing</div>
</div>
</div>
</foreignObject>
<text x="937" y="230" fill="#FFFFFF" font-family="Helvetica" font-size="14px" text-anchor="middle">acceptance testing</text>
</switch>
</g>
</g>
<g id="cell-1779">
<path d="M 875.16 334.5 L 913.86 266.29" fill="none" stroke="#12aab5" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/>
<path d="M 917.19 260.42 L 916.66 270.47 L 913.86 266.29 L 908.83 266.02 Z" fill="#12aab5" stroke="#12aab5" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/>
</g>
</g>
</svg>

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 28 KiB

Wyświetl plik

@ -0,0 +1,410 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1061px" height="811px" viewBox="-0.5 -0.5 1061 811" content="&lt;mxfile version=&quot;14.7.3&quot; type=&quot;embed&quot;&gt;&#10; &lt;diagram name=&quot;Page-1&quot; id=&quot;03018318-947c-dd8e-b7a3-06fadd420f32&quot;&gt;7Vxbc6M2FP41zLQPZRDi+ri5eLfTy3Q2O7t9lbFiaxYQg+U66a+vZAsCSE6YLgbZIQ+OdSRk+L5POkdHsi14mz19LFGx+YOucGq5zurJgneW6wIPBPyfsDxLiwO9o2VdkpW0vRgeyL+4aiitO7LC21ZDRmnKSNE2JjTPccJaNlSWdN9u9kjT9qcWaI0Vw0OCUtX6jazYRlqB47xUfMJkvZEfHfmyYomS7+uS7nL5eTnN8bEmQ1U3sul2g1Z03zDBewvelpSy47vs6RanAtcKseN1ixO19S2XOGd9LgjCcBkuo9iLfeCD2P9F9vAPSncSBnmj7LnCZb8hDD8UKBHlPSffgjcblqW8BPjbw4Nj0b/DS/UDikKKlji9qdG5pSktedUBH96UlfR7DbXo6pHmbIEykgoJfcXlCuVImqVcAEfsBqVknfNCwh8a8w5vEpqRRPahIlI9Ii4ZfmqYJEIfMc0wK595E1lbkfXcLu4bonACadw0BVEpGUklruuuXyjhbyQrJyj1jWKEpGmnkSEkgQ5LAKg0xb6GpXAIlpRx5KqswQ8/ccvPttEDyo2MGFCxhij/HDx5Ck8LkmKFIv5grM1KQUnODnfi31j+XQO1FD+KtgIOwr3JB2lmVPC65TSTfP1FFO74p7cHineKo+HHB/QV0HVzmHsO0NUp7X5F2BWC7jrmgB4ooH8leH+NoIfmgB4qoH/e5VeIOfTMwTx+O2BKyQkHOYTb/X8xUkVOdaXlQufwN74/DlTy9AHuWSInoC5BFrTkK6crHDagM2xcTdA62rgBasz6ZYOzqwyGutNV5NgTzlgAqsjjrEgRew/g+/6UolfDIgXyCr/fxbT/F90SRqjAcUkZo1nXOazQdlO7DWXmbvB2gpaWT/KOvRfiTrKntci02RlNvu8K+1AgydbeEi4V/Gsi7kle3nAi8eFP8WdvuLAf81cDuycI3p4l6+VNyz/BASSjLlZ+w2Uukp1XNzI9MF0Up86AaLm9RoyjyTCOFIwfMGMchWvEufYq4+OsLkA+4bS4QoyD6XJKQE3c/SmyGbzrAGUClVQAxuowSlrX7OCTOs04EzjfCq/eadehbJpEO3etK4Sjx6SfZ34z267ECEES4eXjMM46ituaqH1w01nrVDFEerdPNCcIKPo/aL2/iJZVD86rANQP/AoAoW4j4iz57cqjv7fto+AEnSptY9CiWVofZ6s7gngcn12Ab+gPqKyN7QD4MPLq1/ao8JRB4Yd2EPNVRFi9nslzqIvtXc4IS7nEL3lkSBkMNi6qWse3wyYvYZtH3dq9fUWk8jjEugyoufXOmJKuPF9ui47Tn8z097VJTD/rDBBH1DGCFFqkCSM8zXQ9iLTUldLoYUQntA6B8vi6PfLQj88QRPSA45JkrI0hOD0MkVzYD7eloTY6we2rMcV4LLnqhCjOMlzC4r4/srVXao0Ol3scN4oA9P0Y8qHTdyF64rJhaVFHz+ddnnPc3gExoWs7nsMxiYMAOJXLNoIWNUtzIRnHH+UEgNB2DnQEHA7gV7nX5kJoKlaguly9r3Iz74KbANqwGi2CnsmocdVlkhLfLhwrXlixZ0X3Fx0QlEcoBz+S2t3ojDQHK+CZYlhXTZAqHE24sQmseWPT9Tp7FONubGp2NmeFGKYQP55UIWYfjpgVIuIBOKlC1DXnrBDDFaI/7HZGjfRIH80aMeuI1ega6XFoez6GZ1a0OrZGNLkBkzQyzyOaeHV0jfT4/vKsEbPiEd357zMqxJ0VYrpCutHIyArRZT7NUcgci2hikZEVMudWjVdINxIZWSFzbtV4hXTjkCAeVSFzbtV4hXTjkJEVMudWjVdINw4ZWSFzZtV4hXTjkJEVYnZe9VoUojnuq4jm9DemOr9XM+4OXnVGZVbI5Shk7KyqN2dVL04j4653vTmrenEKOWskwosvv2J7qGv8TDC8/w8=&lt;/diagram&gt;&#10;&lt;/mxfile&gt;&#10;">
<defs/>
<g>
<g id="cell-677b7b8949515195-1">
<path d="M 0 0 L 0 -0.66 L 10 0.26 L 20 0.67 L 30 -0.25 L 40 -0.17 L 50 0.72 L 60 0.55 L 70 0.75 L 80 0.4 L 90 -0.07 L 100 -0.1 L 110 -0.12 L 120 0.51 L 130 0.5 L 140 0.42 L 150 -0.21 L 160 -0.37 L 170 -0.3 L 180 -0.03 L 190 0.53 L 200 -0.31 L 210 0.68 L 220 0.66 L 230 -0.68 L 240 0.11 L 250 0.55 L 260 0.71 L 270 -0.08 L 280 -0.31 L 290 0.01 L 300 -0.03 L 310 -0.65 L 320 0.12 L 330 -0.2 L 340 0.39 L 350 0.66 L 360 0.01 L 370 0.45 L 380 -0.04 L 390 -0.24 L 400 0.52 L 410 -0.58 L 420 -0.35 L 430 0.31 L 440 0.73 L 450 -0.33 L 460 0.1 L 470 0.15 L 480 -0.69 L 490 -0.27 L 500 0.35 L 510 0.36 L 520 -0.43 L 530 -0.56 L 540 -0.06 L 550 0.59 L 560 -0.67 L 570 -0.41 L 580 -0.74 L 590 -0.04 L 600 -0.49 L 610 -0.35 L 620 -0.57 L 630 0.03 L 640 -0.43 L 650 -0.6 L 660 0.01 L 670 -0.08 L 680 0.49 L 690 -0.39 L 700 0.35 L 710 -0.06 L 720 0.13 L 730 0.7 L 740 -0.06 L 750 -0.16 L 760 -0.4 L 770 0.71 L 780 0.03 L 790 -0.08 L 800 0.75 L 810 -0.44 L 820 0.6 L 830 0.57 L 840 0.55 L 850 -0.71 L 860 -0.24 L 870 0.09 L 880 0.64 L 890 0.25 L 900 0.18 L 910 -0.2 L 920 -0.55 L 930 -0.12 L 940 -0.42 L 950 0.69 L 960 -0.51 L 970 -0.63 L 980 -0.66 L 990 -0.7 L 1000 0.18 L 1010 -0.46 L 1020 0.58 L 1030 -0.61 L 1040 0.37 L 1050 -0.58 L 1060 0 L 1059.74 0 L 1059.58 10 L 1060.63 20 L 1060 30 L 1060.21 40 L 1059.85 50 L 1059.58 60 L 1059.27 70 L 1060.68 80 L 1059.59 90 L 1059.6 100 L 1060.65 110 L 1059.56 120 L 1060.49 130 L 1059.9 140 L 1060.66 150 L 1059.72 160 L 1059.28 170 L 1059.93 180 L 1060.25 190 L 1060.42 200 L 1060.5 210 L 1059.4 220 L 1059.66 230 L 1059.99 240 L 1059.46 250 L 1060.19 260 L 1059.55 270 L 1059.43 280 L 1060.42 290 L 1059.68 300 L 1059.57 310 L 1059.3 320 L 1059.51 330 L 1060.19 340 L 1060.18 350 L 1059.72 360 L 1060.21 370 L 1059.91 380 L 1059.88 390 L 1059.36 400 L 1060.14 410 L 1059.83 420 L 1060.02 430 L 1060.61 440 L 1060.12 450 L 1059.32 460 L 1060.6 470 L 1060.29 480 L 1059.31 490 L 1060.51 500 L 1060.21 510 L 1059.9 520 L 1060.3 530 L 1060.54 540 L 1059.27 550 L 1060.7 560 L 1060.55 570 L 1060.56 580 L 1059.43 590 L 1059.36 600 L 1059.76 610 L 1059.92 620 L 1060.24 630 L 1059.67 640 L 1060.57 650 L 1060.35 660 L 1059.96 670 L 1060.44 680 L 1060.74 690 L 1060.25 700 L 1060.27 710 L 1059.4 720 L 1060.7 730 L 1060.57 740 L 1060.43 750 L 1060.55 760 L 1059.96 770 L 1060.29 780 L 1060.43 790 L 1059.54 800 L 1060 810 L 1060 810.35 L 1050 810.01 L 1040 810.63 L 1030 810.6 L 1020 809.88 L 1010 809.45 L 1000 810.55 L 990 809.83 L 980 810.28 L 970 810.74 L 960 810.18 L 950 810.66 L 940 810.34 L 930 809.78 L 920 810.34 L 910 809.51 L 900 809.56 L 890 810.53 L 880 809.39 L 870 810.71 L 860 809.77 L 850 810.75 L 840 809.43 L 830 809.91 L 820 809.49 L 810 809.96 L 800 810.12 L 790 809.68 L 780 810.47 L 770 809.55 L 760 809.6 L 750 809.79 L 740 809.92 L 730 810.37 L 720 809.56 L 710 810.2 L 700 809.98 L 690 809.32 L 680 809.74 L 670 809.91 L 660 810.64 L 650 810.21 L 640 809.86 L 630 809.55 L 620 810.2 L 610 810.45 L 600 809.46 L 590 810.11 L 580 809.56 L 570 809.82 L 560 809.46 L 550 810.69 L 540 809.96 L 530 810.25 L 520 810.7 L 510 809.89 L 500 809.91 L 490 810.52 L 480 809.43 L 470 810.7 L 460 810.38 L 450 809.76 L 440 809.48 L 430 809.89 L 420 809.55 L 410 809.89 L 400 809.88 L 390 810.07 L 380 809.73 L 370 810.28 L 360 810.54 L 350 809.43 L 340 809.84 L 330 810.49 L 320 809.54 L 310 810.04 L 300 809.71 L 290 809.47 L 280 810.65 L 270 809.63 L 260 809.38 L 250 809.79 L 240 809.92 L 230 810.15 L 220 810.44 L 210 809.48 L 200 810.5 L 190 809.98 L 180 809.38 L 170 809.28 L 160 810.34 L 150 810.6 L 140 810.62 L 130 809.5 L 120 810.34 L 110 810.65 L 100 809.4 L 90 809.53 L 80 809.71 L 70 810.55 L 60 809.53 L 50 810.05 L 40 809.29 L 30 810.63 L 20 810.39 L 10 810.52 L 0 810 L -0.32 810 L 0.58 800 L 0.5 790 L -0.25 780 L 0.28 770 L -0.23 760 L 0.48 750 L 0.35 740 L 0.67 730 L 0.59 720 L -0.31 710 L 0.32 700 L 0.38 690 L 0.7 680 L -0.63 670 L 0.63 660 L -0.3 650 L 0.35 640 L 0.43 630 L -0.34 620 L 0.61 610 L 0.59 600 L 0.05 590 L -0.36 580 L -0.72 570 L 0.71 560 L -0.29 550 L 0.56 540 L -0.24 530 L -0.71 520 L -0.53 510 L 0.69 500 L -0.31 490 L -0.43 480 L -0.66 470 L 0.71 460 L -0.4 450 L -0.7 440 L 0.52 430 L -0.4 420 L 0.41 410 L -0.41 400 L 0.54 390 L 0.48 380 L -0.24 370 L -0.25 360 L -0.6 350 L 0.58 340 L -0.55 330 L -0.28 320 L -0.74 310 L 0.57 300 L -0.18 290 L -0.47 280 L -0.7 270 L -0.15 260 L -0.62 250 L 0.41 240 L -0.54 230 L -0.29 220 L 0.28 210 L -0.01 200 L 0.7 190 L -0.6 180 L -0.07 170 L -0.72 160 L 0.37 150 L 0.74 140 L 0.63 130 L 0.06 120 L -0.57 110 L 0.47 100 L -0.7 90 L -0.68 80 L -0.5 70 L 0.1 60 L -0.73 50 L -0.22 40 L 0.17 30 L 0.06 20 L -0.55 10 L 0 0 L 0 0 Z Z" fill="#ffffff" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-15">
<path d="M 100 90 L 100 89.9 L 110 89.78 L 120 90.56 L 130 89.77 L 140 89.7 L 150 89.97 L 160 90.64 L 170 89.35 L 180 89.68 L 190 90.73 L 200 89.69 L 210 89.92 L 220 89.93 L 230 89.47 L 240 90.58 L 250 90.08 L 260 89.61 L 270 90.16 L 280 89.9 L 290 89.5 L 300 89.84 L 310 90.46 L 320 89.31 L 330 89.46 L 340 89.42 L 350 90.26 L 360 90.4 L 370 90 L 380 89.63 L 390 89.68 L 400 90.11 L 410 90.06 L 420 89.38 L 430 90.73 L 440 89.28 L 450 90.42 L 460 89.99 L 470 90.67 L 480 90.4 L 490 89.32 L 500 89.31 L 510 90.5 L 520 89.97 L 530 89.58 L 540 90.45 L 550 90.72 L 560 89.6 L 570 90.7 L 580 90.57 L 590 90.55 L 600 89.64 L 610 90.67 L 620 89.25 L 630 89.33 L 640 89.44 L 650 90.68 L 660 90.04 L 670 89.93 L 680 90.6 L 690 89.94 L 700 90.05 L 710 89.66 L 720 90.01 L 730 89.63 L 740 90.34 L 750 90.26 L 760 89.8 L 770 90.25 L 780 89.44 L 790 90.26 L 800 89.79 L 810 90.53 L 820 90.59 L 830 90.16 L 840 89.82 L 850 90.56 L 860 89.49 L 870 89.52 L 880 89.79 L 890 90.62 L 900 90.02 L 910 89.36 L 920 89.72 L 930 89.64 L 940 90.75 L 950 90.68 L 960 90.65 L 970 89.56 L 980 90.2 L 990 90.31 L 1000 90.09 L 1010 90.24 L 1020 89.43 L 1030 90.36 L 1040 90.69 L 1050 90 L 1049.74 90 L 1049.45 100 L 1050.32 110 L 1050.56 120 L 1050.09 130 L 1049.48 140 L 1050.15 150 L 1049.65 160 L 1050.33 170 L 1050.7 180 L 1049.68 190 L 1049.34 200 L 1050.1 210 L 1050.45 220 L 1049.27 230 L 1049.38 240 L 1049.83 250 L 1050.64 260 L 1050.42 270 L 1049.94 280 L 1049.42 290 L 1049.33 300 L 1050.25 310 L 1050.11 320 L 1049.87 330 L 1049.77 340 L 1049.68 350 L 1050.59 360 L 1049.81 370 L 1050.3 380 L 1050.21 390 L 1049.94 400 L 1050.31 410 L 1049.98 420 L 1050.71 430 L 1049.55 440 L 1050.23 450 L 1050.14 460 L 1049.98 470 L 1050.59 480 L 1050.03 490 L 1049.87 500 L 1050.29 510 L 1049.27 520 L 1049.74 530 L 1049.53 540 L 1049.96 550 L 1050.57 560 L 1050.05 570 L 1050.14 580 L 1049.39 590 L 1049.96 600 L 1049.98 610 L 1050.09 620 L 1049.98 630 L 1049.58 640 L 1050.63 650 L 1049.5 660 L 1049.3 670 L 1050.37 680 L 1050.36 690 L 1050.46 700 L 1050.53 710 L 1049.5 720 L 1049.6 730 L 1049.26 740 L 1049.34 750 L 1050.52 760 L 1049.51 770 L 1050.63 780 L 1050.45 790 L 1050 800 L 1050 799.25 L 1040 800.63 L 1030 800.43 L 1020 800.39 L 1010 799.66 L 1000 799.69 L 990 799.91 L 980 799.36 L 970 799.55 L 960 800.73 L 950 800.53 L 940 800.32 L 930 799.67 L 920 799.83 L 910 799.9 L 900 799.36 L 890 800.52 L 880 799.6 L 870 799.96 L 860 799.79 L 850 799.4 L 840 800.03 L 830 800.66 L 820 800.55 L 810 799.4 L 800 799.58 L 790 799.56 L 780 799.52 L 770 799.27 L 760 800.33 L 750 800.51 L 740 800.38 L 730 800.51 L 720 799.38 L 710 799.84 L 700 800.52 L 690 799.43 L 680 800.16 L 670 799.92 L 660 800 L 650 799.33 L 640 799.79 L 630 799.8 L 620 800.61 L 610 800.16 L 600 800.3 L 590 800.34 L 580 800.09 L 570 799.69 L 560 800.49 L 550 800.7 L 540 800.52 L 530 800.67 L 520 799.35 L 510 799.9 L 500 800.54 L 490 800.68 L 480 800.25 L 470 800.43 L 460 800.02 L 450 800.01 L 440 799.72 L 430 800.34 L 420 800.61 L 410 799.42 L 400 799.48 L 390 799.67 L 380 800.5 L 370 800.31 L 360 799.78 L 350 799.83 L 340 800.73 L 330 800.56 L 320 799.8 L 310 799.81 L 300 799.75 L 290 800.18 L 280 800.69 L 270 800.66 L 260 800.73 L 250 799.68 L 240 800.3 L 230 799.69 L 220 799.93 L 210 799.59 L 200 800.15 L 190 799.5 L 180 799.87 L 170 799.83 L 160 800.16 L 150 799.46 L 140 800.67 L 130 800.16 L 120 799.59 L 110 800.24 L 100 800 L 100.04 800 L 100.42 790 L 100.37 780 L 99.7 770 L 99.35 760 L 100.1 750 L 100.3 740 L 100.15 730 L 99.66 720 L 99.32 710 L 100.16 700 L 99.6 690 L 100.63 680 L 99.92 670 L 100.24 660 L 100.09 650 L 99.35 640 L 100.54 630 L 100.29 620 L 99.45 610 L 99.99 600 L 100.58 590 L 100.39 580 L 100.08 570 L 100.49 560 L 100.34 550 L 100.35 540 L 100.32 530 L 99.6 520 L 100.36 510 L 100.09 500 L 99.64 490 L 99.39 480 L 99.58 470 L 100.7 460 L 100.56 450 L 100.09 440 L 99.89 430 L 100.3 420 L 100.56 410 L 99.5 400 L 99.33 390 L 99.45 380 L 100.67 370 L 100.7 360 L 100.51 350 L 100.31 340 L 99.39 330 L 99.58 320 L 100.42 310 L 100.61 300 L 100.17 290 L 99.92 280 L 100.2 270 L 99.45 260 L 100.6 250 L 100.53 240 L 100.16 230 L 99.45 220 L 99.39 210 L 100.01 200 L 100.02 190 L 99.45 180 L 100.73 170 L 99.92 160 L 100.08 150 L 100.14 140 L 99.46 130 L 99.79 120 L 99.91 110 L 100.21 100 L 100 90 L 100 90 Z Z" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-677b7b8949515195-2">
<path d="M 0 0 L 0 0.27 L 10 0.65 L 20 -0.52 L 30 -0.2 L 40 0.13 L 50 -0.04 L 60 -0.38 L 70 -0.61 L 80 -0.58 L 90 0 L 90.39 0 L 89.92 10 L 90.6 20 L 90.7 30 L 90.3 40 L 90 50 L 90 50.63 L 80 50.26 L 70 49.87 L 60 49.27 L 50 50.05 L 40 50.65 L 30 50.38 L 20 49.97 L 10 49.76 L 0 50 L 0.22 50 L 0.41 40 L 0.64 30 L 0.44 20 L 0.34 10 L 0 0 L 0 0 Z Z" fill="#ffffff" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 25px; margin-left: 1px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 28px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">:( ).</div>
</div>
</div>
</foreignObject>
<text x="45" y="33" fill="#000000" font-family="Verdana" font-size="28px" text-anchor="middle">:( ).</text>
</switch>
</g>
</g>
<g id="cell-677b7b8949515195-4">
<rect x="100" y="15" width="60" height="20" fill="none" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 18px; margin-left: 102px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 14px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">File</div>
</div>
</div>
</foreignObject>
<text x="102" y="32" fill="#000000" font-family="Verdana" font-size="14px">File</text>
</switch>
</g>
</g>
<g id="cell-677b7b8949515195-5">
<rect x="180" y="15" width="60" height="20" fill="none" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 18px; margin-left: 182px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 14px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Edit</div>
</div>
</div>
</foreignObject>
<text x="182" y="32" fill="#000000" font-family="Verdana" font-size="14px">Edit</text>
</switch>
</g>
</g>
<g id="cell-677b7b8949515195-6">
<rect x="250" y="15" width="60" height="20" fill="none" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 18px; margin-left: 252px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 14px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">View</div>
</div>
</div>
</foreignObject>
<text x="252" y="32" fill="#000000" font-family="Verdana" font-size="14px">View</text>
</switch>
</g>
</g>
<g id="cell-677b7b8949515195-7">
<rect x="320" y="15" width="60" height="20" fill="none" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 18px; margin-left: 322px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 14px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Run</div>
</div>
</div>
</foreignObject>
<text x="322" y="32" fill="#000000" font-family="Verdana" font-size="14px">Run</text>
</switch>
</g>
</g>
<g id="cell-677b7b8949515195-9">
<path d="M 0 50 L 0 49.56 L 10 50.34 L 20 49.71 L 30 49.75 L 40 49.54 L 50 49.27 L 60 50.04 L 70 50.04 L 80 49.93 L 90 50.22 L 100 50.44 L 110 49.8 L 120 49.55 L 130 49.89 L 140 49.26 L 150 49.95 L 160 50.25 L 170 50.22 L 180 50.29 L 190 50.55 L 200 49.86 L 210 49.93 L 220 49.37 L 230 50.59 L 240 50.29 L 250 49.53 L 260 49.26 L 270 49.79 L 280 49.67 L 290 49.57 L 300 50.13 L 310 50.69 L 320 49.6 L 330 49.79 L 340 50.2 L 350 50.25 L 360 49.92 L 370 50.6 L 380 50.65 L 390 49.95 L 400 50.5 L 410 50.75 L 420 49.7 L 430 50.44 L 440 49.88 L 450 49.92 L 460 50.14 L 470 50.17 L 480 49.54 L 490 49.29 L 500 50.44 L 510 49.91 L 520 50.04 L 530 50.48 L 540 49.54 L 550 50.17 L 560 49.8 L 570 50.68 L 580 49.33 L 590 50.28 L 600 49.36 L 610 50.44 L 620 50.53 L 630 50.54 L 640 49.37 L 650 49.61 L 660 49.85 L 670 50.22 L 680 49.53 L 690 50.22 L 700 49.57 L 710 49.74 L 720 50.04 L 730 50.19 L 740 50.75 L 750 49.97 L 760 50.6 L 770 49.67 L 780 49.91 L 790 50.29 L 800 49.86 L 810 50.5 L 820 50.45 L 830 50.15 L 840 50.7 L 850 50.26 L 860 50.75 L 870 49.29 L 880 49.93 L 890 50.06 L 900 49.82 L 910 49.43 L 920 49.73 L 930 49.48 L 940 49.5 L 950 49.91 L 960 50.07 L 970 50.11 L 980 49.45 L 990 50.43 L 1000 50.47 L 1010 50.06 L 1020 50.06 L 1030 50.58 L 1040 49.72 L 1050 50.47 L 1060 50" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-677b7b8949515195-11">
<rect x="120" y="190" width="60" height="20" fill="none" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 193px; margin-left: 122px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 14px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Format</div>
</div>
</div>
</foreignObject>
<text x="122" y="207" fill="#000000" font-family="Verdana" font-size="14px">Format</text>
</switch>
</g>
</g>
<g id="cell-677b7b8949515195-12">
<rect x="120" y="360.5" width="60" height="20" fill="none" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 364px; margin-left: 122px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 14px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Theme</div>
</div>
</div>
</foreignObject>
<text x="122" y="378" fill="#000000" font-family="Verdana" font-size="14px">Theme</text>
</switch>
</g>
</g>
<g id="cell-677b7b8949515195-13">
<rect x="120" y="530" width="60" height="20" fill="none" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 533px; margin-left: 122px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 14px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Template</div>
</div>
</div>
</foreignObject>
<text x="122" y="547" fill="#000000" font-family="Verdana" font-size="14px">Template</text>
</switch>
</g>
</g>
<g id="cell-677b7b8949515195-16">
<rect x="290" y="190" width="120" height="130" fill="#ffffff" stroke="#999999" stroke-width="4" pointer-events="all"/>
<path d="M 290 190 L 289.94 189.94 L 296.32 196.9 L 303.26 204.38 L 309.78 211.47 L 316.32 218.57 L 323.74 226.49 L 329.66 233.02 L 336.21 240.13 L 343.03 247.5 L 350.22 255.2 L 356.67 262.22 L 363 269.14 L 370.34 276.98 L 376.6 283.83 L 383.37 291.14 L 389.65 298.01 L 396.55 305.45 L 403.58 313 L 410 320 M 290 320 L 290.32 320.3 L 296.87 312.97 L 303.67 305.86 L 310.09 298.42 L 316.79 291.23 L 323.43 283.97 L 330.38 277.02 L 336.91 269.66 L 342.83 261.76 L 350.35 255.32 L 356.76 247.86 L 363.65 240.85 L 370.43 233.73 L 376.41 225.88 L 383.16 218.73 L 389.84 211.52 L 397.15 204.89 L 403.65 197.51 L 410 190" fill="none" stroke="#999999" stroke-width="4" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
</g>
<g id="cell-5">
<rect x="390" y="15" width="60" height="20" fill="none" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 18px; margin-left: 392px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 14px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Kernel</div>
</div>
</div>
</foreignObject>
<text x="392" y="32" fill="#000000" font-family="Verdana" font-size="14px">Kernel</text>
</switch>
</g>
</g>
<g id="cell-6">
<rect x="460" y="15" width="60" height="20" fill="none" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 18px; margin-left: 462px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 14px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Tabs</div>
</div>
</div>
</foreignObject>
<text x="462" y="32" fill="#000000" font-family="Verdana" font-size="14px">Tabs</text>
</switch>
</g>
</g>
<g id="cell-8">
<rect x="530" y="15" width="60" height="20" fill="none" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 18px; margin-left: 532px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 14px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Settings</div>
</div>
</div>
</foreignObject>
<text x="532" y="32" fill="#000000" font-family="Verdana" font-size="14px">Settings</text>
</switch>
</g>
</g>
<g id="cell-9">
<rect x="600" y="15" width="60" height="20" fill="none" stroke="none" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 18px; margin-left: 602px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 14px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Help</div>
</div>
</div>
</foreignObject>
<text x="602" y="32" fill="#000000" font-family="Verdana" font-size="14px">Help</text>
</switch>
</g>
</g>
<g id="cell-14">
<path d="M 870 110 L 870 110.24 L 880 109.5 L 890 110.59 L 900 109.64 L 910 110.03 L 920 109.57 L 930 109.98 L 940 109.98 L 950 110.71 L 960 109.53 L 970 110.25 L 980 109.69 L 990 109.75 L 1000 109.66 L 1010 110.54 L 1020 109.76 L 1030 110 L 1030 110 L 1030.72 120 L 1030.44 130 L 1029.68 140 L 1029.51 150 L 1030 160 L 1030 160.35 L 1020 159.84 L 1010 160.4 L 1000 160.35 L 990 159.93 L 980 159.47 L 970 160.01 L 960 159.64 L 950 159.7 L 940 159.33 L 930 159.87 L 920 159.59 L 910 160.43 L 900 160.34 L 890 160.19 L 880 159.59 L 870 160 L 869.3 160 L 870.48 150 L 869.76 140 L 869.89 130 L 869.76 120 L 870 110 L 870 110 Z Z" fill="#dae8fc" stroke="#6c8ebf" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="all"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 135px; margin-left: 871px;">
<div style="box-sizing: border-box; font-size: 0; text-align: center; ">
<div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">New &lt;template&gt; &lt;extension&gt;</div>
</div>
</div>
</foreignObject>
<text x="950" y="139" fill="#000000" font-family="Verdana" font-size="12px" text-anchor="middle">New &lt;template&gt; &lt;extension&gt;</text>
</switch>
</g>
</g>
<g id="cell-677b7b8949515195-10">
<path d="M 110 110 L 110 110.37 L 120 110.69 L 130 109.45 L 140 110.33 L 150 110.66 L 160 109.26 L 170 109.28 L 180 109.76 L 190 110.71 L 200 109.27 L 210 109.37 L 220 109.92 L 230 109.88 L 240 110.3 L 250 109.61 L 260 109.97 L 270 110.12 L 280 110.07 L 290 110.7 L 300 110.53 L 310 109.5 L 320 110.01 L 330 110.37 L 340 110.32 L 350 110.58 L 360 110.34 L 370 109.52 L 380 109.42 L 390 109.87 L 400 110.32 L 410 109.28 L 420 110.3 L 430 109.61 L 440 109.54 L 450 109.77 L 460 110.22 L 470 110.06 L 480 109.52 L 490 110.14 L 500 110.32 L 510 109.41 L 520 109.6 L 530 110.37 L 540 109.99 L 550 110.7 L 560 109.71 L 570 109.8 L 580 109.94 L 590 109.5 L 600 110.28 L 610 109.33 L 620 109.57 L 630 110.13 L 640 110.33 L 650 110.4 L 660 109.34 L 670 110.58 L 680 109.7 L 690 109.54 L 700 109.96 L 710 109.31 L 720 109.51 L 730 110.34 L 740 109.59 L 750 109.48 L 760 109.6 L 770 110.68 L 780 109.65 L 790 109.69 L 800 110.65 L 810 110.67 L 820 109.72 L 830 109.78 L 840 109.54 L 850 109.8 L 860 110 L 860.69 110 L 859.36 120 L 860.66 130 L 859.71 140 L 859.62 150 L 860 160 L 860 159.55 L 850 159.76 L 840 159.74 L 830 160.03 L 820 159.51 L 810 160.63 L 800 160.15 L 790 160.27 L 780 160.07 L 770 159.7 L 760 159.77 L 750 159.65 L 740 159.9 L 730 159.91 L 720 159.76 L 710 159.38 L 700 160.25 L 690 160.39 L 680 159.85 L 670 160.02 L 660 160.03 L 650 159.83 L 640 160.47 L 630 159.26 L 620 160.67 L 610 160.37 L 600 159.53 L 590 160.49 L 580 159.5 L 570 160.41 L 560 160.05 L 550 160.42 L 540 160.26 L 530 159.89 L 520 159.9 L 510 159.72 L 500 159.63 L 490 159.78 L 480 160.18 L 470 159.98 L 460 159.58 L 450 159.31 L 440 160.19 L 430 160.45 L 420 159.77 L 410 160.57 L 400 159.8 L 390 160.02 L 380 160.63 L 370 159.99 L 360 160.41 L 350 160.28 L 340 160.58 L 330 159.61 L 320 160.33 L 310 160.71 L 300 160.62 L 290 160.28 L 280 159.41 L 270 159.46 L 260 160.37 L 250 160.19 L 240 159.44 L 230 159.98 L 220 159.69 L 210 159.98 L 200 160.43 L 190 159.47 L 180 159.94 L 170 160.22 L 160 159.89 L 150 159.55 L 140 159.39 L 130 159.7 L 120 160.29 L 110 160 L 109.27 160 L 110.5 150 L 110.5 140 L 109.59 130 L 110.61 120 L 110 110 L 110 110 Z Z" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-12">
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 127px; margin-left: 122px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 14px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: none; white-space: nowrap; ">New Diagram</div>
</div>
</div>
</foreignObject>
<text x="122" y="141" fill="#000000" font-family="Verdana" font-size="14px">New Diag...</text>
</switch>
</g>
</g>
<g id="cell-13">
<path d="M 215.77 120 L 215.77 119.57 L 225.7 119.91 L 235.63 120.52 L 245.56 119.36 L 255.49 120.43 L 265.42 120.71 L 275.35 119.86 L 285.28 119.76 L 295.21 119.39 L 305.15 119.47 L 315.08 120.38 L 325.01 119.35 L 334.94 119.83 L 344.87 120.45 L 354.8 119.3 L 364.73 119.97 L 374.66 120.08 L 384.59 120.19 L 394.52 119.34 L 404.45 119.26 L 414.38 119.4 L 424.31 119.76 L 434.24 120.28 L 444.17 120.68 L 454.1 120.1 L 464.04 120.32 L 473.97 120.55 L 483.9 119.52 L 493.83 119.68 L 503.76 120.52 L 513.69 119.53 L 523.62 120.28 L 533.55 120.72 L 543.48 119.26 L 553.41 120.29 L 563.34 119.66 L 573.27 120.56 L 583.2 119.25 L 593.13 119.68 L 603.06 119.68 L 612.99 119.93 L 622.93 120.23 L 632.86 119.55 L 642.79 120.25 L 652.72 119.77 L 662.65 120.39 L 672.58 119.33 L 682.51 120.46 L 692.44 119.91 L 702.37 120.6 L 712.3 119.92 L 722.23 119.38 L 732.16 120.03 L 742.09 120.48 L 752.02 120.44 L 761.95 119.3 L 771.89 119.91 L 781.82 120.51 L 791.75 120.13 L 801.68 120.53 L 811.61 119.98 L 821.54 120 L 821.43 120 L 821.64 126 L 821.4 132 L 821.65 138 L 821.71 144 L 821.54 150 L 821.54 150.33 L 811.61 150.6 L 801.68 149.86 L 791.75 149.7 L 781.82 150.31 L 771.89 150.3 L 761.95 149.63 L 752.02 150.72 L 742.09 149.28 L 732.16 150.24 L 722.23 150.42 L 712.3 150.17 L 702.37 150.34 L 692.44 150.19 L 682.51 149.91 L 672.58 149.54 L 662.65 149.82 L 652.72 149.3 L 642.79 150.7 L 632.86 150.41 L 622.93 149.75 L 612.99 150.71 L 603.06 149.38 L 593.13 150.33 L 583.2 149.98 L 573.27 149.9 L 563.34 149.48 L 553.41 150.26 L 543.48 149.61 L 533.55 149.55 L 523.62 150.05 L 513.69 149.49 L 503.76 150.5 L 493.83 150.06 L 483.9 150.68 L 473.97 150.15 L 464.04 150.07 L 454.1 150.47 L 444.17 149.7 L 434.24 150.31 L 424.31 150.01 L 414.38 150.07 L 404.45 149.68 L 394.52 149.45 L 384.59 149.78 L 374.66 150.26 L 364.73 149.83 L 354.8 149.95 L 344.87 149.41 L 334.94 150.36 L 325.01 150.71 L 315.08 150.49 L 305.15 149.8 L 295.21 150.15 L 285.28 149.87 L 275.35 149.29 L 265.42 149.8 L 255.49 150.53 L 245.56 150.44 L 235.63 150.52 L 225.7 150.28 L 215.77 150 L 215.95 150 L 215.93 144 L 215.57 138 L 216.02 132 L 215.63 126 L 215.77 120 L 215.77 120 Z Z" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 604px; height: 1px; padding-top: 135px; margin-left: 218px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; ">untitled</div>
</div>
</div>
</foreignObject>
<text x="218" y="139" fill="#000000" font-family="Verdana" font-size="12px">untitled</text>
</switch>
</g>
</g>
<g id="cell-17">
<path d="M 140 60 L 140 59.7 L 150 60.63 L 160 60.19 L 170 60.09 L 180 59.67 L 190 60.72 L 200 60.6 L 210 60.12 L 220 60.6 L 230 60.42 L 240 60.51 L 250 60.23 L 260 60.2 L 270 60.73 L 280 60 L 280.23 60 L 279.76 66 L 279.87 72 L 279.97 78 L 280.24 84 L 280 90 L 280 90.28 L 270 90.04 L 260 90.67 L 250 89.85 L 240 90.58 L 230 89.44 L 220 89.28 L 210 89.47 L 200 89.75 L 190 89.88 L 180 90.59 L 170 90.61 L 160 90.07 L 150 89.53 L 140 90 L 139.8 90 L 140.14 84 L 139.88 78 L 140.13 72 L 139.79 66 L 140 60 L 140 60 Z Z" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 138px; height: 1px; padding-top: 67px; margin-left: 142px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; ">New Diagram               X</div>
</div>
</div>
</foreignObject>
<text x="142" y="79" fill="#000000" font-family="Verdana" font-size="12px">New Diagram...</text>
</switch>
</g>
</g>
<g id="cell-677b7b8949515195-8">
<path d="M 0 51 L 0 50.96 L 10 50.51 L 20 51.65 L 30 51.48 L 40 50.33 L 50 50.58 L 60 50.47 L 70 51.03 L 80 51.44 L 90 51 L 90.63 51 L 89.41 60.99 L 90.71 70.97 L 89.84 80.96 L 90.61 90.95 L 89.42 100.93 L 89.75 110.92 L 89.55 120.91 L 90.02 130.89 L 89.71 140.88 L 89.56 150.87 L 89.67 160.86 L 90.39 170.84 L 90.02 180.83 L 89.94 190.82 L 90.72 200.8 L 90.45 210.79 L 89.47 220.78 L 90.46 230.76 L 90.3 240.75 L 89.75 250.74 L 89.94 260.72 L 89.64 270.71 L 90.12 280.7 L 90.38 290.68 L 89.94 300.67 L 90.37 310.66 L 89.31 320.64 L 89.35 330.63 L 90.25 340.62 L 90.67 350.61 L 90.18 360.59 L 89.45 370.58 L 89.96 380.57 L 89.45 390.55 L 90.65 400.54 L 89.95 410.53 L 89.42 420.51 L 90.51 430.5 L 90.67 440.49 L 89.46 450.47 L 90.12 460.46 L 90.08 470.45 L 90.14 480.43 L 89.96 490.42 L 90.75 500.41 L 90.3 510.39 L 90.69 520.38 L 90.71 530.37 L 89.97 540.36 L 89.46 550.34 L 89.95 560.33 L 90.56 570.32 L 89.28 580.3 L 89.96 590.29 L 90.73 600.28 L 89.82 610.26 L 90.71 620.25 L 89.96 630.24 L 90.16 640.22 L 89.73 650.21 L 89.76 660.2 L 90.22 670.18 L 90.02 680.17 L 89.28 690.16 L 90.07 700.14 L 90.49 710.13 L 90.26 720.12 L 89.46 730.11 L 90.55 740.09 L 89.94 750.08 L 90.1 760.07 L 89.7 770.05 L 90.23 780.04 L 90.46 790.03 L 90.25 800.01 L 90 810 L 90 809.44 L 80 809.67 L 70 809.66 L 60 809.91 L 50 809.7 L 40 810.62 L 30 809.38 L 20 810.04 L 10 809.45 L 0 810 L 0.11 810 L -0.32 800.01 L -0.16 790.03 L 0.24 780.04 L -0.16 770.05 L 0.37 760.07 L -0.04 750.08 L -0.19 740.09 L -0.05 730.11 L -0.32 720.12 L -0.11 710.13 L -0.73 700.14 L 0.73 690.16 L 0.05 680.17 L -0.35 670.18 L 0.21 660.2 L 0.25 650.21 L 0.68 640.22 L -0.34 630.24 L -0.17 620.25 L -0.01 610.26 L 0.41 600.28 L 0.68 590.29 L -0.7 580.3 L 0.07 570.32 L 0.3 560.33 L 0.21 550.34 L 0.57 540.36 L -0.65 530.37 L 0.08 520.38 L -0.14 510.39 L 0.75 500.41 L -0.41 490.42 L -0.57 480.43 L 0.4 470.45 L -0.51 460.46 L -0.69 450.47 L 0.36 440.49 L -0.14 430.5 L -0.42 420.51 L -0.06 410.53 L -0.22 400.54 L -0.35 390.55 L -0.41 380.57 L 0.08 370.58 L -0.39 360.59 L 0.69 350.61 L 0.17 340.62 L 0.08 330.63 L 0.32 320.64 L 0.56 310.66 L -0.68 300.67 L 0.64 290.68 L -0.22 280.7 L -0.66 270.71 L -0.2 260.72 L 0.13 250.74 L -0.5 240.75 L -0.11 230.76 L 0.13 220.78 L -0.08 210.79 L 0.16 200.8 L -0.43 190.82 L 0.31 180.83 L 0.28 170.84 L 0.71 160.86 L 0.61 150.87 L -0.54 140.88 L -0.63 130.89 L 0.38 120.91 L -0.22 110.92 L -0.21 100.93 L -0.59 90.95 L 0.1 80.96 L 0.25 70.97 L 0.61 60.99 L 0 51 L 0 51 Z Z" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-677b7b8949515195-27">
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 80px; margin-left: 12px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 14px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: none; white-space: nowrap; ">Files</div>
</div>
</div>
</foreignObject>
<text x="12" y="94" fill="#000000" font-family="Verdana" font-size="14px">Files</text>
</switch>
</g>
</g>
<g id="cell-677b7b8949515195-28">
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 126px; margin-left: 12px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 14px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: none; white-space: nowrap; ">Running</div>
</div>
</div>
</foreignObject>
<text x="12" y="140" fill="#000000" font-family="Verdana" font-size="14px">Running</text>
</switch>
</g>
</g>
<g id="cell-677b7b8949515195-29">
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 171px; margin-left: 12px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 14px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: none; white-space: nowrap; ">Tabs</div>
</div>
</div>
</foreignObject>
<text x="12" y="185" fill="#000000" font-family="Verdana" font-size="14px">Tabs</text>
</switch>
</g>
</g>
<g id="cell-677b7b8949515195-30">
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 217px; margin-left: 12px;">
<div style="box-sizing: border-box; font-size: 0; text-align: left; ">
<div style="display: inline-block; font-size: 14px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: none; white-space: nowrap; ">Extensions</div>
</div>
</div>
</foreignObject>
<text x="12" y="231" fill="#000000" font-family="Verdana" font-size="14px">Extensions</text>
</switch>
</g>
</g>
<g id="cell-23">
<path d="M 120 565 L 120 565.35 L 130 565.59 L 140 564.67 L 150 565.06 L 160 564.37 L 170 564.33 L 180 564.38 L 190 564.48 L 200 564.26 L 210 565.12 L 220 564.9 L 230 564.86 L 240 565.52 L 250 565 L 249.79 565 L 250.24 571 L 249.94 577 L 250.02 583 L 249.95 589 L 250 595 L 250 594.85 L 240 595.73 L 230 595.02 L 220 594.84 L 210 595.16 L 200 594.29 L 190 594.52 L 180 594.52 L 170 595.14 L 160 595.45 L 150 595.27 L 140 595.6 L 130 595.7 L 120 595 L 119.97 595 L 119.92 589 L 119.76 583 L 120.21 577 L 119.85 571 L 120 565 L 120 565 Z Z" fill="none" stroke="#000000" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
<g transform="translate(-0.5 -0.5)">
<switch>
<foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 128px; height: 1px; padding-top: 580px; margin-left: 120px;">
<div style="box-sizing: border-box; font-size: 0; text-align: right; ">
<div style="display: inline-block; font-size: 12px; font-family: Verdana; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "> 🔎</div>
</div>
</div>
</foreignObject>
<text x="248" y="584" fill="#000000" font-family="Verdana" font-size="12px" text-anchor="end"> 🔎</text>
</switch>
</g>
</g>
<g id="cell-24">
<rect x="430" y="190" width="120" height="130" fill="#ffffff" stroke="#999999" pointer-events="none"/>
<path d="M 430 190 L 430.37 190.34 L 436.18 196.77 L 443.53 204.63 L 450.25 211.9 L 456.42 218.66 L 463.2 225.99 L 470.12 233.45 L 476.99 240.85 L 483.08 247.54 L 490.25 255.23 L 496.93 262.47 L 503.87 269.94 L 510.41 277.04 L 516.32 283.57 L 523.58 291.34 L 529.49 297.86 L 536.27 305.19 L 542.94 312.42 L 550 320 M 430 320 L 429.89 319.9 L 436.22 312.36 L 443.02 305.27 L 449.8 298.14 L 456.78 291.22 L 463.55 284.09 L 469.71 276.4 L 476.64 269.42 L 483.21 262.1 L 489.71 254.73 L 496.85 247.94 L 503.66 240.86 L 510.02 233.36 L 516.21 225.69 L 523.32 218.88 L 530.51 212.14 L 536.91 204.67 L 543.08 196.99 L 550 190" fill="none" stroke="#999999" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-25">
<rect x="570" y="190" width="120" height="130" fill="#ffffff" stroke="#999999" pointer-events="none"/>
<path d="M 570 190 L 569.8 189.81 L 576.59 197.15 L 583.19 204.31 L 589.49 211.19 L 596.67 218.89 L 602.99 225.79 L 609.97 233.31 L 617.12 240.98 L 623.58 248 L 630.04 255.04 L 636.22 261.81 L 643.86 269.93 L 650.2 276.85 L 656.24 283.5 L 663.84 291.57 L 670.53 298.82 L 676.35 305.26 L 682.96 312.44 L 690 320 M 570 320 L 569.56 319.59 L 576.23 312.37 L 583.81 305.99 L 589.52 297.89 L 597 291.41 L 602.81 283.41 L 610.06 276.72 L 617.19 269.93 L 622.79 261.72 L 629.92 254.92 L 636.17 247.32 L 643.55 240.75 L 650.41 233.71 L 656.41 225.87 L 663.04 218.62 L 670.1 211.76 L 676.28 204.09 L 683.59 197.46 L 690 190" fill="none" stroke="#999999" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-26">
<rect x="710" y="190" width="120" height="130" fill="#ffffff" stroke="#999999" pointer-events="none"/>
<path d="M 710 190 L 709.62 189.65 L 716.53 197.1 L 723.51 204.61 L 729.8 211.48 L 736.17 218.43 L 743.62 226.38 L 750.1 233.43 L 756.21 240.13 L 763.26 247.71 L 769.95 254.96 L 777.09 262.61 L 783.07 269.2 L 789.48 276.19 L 796.12 283.39 L 802.83 290.64 L 809.53 297.9 L 817.01 305.88 L 822.9 312.38 L 830 320 M 710 320 L 709.95 319.95 L 716.58 312.7 L 723.12 305.36 L 730.53 298.83 L 736.38 290.85 L 743.27 283.83 L 750.32 276.96 L 756.43 269.23 L 763.83 262.68 L 770.15 255.14 L 776.39 247.52 L 783.32 240.54 L 789.87 233.21 L 796.33 225.8 L 802.93 218.52 L 810.08 211.74 L 816.75 204.52 L 823.32 197.21 L 830 190" fill="none" stroke="#999999" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-27">
<rect x="710" y="360.5" width="120" height="130" fill="#ffffff" stroke="#999999" pointer-events="none"/>
<path d="M 710 360.5 L 709.79 360.31 L 716.87 367.91 L 723.38 374.99 L 730.3 382.45 L 736.59 389.32 L 743.1 396.4 L 750.01 403.84 L 756.98 411.35 L 763.53 418.46 L 770.25 425.73 L 776.31 432.39 L 783.65 440.23 L 789.49 446.7 L 796.17 453.93 L 803.18 461.47 L 809.88 468.72 L 816.52 475.92 L 822.86 482.84 L 830 490.5 M 710 490.5 L 709.56 490.09 L 717.13 483.71 L 723.75 476.44 L 729.93 468.77 L 737.07 461.98 L 743.75 454.77 L 749.89 447.07 L 757.17 440.41 L 762.82 432.25 L 769.61 425.14 L 776.84 418.44 L 783.4 411.12 L 790.16 403.98 L 796.72 396.66 L 803.62 389.65 L 809.52 381.72 L 816.74 375.01 L 823.7 368.06 L 830 360.5" fill="none" stroke="#999999" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-28">
<rect x="290" y="360.5" width="120" height="130" fill="#ffffff" stroke="#999999" pointer-events="none"/>
<path d="M 290 360.5 L 290.52 360.98 L 297.2 368.22 L 302.81 374.46 L 309.47 381.68 L 316.93 389.63 L 322.94 396.25 L 330.37 404.18 L 337 411.36 L 343.2 418.16 L 349.63 425.16 L 357.11 433.13 L 363.71 440.29 L 370.39 447.53 L 376.23 453.99 L 383.73 461.98 L 390.25 469.06 L 396.48 475.88 L 403.38 483.32 L 410 490.5 M 290 490.5 L 289.98 490.48 L 296.86 483.45 L 303.75 476.44 L 309.7 468.56 L 317.13 462.04 L 322.89 453.98 L 330.5 447.63 L 336.38 439.68 L 343.54 432.91 L 350.19 425.67 L 356.45 418.07 L 363 410.75 L 370.23 404.04 L 376.49 396.45 L 383.5 389.54 L 389.68 381.87 L 396.55 374.83 L 403.6 367.97 L 410 360.5" fill="none" stroke="#999999" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-29">
<rect x="430" y="360.5" width="120" height="130" fill="#ffffff" stroke="#999999" stroke-width="4" pointer-events="none"/>
<path d="M 430 360.5 L 430.54 361 L 436.82 367.87 L 443.3 374.92 L 450.34 382.48 L 457.18 389.87 L 463.72 396.97 L 470.49 404.28 L 476.85 411.23 L 483.68 418.6 L 490.34 425.81 L 497.18 433.2 L 503.84 440.41 L 510.09 447.25 L 517.19 454.87 L 523.76 462.01 L 530.19 469.01 L 536.47 475.88 L 543.39 483.33 L 550 490.5 M 430 490.5 L 429.53 490.07 L 436.34 482.98 L 443.86 476.54 L 449.76 468.61 L 457.1 462.01 L 463.65 454.68 L 470.14 447.29 L 476.69 439.97 L 483.24 432.64 L 490.31 425.79 L 496.29 417.93 L 503.18 410.92 L 510.28 404.09 L 516.59 396.54 L 523.02 389.1 L 529.76 381.94 L 537.16 375.4 L 543.32 367.71 L 550 360.5" fill="none" stroke="#999999" stroke-width="4" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-30">
<rect x="570" y="360.5" width="120" height="130" fill="#ffffff" stroke="#999999" pointer-events="none"/>
<path d="M 570 360.5 L 570.13 360.62 L 577.22 368.23 L 583.04 374.67 L 589.67 381.87 L 596.16 388.92 L 603.58 396.84 L 610.35 404.16 L 616.62 411.01 L 623.38 418.32 L 630.33 425.8 L 636.36 432.44 L 643.07 439.71 L 649.71 446.9 L 656.7 454.42 L 663.3 461.58 L 669.65 468.51 L 676.44 475.84 L 683.01 482.98 L 690 490.5 M 570 490.5 L 570.07 490.57 L 577.03 483.61 L 583.71 476.4 L 589.88 468.72 L 596.92 461.85 L 602.97 454.05 L 610.34 447.48 L 616.4 439.7 L 623.55 432.93 L 629.55 425.08 L 636.76 418.36 L 643.54 411.24 L 650.07 403.9 L 656.39 396.35 L 663.59 389.63 L 669.86 382.04 L 677.19 375.43 L 683.87 368.22 L 690 360.5" fill="none" stroke="#999999" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-31">
<rect x="710" y="530" width="120" height="130" fill="#ffffff" stroke="#999999" pointer-events="none"/>
<path d="M 710 530 L 709.47 529.51 L 716.67 537.22 L 723.04 544.18 L 730.07 551.73 L 736.74 558.96 L 743.02 565.82 L 750.08 573.41 L 756.39 580.3 L 763.56 587.98 L 770.49 595.45 L 776.99 602.52 L 782.81 608.96 L 789.75 616.44 L 797.14 624.33 L 803.21 631 L 810.19 638.51 L 817.09 645.94 L 823.8 653.21 L 830 660 M 710 660 L 709.52 659.56 L 716.38 652.52 L 723.3 645.53 L 729.6 637.96 L 736.76 631.2 L 743.2 623.77 L 750.04 616.71 L 756.2 609.02 L 763.06 601.97 L 770.31 595.29 L 776.84 587.94 L 783.3 580.52 L 790.19 573.51 L 796.66 566.1 L 802.8 558.39 L 809.9 551.58 L 816.86 544.63 L 823.82 537.68 L 830 530" fill="none" stroke="#999999" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-32">
<rect x="290" y="530" width="120" height="130" fill="#ffffff" stroke="#999999" pointer-events="none"/>
<path d="M 290 530 L 289.57 529.6 L 296.14 536.74 L 303.23 544.35 L 309.97 551.64 L 317.05 559.24 L 323.41 566.18 L 329.8 573.15 L 336.38 580.29 L 342.85 587.33 L 350.26 595.24 L 356.63 602.18 L 363.63 609.72 L 370.04 616.7 L 377.18 624.37 L 383.37 631.15 L 390.49 638.79 L 397.18 646.03 L 402.94 652.42 L 410 660 M 290 660 L 290.31 660.29 L 296.73 652.83 L 303.77 645.96 L 309.86 638.2 L 316.55 631 L 323.72 624.24 L 330.41 617.05 L 336.29 609.1 L 343.02 601.93 L 350.53 595.49 L 356.18 587.33 L 363.69 580.88 L 370.31 573.62 L 377 566.42 L 383.65 559.18 L 390.41 552.05 L 396.28 544.08 L 403.87 537.72 L 410 530" fill="none" stroke="#999999" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-33">
<rect x="430" y="530" width="120" height="130" fill="#ffffff" stroke="#999999" stroke-width="4" pointer-events="none"/>
<path d="M 430 530 L 429.61 529.64 L 436.85 537.39 L 442.84 543.99 L 450.41 552.04 L 456.8 559.02 L 463.66 566.41 L 469.99 573.33 L 477.01 580.87 L 483.29 587.74 L 489.49 594.53 L 496.49 602.06 L 502.94 609.08 L 509.76 616.45 L 516.69 623.91 L 522.81 630.63 L 529.54 637.9 L 536.49 645.39 L 542.96 652.43 L 550 660 M 430 660 L 429.85 659.86 L 436.93 653.02 L 443.71 645.9 L 450.13 638.45 L 456.45 630.91 L 463.18 623.75 L 470.09 616.75 L 476.62 609.4 L 482.97 601.89 L 490.15 595.14 L 496.41 587.54 L 503.02 580.27 L 510.2 573.52 L 516.99 566.41 L 523.46 559.01 L 529.65 551.34 L 536.92 544.68 L 543.78 537.64 L 550 530" fill="none" stroke="#999999" stroke-width="4" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-34">
<rect x="570" y="530" width="120" height="130" fill="#ffffff" stroke="#999999" pointer-events="none"/>
<path d="M 570 530 L 569.58 529.61 L 576.77 537.32 L 582.98 544.12 L 590.11 551.77 L 596.62 558.85 L 603.15 565.94 L 610.29 573.6 L 616.19 580.11 L 623.36 587.8 L 630.35 595.32 L 636.88 602.42 L 643.42 609.52 L 649.91 616.58 L 656.35 623.59 L 663.48 631.25 L 670.47 638.77 L 677.05 645.91 L 683.41 652.85 L 690 660 M 570 660 L 569.67 659.7 L 576.25 652.39 L 582.83 645.09 L 590.21 638.53 L 596.29 630.76 L 603.59 624.13 L 609.79 616.48 L 616.61 609.39 L 623.43 602.32 L 629.97 594.97 L 636.25 587.39 L 643.14 580.37 L 650.22 573.53 L 656.13 565.62 L 663.66 559.19 L 670.04 551.71 L 677.18 544.92 L 683.87 537.71 L 690 530" fill="none" stroke="#999999" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-35">
<rect x="710" y="670" width="120" height="130" fill="#ffffff" stroke="#999999" pointer-events="none"/>
<path d="M 710 670 L 709.65 669.67 L 717.15 677.67 L 723.45 684.55 L 729.64 691.34 L 736.38 698.63 L 743.6 706.35 L 749.61 712.97 L 756.17 720.09 L 762.92 727.39 L 770.34 735.32 L 777.18 742.7 L 783.65 749.74 L 790.27 756.91 L 796.73 763.95 L 803.41 771.19 L 810.52 778.82 L 816.64 785.53 L 823.65 793.07 L 830 800 M 710 800 L 710.29 800.27 L 716.45 792.58 L 723.29 785.51 L 730.29 778.6 L 736.71 771.15 L 743.2 763.76 L 749.94 756.61 L 756.67 749.45 L 763.4 742.28 L 769.61 734.64 L 777.07 728.15 L 783.13 720.37 L 789.45 712.83 L 796.84 706.27 L 803.05 698.62 L 809.65 691.35 L 816.37 684.17 L 823.25 677.14 L 830 670" fill="none" stroke="#999999" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-36">
<rect x="290" y="670" width="120" height="130" fill="#ffffff" stroke="#999999" pointer-events="none"/>
<path d="M 290 670 L 290.15 670.14 L 296.47 677.04 L 303.39 684.49 L 309.6 691.3 L 316.22 698.47 L 323.81 706.55 L 330.45 713.74 L 336.18 720.1 L 342.78 727.27 L 349.68 734.7 L 356.23 741.82 L 363.44 749.55 L 369.74 756.43 L 376.63 763.85 L 383.65 771.41 L 389.77 778.12 L 396.39 785.3 L 403.33 792.78 L 410 800 M 290 800 L 290.09 800.08 L 297.06 793.14 L 303.75 785.94 L 309.98 778.32 L 316.62 771.07 L 323.12 763.69 L 329.73 756.42 L 336.37 749.17 L 343.87 742.71 L 350.38 735.35 L 356.92 728.01 L 363.38 720.6 L 370.46 713.76 L 376.94 706.36 L 382.93 698.52 L 390.29 691.94 L 396.36 684.16 L 403.72 677.58 L 410 670" fill="none" stroke="#999999" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-37">
<rect x="430" y="670" width="120" height="130" fill="#ffffff" stroke="#999999" pointer-events="none"/>
<path d="M 430 670 L 429.82 669.83 L 436.39 676.97 L 443.73 684.81 L 450.12 691.78 L 456.62 698.85 L 463.41 706.18 L 469.82 713.16 L 476.55 720.45 L 483.67 728.09 L 490.12 735.11 L 497.2 742.71 L 502.85 749 L 510.01 756.67 L 516.74 763.96 L 523.58 771.34 L 529.6 777.97 L 537.14 785.99 L 543.5 792.93 L 550 800 M 430 800 L 429.86 799.87 L 436.66 792.77 L 443.57 785.77 L 449.6 777.97 L 456.97 771.39 L 463.42 763.96 L 469.77 756.45 L 477.1 749.84 L 483.64 742.51 L 490.12 735.11 L 497.11 728.19 L 503.56 720.77 L 510.46 713.76 L 516.28 705.75 L 523.24 698.8 L 530.4 692.04 L 536.28 684.09 L 543.57 677.44 L 550 670" fill="none" stroke="#999999" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-38">
<rect x="570" y="670" width="120" height="130" fill="#ffffff" stroke="#999999" pointer-events="none"/>
<path d="M 570 670 L 569.7 669.72 L 576.12 676.72 L 583.86 684.93 L 590.44 692.07 L 597.02 699.22 L 603.6 706.35 L 610.53 713.83 L 616.34 720.26 L 622.89 727.37 L 630.48 735.44 L 636.89 742.43 L 643.78 749.85 L 650.11 756.77 L 656.87 764.07 L 663.63 771.39 L 669.95 778.29 L 676.21 785.14 L 683.88 793.28 L 690 800 M 570 800 L 569.7 799.72 L 576.34 792.47 L 583.65 785.84 L 590.24 778.55 L 597.12 771.53 L 603.21 763.77 L 609.76 756.44 L 616.32 749.12 L 622.99 741.9 L 630.5 735.46 L 637 728.08 L 643.73 720.92 L 650.05 713.38 L 656.94 706.36 L 662.86 698.46 L 670.37 692.01 L 676.87 684.63 L 683.61 677.48 L 690 670" fill="none" stroke="#999999" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-39">
<rect x="850" y="190" width="120" height="130" fill="#ffffff" stroke="#999999" pointer-events="none"/>
<path d="M 850 190 L 850.34 190.32 L 856.46 197.03 L 863.13 204.26 L 870.01 211.68 L 876.72 218.94 L 883.8 226.54 L 890.27 233.58 L 896.85 240.73 L 903.39 247.83 L 910.39 255.36 L 916.62 262.18 L 922.91 269.06 L 929.99 276.65 L 936.32 283.56 L 943.11 290.91 L 949.54 297.91 L 956.26 305.18 L 963.39 312.83 L 970 320 M 850 320 L 849.62 319.65 L 856.74 312.84 L 863.87 306.05 L 870.11 298.43 L 877.16 291.56 L 883.32 283.87 L 889.55 276.25 L 896.37 269.17 L 903.3 262.19 L 910.14 255.13 L 916.95 248.04 L 923.83 241.01 L 930.07 233.4 L 937.14 226.54 L 943.29 218.85 L 949.55 211.25 L 956.56 204.35 L 962.79 196.72 L 970 190" fill="none" stroke="#999999" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-40">
<rect x="850" y="360.5" width="120" height="130" fill="#ffffff" stroke="#999999" pointer-events="none"/>
<path d="M 850 360.5 L 850.44 360.91 L 856.22 367.31 L 863.2 374.82 L 870.36 382.5 L 877.15 389.83 L 883.7 396.95 L 890.35 404.16 L 896.17 410.59 L 903.01 417.98 L 909.53 425.07 L 916.72 432.77 L 923.68 440.27 L 929.52 446.72 L 936.84 454.55 L 943.27 461.55 L 950.09 468.91 L 956.8 476.18 L 963.65 483.57 L 970 490.5 M 850 490.5 L 850.38 490.85 L 856.6 483.22 L 863.19 475.93 L 869.97 468.81 L 876.84 461.77 L 883.69 454.71 L 889.95 447.12 L 896.48 439.78 L 903.32 432.71 L 910.04 425.54 L 916.68 418.29 L 923.85 411.53 L 929.96 403.8 L 937.05 396.96 L 943.67 389.7 L 950.03 382.19 L 957.21 375.45 L 963.62 367.99 L 970 360.5" fill="none" stroke="#999999" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-41">
<rect x="850" y="530" width="120" height="130" fill="#ffffff" stroke="#999999" pointer-events="none"/>
<path d="M 850 530 L 849.67 529.7 L 856.99 537.52 L 862.9 544.05 L 870.35 551.99 L 877.16 559.35 L 882.87 565.68 L 889.64 573 L 896.76 580.65 L 902.82 587.3 L 910.27 595.25 L 916.86 602.4 L 923.25 609.37 L 930.19 616.84 L 936.48 623.72 L 943.11 630.91 L 949.99 638.33 L 956.57 645.47 L 963.51 652.94 L 970 660 M 850 660 L 850.02 660.02 L 856.48 652.6 L 863.61 645.81 L 869.7 638.05 L 877.03 631.45 L 883.4 623.95 L 890.41 617.05 L 896.8 609.57 L 903.7 602.56 L 909.73 594.75 L 917.01 588.09 L 922.99 580.23 L 930.09 573.42 L 936.42 565.88 L 943.34 558.89 L 949.47 551.18 L 957.05 544.8 L 962.85 536.77 L 970 530" fill="none" stroke="#999999" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
<g id="cell-42">
<rect x="850" y="670" width="120" height="130" fill="#ffffff" stroke="#999999" pointer-events="none"/>
<path d="M 850 670 L 849.93 669.94 L 857.16 677.68 L 863.64 684.73 L 870.03 691.69 L 876.61 698.84 L 883.77 706.51 L 889.8 713.15 L 897.15 721 L 903.41 727.85 L 910.43 735.4 L 916.21 741.8 L 922.89 749.03 L 930.33 756.97 L 936.31 763.56 L 942.83 770.65 L 950.43 778.73 L 956.53 785.43 L 962.81 792.3 L 970 800 M 850 800 L 849.94 799.95 L 856.95 793.03 L 863.15 785.39 L 870.18 778.5 L 876.91 771.34 L 883.65 764.18 L 889.57 756.27 L 896.53 749.32 L 903.49 742.37 L 909.72 734.74 L 916.2 727.34 L 923.06 720.31 L 930.11 713.43 L 936.32 705.79 L 943.09 698.66 L 950.35 691.99 L 956.15 683.97 L 963.43 677.31 L 970 670" fill="none" stroke="#999999" stroke-linejoin="round" stroke-linecap="round" stroke-miterlimit="10" pointer-events="none"/>
</g>
</g>
</svg>

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 61 KiB

File diff suppressed because one or more lines are too long

Przed

Szerokość:  |  Wysokość:  |  Rozmiar: 92 KiB

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 92 KiB

Wyświetl plik

@ -28,6 +28,7 @@ Start JupyterLab and [start making diagrams](./diagrams/index.md)!
```{toctree}
:maxdepth: 2
diagrams/index
tutorials/index
about/index
api/index
about/contributing

Wyświetl plik

@ -0,0 +1,443 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "05473d59-5b2e-4511-a2ce-428930f2af24",
"metadata": {},
"source": [
"# Designing a Jupyter Extensions with IPyDrawio"
]
},
{
"cell_type": "markdown",
"id": "c0a849e0-cdfe-4c8f-8417-d232999cc1b4",
"metadata": {},
"source": [
"Diagrams can effectively support the many phases of the software development cycle. What IPyDrawio, and the underlying general-purpose drawio UI, lack in features versus more specialized tools, when used in the right context to help a software team communicate between itself, and sometimes more importantly, its users."
]
},
{
"cell_type": "markdown",
"id": "c6517292-f934-4365-a6e3-3c223f14bca9",
"metadata": {},
"source": [
"```{note}\n",
"This tutorial looks at how different kinds of diagram artifacts can be created that support the process of building _Jupyter Extensions_, using IPyDrawio itself as a subject. Each of the images below rendered directly in the browser for this documentation, as well as editable within IPyDrawio.\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "7a5ef077-3d16-4e61-ad47-39b03eb60612",
"metadata": {},
"source": [
"Extensions for [JupyterLab](https://jupyterlab.readthedocs.io/en/stable/extension/extension_dev.html) and [Jupyter Server](https://jupyter-server.readthedocs.io/en/latest/developers/extensions.html?highlight=distributing#distributing-a-server-extension) often developed, and can be distributed, together as a single Python package. While a single author can build, test, document and ship new features _without_ any kinds of pictures, individuals and especially team- and community-driven processes can be enhanced by different visual artifacts that _live next to the code_."
]
},
{
"cell_type": "markdown",
"id": "150c79c8-4349-4fde-bc3c-d7dfa1c74d1a",
"metadata": {},
"source": [
"```{hint}\n",
"Using an editable, but widely-viewable format like `.dio.png` or `.dio.svg` means these assets can be used \"at-rest,\" though without advanced features like multiple pages and interactivity, and works well with the visual diff tools on e.g. GitHub.\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "8c9e0cd8-e623-4c15-9ca9-43f2f35bca8b",
"metadata": {},
"source": [
"## Gathering Ideas\n",
"\n",
"As you start thinking about your extension, who will use it, and how you might build it, IPyDrawio diagrams can capture structured problem-solving approaches effective at capturing, and then leveraging, visual concepts to capture goals and trade-offs."
]
},
{
"cell_type": "markdown",
"id": "c1e0fe74-ddc5-4892-bf73-827bba9eeb94",
"metadata": {},
"source": [
"### Mind Maps\n",
"[Mind Maps](https://en.wikipedia.org/wiki/Mind_map) are an effective way to capture \"stream of consciousness\"."
]
},
{
"cell_type": "markdown",
"id": "605ed2a3-1a8b-416f-82b1-d1493c986cfe",
"metadata": {},
"source": [
"```{hint}\n",
"Search for `mind` in the _Custom Diagram..._ panel. This task also lends itself to the `sketch` theme, which trades UI simplicity for hiding some of the more advanced features.\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "93667624-a6e6-4e58-bb97-3d76c312f353",
"metadata": {},
"source": [
"![a mind map of ipydrawio](../../_static/tutorials/designing-jupyter-extensions/mindmap.dio.svg)"
]
},
{
"cell_type": "markdown",
"id": "bec77aa2-80cf-4702-b222-5c40e021b4a1",
"metadata": {},
"source": [
"### Seven Management and Planning Tools\n",
"The [Seven Management and Planning Tools](https://en.wikipedia.org/wiki/Seven_management_and_planning_tools) are suitable for large and small projects.\n",
"\n",
"```{note}\n",
"While there are no \"prebuilt\" templates for these diagrams, many of the \"basic\" and and \"tree\" shape palettes have ready-made shapes with pre-configured connectors that preserve intent, and work well with the auto-layout tools.\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "de02a784-aa8c-49a5-a1c2-e321c42912bd",
"metadata": {},
"source": [
"![an affinity diagram of ipydrawio](../../_static/tutorials/designing-jupyter-extensions/affinity.dio.svg)"
]
},
{
"cell_type": "markdown",
"id": "3d8c47d4-84dd-4907-95ca-5d8c898c4c6b",
"metadata": {},
"source": [
"```{hint}\n",
"Use the <kbd>Ctrl</kbd> (or <kbd>Cmd</kbd> on MacOS) with existing arrows to quickly make copies. \n",
"```"
]
},
{
"cell_type": "markdown",
"id": "14fe2c2b-de91-4aee-92d1-179d9754468b",
"metadata": {},
"source": [
"### Mermaid Diagrams\n",
"\n",
"The [mermaid.js](https://mermaid-js.github.io/mermaid) drawio plugin (enabled by default) provides a way to write pithy text descriptions, including:\n",
"\n",
"> _Flowchart, Sequence diagram, Class Diagram, State Diagram, Entity Relationship Diagram, User Journey, Gantt, Pie Chart, Requirement Diagram_"
]
},
{
"cell_type": "markdown",
"id": "e7db97c9-fe37-49f2-b08a-c24b9bdff6b7",
"metadata": {},
"source": [
"```{note}\n",
"From the drawio menu, select _Insert_ ▸ _Advanced_ ▸ _Mermaid_. Paste some mermaid there. The resulting object will _not_ be editable with shape-editing tools, but you _will_ be able to adjust the mermaid syntax later by clicking on it, which can be worth _much_ more over time. \n",
"```"
]
},
{
"cell_type": "markdown",
"id": "eab9baf5-f7c5-4ae3-992c-b682943f9fbf",
"metadata": {},
"source": [
"```{hint}\n",
"The [mermaid live editor](https://mermaid-js.github.io/mermaid-live-editor) is a more interactive editing experience than the `textarea` provided by drawio.\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "0e4be3cd-a8d6-41a7-913a-645ef4487a5f",
"metadata": {},
"source": [
"![an affinity diagram of ipydrawio](../../_static/tutorials/designing-jupyter-extensions/mermaid.dio.svg)"
]
},
{
"cell_type": "markdown",
"id": "e57bd8c7-6576-4938-a102-1eeaf33b2626",
"metadata": {},
"source": [
"If these kinds of diagrams are helpful for your extension, consider more advanced tools like [Papyrus](https://www.eclipse.org/papyrus) that support more formal models and diagram standards."
]
},
{
"cell_type": "markdown",
"id": "39f30c2f-f937-4c67-98a1-1cc4670f2709",
"metadata": {},
"source": [
"## Visual Design\n",
"\n",
"While IPyDrawio isn't as full-featured as properietary tools, or even open source tools such as the excellent [Inkscape](https://inkscape.org), it can be effective, and in some ways, more approachable, than full design suites."
]
},
{
"cell_type": "markdown",
"id": "4d22eebd-b5b7-4a8f-89a5-977b61852562",
"metadata": {},
"source": [
"### Wireframing\n",
"\n",
"Low-fidelity wireframes, which often include filler text like _lorem ipsum_, placeholder images, etc. provide a quick way to capture the essential views of a novel UI without getting a team hung up on details."
]
},
{
"cell_type": "markdown",
"id": "69f3416e-884b-4292-84cf-59e54e40a592",
"metadata": {},
"source": [
"![a wireframe of the ipydrawio custom diagram panel](../../_static/tutorials/designing-jupyter-extensions/wireframe.dio.svg)"
]
},
{
"cell_type": "markdown",
"id": "202e9e97-1a90-4c9f-829f-c2fd55c96f13",
"metadata": {},
"source": [
"```{hint}\n",
"Use primarily _basic shapes_: a box with a word in it says \"button\" just as well as something with gradients and carefully-kerned fonts.\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "da515eab-71a5-488f-b40a-c361ea26ae71",
"metadata": {},
"source": [
"```{note}\n",
"For single-page/stage views, the `sketch` theme can work well, while `min` provides a nice balance between unobtrusiveness and power.\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "a9cede37-b50d-4c49-805f-e904db806715",
"metadata": {},
"source": [
"### Comps\n",
"\n",
"High-fidelity mockups, or \"comps,\" eventually provide the language used between the designer role and the developer role... even if these roles are filled by the same person."
]
},
{
"cell_type": "markdown",
"id": "2ab27c36-9864-4348-b649-d43970a553d5",
"metadata": {},
"source": [
"```{hint}\n",
"Search for `jupyter` in the _Custom Diagram..._ panel. The _JupyterLab Mockups_ contains recreations of a number of common views, such as the _Launcher_ and _Notebook_, which can be recombined, remixed, or expanded to suggest new features. \n",
"```"
]
},
{
"cell_type": "markdown",
"id": "0ab07900-ff38-4502-839f-d2e31efc6129",
"metadata": {},
"source": [
"```{note}\n",
"One of the \"full\" themes (e.g. `kennedy`, `dark` or `atlas`) is recommended, as using multiple pages, cross-page links, and auto-layouts are more readily discoverable than with `min` or `sketch`.\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "2ed75f4f-d1ae-4d30-a082-1f7f5c3ce326",
"metadata": {},
"source": [
"![a comp of a future feature for IPyDrawio](../../_static/tutorials/designing-jupyter-extensions/comp.dio.svg)"
]
},
{
"cell_type": "markdown",
"id": "98e88667-f9ef-4ae3-8746-348a20b86598",
"metadata": {},
"source": [
"## Testing\n",
"\n",
"While not a _particularly_ accessible semantic model, native drawio documents and SVG _are_ well-behaved XML, and far less opaque than \"professional\" UML/SysML tools. Especially when using some of the richer shapes, such as those in _Trees_, some data will be preserved, and can be used, for example, to validate repository integrity.\n",
"\n",
"\n",
"```{note}\n",
"For example, if you are building an extension composed of many classes, you can use either simple string comparison, regular expressions, or XPath queries (provided by both [browser JS](https://developer.mozilla.org/en-US/docs/Web/XPath) and [python](https://docs.python.org/3/library/xml.etree.elementtree.html#elementtree-xpath)) to verify all classes are included in a key diagram.\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "af1ef92c-69cd-4197-ba34-a25dd428f160",
"metadata": {},
"source": [
"![a deployment diagram of ipydrawio packages](../../_static/tutorials/designing-jupyter-extensions/deployment.dio.svg)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "9976fbb6-e3fb-43b4-a30d-a0ef1d182bbc",
"metadata": {},
"outputs": [],
"source": [
"import lxml.etree as ET\n",
"from pathlib import Path"
]
},
{
"cell_type": "markdown",
"id": "97be3409-eb2b-4766-a873-e956a8e139b3",
"metadata": {},
"source": [
"Because the sources and targets of the dotted edges are not preserved on the `path` SVG elements, we use the fill colors to fill in the missing data."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "168ffd51-051f-40b2-83f5-c1d3c08a3a8d",
"metadata": {},
"outputs": [],
"source": [
"packages = {\"#dae8fc\": \"ipydrawio\", \"#f8cecc\": \"ipydrawio_export\"}"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "45a41a7b-3f73-4e74-8c85-9cf2d7d8b012",
"metadata": {},
"outputs": [],
"source": [
"ships = {\n",
" py_pkg: {\n",
" js_pkg[\"dest\"]\n",
" for js_pkg\n",
" in __import__(py_pkg)._jupyter_labextension_paths()\n",
" }\n",
" for fill, py_pkg in packages.items()\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "ebbd6b25-bcf2-4047-8c72-adde387ec0ee",
"metadata": {},
"outputs": [],
"source": [
"def test_deployment(\n",
" ns=\"@deathbeds/\",\n",
" diagram=\"../../_static/tutorials/designing-jupyter-extensions/deployment.dio.svg\"\n",
"):\n",
" deployment = Path(diagram)\n",
" et = ET.fromstring(deployment.read_text(encoding=\"utf-8\"))\n",
" # get everything with a data-label, which gets preserved\n",
" should_ship_in = {\n",
" f\"\"\"{ns}{e.attrib[\"data-label\"]}\"\"\":\n",
" packages.get(e.xpath(\"./*[1]/@fill\")[0])\n",
" for e in et.xpath(\"//*[@data-label]\")\n",
" }\n",
" for py_package, ships_exts in ships.items():\n",
" print(py_package)\n",
" print(\"... observed\", sorted(ships_exts))\n",
" should_ship_exts = {\n",
" js_name for js_name, py_name in should_ship_in.items()\n",
" if py_name == py_package\n",
" }\n",
" print(\"... expected\", sorted(should_ship_exts))\n",
" mismatches = ships_exts ^ should_ship_exts\n",
" assert not mismatches, f\"mismatches: {mismatches}\"\n",
" print(f\"... {py_package} is 🚢-shape!\")"
]
},
{
"cell_type": "markdown",
"id": "458ea4b9-1365-48d1-9bf9-7d7aa8d04645",
"metadata": {},
"source": [
"```{note}\n",
"For documentation purposes, we just run this directly here, but this could be easily run as part of a regular unit test suite, and an \"offending\" diagram included in a rich test output such as [pytest-html](https://github.com/pytest-dev/pytest-html).\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "42de7083-e97a-4b52-a647-9dd718d20b08",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"ipydrawio\n",
"... observed ['@deathbeds/ipydrawio', '@deathbeds/ipydrawio-jupyter-templates', '@deathbeds/ipydrawio-notebook', '@deathbeds/ipydrawio-webpack']\n",
"... expected ['@deathbeds/ipydrawio', '@deathbeds/ipydrawio-jupyter-templates', '@deathbeds/ipydrawio-notebook', '@deathbeds/ipydrawio-webpack']\n",
"... ipydrawio is 🚢-shape!\n",
"ipydrawio_export\n",
"... observed ['@deathbeds/ipydrawio-pdf']\n",
"... expected ['@deathbeds/ipydrawio-pdf']\n",
"... ipydrawio_export is 🚢-shape!\n"
]
}
],
"source": [
"test_deployment()"
]
},
{
"cell_type": "markdown",
"id": "9dd02cf8-959a-4698-9749-34e3422ef9fc",
"metadata": {},
"source": [
"Now, if a new package is added to either the code, or the diagram, and the other side is _not_ updated, this test will fail, helping to keep the documentation up-to-date."
]
},
{
"cell_type": "markdown",
"id": "0178416c-7f47-4ae2-81bf-850e14c8d22a",
"metadata": {},
"source": [
"## Documentation\n",
"\n",
"Once these diagrams exist, they can be used directly within documentation sites. While alternatives exist for working directly with `.drawio` files, such as [sphinxcontrib-drawio](https://pypi.org/project/sphinxcontrib-drawio), again keeping the files in standards-compliant formats such as `.png` and `.svg` are more likely to stay editable and viewable over time."
]
},
{
"cell_type": "markdown",
"id": "0165bbc2-700b-47c8-b0b6-fbc9789f2cb5",
"metadata": {},
"source": [
"```{hint}\n",
"[myst-nb](https://github.com/executablebooks/MyST-NB) is highly recommended (and used on this documentation site) for embedding various kinds of images without a lot of the hassle of some of the finer points of `.rst` editing.\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "63e1049d-cfa4-49d2-9dea-db554172899a",
"metadata": {},
"source": [
"Another approach is generating diagrams, with tools such as [graphviz2drawio](https://github.com/hbmartin/graphviz2drawio) or [n2g](https://github.com/dmulyalin/N2G). Both offer an intermediate representation which can be more effective at keeping documentation up-to-date than hand editing diagrams."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

Wyświetl plik

@ -0,0 +1,22 @@
# Tutorials
```{toctree}
:maxdepth: 2
designing-jupyter-extensions/index
```
<!--
# Copyright 2021 ipydrawio contributors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-->

47
dodo.py
Wyświetl plik

@ -174,10 +174,13 @@ def task_setup():
P.OK_PYSETUP[pkg],
)
else:
extra_deps = []
if pkg != "ipydrawio":
extra_deps += [P.OK_PYSETUP["ipydrawio"]]
yield _ok(
dict(
name=f"py:{pkg}",
file_dep=[pkg_setup, P.PY_SETUP_CFG[pkg], *ext_deps],
file_dep=[pkg_setup, P.PY_SETUP_CFG[pkg], *ext_deps, *extra_deps],
actions=[
CmdAction(
[
@ -311,6 +314,28 @@ def task_lint():
),
P.OK_ESLINT,
)
dio_tasks = []
for dio_file in P.ALL_DIO:
name = f"dio:clean:{dio_file.relative_to(P.ROOT)}"
dio_tasks += [f"lint:{name}"]
yield dict(
name=name,
file_dep=[dio_file, *P.OK_PYSETUP.values()],
actions=[["jupyter", "ipydrawio", "clean", dio_file]],
)
yield _ok(
dict(
name="dio:clean",
file_dep=[*P.ALL_DIO],
task_dep=dio_tasks,
actions=[["echo", "ok"]],
),
P.OK_DIOLINT,
)
yield _ok(
dict(
name="all",
@ -504,14 +529,8 @@ def task_build():
)
def task_conda():
def task_conda_build():
"""test building with conda-build"""
args = [
"conda",
P.CONDA_BUILDERER,
"-c",
"conda-forge",
]
yield dict(
name="build",
@ -521,7 +540,7 @@ def task_conda():
],
actions=[
[
*args,
*P.CONDA_BUILD_ARGS,
"--no-test",
"--output-folder",
P.CONDA_BLD,
@ -531,12 +550,14 @@ def task_conda():
targets=[*P.CONDA_PKGS.values()],
)
def task_conda_test():
for name, pkg in P.CONDA_PKGS.items():
yield _ok(
dict(
name=f"test:{name}",
file_dep=[pkg],
actions=[[*args, "--test", pkg]],
actions=[[*P.CONDA_BUILD_ARGS, "--test", pkg]],
),
P.OK_CONDA_TEST / f"{name}.ok",
)
@ -635,7 +656,7 @@ def task_watch():
doc="watch docs for changes, rebuilding",
uptodate=[lambda: False],
file_dep=[P.DOCS_BUILDINFO, P.OK_PIP_CHECK],
actions=[["sphinx-autobuild", "-a", "-j8", P.DOCS, P.DOCS_BUILD]],
actions=[["sphinx-autobuild", *P.SPHINX_ARGS, "-j8", P.DOCS, P.DOCS_BUILD]],
)
@ -703,7 +724,9 @@ def task_docs():
name="sphinx",
doc="build the documentation site with sphinx",
file_dep=[P.DOCS_CONF, P.DOCS_FAVICON_ICO, P.OK_PIP_CHECK, *P.DOCS_SRC],
actions=[["sphinx-build", "-j8", "-b", "html", P.DOCS, P.DOCS_BUILD]],
actions=[
["sphinx-build", *P.SPHINX_ARGS, "-j8", "-b", "html", P.DOCS, P.DOCS_BUILD]
],
targets=[P.DOCS_BUILDINFO],
)

Wyświetl plik

@ -6,6 +6,7 @@
"@deathbeds/ipydrawio-notebook": "file:../ipydrawio-notebook",
"@deathbeds/ipydrawio-pdf": "file:../ipydrawio-pdf",
"@deathbeds/ipydrawio-webpack": "file:../ipydrawio-webpack",
"@deathbeds/ipydrawio-jupyter-templates": "file:../ipydrawio-jupyter-templates",
"@deathbeds/ipydrawio": "file:../ipydrawio"
},
"devDependencies": {

Wyświetl plik

@ -17,3 +17,4 @@
import '@deathbeds/ipydrawio';
import '@deathbeds/ipydrawio-pdf';
import '@deathbeds/ipydrawio-notebook';
import '@deathbeds/ipydrawio-jupyter-templates';

Wyświetl plik

@ -18,6 +18,9 @@
},
{
"path": "../../ipydrawio-notebook/src"
},
{
"path": "../../ipydrawio-jupyter-templates/src"
}
]
}

Wyświetl plik

@ -0,0 +1 @@
lib/

Wyświetl plik

@ -0,0 +1,3 @@
.*.tsbuildinfo
*.tgz
**/.ipynb_checkpoints

Wyświetl plik

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright {yyyy} {name of copyright owner}
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Wyświetl plik

@ -0,0 +1,37 @@
# `@deathbeds/ipydrawio-jupyter-templates`
> [drawio](https://www.diagrams.net) diagrams for
> [JupyterLab](https://github.com/jupyterlab/jupyterlab)
If you'd just like to _use_ this extension, please run:
```bash
mamba install -c conda-forge ipydrawio # recommended, or...
conda install -c conda-forge ipydrawio # or...
pip install ipydrawio
```
> See the [project repo](https://github.com/deathbeds/ipydrawio) for more
> information.
## Open Source
This work is licensed under the [Apache-2.0] License.
[apache-2.0]: https://github.com/deathbeds/ipydrawio/blob/master/LICENSE.txt
```
Copyright 2021 ipydrawio contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```

Wyświetl plik

@ -0,0 +1,59 @@
{
"author": "IPyDrawio Contributors",
"bugs": {
"url": "https://github.com/deathbeds/ipydrawio/issues"
},
"homepage": "https://ipydrawio.rtfd.io",
"dependencies": {
"@jupyterlab/application": "3",
"@deathbeds/ipydrawio": "^1.1.1"
},
"description": "Jupyter Templates for IPyDrawio",
"devDependencies": {
"@jupyterlab/builder": "^3.0.2",
"typescript": "~4.2.4"
},
"peerDependencies": {},
"files": [
"{lib,schema,style,src,tmpl}/**/*.{ts,tsx,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,css,dio}",
"LICENSE.txt"
],
"jupyterlab": {
"extension": "lib/plugin.js",
"schemaDir": "schema",
"outputDir": "../../py_packages/ipydrawio/src/ipydrawio/ext/ipjt",
"sharedPackages": {
"@deathbeds/ipydrawio": {
"bundled": false,
"singleton": true
}
},
"discovery": {
"server": {
"base": {
"name": "ipydrawio"
},
"managers": [
"pip",
"conda"
]
}
}
},
"keywords": [
"jupyter",
"jupyterlab",
"jupyterlab-extension",
"ipydrawio"
],
"license": "Apache-2.0",
"main": "lib/index.js",
"name": "@deathbeds/ipydrawio-jupyter-templates",
"repository": {
"type": "git",
"url": "https://github.com/deathbeds/ipydrawio.git"
},
"scripts": {},
"types": "lib/index.d.ts",
"version": "1.1.1"
}

Wyświetl plik

@ -0,0 +1,17 @@
/*
Copyright 2021 ipydrawio contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
export * from './tokens';

Wyświetl plik

@ -0,0 +1,38 @@
/*
Copyright 2021 ipydrawio contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import { JupyterLab, JupyterFrontEndPlugin } from '@jupyterlab/application';
import { IDiagramManager } from '@deathbeds/ipydrawio';
import { PLUGIN_ID, TEMPLATES } from './tokens';
/**
* The Jupyter template plugin.
*/
const plugin: JupyterFrontEndPlugin<void> = {
activate,
id: PLUGIN_ID,
requires: [IDiagramManager],
autoStart: true,
};
/** Activate the Jupyter templates plugin */
function activate(app: JupyterLab, diagrams: IDiagramManager) {
diagrams.addTemplates(...TEMPLATES);
}
export default plugin;

Wyświetl plik

@ -0,0 +1,59 @@
/*
Copyright 2021 ipydrawio contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import { ITemplate } from '@deathbeds/ipydrawio';
import * as PACKAGE_ from '../package.json';
import { PageConfig, URLExt } from '@jupyterlab/coreutils';
import '!!file-loader?name=[path][name].[ext]&context=.!../tmpl/JupyterLab Mockups.dio';
import '!!file-loader?name=[path][name].[ext]&context=.!../tmpl/JupyterLab Mockups.png';
/**
* The hoisted `package.json`
*/
export const PACKAGE = PACKAGE_;
/**
* The namespace for template-level concerns
*/
export const NS = PACKAGE.name;
/**
* The plugin id
*/
export const PLUGIN_ID = `${NS}:plugin`;
export const TEMPLATE_BASE = URLExt.join(
PageConfig.getOption('fullLabextensionsUrl'),
NS,
'static/tmpl'
);
/** The static templates */
export const TEMPLATES: ITemplate[] = [
{
url: 'JupyterLab Mockups.dio',
tags: ['jupyter', 'mockup', 'lab'],
},
].map((tmpl) => {
return {
...tmpl,
label: tmpl.url.replace(/.dio$/, ''),
url: URLExt.join(TEMPLATE_BASE, tmpl.url),
thumbnail: URLExt.join(TEMPLATE_BASE, tmpl.url.replace(/.dio$/, '.png')),
};
});

Wyświetl plik

@ -0,0 +1,15 @@
{
"extends": "../../tsconfigbase",
"compilerOptions": {
"outDir": "../lib",
"rootDir": ".",
"tsBuildInfoFile": "../.src.tsbuildinfo"
},
"include": ["./**/*"],
"references": [
{
"path": "../../ipydrawio/src"
},
{"path": "../"}
]
}

Wyświetl plik

@ -0,0 +1,15 @@
/**
Copyright 2021 ipydrawio contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
**/

File diff suppressed because one or more lines are too long

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 2.6 KiB

Wyświetl plik

@ -0,0 +1,9 @@
{
"compilerOptions": {
"outDir": ".",
"rootDir": ".",
"tsBuildInfoFile": ".root.tsbuildinfo"
},
"extends": "../tsconfigbase",
"files": ["package.json"]
}

Wyświetl plik

@ -0,0 +1,3 @@
.*.tsbuildinfo
*.tgz
**/.ipynb_checkpoints

Wyświetl plik

@ -0,0 +1,3 @@
.*.tsbuildinfo
*.tgz
**/.ipynb_checkpoints

@ -1 +1 @@
Subproject commit 751b3bcba966b30c7152997d84f96d8657bb6c1c
Subproject commit ae709582f7ce7b6756a0318afd818aec8197d36e

Wyświetl plik

@ -43,5 +43,5 @@
"build:pre": "python scripts/patch.py && python scripts/static.py"
},
"types": "lib/index.d.ts",
"version": "14.7.101"
"version": "14.7.400"
}

Wyświetl plik

@ -1,2 +1,3 @@
**/.ipynb_checkpoints
.tsbuildinfo
*.tgz
**/.ipynb_checkpoints

Wyświetl plik

@ -19,7 +19,7 @@
"json-schema-to-typescript": "^10.1.4"
},
"peerDependencies": {
"@deathbeds/ipydrawio-webpack": "^14.7.101",
"@deathbeds/ipydrawio-webpack": "^14.7.400",
"@jupyter-widgets/base": "4",
"@jupyter-widgets/controls": "3",
"@jupyter-widgets/jupyterlab-manager": "3"

Wyświetl plik

@ -21,6 +21,12 @@
],
"extends": "./tsconfigbase",
"references": [
{
"path": "./ipydrawio-jupyter-templates/src"
},
{
"path": "./ipydrawio-jupyter-templates"
},
{
"path": "./ipydrawio/src"
},

Wyświetl plik

@ -1,23 +1,23 @@
{
"$schema": "http://json.schemastore.org/tsconfig",
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"composite": true,
"declaration": true,
"esModuleInterop": true,
"incremental": true,
"jsx": "react",
"module": "esnext",
"moduleResolution": "node",
"noEmitOnError": true,
"noImplicitAny": true,
"noUnusedLocals": true,
"preserveWatchOutput": true,
"resolveJsonModule": true,
"sourceMap": true,
"strictNullChecks": true,
"skipLibCheck": true,
"target": "es2017",
"types": []
}
"$schema": "http://json.schemastore.org/tsconfig",
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"composite": true,
"declaration": true,
"esModuleInterop": true,
"incremental": true,
"jsx": "react",
"module": "esnext",
"moduleResolution": "node",
"noEmitOnError": true,
"noImplicitAny": true,
"noUnusedLocals": true,
"preserveWatchOutput": true,
"resolveJsonModule": true,
"sourceMap": true,
"strictNullChecks": true,
"skipLibCheck": true,
"target": "es2017",
"types": []
}
}

Wyświetl plik

@ -1,12 +1,18 @@
{
"entryPoints": [
"packages/ipydrawio/src/index.ts",
"packages/ipydrawio-notebook/src/index.ts",
"packages/ipydrawio-pdf/src/index.ts"
],
"exclude": ["*.spec.ts", "**/node_modules/**", "**/test/**", "**/lib/**"],
"name": "@deathbeds/ipydrawio",
"out": "./build/typedoc",
"readme": "none",
"tsconfig": "./packages/tsconfig.typedoc.json"
}
"entryPoints": [
"packages/ipydrawio-jupyter-templates/src/index.ts",
"packages/ipydrawio-notebook/src/index.ts",
"packages/ipydrawio-pdf/src/index.ts",
"packages/ipydrawio/src/index.ts"
],
"exclude": [
"*.spec.ts",
"**/node_modules/**",
"**/test/**",
"**/lib/**"
],
"name": "@deathbeds/ipydrawio",
"out": "./build/typedoc",
"readme": "none",
"tsconfig": "./packages/tsconfig.typedoc.json"
}

Wyświetl plik

@ -14,18 +14,27 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from ipydrawio.constants import IPYNB_METADATA
# the header to look for in PNG metadata
PNG_DRAWIO_INFO = "mxfile"
# TODO: hoist this to `package.json` and consume directly
DRAWIO_APP = "../labextensions/@deathbeds/ipydrawio-webpack/static/dio"
# key set in notebook#/metadata/
IPYNB_METADATA = "@deathbeds/ipydrawio"
# environment variables
ENV_JUPYTER_DATA_DIR = "JUPYTER_DATA_DIR"
ENV_IPYDRAWIO_DATA_DIR = "IPYDRAWIO_DATA_DIR"
# always appended to *_DATA_DIR
WORK_DIR = "ipydrawio_export"
__all__ = [
"IPYNB_METADATA",
"PNG_DRAWIO_INFO",
"DRAWIO_APP",
"ENV_JUPYTER_DATA_DIR",
"ENV_IPYDRAWIO_DATA_DIR",
"WORK_DIR",
]

Wyświetl plik

@ -14,9 +14,14 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import platform
import pytest
from .. import __version__
@pytest.mark.skipif(platform.system() == "Windows", reason="no capture on win")
def test_cli_version(script_runner):
ret = script_runner.run("jupyter", "ipydrawio-export", "--version")
assert ret.success

@ -1 +1 @@
Subproject commit 37eb28c7f0efb9503f59a8f2edf6b7e6bf290bee
Subproject commit d818ddf130cf1827b6089aa5a5d627bd3f7a183a

Wyświetl plik

@ -1,3 +1,3 @@
include README.md LICENSE.txt
recursive-include src/ipydrawio/ext *.*
recursive-include src/ipydrawio_export/etc *.json
recursive-include src/ipydrawio/tests/fixtures *.*

Wyświetl plik

@ -30,6 +30,8 @@ pip install ipydrawio ipydrawio
- in many file formats
- Drawio/mxgraph XML, SVG, PNG
- or Jupyter Notebooks
- with all the Drawio templates
- plus some Jupyter ones
- Jupyter [rich display][] output
- Jupyter [Widgets][]
- `ipydrawio-export`

Wyświetl plik

@ -53,14 +53,19 @@ include_package_data = True
zip_safe = False
install_requires =
jupyterlab >=3,<4
ipywidgets >=7.6
jupyterlab >=3,<4
jupyterlab_widgets >=1
lxml
[options.packages.find]
where =
src
[options.entry_points]
console_scripts =
jupyter-ipydrawio = ipydrawio.app:main
[flake8]
exclude = .git,__pycache__,envs,.ipynb_checkpoints,.mypy_cache
max-line-length = 88
@ -68,6 +73,7 @@ ignore = E203
[tool:pytest]
junit_family=xunit2
script_launch_mode = subprocess
addopts =
-vv
--tb long

Wyświetl plik

@ -0,0 +1,87 @@
"""CLI for ipydrawio"""
# Copyright 2021 ipydrawio contributors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from pathlib import Path
import traitlets as T
from jupyter_core.application import JupyterApp, base_aliases, base_flags
from ._version import __version__
from .utils import MX_CLEAN_ATTRS, clean_drawio_file
class BaseApp(JupyterApp):
version = __version__
@property
def description(self): # pragma: no cover
return self.__doc__.splitlines()[0].strip()
class CleanApp(BaseApp):
"""clean drawio files"""
dio_files = T.Tuple()
pretty = T.Bool(True, help="pretty-print the XML").tag(config=True)
mx_attrs = T.Tuple(MX_CLEAN_ATTRS, help="attributes to clean").tag(config=True)
indent = T.Int(2, help="if pretty-printing, the indent level").tag(config=True)
tabs = T.Bool(False, help="indent with tabs instead of spaces").tag(config=True)
flags = dict(
**base_flags,
**{
"no-pretty": (
{"CleanApp": {"pretty": False}},
"Do not pretty-print the XML",
),
"tabs": (
{"CleanApp": {"tabs": True}},
"Indent with tabs instead of spaces",
),
}
)
aliases = dict(
**base_aliases, **{"mx-attrs": "CleanApp.mx_attrs", "indent": "CleanApp.indent"}
)
def parse_command_line(self, argv=None):
super().parse_command_line(argv)
self.dio_files = [Path(p).resolve() for p in self.extra_args]
def start(self):
for path in self.dio_files:
clean_drawio_file(
path,
pretty=self.pretty,
mx_attrs=self.mx_attrs,
indent=self.indent,
tabs=self.tabs,
)
class IPyDrawioApp(BaseApp):
"""ipydrawio utilities"""
name = "ipydrawio"
subcommands = dict(
clean=(CleanApp, CleanApp.__doc__.splitlines()[0]),
)
main = launch_instance = IPyDrawioApp.launch_instance
if __name__ == "__main__": # pragma: no cover
main()

Wyświetl plik

@ -34,3 +34,11 @@ DEFAULT_DRAWIO_CONFIG = {
"showStartScreen": False,
"override": True,
}
# key set in notebook#/metadata/
IPYNB_METADATA = "@deathbeds/ipydrawio"
SVG_NS_TAG = "{http://www.w3.org/2000/svg}svg"
MX_FILE_TAG = "mxfile"
MX_GRAPH_TAG = "mxGraphModel"

Wyświetl plik

@ -13,3 +13,15 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from pathlib import Path
import pytest
HERE = Path(__file__).parent
FIXTURES = HERE / "fixtures"
@pytest.fixture(params=["dio", "dio.svg"])
def an_empty_dio_file(request: str) -> Path:
return FIXTURES / f"empty.{request.param}"

Wyświetl plik

@ -0,0 +1 @@
<mxfile host="127.0.0.1" modified="2020-08-16T15:00:13.892Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36" version="13.6.2" etag="ZEbLHvYpZBMSyESj81Bi"><diagram id="df3uclDjUrHjeFrP73bx" name="Page-1"><mxGraphModel dx="1414" dy="338" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/></root></mxGraphModel></diagram></mxfile>

Wyświetl plik

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1px" height="1px" viewBox="-0.5 -0.5 1 1" content="&lt;mxfile host=&quot;127.0.0.1&quot; modified=&quot;2021-06-02T12:20:21.261Z&quot; agent=&quot;5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36&quot; etag=&quot;kK6Wrieqiia_cR8B5VjH&quot; version=&quot;14.7.3&quot; type=&quot;embed&quot;&gt;&lt;diagram id=&quot;df3uclDjUrHjeFrP73bx&quot; name=&quot;Page-1&quot;&gt;ddHBDsIgDADQr+HOICZ6nlMvnnbwTEYdJGxdGGbo17sFcJLpCXhtKSmEl50/WzGoK0owhFHpCT8Sxgp6YPOyyDMI5xFaq2VMWqHWL0iVUR9awpglOkTj9JBjg30PjctMWItTnnZHk3cdRAsbqBthtnrT0qmg+x1d/QK6ValzQWOkEyk5wqiExOmLeEV4aRFd2HW+BLMML80l1J3+RD8Ps9C7HwXzZr17PmQ/xKs3&lt;/diagram&gt;&lt;/mxfile&gt;"><defs/><g/></svg>

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 802 B

Wyświetl plik

@ -0,0 +1,90 @@
"""test basic CLI functionality"""
# Copyright 2021 ipydrawio contributors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import platform
import shutil
import pytest
from .. import __version__
@pytest.mark.skipif(platform.system() == "Windows", reason="no capture on win")
def test_cli_version(script_runner):
ret = script_runner.run("jupyter", "ipydrawio", "--version")
assert ret.success
assert __version__ in ret.stdout
@pytest.mark.parametrize(
"pretty,indent,tabs,mx_attrs",
[
[True, None, None, None],
[False, None, None, None],
[True, 4, None, ["host"]],
[True, 1, True, ["agent"]],
],
)
def test_cli_clean(
script_runner, tmp_path, an_empty_dio_file, pretty, indent, tabs, mx_attrs
):
dest = tmp_path / an_empty_dio_file.name
shutil.copy2(an_empty_dio_file, dest)
before = dest.read_text(encoding="utf-8").strip()
args = ["jupyter", "ipydrawio", "clean"]
if not pretty:
args = [*args, "--no-pretty"]
if indent is not None:
args = [*args, "--indent", f"{indent}"]
if tabs:
args = [*args, "--tabs"]
if mx_attrs:
args = [*args, "--mx-attrs", str(mx_attrs)]
args = [*args, str(dest)]
ret = script_runner.run(*args)
assert ret.success
cleaned = dest.read_text(encoding="utf-8").strip()
assert cleaned != before
for attr in "host", "agent", "etag", "modified":
if mx_attrs is None or attr in mx_attrs:
assert f"{attr}=" not in cleaned, f"should _not_ have contained {attr}"
else:
assert f"{attr}=" in cleaned, f"should have contained {attr}"
if pretty:
assert len(cleaned.splitlines()) > 1, "should have been multiple lines"
else:
assert len(cleaned.splitlines()) == 1, "should have been one line"
ret2 = script_runner.run(*args)
assert ret2.success
cleaned_again = dest.read_text(encoding="utf-8").strip()
assert cleaned == cleaned_again, "should have been the same"

Wyświetl plik

@ -26,4 +26,4 @@ def test_js():
def test_labextensions():
assert ipydrawio._jupyter_labextension_paths(), "no labextensions"
assert len(ipydrawio._jupyter_labextension_paths()) == 4, "no labextensions"

Wyświetl plik

@ -0,0 +1,91 @@
"""utilities for ipydrawio"""
# Copyright 2021 ipydrawio contributors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from pathlib import Path
import lxml.etree as ET
from .constants import MX_FILE_TAG, MX_GRAPH_TAG, SVG_NS_TAG
# attributes to clean from the mxfile
MX_CLEAN_ATTRS = ["host", "modified", "agent", "etag"]
MX_PRESERVE_ENTITIES = dict(ATTR_NEWLINE="&#10;")
def clean_drawio_file(
path: Path, pretty=True, indent=2, tabs=False, mx_attrs=MX_CLEAN_ATTRS
):
"""strip headers and identifying information from drawio files"""
print(path)
in_xml = path.read_text(encoding="utf-8")
out_xml = clean_drawio_xml(in_xml, pretty, indent, tabs, mx_attrs)
if out_xml is not None:
path.write_text(out_xml, encoding="utf-8")
else:
print("... No Change")
def clean_drawio_xml(
in_xml: str, pretty=True, indent=2, tabs=False, mx_attrs=MX_CLEAN_ATTRS
) -> str:
if pretty and not in_xml.strip().startswith("<svg"):
in_xml = inject_entity_placeholders(in_xml)
root = ET.fromstring(in_xml)
if root.tag == MX_GRAPH_TAG:
return None
elif root.tag == MX_FILE_TAG:
mx = root
elif root.tag == SVG_NS_TAG:
content = root.attrib["content"]
if pretty:
content = inject_entity_placeholders(content)
mx = ET.fromstring(content)
for key in mx_attrs:
if key in mx.attrib:
del mx.attrib[key]
if pretty:
ET.indent(mx, space=indent * ("\t" if tabs else " "))
out_xml = ET.tostring(mx, pretty_print=True, encoding=str)
out_xml = restore_entity_placeholders(out_xml)
else:
out_xml = ET.tostring(mx, encoding=str)
if root.tag == SVG_NS_TAG:
root.attrib["content"] = out_xml
if pretty:
ET.indent(root, space=indent * ("\t" if tabs else " "))
out_xml = ET.tostring(root, pretty_print=True, encoding=str)
if in_xml == out_xml:
return None
return out_xml
def inject_entity_placeholders(in_xml: str) -> str:
for name, entity in MX_PRESERVE_ENTITIES.items():
in_xml = in_xml.replace(entity, f"__IPYDRAWIO__{name}")
return in_xml
def restore_entity_placeholders(out_xml: str) -> str:
for name, entity in MX_PRESERVE_ENTITIES.items():
out_xml = out_xml.replace(f"__IPYDRAWIO__{name}", entity)
return out_xml

Wyświetl plik

@ -26,6 +26,24 @@ import sys
from collections import defaultdict
from pathlib import Path
SKIPS = ["checkpoint", "pytest_cache"]
def _clean(*paths_or_globs):
cleaned = []
for p_or_g in paths_or_globs:
paths = [p_or_g] if isinstance(p_or_g, Path) else [*p_or_g]
for p in paths:
str_p = str(p)
skipped = False
for skip in SKIPS:
if skip in str_p:
skipped = True
if not skipped:
cleaned += [p]
return cleaned
_SESSION = None
@ -123,11 +141,11 @@ PRETTIER = [str(NODE_MODULES / ".bin" / "prettier")]
# tests
EXAMPLES = ROOT / "notebooks"
EXAMPLE_IPYNB = [
p for p in EXAMPLES.rglob("*.ipynb") if ".ipynb_checkpoints" not in str(p)
]
EXAMPLE_IPYNB = _clean(EXAMPLES.rglob("*.ipynb"))
DIST_NBHTML = DIST / "nbsmoke"
ATEST = ROOT / "atest"
ATEST_DIO = _clean(ATEST.rglob("*.dio"), ATEST.rglob("*.dio.svg"))
ATEST_OUT = BUILD / "atest"
ATEST_OUT_XML = "output.xml"
@ -215,9 +233,16 @@ IPDW_LIB = IPDW / "lib"
IPDW_IGNORE = IPDW / ".npmignore"
ALL_IPDW_JS = IPDW_LIB.glob("*.js")
IPJT = JS_PKG_JSON["ipydrawio-jupyter-templates"].parent
IPJT_TMPL = IPJT / "tmpl"
IPJT_TMPL_DIO = _clean(
IPJT_TMPL.rglob("*.dio"),
IPJT_TMPL.rglob("*.dio.svg"),
)
PY_PACKAGES = ROOT / "py_packages"
PY_SETUP = {p.parent.name: p for p in (ROOT / "py_packages").glob("*/setup.py")}
PY_SETUP = {p.parent.name: p for p in sorted((ROOT / "py_packages").glob("*/setup.py"))}
PY_SRC = {k: sorted((v.parent / "src").rglob("*.py")) for k, v in PY_SETUP.items()}
PY_SETUP_CFG = {k: v.parent / "setup.cfg" for k, v in PY_SETUP.items()}
@ -254,18 +279,22 @@ SERVER_EXT = {
# docs
SPHINX_ARGS = json.loads(os.environ.get("SPHINX_ARGS", "[]"))
DOCS_CONF = DOCS / "conf.py"
ENV_DOCS = DOCS / "environment.yml"
DOCS_BUILD = BUILD / "docs"
DOCS_BUILDINFO = DOCS_BUILD / ".buildinfo"
DOCS_MD = [
p
for p in DOCS.rglob("*.md")
if not (p.parent.name == "ts" or p.parent.parent.name == "ts")
]
DOCS_RST = [*DOCS.rglob("*.md")]
DOCS_IPYNB = [*DOCS.rglob("*.ipynb")]
DOCS_SRC = [*DOCS_MD, *DOCS_RST, *DOCS_IPYNB]
DOCS_MD = _clean(
[
p
for p in DOCS.rglob("*.md")
if not (p.parent.name == "ts" or p.parent.parent.name == "ts")
]
)
DOCS_DIO = _clean(DOCS.rglob("*.dio"), DOCS.rglob("*.dio.svg"))
DOCS_RST = _clean(DOCS.rglob("*.rst"))
DOCS_IPYNB = _clean(DOCS.rglob("*.ipynb"))
DOCS_SRC = _clean(DOCS_MD, DOCS_RST, DOCS_IPYNB)
DOCS_STATIC = DOCS / "_static"
DOCS_FAVICON_SVG = DOCS_STATIC / "icon.svg"
DOCS_FAVICON_ICO = DOCS_STATIC / "favicon.ico"
@ -323,6 +352,7 @@ ALL_JSON = [
*ATEST.glob("fixtures/*.json"),
*BINDER.glob("*.json"),
]
ALL_DIO = [*DOCS_DIO, *IPJT_TMPL_DIO, *ATEST_DIO]
ALL_MD = [*ROOT.glob("*.md"), *PACKAGES.glob("*/*.md"), *DOCS_MD]
ALL_SETUP_CFG = [SETUP_CFG, *PY_SETUP_CFG.values()]
ALL_JS = [PACKAGES / ".eslintrc.js"]
@ -330,16 +360,16 @@ ALL_TS = sum(JS_TSSRC.values(), [])
ALL_CSS = [*sum(JS_STYLE.values(), []), *DOCS.rglob("*.css")]
ALL_ROBOT = [*ATEST.rglob("*.robot")]
ALL_PRETTIER = [*ALL_YML, *ALL_JSON, *ALL_MD, *ALL_TS, *ALL_CSS, *ALL_JS]
ALL_HEADERS = [
*ALL_SETUP_CFG,
*ALL_PY,
*ALL_TS,
*ALL_CSS,
*ALL_JS,
*ALL_MD,
*ALL_YML,
*ALL_ROBOT,
]
ALL_HEADERS = _clean(
ALL_SETUP_CFG,
ALL_PY,
ALL_TS,
ALL_CSS,
ALL_JS,
ALL_MD,
ALL_YML,
ALL_ROBOT,
)
ESLINTRC = PACKAGES / ".eslintrc.js"
RFLINT_OPTS = sum(
@ -397,6 +427,7 @@ OK_SERVEREXT = {k: BUILD / f"serverext.{k}.ok" for k, v in SERVER_EXT.items()}
OK_PROVISION = BUILD / "provision.ok"
OK_ROBOT_DRYRUN = BUILD / "robot.dryrun.ok"
OK_RFLINT = BUILD / "robot.rflint.ok"
OK_DIOLINT = BUILD / "dio.lint.ok"
OK_ATEST = BUILD / "atest.ok"
OK_CONDA_TEST = BUILD / "conda-build.test.ok"
OK_LINK_CHECK = BUILD / "pytest-check-links.ok"
@ -418,8 +449,16 @@ CMD_LAB = ["jupyter", "lab", "--no-browser", "--debug"]
# conda building
RECIPE = ROOT / "conda.recipe/meta.yaml"
CONDA_BLD = BUILD / "conda-bld"
CONDARC = CI / ".condarc"
# could be mambabuild
CONDA_BUILDERER = os.environ.get("CONDA_BUILDERER", "build")
CONDA_BUILD_ARGS = [
"conda",
CONDA_BUILDERER,
"--override-channels",
"-c",
"conda-forge",
]
CONDA_PKGS = {
pkg: CONDA_BLD / f"noarch/{pkg}-{ver}-py_0.tar.bz2"
for pkg, ver in PY_VERSION.items()
@ -627,5 +666,7 @@ def mystify():
# Late environment hacks
os.environ.update(
IPYDRAWIO_DATA_DIR=str(IPYDRAWIO_DATA_DIR), PIP_DISABLE_PIP_VERSION_CHECK="1"
CONDARC=str(CONDARC),
IPYDRAWIO_DATA_DIR=str(IPYDRAWIO_DATA_DIR),
PIP_DISABLE_PIP_VERSION_CHECK="1",
)

435
yarn.lock
Wyświetl plik

@ -46,10 +46,10 @@
dependencies:
regenerator-runtime "^0.13.4"
"@blueprintjs/core@^3.36.0", "@blueprintjs/core@^3.44.3":
version "3.44.3"
resolved "https://registry.yarnpkg.com/@blueprintjs/core/-/core-3.44.3.tgz#112364fe9cbf5b943cf7571d9a5caa50b6304958"
integrity sha512-95BYF5xI7d47jKJKQFXJ+UkJ8pS6qT6/U4Hj/UCuHPJhtBTfUQKaCeHYroA+LtCAEEb9p9oFkQwlXI+QHMmZeA==
"@blueprintjs/core@^3.36.0", "@blueprintjs/core@^3.45.0":
version "3.45.0"
resolved "https://registry.yarnpkg.com/@blueprintjs/core/-/core-3.45.0.tgz#3b0a36aba9bcbf7a141f260f042ef1d0b564cdc4"
integrity sha512-oLknlh+jdvdat+3JrljKGAmtP7KJRKnUqWJOvcGHmAlE2nUZkwzI1jICd2HMncQrukIqQN5ORZK1tswus6BM+Q==
dependencies:
"@blueprintjs/icons" "^3.26.1"
"@types/dom4" "^2.0.1"
@ -72,32 +72,38 @@
tslib "~1.13.0"
"@blueprintjs/select@^3.15.0":
version "3.16.3"
resolved "https://registry.yarnpkg.com/@blueprintjs/select/-/select-3.16.3.tgz#68ded04dde20b174d4478a6be68c8916a885035a"
integrity sha512-V7agrVgvWVFyRXUv8OFjTJB5ZfUnYAAqzxvpdx6WQcdQTkMjRD0B7pWcZol+grbP1MJGFVAXP1Mqj2PW3BVCbg==
version "3.16.4"
resolved "https://registry.yarnpkg.com/@blueprintjs/select/-/select-3.16.4.tgz#d7a2a082a6b243889d0a491bf6b6c8da7bbc6e1d"
integrity sha512-5zBnaiy+1lrOYZPZIYhfYqN9heJJwNpnT214X0jDYaWAOPt/S+v8L50c7JflwV0JEaMgavc/FVVpKEb2ojw88Q==
dependencies:
"@blueprintjs/core" "^3.44.3"
"@blueprintjs/core" "^3.45.0"
classnames "^2.2"
tslib "~1.13.0"
"@deathbeds/ipydrawio-jupyter-templates@file:packages/ipydrawio-jupyter-templates":
version "1.1.1"
dependencies:
"@deathbeds/ipydrawio" "^1.1.1"
"@jupyterlab/application" "3"
"@deathbeds/ipydrawio-notebook@file:packages/ipydrawio-notebook":
version "1.1.0"
version "1.1.1"
dependencies:
"@jupyterlab/application" "3"
"@jupyterlab/notebook" "3"
"@deathbeds/ipydrawio-pdf@file:packages/ipydrawio-pdf":
version "1.1.0"
version "1.1.1"
dependencies:
"@jupyterlab/application" "3"
"@deathbeds/ipydrawio-webpack@file:packages/ipydrawio-webpack":
version "14.7.101"
version "14.7.400"
dependencies:
"@jupyterlab/application" "3"
"@deathbeds/ipydrawio@file:packages/ipydrawio":
version "1.1.0"
version "1.1.1"
dependencies:
"@jupyterlab/application" "3"
"@jupyterlab/launcher" "3"
@ -310,7 +316,7 @@
"@lumino/signaling" "^1.4.3"
"@lumino/widgets" "^1.16.1"
"@jupyterlab/apputils@^3.0.7", "@jupyterlab/apputils@^3.0.9":
"@jupyterlab/apputils@^3.0.9":
version "3.0.9"
resolved "https://registry.yarnpkg.com/@jupyterlab/apputils/-/apputils-3.0.9.tgz#504273fc0b69f74d8a8b87b7a89ee3d4decd679d"
integrity sha512-fsJjl+NX2+e+1FM7SMfpI1VsaPQsaIPnPGsdpQoboJJqdQJHuj1oPXNwc/aI1daEElirB15fYGCUGc2oUrv6RQ==
@ -475,7 +481,7 @@
codemirror "~5.58.0"
react "^17.0.1"
"@jupyterlab/coreutils@^5.0.5", "@jupyterlab/coreutils@^5.0.6":
"@jupyterlab/coreutils@^5.0.6":
version "5.0.6"
resolved "https://registry.yarnpkg.com/@jupyterlab/coreutils/-/coreutils-5.0.6.tgz#dd36591d01191762ff35e3b096f324e990e0e617"
integrity sha512-nXGpI1IJw+4pNq6Afy+oI3LrTsaQ14xG7Kxbhg9UPfoDgsNt2rdG4pwYe4NZyj2GJHAkUj00lcUD9eBTrxMWvw==
@ -557,13 +563,13 @@
react "^17.0.1"
"@jupyterlab/launcher@3":
version "3.0.7"
resolved "https://registry.yarnpkg.com/@jupyterlab/launcher/-/launcher-3.0.7.tgz#70f39b3f5446db30892ebc8aa5fa366c05f84f88"
integrity sha512-MQec9Tw5i5lXOEQV5MKuqO9vzfqdl3hiYwkjZU9roXgafobKHmciWFfbSEqN3b+eYH4+zcbgJ1r8jOLIJgegaQ==
version "3.0.9"
resolved "https://registry.yarnpkg.com/@jupyterlab/launcher/-/launcher-3.0.9.tgz#ed1cf1a93e793d336ea0a3c0a27aa113f4bbb114"
integrity sha512-UoPTtRukvViRlmASr7XeecmUu8VGbhV4Ui4lQ3YQh2k6LG6t1Whgu/uS6XzjIzeIB5RtAFQ1Psk4TnjASJXs/A==
dependencies:
"@jupyterlab/apputils" "^3.0.7"
"@jupyterlab/translation" "^3.0.7"
"@jupyterlab/ui-components" "^3.0.6"
"@jupyterlab/apputils" "^3.0.9"
"@jupyterlab/translation" "^3.0.9"
"@jupyterlab/ui-components" "^3.0.7"
"@lumino/algorithm" "^1.3.3"
"@lumino/commands" "^1.12.0"
"@lumino/coreutils" "^1.5.3"
@ -573,16 +579,16 @@
react "^17.0.1"
"@jupyterlab/logconsole@^3.0.0":
version "3.0.8"
resolved "https://registry.yarnpkg.com/@jupyterlab/logconsole/-/logconsole-3.0.8.tgz#b8ee25a29c3ea4f21362c3c839b11650488b6aa5"
integrity sha512-+YORZapsWpf1zm0piSKcirycOdU0mGdKJFWJzZlLXcsFk28DNDrRdcf44xUrFOeGQHAFL/h+OIOJz+NKktwirA==
version "3.0.10"
resolved "https://registry.yarnpkg.com/@jupyterlab/logconsole/-/logconsole-3.0.10.tgz#2757b374a828ce63a77da4a70a43851f3760c375"
integrity sha512-BQ3QygNqCfNL7kBaaIM8uYndCtmZiYGDCClzwDh3W2cWQOdjRyEYhXoTb+kUmINP3eOZgIt40HzRL3W1dAabrQ==
dependencies:
"@jupyterlab/coreutils" "^5.0.5"
"@jupyterlab/nbformat" "^3.0.5"
"@jupyterlab/outputarea" "^3.0.8"
"@jupyterlab/rendermime" "^3.0.8"
"@jupyterlab/services" "^6.0.7"
"@jupyterlab/translation" "^3.0.7"
"@jupyterlab/coreutils" "^5.0.6"
"@jupyterlab/nbformat" "^3.0.6"
"@jupyterlab/outputarea" "^3.0.10"
"@jupyterlab/rendermime" "^3.0.10"
"@jupyterlab/services" "^6.0.9"
"@jupyterlab/translation" "^3.0.9"
"@lumino/coreutils" "^1.5.3"
"@lumino/disposable" "^1.4.3"
"@lumino/messaging" "^1.4.3"
@ -603,7 +609,7 @@
"@lumino/disposable" "^1.4.3"
"@lumino/widgets" "^1.16.1"
"@jupyterlab/nbformat@^3.0.0", "@jupyterlab/nbformat@^3.0.5", "@jupyterlab/nbformat@^3.0.6":
"@jupyterlab/nbformat@^3.0.0", "@jupyterlab/nbformat@^3.0.6":
version "3.0.6"
resolved "https://registry.yarnpkg.com/@jupyterlab/nbformat/-/nbformat-3.0.6.tgz#858a6567cdd60879bc7f9dad6c9dcb5587417b5d"
integrity sha512-4+u770JYPmRpLyEPpnG0crj8ePUkg/vCF1W4hnDDxnLTVjzKw5kv6KVb5yJGEHAihUOf51bjceNUOp/+nLVBTg==
@ -649,7 +655,7 @@
"@lumino/messaging" "^1.4.3"
"@lumino/signaling" "^1.4.3"
"@jupyterlab/outputarea@^3.0.0", "@jupyterlab/outputarea@^3.0.10", "@jupyterlab/outputarea@^3.0.8":
"@jupyterlab/outputarea@^3.0.0", "@jupyterlab/outputarea@^3.0.10":
version "3.0.10"
resolved "https://registry.yarnpkg.com/@jupyterlab/outputarea/-/outputarea-3.0.10.tgz#3e04a0fffd0175eca60ea7781a3b70a924d8779f"
integrity sha512-GW2/q9ShK7rSEKA2KeMKT+FiAZkRmOeSQ0PYhXjjrMNFPPTURtzuztMRF7NMVH1QWiYABn03qx1IKHvt1hvdDQ==
@ -678,7 +684,7 @@
"@lumino/coreutils" "^1.5.3"
"@lumino/widgets" "^1.16.1"
"@jupyterlab/rendermime@^3.0.0", "@jupyterlab/rendermime@^3.0.10", "@jupyterlab/rendermime@^3.0.8":
"@jupyterlab/rendermime@^3.0.0", "@jupyterlab/rendermime@^3.0.10":
version "3.0.10"
resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime/-/rendermime-3.0.10.tgz#7592155ea00c3a81f0d9a5662d3ccdeb37f722b1"
integrity sha512-9Q32zYpBkbrlAkuHJ7760ZETWQYZkKT9UcJWOMVF7iNgoBfRohAYvPHsoc6JFZyFEFhKzkLwa+CTcL48aGjg7A==
@ -699,7 +705,7 @@
lodash.escape "^4.0.1"
marked "^2.0.0"
"@jupyterlab/services@^6.0.0", "@jupyterlab/services@^6.0.7", "@jupyterlab/services@^6.0.9":
"@jupyterlab/services@^6.0.0", "@jupyterlab/services@^6.0.9":
version "6.0.9"
resolved "https://registry.yarnpkg.com/@jupyterlab/services/-/services-6.0.9.tgz#70a10d7f6883b8fafff81216663d96858b0cf46b"
integrity sha512-zeN9roqwbYo6b2I5BXWx+Mr4KzTpe2UcVwrcAGw9NXqIieb0ZnvtHqtNj/vcHCM2xQKuPup9W1X1bE5b3wF5Yw==
@ -762,7 +768,7 @@
react "^17.0.1"
typestyle "^2.0.4"
"@jupyterlab/translation@^3.0.7", "@jupyterlab/translation@^3.0.9":
"@jupyterlab/translation@^3.0.9":
version "3.0.9"
resolved "https://registry.yarnpkg.com/@jupyterlab/translation/-/translation-3.0.9.tgz#54472d3d2fef0d56dfa61c2711a9155f3308ad5b"
integrity sha512-XsIUt08HDpA2zqhJFmNV9iuxMriV4sAdx4rM1rA0tEUuvWSXerLvpzNUw4LAz+iaJgyUgqqV1gKrOgoMTjtvWA==
@ -772,7 +778,7 @@
"@jupyterlab/statedb" "^3.0.6"
"@lumino/coreutils" "^1.5.3"
"@jupyterlab/ui-components@^3.0.6", "@jupyterlab/ui-components@^3.0.7":
"@jupyterlab/ui-components@^3.0.7":
version "3.0.7"
resolved "https://registry.yarnpkg.com/@jupyterlab/ui-components/-/ui-components-3.0.7.tgz#83525d98051e9c74bd415da9e4a0fb20ec6bd609"
integrity sha512-kuq2aZ3DcCQNqf5ucsXWREHxbYq23+S12zMertOs+74KQr8jm8chX9HmqpmefNKnSIqqi/RKVSS2PWuSTpkEEw==
@ -1649,10 +1655,10 @@
is-plain-object "^5.0.0"
universal-user-agent "^6.0.0"
"@octokit/openapi-types@^7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-7.0.0.tgz#0f6992db9854af15eca77d71ab0ec7fad2f20411"
integrity sha512-gV/8DJhAL/04zjTI95a7FhQwS6jlEE0W/7xeYAzuArD0KVAVWDLP2f3vi98hs3HLTczxXdRK/mF0tRoQPpolEw==
"@octokit/openapi-types@^7.2.3":
version "7.2.3"
resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-7.2.3.tgz#a7105796db9b85d25d3feba9a1785a124c7803e4"
integrity sha512-V1ycxkR19jqbIl3evf2RQiMRBvTNRi+Iy9h20G5OP5dPfEF6GJ1DPlUeiZRxo2HJxRr+UA4i0H1nn4btBDPFrw==
"@octokit/plugin-enterprise-rest@^6.0.1":
version "6.0.1"
@ -1739,11 +1745,11 @@
"@types/node" ">= 8"
"@octokit/types@^6.0.3", "@octokit/types@^6.7.1":
version "6.14.2"
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.14.2.tgz#64c9457f38fb8522bdbba3c8cc814590a2d61bf5"
integrity sha512-wiQtW9ZSy4OvgQ09iQOdyXYNN60GqjCL/UdMsepDr1Gr0QzpW6irIKbH3REuAHXAhxkEk9/F2a3Gcs1P6kW5jA==
version "6.16.2"
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.16.2.tgz#62242e0565a3eb99ca2fd376283fe78b4ea057b4"
integrity sha512-wWPSynU4oLy3i4KGyk+J1BLwRKyoeW2TwRHgwbDz17WtVFzSK2GOErGliruIx8c+MaYtHSYTx36DSmLNoNbtgA==
dependencies:
"@octokit/openapi-types" "^7.0.0"
"@octokit/openapi-types" "^7.2.3"
"@sindresorhus/is@^0.14.0":
version "0.14.0"
@ -1779,9 +1785,9 @@
"@types/estree" "*"
"@types/eslint@*":
version "7.2.10"
resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.10.tgz#4b7a9368d46c0f8cd5408c23288a59aa2394d917"
integrity sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==
version "7.2.12"
resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.12.tgz#fefaa48a4db2415b621fe315e4baeedde525927e"
integrity sha512-HjikV/jX6e0Pg4DcB+rtOBKSrG6w5IaxWpmi3efL/eLxMz5lZTK+W1DKERrX5a+mNzL78axfsDNXu7JHFP4uLg==
dependencies:
"@types/estree" "*"
"@types/json-schema" "*"
@ -1812,9 +1818,9 @@
integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
"@types/lodash@^4.14.134", "@types/lodash@^4.14.168":
version "4.14.169"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.169.tgz#83c217688f07a4d9ef8f28a3ebd1d318f6ff4cbb"
integrity sha512-DvmZHoHTFJ8zhVYwCLWbQ7uAbYQEk52Ev2/ZiQ7Y7gQGeV9pjBqjnQpECMHfKS1rCYAhMI7LHVxwyZLZinJgdw==
version "4.14.170"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.170.tgz#0d67711d4bf7f4ca5147e9091b847479b87925d6"
integrity sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q==
"@types/minimatch@*":
version "3.0.4"
@ -1827,9 +1833,9 @@
integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==
"@types/node@*", "@types/node@>= 8":
version "15.3.1"
resolved "https://registry.yarnpkg.com/@types/node/-/node-15.3.1.tgz#23a06b87eedb524016616e886b116b8fdcb180af"
integrity sha512-weaeiP4UF4XgF++3rpQhpIJWsCTS4QJw5gvBhQu6cFIxTwyxWIe3xbnrY/o2lTCQ0lsdb8YIUDUvLR4Vuz5rbw==
version "15.6.1"
resolved "https://registry.yarnpkg.com/@types/node/-/node-15.6.1.tgz#32d43390d5c62c5b6ec486a9bc9c59544de39a08"
integrity sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA==
"@types/normalize-package-data@^2.4.0":
version "2.4.0"
@ -1847,9 +1853,9 @@
integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
"@types/react@^17.0.0":
version "17.0.6"
resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.6.tgz#0ec564566302c562bf497d73219797a5e0297013"
integrity sha512-u/TtPoF/hrvb63LdukET6ncaplYsvCvmkceasx8oG84/ZCsoLxz9Z/raPBP4lTAiWW1Jb889Y9svHmv8R26dWw==
version "17.0.8"
resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.8.tgz#fe76e3ba0fbb5602704110fd1e3035cf394778e3"
integrity sha512-3sx4c0PbXujrYAKwXxNONXUtRp9C+hE2di0IuxFyf5BELD+B+AXL8G7QrmSKhVwKZDbv0igiAjQAMhXj8Yg3aw==
dependencies:
"@types/prop-types" "*"
"@types/scheduler" "*"
@ -1871,12 +1877,12 @@
integrity sha512-Ls2ylbo7++ITrWk2Yc3G/jijwSq5V3GT0tlgVXEl2kKYXY3ImrtmTCoE2uyTWFRI5owMBriloZFWbE1SXOsE7w==
"@typescript-eslint/eslint-plugin@^4.8.1":
version "4.22.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.22.1.tgz#6bcdbaa4548553ab861b4e5f34936ead1349a543"
integrity sha512-kVTAghWDDhsvQ602tHBc6WmQkdaYbkcTwZu+7l24jtJiYvm9l+/y/b2BZANEezxPDiX5MK2ZecE+9BFi/YJryw==
version "4.25.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.25.0.tgz#d82657b6ab4caa4c3f888ff923175fadc2f31f2a"
integrity sha512-Qfs3dWkTMKkKwt78xp2O/KZQB8MPS1UQ5D3YW2s6LQWBE1074BE+Rym+b1pXZIX3M3fSvPUDaCvZLKV2ylVYYQ==
dependencies:
"@typescript-eslint/experimental-utils" "4.22.1"
"@typescript-eslint/scope-manager" "4.22.1"
"@typescript-eslint/experimental-utils" "4.25.0"
"@typescript-eslint/scope-manager" "4.25.0"
debug "^4.1.1"
functional-red-black-tree "^1.0.1"
lodash "^4.17.15"
@ -1884,60 +1890,60 @@
semver "^7.3.2"
tsutils "^3.17.1"
"@typescript-eslint/experimental-utils@4.22.1", "@typescript-eslint/experimental-utils@^4.0.1":
version "4.22.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.1.tgz#3938a5c89b27dc9a39b5de63a62ab1623ab27497"
integrity sha512-svYlHecSMCQGDO2qN1v477ax/IDQwWhc7PRBiwAdAMJE7GXk5stF4Z9R/8wbRkuX/5e9dHqbIWxjeOjckK3wLQ==
"@typescript-eslint/experimental-utils@4.25.0", "@typescript-eslint/experimental-utils@^4.0.1":
version "4.25.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.25.0.tgz#b2febcfa715d2c1806fd5f0335193a6cd270df54"
integrity sha512-f0doRE76vq7NEEU0tw+ajv6CrmPelw5wLoaghEHkA2dNLFb3T/zJQqGPQ0OYt5XlZaS13MtnN+GTPCuUVg338w==
dependencies:
"@types/json-schema" "^7.0.3"
"@typescript-eslint/scope-manager" "4.22.1"
"@typescript-eslint/types" "4.22.1"
"@typescript-eslint/typescript-estree" "4.22.1"
"@typescript-eslint/scope-manager" "4.25.0"
"@typescript-eslint/types" "4.25.0"
"@typescript-eslint/typescript-estree" "4.25.0"
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
"@typescript-eslint/parser@^4.8.1":
version "4.22.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.22.1.tgz#a95bda0fd01d994a15fc3e99dc984294f25c19cc"
integrity sha512-l+sUJFInWhuMxA6rtirzjooh8cM/AATAe3amvIkqKFeMzkn85V+eLzb1RyuXkHak4dLfYzOmF6DXPyflJvjQnw==
version "4.25.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.25.0.tgz#6b2cb6285aa3d55bfb263c650739091b0f19aceb"
integrity sha512-OZFa1SKyEJpAhDx8FcbWyX+vLwh7OEtzoo2iQaeWwxucyfbi0mT4DijbOSsTgPKzGHr6GrF2V5p/CEpUH/VBxg==
dependencies:
"@typescript-eslint/scope-manager" "4.22.1"
"@typescript-eslint/types" "4.22.1"
"@typescript-eslint/typescript-estree" "4.22.1"
"@typescript-eslint/scope-manager" "4.25.0"
"@typescript-eslint/types" "4.25.0"
"@typescript-eslint/typescript-estree" "4.25.0"
debug "^4.1.1"
"@typescript-eslint/scope-manager@4.22.1":
version "4.22.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.22.1.tgz#5bb357f94f9cd8b94e6be43dd637eb73b8f355b4"
integrity sha512-d5bAiPBiessSmNi8Amq/RuLslvcumxLmyhf1/Xa9IuaoFJ0YtshlJKxhlbY7l2JdEk3wS0EnmnfeJWSvADOe0g==
"@typescript-eslint/scope-manager@4.25.0":
version "4.25.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.25.0.tgz#9d86a5bcc46ef40acd03d85ad4e908e5aab8d4ca"
integrity sha512-2NElKxMb/0rya+NJG1U71BuNnp1TBd1JgzYsldsdA83h/20Tvnf/HrwhiSlNmuq6Vqa0EzidsvkTArwoq+tH6w==
dependencies:
"@typescript-eslint/types" "4.22.1"
"@typescript-eslint/visitor-keys" "4.22.1"
"@typescript-eslint/types" "4.25.0"
"@typescript-eslint/visitor-keys" "4.25.0"
"@typescript-eslint/types@4.22.1":
version "4.22.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.22.1.tgz#bf99c6cec0b4a23d53a61894816927f2adad856a"
integrity sha512-2HTkbkdAeI3OOcWbqA8hWf/7z9c6gkmnWNGz0dKSLYLWywUlkOAQ2XcjhlKLj5xBFDf8FgAOF5aQbnLRvgNbCw==
"@typescript-eslint/types@4.25.0":
version "4.25.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.25.0.tgz#0e444a5c5e3c22d7ffa5e16e0e60510b3de5af87"
integrity sha512-+CNINNvl00OkW6wEsi32wU5MhHti2J25TJsJJqgQmJu3B3dYDBcmOxcE5w9cgoM13TrdE/5ND2HoEnBohasxRQ==
"@typescript-eslint/typescript-estree@4.22.1":
version "4.22.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.1.tgz#dca379eead8cdfd4edc04805e83af6d148c164f9"
integrity sha512-p3We0pAPacT+onSGM+sPR+M9CblVqdA9F1JEdIqRVlxK5Qth4ochXQgIyb9daBomyQKAXbygxp1aXQRV0GC79A==
"@typescript-eslint/typescript-estree@4.25.0":
version "4.25.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.25.0.tgz#942e4e25888736bff5b360d9b0b61e013d0cfa25"
integrity sha512-1B8U07TGNAFMxZbSpF6jqiDs1cVGO0izVkf18Q/SPcUAc9LhHxzvSowXDTvkHMWUVuPpagupaW63gB6ahTXVlg==
dependencies:
"@typescript-eslint/types" "4.22.1"
"@typescript-eslint/visitor-keys" "4.22.1"
"@typescript-eslint/types" "4.25.0"
"@typescript-eslint/visitor-keys" "4.25.0"
debug "^4.1.1"
globby "^11.0.1"
is-glob "^4.0.1"
semver "^7.3.2"
tsutils "^3.17.1"
"@typescript-eslint/visitor-keys@4.22.1":
version "4.22.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.1.tgz#6045ae25a11662c671f90b3a403d682dfca0b7a6"
integrity sha512-WPkOrIRm+WCLZxXQHCi+WG8T2MMTUFR70rWjdWYddLT7cEfb2P4a3O/J2U1FBVsSFTocXLCoXWY6MZGejeStvQ==
"@typescript-eslint/visitor-keys@4.25.0":
version "4.25.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.25.0.tgz#863e7ed23da4287c5b469b13223255d0fde6aaa7"
integrity sha512-AmkqV9dDJVKP/TcZrbf6s6i1zYXt5Hl8qOLrRDTFfRNae4+LB8A4N3i+FLZPW85zIxRy39BgeWOfMS3HoH5ngg==
dependencies:
"@typescript-eslint/types" "4.22.1"
"@typescript-eslint/types" "4.25.0"
eslint-visitor-keys "^2.0.0"
"@webassemblyjs/ast@1.11.0":
@ -2315,7 +2321,7 @@ array-union@^1.0.2:
array-union@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
array-uniq@^1.0.1:
@ -2549,9 +2555,9 @@ cacache@^12.0.0, cacache@^12.0.3:
y18n "^4.0.0"
cacache@^15.0.5:
version "15.1.0"
resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.1.0.tgz#164c2f857ee606e4cc793c63018fefd0ea5eba7b"
integrity sha512-mfx0C+mCfWjD1PnwQ9yaOrwG1ou9FkKnx0SvzUHWdFt7r7GaRtzT+9M8HAvLu62zIHtnpQ/1m93nWNDCckJGXQ==
version "15.2.0"
resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.2.0.tgz#73af75f77c58e72d8c630a7a2858cb18ef523389"
integrity sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==
dependencies:
"@npmcli/move-file" "^1.0.1"
chownr "^2.0.0"
@ -2678,9 +2684,9 @@ camelcase@^5.0.0, camelcase@^5.3.1:
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
caniuse-lite@^1.0.30001219:
version "1.0.30001228"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa"
integrity sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==
version "1.0.30001230"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz#8135c57459854b2240b57a4a6786044bdc5a9f71"
integrity sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==
caseless@~0.12.0:
version "0.12.0"
@ -3099,9 +3105,9 @@ crypto@~1.0.1:
integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==
css-loader@^5.0.1:
version "5.2.5"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.5.tgz#cdd18d6fe42748990793b4a7ec32eb16f36ba9d7"
integrity sha512-bH6QQacvSRtLX0lycAOs43S173n+lfXxB5cx4FjVkTLw5tAEwk5bxNLbkt5K1iETd5KxazRx70GpqOxsuwKiFA==
version "5.2.6"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.6.tgz#c3c82ab77fea1f360e587d871a6811f4450cc8d1"
integrity sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==
dependencies:
icss-utils "^5.1.0"
loader-utils "^2.0.0"
@ -3330,9 +3336,9 @@ detect-indent@^5.0.0:
integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50=
detect-indent@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd"
integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==
version "6.1.0"
resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6"
integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==
detect-newline@3.1.0:
version "3.1.0"
@ -3356,7 +3362,7 @@ dir-glob@^2.2.2:
dir-glob@^3.0.1:
version "3.0.1"
resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
dependencies:
path-type "^4.0.0"
@ -3470,9 +3476,9 @@ ecc-jsbn@~0.1.1:
safer-buffer "^2.1.0"
electron-to-chromium@^1.3.723:
version "1.3.734"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.734.tgz#c8d318a4eb27509190cf3a08870dbcbf06c74dcb"
integrity sha512-iQF2mjPZ6zNNq45kbJ6MYZYCBNdv2JpGiJC/lVx4tGJWi9MNg73KkL9sWGN4X4I/CP2SBLWsT8nPADZZpAHIyw==
version "1.3.742"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.742.tgz#7223215acbbd3a5284962ebcb6df85d88b95f200"
integrity sha512-ihL14knI9FikJmH2XUIDdZFWJxvr14rPSdOhJ7PpS27xbz8qmaRwCwyg/bmFwjWKmWK9QyamiCZVCvXm5CH//Q==
emoji-regex@^7.0.1:
version "7.0.3"
@ -3545,10 +3551,10 @@ error-ex@^1.2.0, error-ex@^1.3.1:
dependencies:
is-arrayish "^0.2.1"
es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2:
version "1.18.0"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4"
integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==
es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2:
version "1.18.3"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0"
integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==
dependencies:
call-bind "^1.0.2"
es-to-primitive "^1.2.1"
@ -3558,14 +3564,14 @@ es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2:
has-symbols "^1.0.2"
is-callable "^1.2.3"
is-negative-zero "^2.0.1"
is-regex "^1.1.2"
is-string "^1.0.5"
object-inspect "^1.9.0"
is-regex "^1.1.3"
is-string "^1.0.6"
object-inspect "^1.10.3"
object-keys "^1.1.1"
object.assign "^4.1.2"
string.prototype.trimend "^1.0.4"
string.prototype.trimstart "^1.0.4"
unbox-primitive "^1.0.0"
unbox-primitive "^1.0.1"
es-module-lexer@^0.4.0:
version "0.4.1"
@ -3666,9 +3672,9 @@ eslint-plugin-prettier@^3.1.4:
prettier-linter-helpers "^1.0.0"
eslint-plugin-react@^7.21.5:
version "7.23.2"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz#2d2291b0f95c03728b55869f01102290e792d494"
integrity sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==
version "7.24.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz#eadedfa351a6f36b490aa17f4fa9b14e842b9eb4"
integrity sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==
dependencies:
array-includes "^3.1.3"
array.prototype.flatmap "^1.2.4"
@ -3676,14 +3682,14 @@ eslint-plugin-react@^7.21.5:
has "^1.0.3"
jsx-ast-utils "^2.4.1 || ^3.0.0"
minimatch "^3.0.4"
object.entries "^1.1.3"
object.entries "^1.1.4"
object.fromentries "^2.0.4"
object.values "^1.1.3"
object.values "^1.1.4"
prop-types "^15.7.2"
resolve "^2.0.0-next.3"
string.prototype.matchall "^4.0.4"
string.prototype.matchall "^4.0.5"
eslint-scope@^5.0.0, eslint-scope@^5.1.1:
eslint-scope@5.1.1, eslint-scope@^5.0.0, eslint-scope@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
@ -3709,9 +3715,9 @@ eslint-visitor-keys@^2.0.0:
integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
eslint@^7.14.0:
version "7.26.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.26.0.tgz#d416fdcdcb3236cd8f282065312813f8c13982f6"
integrity sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==
version "7.27.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.27.0.tgz#665a1506d8f95655c9274d84bd78f7166b07e9c7"
integrity sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==
dependencies:
"@babel/code-frame" "7.12.11"
"@eslint/eslintrc" "^0.4.1"
@ -3721,12 +3727,14 @@ eslint@^7.14.0:
debug "^4.0.1"
doctrine "^3.0.0"
enquirer "^2.3.5"
escape-string-regexp "^4.0.0"
eslint-scope "^5.1.1"
eslint-utils "^2.1.0"
eslint-visitor-keys "^2.0.0"
espree "^7.3.1"
esquery "^1.4.0"
esutils "^2.0.2"
fast-deep-equal "^3.1.3"
file-entry-cache "^6.0.1"
functional-red-black-tree "^1.0.1"
glob-parent "^5.0.0"
@ -3738,7 +3746,7 @@ eslint@^7.14.0:
js-yaml "^3.13.1"
json-stable-stringify-without-jsonify "^1.0.1"
levn "^0.4.1"
lodash "^4.17.21"
lodash.merge "^4.6.2"
minimatch "^3.0.4"
natural-compare "^1.4.0"
optionator "^0.9.1"
@ -3747,7 +3755,7 @@ eslint@^7.14.0:
semver "^7.2.1"
strip-ansi "^6.0.0"
strip-json-comments "^3.1.0"
table "^6.0.4"
table "^6.0.9"
text-table "^0.2.0"
v8-compile-cache "^2.0.3"
@ -3913,7 +3921,7 @@ extsprintf@^1.2.0:
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
fast-deep-equal@^3.1.1:
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
@ -4388,9 +4396,9 @@ globals@^12.1.0:
type-fest "^0.8.1"
globals@^13.6.0:
version "13.8.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3"
integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==
version "13.9.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb"
integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==
dependencies:
type-fest "^0.20.2"
@ -4631,9 +4639,9 @@ iconv-lite@^0.4.24:
safer-buffer ">= 2.1.2 < 3"
iconv-lite@^0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01"
integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==
version "0.6.3"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
@ -4653,9 +4661,9 @@ iferr@^0.1.5:
integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
ignore-walk@^3.0.1:
version "3.0.3"
resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37"
integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==
version "3.0.4"
resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335"
integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==
dependencies:
minimatch "^3.0.4"
@ -5038,7 +5046,7 @@ is-promise@^2.2.2:
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1"
integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==
is-regex@^1.0.4, is-regex@^1.1.2:
is-regex@^1.0.4, is-regex@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f"
integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==
@ -5047,9 +5055,9 @@ is-regex@^1.0.4, is-regex@^1.1.2:
has-symbols "^1.0.2"
is-ssh@^1.3.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.2.tgz#a4b82ab63d73976fd8263cceee27f99a88bdae2b"
integrity sha512-elEw0/0c2UscLrNG+OAorbP539E3rhliKPg+hDMWN9VwrDXfYK+4PBEykDPfxlYYtQvl84TascnQyobfQLHEhQ==
version "1.3.3"
resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.3.tgz#7f133285ccd7f2c2c7fc897b771b53d95a2b2c7e"
integrity sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ==
dependencies:
protocols "^1.1.0"
@ -5063,7 +5071,7 @@ is-stream@^2.0.0:
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
is-string@^1.0.5:
is-string@^1.0.5, is-string@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f"
integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==
@ -5458,6 +5466,11 @@ lodash.ismatch@^4.4.0:
resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37"
integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=
lodash.merge@^4.6.2:
version "4.6.2"
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
lodash.set@^4.3.2:
version "4.3.2"
resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23"
@ -5621,9 +5634,9 @@ map-visit@^1.0.0:
object-visit "^1.0.0"
marked@^2.0.0, marked@^2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/marked/-/marked-2.0.4.tgz#71d54d41f27d91ac2ed308f73c301fe9f0657a94"
integrity sha512-MIL0xKRDQM3DE7dJr/wa6JV0EmK9yZ3cwuTc2bu66FNm/tmEMm9cJCgJZpt9R+K1T+pB2iBNV55wvnwSd345zg==
version "2.0.6"
resolved "https://registry.yarnpkg.com/marked/-/marked-2.0.6.tgz#c3ab1403b9b70f26acd92590fc272eb1718e778c"
integrity sha512-S2mYj0FzTQa0dLddssqwRVW4EOJOVJ355Xm2Vcbm+LU7GQRGWvwbO5K87OaPSOux2AwTSgtPPaXmc8sDPrhn2A==
memoizee@^0.4.14:
version "0.4.15"
@ -6071,9 +6084,9 @@ normalize-url@^3.3.0:
integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==
normalize-url@^4.1.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129"
integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==
version "4.5.1"
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"
integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==
normalize.css@^8.0.1:
version "8.0.1"
@ -6182,7 +6195,7 @@ object-copy@^0.1.0:
define-property "^0.2.5"
kind-of "^3.0.3"
object-inspect@^1.9.0:
object-inspect@^1.10.3, object-inspect@^1.9.0:
version "1.10.3"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369"
integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==
@ -6217,15 +6230,14 @@ object.assign@^4.1.2:
has-symbols "^1.0.1"
object-keys "^1.1.1"
object.entries@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6"
integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==
object.entries@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd"
integrity sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==
dependencies:
call-bind "^1.0.0"
call-bind "^1.0.2"
define-properties "^1.1.3"
es-abstract "^1.18.0-next.1"
has "^1.0.3"
es-abstract "^1.18.2"
object.fromentries@^2.0.4:
version "2.0.4"
@ -6253,15 +6265,14 @@ object.pick@^1.3.0:
dependencies:
isobject "^3.0.1"
object.values@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee"
integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==
object.values@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30"
integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==
dependencies:
call-bind "^1.0.2"
define-properties "^1.1.3"
es-abstract "^1.18.0-next.2"
has "^1.0.3"
es-abstract "^1.18.2"
octokit-pagination-methods@^1.1.0:
version "1.1.0"
@ -6568,9 +6579,9 @@ path-key@^3.0.0, path-key@^3.1.0:
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
path-parse@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
version "1.0.7"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
path-type@^1.0.0:
version "1.1.0"
@ -6590,7 +6601,7 @@ path-type@^3.0.0:
path-type@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
performance-now@^2.1.0:
@ -6696,13 +6707,13 @@ postcss-value-parser@^4.1.0:
integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
postcss@^8.0.2, postcss@^8.2.15:
version "8.2.15"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.15.tgz#9e66ccf07292817d226fc315cbbf9bc148fbca65"
integrity sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==
version "8.3.0"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.0.tgz#b1a713f6172ca427e3f05ef1303de8b65683325f"
integrity sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==
dependencies:
colorette "^1.2.2"
nanoid "^3.1.23"
source-map "^0.6.1"
source-map-js "^0.6.2"
prelude-ls@^1.2.1:
version "1.2.1"
@ -7310,7 +7321,7 @@ retry@^0.10.0:
reusify@^1.0.4:
version "1.0.4"
resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3:
@ -7619,6 +7630,11 @@ source-list-map@^2.0.0, source-list-map@^2.0.1:
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
source-map-js@^0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e"
integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==
source-map-resolve@^0.5.0:
version "0.5.3"
resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
@ -7680,9 +7696,9 @@ spdx-expression-parse@^3.0.0:
spdx-license-ids "^3.0.0"
spdx-license-ids@^3.0.0:
version "3.0.8"
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.8.tgz#eb1e97ad99b11bf3f82a3b71a0472dd9a00f2ecf"
integrity sha512-NDgA96EnaLSvtbM7trJj+t1LUR3pirkDCcz9nOUlPb5DMBGsH7oES6C3hs3j7R9oHEa1EMvReS/BUAIT5Tcr0g==
version "3.0.9"
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f"
integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==
split-on-first@^1.0.0:
version "1.1.0"
@ -7812,15 +7828,16 @@ string-width@^4.1.0, string-width@^4.2.0:
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.0"
string.prototype.matchall@^4.0.4:
version "4.0.4"
resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz#608f255e93e072107f5de066f81a2dfb78cf6b29"
integrity sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==
string.prototype.matchall@^4.0.5:
version "4.0.5"
resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da"
integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==
dependencies:
call-bind "^1.0.2"
define-properties "^1.1.3"
es-abstract "^1.18.0-next.2"
has-symbols "^1.0.1"
es-abstract "^1.18.2"
get-intrinsic "^1.1.1"
has-symbols "^1.0.2"
internal-slot "^1.0.3"
regexp.prototype.flags "^1.3.1"
side-channel "^1.0.4"
@ -7973,7 +7990,7 @@ svg-url-loader@~6.0.0:
file-loader "~6.0.0"
loader-utils "~2.0.0"
table@^6.0.4:
table@^6.0.9:
version "6.7.1"
resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2"
integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==
@ -8205,9 +8222,9 @@ trim-newlines@^2.0.0:
integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=
trim-newlines@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30"
integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==
version "3.0.1"
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==
trim-off-newlines@^1.0.0:
version "1.0.1"
@ -8306,9 +8323,9 @@ typedoc-default-themes@^0.12.10:
integrity sha512-fIS001cAYHkyQPidWXmHuhs8usjP5XVJjWB8oZGqkTowZaz3v7g3KDZeeqE82FBrmkAnIBOY3jgy7lnPnqATbA==
typedoc-plugin-markdown@^3.7.2:
version "3.7.2"
resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.7.2.tgz#87f3f13c074f4c67e1902063a1846c328d690069"
integrity sha512-SBGYKSJO48oGEXF9vC1ldcuqNyOC17st6LXy9/KMQ5tSGY0NRW8ldlBXI0PYrci+IbeXlkUfyhN0n3ud/2/VjQ==
version "3.8.2"
resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.8.2.tgz#47bb85d93e1f61e6a543d5acc9505e2b2f1b3d0b"
integrity sha512-Ci2dy1mILbDFqO09/C1i/BQiGxbIURLhNwBFHWPqhYvLuDK557ofwEhJmkgTXc6NQ6f1XrXtIWfBQtmmAmQNew==
dependencies:
handlebars "^4.7.7"
@ -8348,9 +8365,9 @@ typestyle@^2.0.4:
free-style "3.1.0"
uglify-js@^3.1.4:
version "3.13.7"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.7.tgz#25468a3b39b1c875df03f0937b2b7036a93f3fee"
integrity sha512-1Psi2MmnZJbnEsgJJIlfnd7tFlJfitusmR7zDI8lXlFI0ACD4/Rm/xdrU8bh6zF0i74aiVoBtkRiFulkrmh3AA==
version "3.13.8"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.8.tgz#7c2f9f2553f611f3ff592bdc19c6fb208dc60afb"
integrity sha512-PvFLMFIQHfIjFFlvAch69U2IvIxK9TNzNWt1SxZGp9JZ/v70yvqIQuiJeVPPtUMOzoNt+aNRDk4wgxb34wvEqA==
uid-number@0.0.6:
version "0.0.6"
@ -8362,7 +8379,7 @@ umask@^1.1.0:
resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d"
integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=
unbox-primitive@^1.0.0:
unbox-primitive@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==
@ -8543,7 +8560,7 @@ warning@^4.0.2, warning@^4.0.3:
dependencies:
loose-envify "^1.0.0"
watchpack@^2.0.0:
watchpack@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce"
integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==
@ -8598,18 +8615,18 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.3:
source-list-map "^2.0.0"
source-map "~0.6.1"
webpack-sources@^2.1.1:
version "2.2.0"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.2.0.tgz#058926f39e3d443193b6c31547229806ffd02bac"
integrity sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==
webpack-sources@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.0.tgz#9ed2de69b25143a4c18847586ad9eccb19278cfa"
integrity sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==
dependencies:
source-list-map "^2.0.1"
source-map "^0.6.1"
webpack@^5.3.1:
version "5.37.1"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.37.1.tgz#2deb5acd350583c1ab9338471f323381b0b0c14b"
integrity sha512-btZjGy/hSjCAAVHw+cKG+L0M+rstlyxbO2C+BOTaQ5/XAnxkDrP5sVbqWhXgo4pL3X2dcOib6rqCP20Zr9PLow==
version "5.38.1"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.38.1.tgz#5224c7f24c18e729268d3e3bc97240d6e880258e"
integrity sha512-OqRmYD1OJbHZph6RUMD93GcCZy4Z4wC0ele4FXyYF0J6AxO1vOSuIlU1hkS/lDlR9CDYBz64MZRmdbdnFFoT2g==
dependencies:
"@types/eslint-scope" "^3.7.0"
"@types/estree" "^0.0.47"
@ -8621,7 +8638,7 @@ webpack@^5.3.1:
chrome-trace-event "^1.0.2"
enhanced-resolve "^5.8.0"
es-module-lexer "^0.4.0"
eslint-scope "^5.1.1"
eslint-scope "5.1.1"
events "^3.2.0"
glob-to-regexp "^0.4.1"
graceful-fs "^4.2.4"
@ -8632,8 +8649,8 @@ webpack@^5.3.1:
schema-utils "^3.0.0"
tapable "^2.1.1"
terser-webpack-plugin "^5.1.1"
watchpack "^2.0.0"
webpack-sources "^2.1.1"
watchpack "^2.2.0"
webpack-sources "^2.3.0"
whatwg-url@^7.0.0:
version "7.1.0"
@ -8767,9 +8784,9 @@ write-pkg@^3.1.0:
write-json-file "^2.2.0"
ws@^7.2.0:
version "7.4.5"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1"
integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==
version "7.4.6"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c"
integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==
xtend@~4.0.1:
version "4.0.2"