This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/training.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new e76fa72  Site checkin for project Training: Website
e76fa72 is described below

commit e76fa72ae3ce62cc8eb8e73f8ebf300c7d561f59
Author: jenkins <[email protected]>
AuthorDate: Sat Aug 30 16:20:18 2025 +0000

    Site checkin for project Training: Website
---
 dependencies.html                                  |  10 +-
 incubator/mentors/META-INF/MANIFEST.MF             |   2 +-
 .../classes/org/apache/training/StringUtils.class  | Bin 536 -> 536 bytes
 .../META-INF/MANIFEST.MF                           |   2 +-
 presentations/airflow/META-INF/MANIFEST.MF         |   2 +-
 .../comdev/apache-intro/META-INF/MANIFEST.MF       |   2 +-
 .../comdev/comdev-intro/META-INF/MANIFEST.MF       |   2 +-
 .../comdev/working-groups/META-INF/MANIFEST.MF     |   2 +-
 .../WEB-INF/classes/org/apache/StringUtils.class   | Bin 518 -> 518 bytes
 presentations/druid/META-INF/MANIFEST.MF           |   2 +-
 presentations/flink/META-INF/MANIFEST.MF           |   2 +-
 presentations/hadoop/META-INF/MANIFEST.MF          |   2 +-
 presentations/hive/META-INF/MANIFEST.MF            |   2 +-
 presentations/ignite/META-INF/MANIFEST.MF          |   2 +-
 .../WEB-INF/classes/example/PutGetExample.class    | Bin 2197 -> 2197 bytes
 .../classes/example/SqlExample$Customer.class      | Bin 1921 -> 1921 bytes
 .../WEB-INF/classes/example/SqlExample.class       | Bin 7069 -> 7069 bytes
 .../WEB-INF/classes/example/StartClientNode.class  | Bin 928 -> 928 bytes
 .../WEB-INF/classes/example/StartServerNode.class  | Bin 1322 -> 1322 bytes
 .../incubator-releases/META-INF/MANIFEST.MF        |   2 +-
 .../navigating-asf-incubation/META-INF/MANIFEST.MF |   2 +-
 .../release-checklist/META-INF/MANIFEST.MF         |   2 +-
 presentations/mynewt/META-INF/MANIFEST.MF          |   2 +-
 .../META-INF/MANIFEST.MF                           |   2 +-
 presentations/pulsar/META-INF/MANIFEST.MF          |   2 +-
 presentations/samza/META-INF/MANIFEST.MF           |   2 +-
 presentations/spark/basics/META-INF/MANIFEST.MF    |   2 +-
 .../.asciidoctor/diagram/actdiag-test.png.cache    |   1 +
 .../demo/.asciidoctor/diagram/erd-test.svg.cache   |   1 +
 .../diagram/svgbob-circuit-diagram-test.svg.cache  |   1 +
 .../diagram/svgbob-mindmap-test.svg.cache          |   1 +
 .../.asciidoctor/diagram/syntrax-test.svg.cache    |   1 +
 presentations/training/demo/META-INF/MANIFEST.MF   |   2 +-
 .../demo/WEB-INF/classes/test/StringUtils.class    | Bin 506 -> 506 bytes
 .../training/demo/images/actdiag-test.png          | Bin 0 -> 21986 bytes
 .../demo/images/asciidoctor-diagram-process.png    | Bin 13811 -> 13812 bytes
 .../training/demo/images/auth-protocol.png         | Bin 6780 -> 6780 bytes
 presentations/training/demo/images/dot-example.svg |  34 +--
 presentations/training/demo/images/erd-test.svg    |  40 +++
 presentations/training/demo/images/nwdiag-test.png | Bin 23371 -> 23329 bytes
 .../demo/images/svgbob-circuit-diagram-test.svg    | 310 +++++++++++++++++++++
 .../training/demo/images/svgbob-mindmap-test.svg   | 252 +++++++++++++++++
 .../training/demo/images/syntrax-test.svg          | 168 +++++++++++
 presentations/training/demo/index.html             | 156 ++++-------
 .../training/presentation/META-INF/MANIFEST.MF     |   2 +-
 presentations/zookeeper/META-INF/MANIFEST.MF       |   2 +-
 46 files changed, 871 insertions(+), 148 deletions(-)

diff --git a/dependencies.html b/dependencies.html
index 3a4b3db..ee79ec7 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -951,7 +951,7 @@
    <tr class="a"> 
     <td 
align="left">training-content-apache-training-demo-1.0.0-SNAPSHOT.war</td> 
     <td align="right">3.9 MB</td> 
-    <td align="right">235</td> 
+    <td align="right">245</td> 
     <td align="right">1</td> 
     <td align="right">1</td> 
     <td align="center">1.8</td> 
@@ -986,8 +986,8 @@
    </tr> 
    <tr class="a"> 
     <td align="right">22</td> 
-    <td align="right">221.6 MB</td> 
-    <td align="right">4908</td> 
+    <td align="right">221.7 MB</td> 
+    <td align="right">4918</td> 
     <td align="right">8</td> 
     <td align="right">4</td> 
     <td align="center">1.8</td> 
@@ -995,8 +995,8 @@
    </tr> 
    <tr class="b"> 
     <td align="right">compile: 22</td> 
-    <td align="right">compile: 221.6 MB</td> 
-    <td align="right">compile: 4908</td> 
+    <td align="right">compile: 221.7 MB</td> 
+    <td align="right">compile: 4918</td> 
     <td align="right">compile: 8</td> 
     <td align="right">compile: 4</td> 
     <td align="center">1.8</td> 
diff --git a/incubator/mentors/META-INF/MANIFEST.MF 
b/incubator/mentors/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/incubator/mentors/META-INF/MANIFEST.MF
+++ b/incubator/mentors/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git 
a/incubator/mentors/WEB-INF/classes/org/apache/training/StringUtils.class 
b/incubator/mentors/WEB-INF/classes/org/apache/training/StringUtils.class
index 1b50397..13681e6 100644
Binary files 
a/incubator/mentors/WEB-INF/classes/org/apache/training/StringUtils.class and 
b/incubator/mentors/WEB-INF/classes/org/apache/training/StringUtils.class differ
diff --git 
a/iot/magic-industrial-data-acquisition-with-apache-plc4x-tsfile-and-iotdb/META-INF/MANIFEST.MF
 
b/iot/magic-industrial-data-acquisition-with-apache-plc4x-tsfile-and-iotdb/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- 
a/iot/magic-industrial-data-acquisition-with-apache-plc4x-tsfile-and-iotdb/META-INF/MANIFEST.MF
+++ 
b/iot/magic-industrial-data-acquisition-with-apache-plc4x-tsfile-and-iotdb/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git a/presentations/airflow/META-INF/MANIFEST.MF 
b/presentations/airflow/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/airflow/META-INF/MANIFEST.MF
+++ b/presentations/airflow/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git a/presentations/comdev/apache-intro/META-INF/MANIFEST.MF 
b/presentations/comdev/apache-intro/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/comdev/apache-intro/META-INF/MANIFEST.MF
+++ b/presentations/comdev/apache-intro/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git a/presentations/comdev/comdev-intro/META-INF/MANIFEST.MF 
b/presentations/comdev/comdev-intro/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/comdev/comdev-intro/META-INF/MANIFEST.MF
+++ b/presentations/comdev/comdev-intro/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git a/presentations/comdev/working-groups/META-INF/MANIFEST.MF 
b/presentations/comdev/working-groups/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/comdev/working-groups/META-INF/MANIFEST.MF
+++ b/presentations/comdev/working-groups/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git 
a/presentations/comdev/working-groups/WEB-INF/classes/org/apache/StringUtils.class
 
b/presentations/comdev/working-groups/WEB-INF/classes/org/apache/StringUtils.class
index ccaf419..8d36402 100644
Binary files 
a/presentations/comdev/working-groups/WEB-INF/classes/org/apache/StringUtils.class
 and 
b/presentations/comdev/working-groups/WEB-INF/classes/org/apache/StringUtils.class
 differ
diff --git a/presentations/druid/META-INF/MANIFEST.MF 
b/presentations/druid/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/druid/META-INF/MANIFEST.MF
+++ b/presentations/druid/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git a/presentations/flink/META-INF/MANIFEST.MF 
b/presentations/flink/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/flink/META-INF/MANIFEST.MF
+++ b/presentations/flink/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git a/presentations/hadoop/META-INF/MANIFEST.MF 
b/presentations/hadoop/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/hadoop/META-INF/MANIFEST.MF
+++ b/presentations/hadoop/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git a/presentations/hive/META-INF/MANIFEST.MF 
b/presentations/hive/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/hive/META-INF/MANIFEST.MF
+++ b/presentations/hive/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git a/presentations/ignite/META-INF/MANIFEST.MF 
b/presentations/ignite/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/ignite/META-INF/MANIFEST.MF
+++ b/presentations/ignite/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git a/presentations/ignite/WEB-INF/classes/example/PutGetExample.class 
b/presentations/ignite/WEB-INF/classes/example/PutGetExample.class
index eba451a..0fd102e 100644
Binary files a/presentations/ignite/WEB-INF/classes/example/PutGetExample.class 
and b/presentations/ignite/WEB-INF/classes/example/PutGetExample.class differ
diff --git 
a/presentations/ignite/WEB-INF/classes/example/SqlExample$Customer.class 
b/presentations/ignite/WEB-INF/classes/example/SqlExample$Customer.class
index aa340f6..7ed38ac 100644
Binary files 
a/presentations/ignite/WEB-INF/classes/example/SqlExample$Customer.class and 
b/presentations/ignite/WEB-INF/classes/example/SqlExample$Customer.class differ
diff --git a/presentations/ignite/WEB-INF/classes/example/SqlExample.class 
b/presentations/ignite/WEB-INF/classes/example/SqlExample.class
index 839078d..0750807 100644
Binary files a/presentations/ignite/WEB-INF/classes/example/SqlExample.class 
and b/presentations/ignite/WEB-INF/classes/example/SqlExample.class differ
diff --git a/presentations/ignite/WEB-INF/classes/example/StartClientNode.class 
b/presentations/ignite/WEB-INF/classes/example/StartClientNode.class
index fdfa6d5..95aaa69 100644
Binary files 
a/presentations/ignite/WEB-INF/classes/example/StartClientNode.class and 
b/presentations/ignite/WEB-INF/classes/example/StartClientNode.class differ
diff --git a/presentations/ignite/WEB-INF/classes/example/StartServerNode.class 
b/presentations/ignite/WEB-INF/classes/example/StartServerNode.class
index 99dab47..37a79a0 100644
Binary files 
a/presentations/ignite/WEB-INF/classes/example/StartServerNode.class and 
b/presentations/ignite/WEB-INF/classes/example/StartServerNode.class differ
diff --git a/presentations/incubator/incubator-releases/META-INF/MANIFEST.MF 
b/presentations/incubator/incubator-releases/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/incubator/incubator-releases/META-INF/MANIFEST.MF
+++ b/presentations/incubator/incubator-releases/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git 
a/presentations/incubator/navigating-asf-incubation/META-INF/MANIFEST.MF 
b/presentations/incubator/navigating-asf-incubation/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/incubator/navigating-asf-incubation/META-INF/MANIFEST.MF
+++ b/presentations/incubator/navigating-asf-incubation/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git a/presentations/incubator/release-checklist/META-INF/MANIFEST.MF 
b/presentations/incubator/release-checklist/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/incubator/release-checklist/META-INF/MANIFEST.MF
+++ b/presentations/incubator/release-checklist/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git a/presentations/mynewt/META-INF/MANIFEST.MF 
b/presentations/mynewt/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/mynewt/META-INF/MANIFEST.MF
+++ b/presentations/mynewt/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git 
a/presentations/plc4x/revolutionizing-iiot-with-plc4x/META-INF/MANIFEST.MF 
b/presentations/plc4x/revolutionizing-iiot-with-plc4x/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/plc4x/revolutionizing-iiot-with-plc4x/META-INF/MANIFEST.MF
+++ b/presentations/plc4x/revolutionizing-iiot-with-plc4x/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git a/presentations/pulsar/META-INF/MANIFEST.MF 
b/presentations/pulsar/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/pulsar/META-INF/MANIFEST.MF
+++ b/presentations/pulsar/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git a/presentations/samza/META-INF/MANIFEST.MF 
b/presentations/samza/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/samza/META-INF/MANIFEST.MF
+++ b/presentations/samza/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git a/presentations/spark/basics/META-INF/MANIFEST.MF 
b/presentations/spark/basics/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/spark/basics/META-INF/MANIFEST.MF
+++ b/presentations/spark/basics/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git 
a/presentations/training/demo/.asciidoctor/diagram/actdiag-test.png.cache 
b/presentations/training/demo/.asciidoctor/diagram/actdiag-test.png.cache
new file mode 100644
index 0000000..0478be4
--- /dev/null
+++ b/presentations/training/demo/.asciidoctor/diagram/actdiag-test.png.cache
@@ -0,0 +1 @@
+{"checksum":"actdiag-md5-4ce96105dd0def82cf8e2ff45002dc97","options":{"font_path":null},"width":448,"height":360}
\ No newline at end of file
diff --git 
a/presentations/training/demo/.asciidoctor/diagram/erd-test.svg.cache 
b/presentations/training/demo/.asciidoctor/diagram/erd-test.svg.cache
new file mode 100644
index 0000000..15a82c6
--- /dev/null
+++ b/presentations/training/demo/.asciidoctor/diagram/erd-test.svg.cache
@@ -0,0 +1 @@
+{"checksum":"erd-md5-b0037da5e744e859a2a845cba067c881","options":{},"width":469.49,"height":176.89000000000001}
\ No newline at end of file
diff --git 
a/presentations/training/demo/.asciidoctor/diagram/svgbob-circuit-diagram-test.svg.cache
 
b/presentations/training/demo/.asciidoctor/diagram/svgbob-circuit-diagram-test.svg.cache
new file mode 100644
index 0000000..7fe9601
--- /dev/null
+++ 
b/presentations/training/demo/.asciidoctor/diagram/svgbob-circuit-diagram-test.svg.cache
@@ -0,0 +1 @@
+{"checksum":"svgbob-md5-57ba41c5c1d7da81a66f99fff2ae38ec","options":{"font_family":null,"font_size":null,"stroke_width":null,"scale":null},"width":592,"height":576}
\ No newline at end of file
diff --git 
a/presentations/training/demo/.asciidoctor/diagram/svgbob-mindmap-test.svg.cache
 
b/presentations/training/demo/.asciidoctor/diagram/svgbob-mindmap-test.svg.cache
new file mode 100644
index 0000000..4b94789
--- /dev/null
+++ 
b/presentations/training/demo/.asciidoctor/diagram/svgbob-mindmap-test.svg.cache
@@ -0,0 +1 @@
+{"checksum":"svgbob-md5-789a6430f1ba3874b49a8d16ec3ee952","options":{"font_family":null,"font_size":null,"stroke_width":null,"scale":null},"width":544,"height":464}
\ No newline at end of file
diff --git 
a/presentations/training/demo/.asciidoctor/diagram/syntrax-test.svg.cache 
b/presentations/training/demo/.asciidoctor/diagram/syntrax-test.svg.cache
new file mode 100644
index 0000000..2c03790
--- /dev/null
+++ b/presentations/training/demo/.asciidoctor/diagram/syntrax-test.svg.cache
@@ -0,0 +1 @@
+{"checksum":"syntrax-md5-885b41dddc166cd18851cc396d03c4ad","options":{"heading":null,"scale":null,"transparent":null,"style":null},"width":628,"height":231}
\ No newline at end of file
diff --git a/presentations/training/demo/META-INF/MANIFEST.MF 
b/presentations/training/demo/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/training/demo/META-INF/MANIFEST.MF
+++ b/presentations/training/demo/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git a/presentations/training/demo/WEB-INF/classes/test/StringUtils.class 
b/presentations/training/demo/WEB-INF/classes/test/StringUtils.class
index e455a44..ed47dbd 100644
Binary files 
a/presentations/training/demo/WEB-INF/classes/test/StringUtils.class and 
b/presentations/training/demo/WEB-INF/classes/test/StringUtils.class differ
diff --git a/presentations/training/demo/images/actdiag-test.png 
b/presentations/training/demo/images/actdiag-test.png
new file mode 100644
index 0000000..152a29e
Binary files /dev/null and 
b/presentations/training/demo/images/actdiag-test.png differ
diff --git a/presentations/training/demo/images/asciidoctor-diagram-process.png 
b/presentations/training/demo/images/asciidoctor-diagram-process.png
index 530220e..dc909e9 100644
Binary files 
a/presentations/training/demo/images/asciidoctor-diagram-process.png and 
b/presentations/training/demo/images/asciidoctor-diagram-process.png differ
diff --git a/presentations/training/demo/images/auth-protocol.png 
b/presentations/training/demo/images/auth-protocol.png
index 8f8b0c7..c4aecb1 100644
Binary files a/presentations/training/demo/images/auth-protocol.png and 
b/presentations/training/demo/images/auth-protocol.png differ
diff --git a/presentations/training/demo/images/dot-example.svg 
b/presentations/training/demo/images/dot-example.svg
index 4589bee..2a9cdae 100644
--- a/presentations/training/demo/images/dot-example.svg
+++ b/presentations/training/demo/images/dot-example.svg
@@ -2,54 +2,54 @@
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";><svg height='260pt' 
preserveAspectRatio='xMidYMid meet' viewBox='0.00 0.00 89.00 260.00' 
width='89pt' xmlns:xlink='http://www.w3.org/1999/xlink' 
xmlns='http://www.w3.org/2000/svg'>
 <g class='graph' id='graph0' transform='scale(1 1) rotate(0) translate(4 256)'>
 <title>g</title>
-<polygon fill='#ffffff' points='-4,4 -4,-256 85,-256 85,4 -4,4' 
stroke='transparent'/>
+<polygon fill='white' points='-4,4 -4,-256 85,-256 85,4 -4,4' 
stroke='transparent'/>
 
 <g class='node' id='node1'>
 <title>a</title>
-<ellipse cx='54' cy='-234' fill='none' rx='27' ry='18' stroke='#000000'/>
-<text fill='#000000' font-family='Times,serif' font-size='14.00' 
text-anchor='middle' x='54' y='-230.3'>a</text>
+<ellipse cx='54' cy='-234' fill='none' rx='27' ry='18' stroke='black'/>
+<text font-family='Times,serif' font-size='14.00' text-anchor='middle' x='54' 
y='-230.3'>a</text>
 </g>
 
 <g class='node' id='node2'>
 <title>b</title>
-<ellipse cx='27' cy='-162' fill='none' rx='27' ry='18' stroke='#000000'/>
-<text fill='#000000' font-family='Times,serif' font-size='14.00' 
text-anchor='middle' x='27' y='-158.3'>b</text>
+<ellipse cx='27' cy='-162' fill='none' rx='27' ry='18' stroke='black'/>
+<text font-family='Times,serif' font-size='14.00' text-anchor='middle' x='27' 
y='-158.3'>b</text>
 </g>
 
 <g class='edge' id='edge1'>
 <title>a&#45;&gt;b</title>
-<path d='M47.3258,-216.2022C44.2524,-208.0064 40.5384,-198.1024 
37.1305,-189.0145' fill='none' stroke='#000000'/>
-<polygon fill='#000000' points='40.3858,-187.7274 33.5974,-179.593 
33.8315,-190.1853 40.3858,-187.7274' stroke='#000000'/>
+<path d='M47.6,-216.41C44.49,-208.34 40.67,-198.43 37.17,-189.35' fill='none' 
stroke='black'/>
+<polygon fill='black' points='40.4,-188.03 33.54,-179.96 33.87,-190.55 
40.4,-188.03' stroke='black'/>
 </g>
 
 <g class='node' id='node3'>
 <title>c</title>
-<ellipse cx='27' cy='-90' fill='none' rx='27' ry='18' stroke='#000000'/>
-<text fill='#000000' font-family='Times,serif' font-size='14.00' 
text-anchor='middle' x='27' y='-86.3'>c</text>
+<ellipse cx='27' cy='-90' fill='none' rx='27' ry='18' stroke='black'/>
+<text font-family='Times,serif' font-size='14.00' text-anchor='middle' x='27' 
y='-86.3'>c</text>
 </g>
 
 <g class='edge' id='edge2'>
 <title>b&#45;&gt;c</title>
-<path d='M27,-143.8314C27,-136.131 27,-126.9743 27,-118.4166' fill='none' 
stroke='#000000'/>
-<polygon fill='#000000' points='30.5001,-118.4132 27,-108.4133 
23.5001,-118.4133 30.5001,-118.4132' stroke='#000000'/>
+<path d='M27,-143.7C27,-135.98 27,-126.71 27,-118.11' fill='none' 
stroke='black'/>
+<polygon fill='black' points='30.5,-118.1 27,-108.1 23.5,-118.1 30.5,-118.1' 
stroke='black'/>
 </g>
 
 <g class='node' id='node4'>
 <title>d</title>
-<ellipse cx='54' cy='-18' fill='none' rx='27' ry='18' stroke='#000000'/>
-<text fill='#000000' font-family='Times,serif' font-size='14.00' 
text-anchor='middle' x='54' y='-14.3'>d</text>
+<ellipse cx='54' cy='-18' fill='none' rx='27' ry='18' stroke='black'/>
+<text font-family='Times,serif' font-size='14.00' text-anchor='middle' x='54' 
y='-14.3'>d</text>
 </g>
 
 <g class='edge' id='edge3'>
 <title>c&#45;&gt;d</title>
-<path d='M33.6742,-72.2022C36.7476,-64.0064 40.4616,-54.1024 43.8695,-45.0145' 
fill='none' stroke='#000000'/>
-<polygon fill='#000000' points='47.1685,-46.1853 47.4026,-35.593 
40.6142,-43.7274 47.1685,-46.1853' stroke='#000000'/>
+<path d='M33.4,-72.41C36.51,-64.34 40.33,-54.43 43.83,-45.35' fill='none' 
stroke='black'/>
+<polygon fill='black' points='47.13,-46.55 47.46,-35.96 40.6,-44.03 
47.13,-46.55' stroke='black'/>
 </g>
 
 <g class='edge' id='edge4'>
 <title>d&#45;&gt;a</title>
-<path d='M57.7474,-35.9069C59.7466,-46.3759 61.9966,-59.8759 63,-72 
66.9591,-119.8364 66.9591,-132.1636 63,-180 62.2945,-188.5247 60.9727,-197.7297 
59.5551,-206.083' fill='none' stroke='#000000'/>
-<polygon fill='#000000' points='56.0803,-205.6302 57.7474,-216.0931 
62.9689,-206.8742 56.0803,-205.6302' stroke='#000000'/>
+<path d='M57.65,-36.09C59.68,-46.43 61.98,-59.91 63,-72 67.03,-119.83 
67.03,-132.17 63,-180 62.28,-188.5 60.93,-197.69 59.49,-205.99' fill='none' 
stroke='black'/>
+<polygon fill='black' points='56.03,-205.44 57.65,-215.91 62.91,-206.71 
56.03,-205.44' stroke='black'/>
 </g>
 </g>
 </svg>
diff --git a/presentations/training/demo/images/erd-test.svg 
b/presentations/training/demo/images/erd-test.svg
new file mode 100644
index 0000000..b794489
--- /dev/null
+++ b/presentations/training/demo/images/erd-test.svg
@@ -0,0 +1,40 @@
+<?xml version='1.0' encoding='UTF-8' standalone='no'?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";><svg height='133pt' 
preserveAspectRatio='xMidYMid meet' viewBox='0.00 0.00 352.80 132.80' 
width='353pt' xmlns:xlink='http://www.w3.org/1999/xlink' 
xmlns='http://www.w3.org/2000/svg'>
+<g class='graph' id='graph0' transform='scale(1 1) rotate(0) translate(14.4 
118.4)'>
+<title>%3</title>
+<polygon fill='white' points='-14.4,14.4 -14.4,-118.4 338.4,-118.4 338.4,14.4 
-14.4,14.4' stroke='transparent'/>
+
+<g class='node' id='node1'>
+<title>Person</title>
+<path d='M12,-0.5C12,-0.5 132,-0.5 132,-0.5 138,-0.5 144,-6.5 144,-12.5 
144,-12.5 144,-91.5 144,-91.5 144,-97.5 138,-103.5 132,-103.5 132,-103.5 
12,-103.5 12,-103.5 6,-103.5 0,-97.5 0,-91.5 0,-91.5 0,-12.5 0,-12.5 0,-6.5 
6,-0.5 12,-0.5' fill='none' stroke='black'/>
+<text font-family='Helvetica bold' font-size='14.00' font-weight='bold' 
text-anchor='start' x='44.5' y='-88.8'>Person</text>
+<polyline fill='none' points='0,-80.5 144,-80.5 ' stroke='black'/>
+<text font-family='Times,serif' font-size='12.00' text-anchor='start' x='9' 
y='-62.9'>*name</text>
+<text font-family='Times,serif' font-size='12.00' text-anchor='start' x='9' 
y='-45.9'>height</text>
+<text font-family='Times,serif' font-size='12.00' text-anchor='start' x='9' 
y='-28.9'>weight</text>
+<text font-family='Times,serif' font-size='12.00' text-anchor='start' x='9' 
y='-11.9'>+birth_location_id</text>
+</g>
+
+<g class='node' id='node2'>
+<title>Location</title>
+<path d='M192,-0.5C192,-0.5 312,-0.5 312,-0.5 318,-0.5 324,-6.5 324,-12.5 
324,-12.5 324,-91.5 324,-91.5 324,-97.5 318,-103.5 312,-103.5 312,-103.5 
192,-103.5 192,-103.5 186,-103.5 180,-97.5 180,-91.5 180,-91.5 180,-12.5 
180,-12.5 180,-6.5 186,-0.5 192,-0.5' fill='none' stroke='black'/>
+<text font-family='Helvetica bold' font-size='14.00' font-weight='bold' 
text-anchor='start' x='218' y='-88.8'>Location</text>
+<polyline fill='none' points='180,-80.5 324,-80.5 ' stroke='black'/>
+<text font-family='Times,serif' font-size='12.00' text-anchor='start' x='189' 
y='-62.9'>*id</text>
+<text font-family='Times,serif' font-size='12.00' text-anchor='start' x='189' 
y='-45.9'>city</text>
+<text font-family='Times,serif' font-size='12.00' text-anchor='start' x='189' 
y='-28.9'>state</text>
+<text font-family='Times,serif' font-size='12.00' text-anchor='start' x='189' 
y='-11.9'>country</text>
+</g>
+
+<g class='edge' id='edge1'>
+<title>Person&#45;&#45;Location</title>
+<path d='M153.33,-52C159.16,-52 165.05,-52 170.88,-52' fill='none' 
stroke='black'/>
+<polygon fill='black' points='153.12,-52 144.12,-47.95 148.62,-52 144.12,-52 
144.12,-52 144.12,-52 148.62,-52 144.12,-56.05 153.12,-52 153.12,-52' 
stroke='black'/>
+<polyline fill='none' points='180,-52 175.5,-52 ' stroke='black'/>
+<polygon fill='black' points='174.6,-47.5 174.6,-56.5 172.8,-56.5 172.8,-47.5 
174.6,-47.5' stroke='black'/>
+<polyline fill='none' points='175.5,-52 171,-52 ' stroke='black'/>
+<text font-family='Times,serif' font-size='12.00' text-anchor='start' 
x='160.73' y='-39.36'>1</text>
+<text font-family='Times,serif' font-size='12.00' text-anchor='start' 
x='146.38' y='-58.44'>0..N</text>
+</g>
+</g>
+</svg>
diff --git a/presentations/training/demo/images/nwdiag-test.png 
b/presentations/training/demo/images/nwdiag-test.png
index 4e48434..3448a47 100644
Binary files a/presentations/training/demo/images/nwdiag-test.png and 
b/presentations/training/demo/images/nwdiag-test.png differ
diff --git a/presentations/training/demo/images/svgbob-circuit-diagram-test.svg 
b/presentations/training/demo/images/svgbob-circuit-diagram-test.svg
new file mode 100644
index 0000000..ae47538
--- /dev/null
+++ b/presentations/training/demo/images/svgbob-circuit-diagram-test.svg
@@ -0,0 +1,310 @@
+<svg class='svgbob' height='576' preserveAspectRatio='xMidYMid meet' 
viewBox='0 0 592 576' width='592' xmlns='http://www.w3.org/2000/svg'>
+  <style>.svgbob line, .svgbob path, .svgbob circle, .svgbob rect, .svgbob 
polygon {
+  stroke: black;
+  stroke-width: 2;
+  stroke-opacity: 1;
+  fill-opacity: 1;
+  stroke-linecap: round;
+  stroke-linejoin: miter;
+}
+
+.svgbob text {
+  white-space: pre;
+  fill: black;
+  font-family: Iosevka Fixed, monospace;
+  font-size: 14px;
+}
+
+.svgbob rect.backdrop {
+  stroke: none;
+  fill: white;
+}
+
+.svgbob .broken {
+  stroke-dasharray: 8;
+}
+
+.svgbob .filled {
+  fill: black;
+}
+
+.svgbob .bg_filled {
+  fill: white;
+  stroke-width: 1;
+}
+
+.svgbob .nofill {
+  fill: white;
+}
+
+.svgbob .end_marked_arrow {
+  marker-end: url(#arrow);
+}
+
+.svgbob .start_marked_arrow {
+  marker-start: url(#arrow);
+}
+
+.svgbob .end_marked_diamond {
+  marker-end: url(#diamond);
+}
+
+.svgbob .start_marked_diamond {
+  marker-start: url(#diamond);
+}
+
+.svgbob .end_marked_circle {
+  marker-end: url(#circle);
+}
+
+.svgbob .start_marked_circle {
+  marker-start: url(#circle);
+}
+
+.svgbob .end_marked_open_circle {
+  marker-end: url(#open_circle);
+}
+
+.svgbob .start_marked_open_circle {
+  marker-start: url(#open_circle);
+}
+
+.svgbob .end_marked_big_open_circle {
+  marker-end: url(#big_open_circle);
+}
+
+.svgbob .start_marked_big_open_circle {
+  marker-start: url(#big_open_circle);
+}
+
+</style>
+  <defs>
+    <marker id='arrow' markerHeight='7' markerWidth='7' 
orient='auto-start-reverse' refX='4' refY='2' viewBox='-2 -2 8 8'>
+      <polygon points='0,0 0,4 4,2 0,0'/>
+    </marker>
+    <marker id='diamond' markerHeight='7' markerWidth='7' 
orient='auto-start-reverse' refX='4' refY='2' viewBox='-2 -2 8 8'>
+      <polygon points='0,2 2,0 4,2 2,4 0,2'/>
+    </marker>
+    <marker id='circle' markerHeight='7' markerWidth='7' 
orient='auto-start-reverse' refX='4' refY='4' viewBox='0 0 8 8'>
+      <circle class='filled' cx='4' cy='4' r='2'/>
+    </marker>
+    <marker id='open_circle' markerHeight='7' markerWidth='7' 
orient='auto-start-reverse' refX='4' refY='4' viewBox='0 0 8 8'>
+      <circle class='bg_filled' cx='4' cy='4' r='2'/>
+    </marker>
+    <marker id='big_open_circle' markerHeight='7' markerWidth='7' 
orient='auto-start-reverse' refX='4' refY='4' viewBox='0 0 8 8'>
+      <circle class='bg_filled' cx='4' cy='4' r='3'/>
+    </marker>
+  </defs>
+  <rect class='backdrop' height='576' width='592' x='0' y='0'/>
+  <text x='42' y='12'>+10</text>
+  <line class='solid' x1='64' x2='72' y1='8' y2='8'/>
+  <text x='74' y='12'>15V</text>
+  <text x='210' y='12'>0,047R</text>
+  <line class='solid end_marked_circle' x1='52' x2='52' y1='24' y2='24'/>
+  <line class='solid end_marked_open_circle' x1='56' x2='108' y1='24' y2='24'/>
+  <line class='solid' x1='108' x2='108' y1='28' y2='48'/>
+  <line class='solid end_marked_open_circle' x1='112' x2='164' y1='24' 
y2='24'/>
+  <line class='solid end_marked_open_circle' x1='212' x2='228' y1='24' 
y2='24'/>
+  <line class='solid end_marked_open_circle' x1='232' x2='252' y1='24' 
y2='24'/>
+  <line class='solid end_marked_open_circle' x1='256' x2='332' y1='24' 
y2='24'/>
+  <line class='solid end_marked_open_circle' x1='336' x2='372' y1='24' 
y2='24'/>
+  <line class='solid' x1='96' x2='120' y1='56' y2='56'/>
+  <text x='50' y='76'>470uF</text>
+  <line class='solid' x1='108' x2='108' y1='64' y2='84'/>
+  <text x='122' y='76'>+</text>
+  <line class='solid end_marked_circle' x1='52' x2='52' y1='88' y2='88'/>
+  <line class='solid end_marked_open_circle' x1='56' x2='108' y1='88' y2='88'/>
+  <line class='solid' x1='108' x2='108' y1='92' y2='112'/>
+  <text x='194' y='108'>6</text>
+  <text x='234' y='108'>7</text>
+  <text x='258' y='108'>8</text>
+  <text x='98' y='124'>GND</text>
+  <text x='282' y='156'>1</text>
+  <line class='solid end_marked_open_circle' x1='276' x2='332' y1='168' 
y2='168'/>
+  <text x='362' y='188'>`</text>
+  <polygon class='filled' points='368,180 376,184 368,188'/>
+  <line class='solid end_marked_open_circle' x1='372' x2='372' y1='192' 
y2='216'/>
+  <text x='290' y='220'>220R</text>
+  <polygon class='filled' points='432,228 440,232 432,236'/>
+  <line class='solid end_marked_open_circle' x1='436' x2='436' y1='248' 
y2='280'/>
+  <text x='458' y='268'>BYV29</text>
+  <line class='solid' x1='536' x2='544' y1='264' y2='264'/>
+  <text x='546' y='268'>12V6</text>
+  <line class='solid' x1='436' x2='436' y1='284' y2='304'/>
+  <polygon class='filled' points='472,276 464,280 472,284'/>
+  <line class='solid end_marked_open_circle' x1='472' x2='484' y1='280' 
y2='280'/>
+  <line class='solid' x1='484' x2='484' y1='284' y2='404'/>
+  <line class='solid end_marked_open_circle' x1='488' x2='524' y1='280' 
y2='280'/>
+  <line class='solid' x1='524' x2='524' y1='284' y2='320'/>
+  <line class='solid' x1='528' x2='548' y1='280' y2='280'/>
+  <text x='562' y='284'>OUT</text>
+  <text x='282' y='300'>2</text>
+  <line class='solid end_marked_open_circle' x1='276' x2='300' y1='312' 
y2='312'/>
+  <text x='434' y='316'>C</text>
+  <line class='solid' x1='444' x2='444' y1='304' y2='352'/>
+  <text x='290' y='332'>GND</text>
+  <text x='434' y='332'>C</text>
+  <line class='solid' x1='512' x2='536' y1='328' y2='328'/>
+  <text x='282' y='348'>3</text>
+  <text x='338' y='348'>1nF</text>
+  <text x='434' y='348'>C</text>
+  <line class='solid' x1='436' x2='436' y1='352' y2='368'/>
+  <text x='426' y='380'>GND</text>
+  <text x='210' y='396'>5</text>
+  <text x='250' y='396'>4</text>
+  <line class='solid end_marked_open_circle' x1='264' x2='372' y1='408' 
y2='408'/>
+  <line class='solid end_marked_open_circle' x1='376' x2='484' y1='408' 
y2='408'/>
+  <line class='solid end_marked_open_circle' x1='308' x2='412' y1='440' 
y2='440'/>
+  <text x='474' y='460'>1k0</text>
+  <text x='402' y='556'>GND</text>
+  <text x='298' y='108'>1k</text>
+  <text x='386' y='156'>BC</text>
+  <text x='386' y='172'>547</text>
+  <text x='458' y='220'>IRF9Z34</text>
+  <text x='194' y='252'>MC34063</text>
+  <text x='386' y='332'>30uH</text>
+  <text x='546' y='332'>470</text>
+  <line class='solid' x1='524' x2='524' y1='352' y2='368'/>
+  <text x='538' y='364'>+</text>
+  <text x='514' y='380'>GND</text>
+  <text x='434' y='492'>5k6</text>
+  <text x='466' y='492'>+</text>
+  <text x='482' y='492'>3k3</text>
+  <text x='434' y='508'>in</text>
+  <text x='458' y='508'>Serie</text>
+  <g>
+    <line class='solid' x1='180' x2='212' y1='16' y2='16'/>
+    <line class='solid' x1='168' x2='180' y1='24' y2='24'/>
+    <line class='solid' x1='180' x2='180' y1='16' y2='32'/>
+    <line class='solid' x1='180' x2='212' y1='32' y2='32'/>
+    <line class='solid' x1='212' x2='212' y1='16' y2='32'/>
+  </g>
+  <g>
+    <line class='solid' x1='164' x2='164' y1='28' y2='84'/>
+    <path class='nofill' d='M 164,84 A 4,4 0,0,0 168,88'/>
+    <line class='solid' x1='168' x2='184' y1='88' y2='88'/>
+    <path class='nofill' d='M 184,88 A 4,4 0,0,1 188,92'/>
+    <line class='solid' x1='188' x2='188' y1='92' y2='120'/>
+    <line class='solid' x1='228' x2='228' y1='28' y2='120'/>
+    <line class='solid' x1='252' x2='252' y1='28' y2='56'/>
+    <path class='nofill' d='M 248,56 A 4,4 0,0,0 244,60'/>
+    <line class='solid' x1='244' x2='244' y1='60' y2='84'/>
+    <line class='solid' x1='248' x2='256' y1='56' y2='56'/>
+    <path class='nofill' d='M 256,56 A 4,4 0,0,1 260,60'/>
+    <line class='solid' x1='260' x2='260' y1='60' y2='84'/>
+    <path class='nofill' d='M 244,84 A 4,4 0,0,0 248,88'/>
+    <line class='solid' x1='248' x2='256' y1='88' y2='88'/>
+    <line class='solid' x1='252' x2='252' y1='88' y2='120'/>
+    <path class='nofill' d='M 260,84 A 4,4 0,0,1 256,88'/>
+    <path class='nofill' d='M 176,120 A 4,4 0,0,0 172,124'/>
+    <line class='solid' x1='172' x2='172' y1='124' y2='372'/>
+    <line class='solid' x1='176' x2='272' y1='120' y2='120'/>
+    <path class='nofill' d='M 272,120 A 4,4 0,0,1 276,124'/>
+    <line class='solid' x1='276' x2='276' y1='124' y2='372'/>
+    <line class='solid' x1='276' x2='340' y1='360' y2='360'/>
+    <line class='solid' x1='340' x2='340' y1='352' y2='368'/>
+    <path class='nofill' d='M 172,372 A 4,4 0,0,0 176,376'/>
+    <line class='solid' x1='176' x2='272' y1='376' y2='376'/>
+    <line class='solid' x1='220' x2='220' y1='376' y2='436'/>
+    <line class='solid' x1='260' x2='260' y1='376' y2='404'/>
+    <path class='nofill' d='M 276,372 A 4,4 0,0,1 272,376'/>
+    <path class='nofill' d='M 260,404 A 4,4 0,0,0 264,408'/>
+    <path class='nofill' d='M 220,436 A 4,4 0,0,0 224,440'/>
+    <line class='solid' x1='224' x2='276' y1='440' y2='440'/>
+    <line class='solid' x1='280' x2='272' y1='432' y2='448'/>
+    <line class='solid' x1='280' x2='288' y1='432' y2='448'/>
+    <line class='solid' x1='296' x2='288' y1='432' y2='448'/>
+    <line class='solid' x1='296' x2='304' y1='432' y2='448'/>
+    <line class='solid' x1='312' x2='304' y1='432' y2='448'/>
+  </g>
+  <g>
+    <line class='solid' x1='332' x2='332' y1='28' y2='88'/>
+    <path class='nofill' d='M 328,88 A 4,4 0,0,0 324,92'/>
+    <line class='solid' x1='324' x2='324' y1='92' y2='132'/>
+    <line class='solid' x1='328' x2='336' y1='88' y2='88'/>
+    <path class='nofill' d='M 336,88 A 4,4 0,0,1 340,92'/>
+    <line class='solid' x1='340' x2='340' y1='92' y2='132'/>
+    <path class='nofill' d='M 324,132 A 4,4 0,0,0 328,136'/>
+    <line class='solid' x1='328' x2='336' y1='136' y2='136'/>
+    <line class='solid' x1='332' x2='332' y1='136' y2='164'/>
+    <path class='nofill' d='M 340,132 A 4,4 0,0,1 336,136'/>
+  </g>
+  <g>
+    <line class='solid' x1='372' x2='372' y1='28' y2='136'/>
+    <line class='solid' x1='372' x2='356' y1='136' y2='168'/>
+    <line class='solid' x1='356' x2='356' y1='144' y2='192'/>
+    <line class='solid' x1='336' x2='356' y1='168' y2='168'/>
+  </g>
+  <g>
+    <line class='solid' x1='376' x2='432' y1='24' y2='24'/>
+    <path class='nofill' d='M 432,24 A 4,4 0,0,1 436,28'/>
+    <line class='solid' x1='436' x2='436' y1='28' y2='72'/>
+    <path class='nofill' d='M 432,72 A 4,4 0,0,0 428,76'/>
+    <line class='solid' x1='428' x2='428' y1='76' y2='84'/>
+    <line class='solid' x1='432' x2='440' y1='72' y2='72'/>
+    <path class='nofill' d='M 440,72 A 4,4 0,0,1 444,76'/>
+    <line class='solid' x1='444' x2='444' y1='76' y2='84'/>
+    <path class='nofill' d='M 428,84 A 4,4 0,0,0 432,88'/>
+    <line class='solid' x1='432' x2='440' y1='88' y2='88'/>
+    <path class='nofill' d='M 444,84 A 4,4 0,0,1 440,88'/>
+  </g>
+  <g>
+    <line class='solid' x1='436' x2='436' y1='96' y2='216'/>
+    <line class='solid' x1='420' x2='420' y1='208' y2='256'/>
+    <line class='solid' x1='420' x2='436' y1='216' y2='216'/>
+    <line class='solid' x1='420' x2='432' y1='232' y2='232'/>
+    <line class='solid' x1='420' x2='436' y1='248' y2='248'/>
+  </g>
+  <g>
+    <line class='solid' x1='332' x2='332' y1='172' y2='200'/>
+    <path class='nofill' d='M 328,200 A 4,4 0,0,0 324,204'/>
+    <line class='solid' x1='324' x2='324' y1='204' y2='244'/>
+    <line class='solid' x1='328' x2='336' y1='200' y2='200'/>
+    <path class='nofill' d='M 336,200 A 4,4 0,0,1 340,204'/>
+    <line class='solid' x1='340' x2='340' y1='204' y2='244'/>
+    <path class='nofill' d='M 324,244 A 4,4 0,0,0 328,248'/>
+    <line class='solid' x1='328' x2='336' y1='248' y2='248'/>
+    <line class='solid' x1='332' x2='332' y1='248' y2='276'/>
+    <path class='nofill' d='M 340,244 A 4,4 0,0,1 336,248'/>
+    <path class='nofill' d='M 332,276 A 4,4 0,0,0 336,280'/>
+    <line class='solid' x1='336' x2='368' y1='280' y2='280'/>
+    <line class='solid' x1='372' x2='372' y1='220' y2='276'/>
+    <path class='nofill' d='M 372,276 A 4,4 0,0,1 368,280'/>
+  </g>
+  <g>
+    <line class='solid' x1='376' x2='412' y1='216' y2='216'/>
+    <line class='solid' x1='412' x2='412' y1='208' y2='256'/>
+  </g>
+  <g>
+    <line class='solid' x1='440' x2='460' y1='280' y2='280'/>
+    <line class='solid' x1='460' x2='460' y1='272' y2='288'/>
+  </g>
+  <g>
+    <line class='solid' x1='348' x2='348' y1='352' y2='368'/>
+    <line class='solid' x1='348' x2='368' y1='360' y2='360'/>
+    <path class='nofill' d='M 368,360 A 4,4 0,0,1 372,364'/>
+    <line class='solid' x1='372' x2='372' y1='364' y2='404'/>
+  </g>
+  <g>
+    <line class='solid' x1='484' x2='484' y1='412' y2='436'/>
+    <line class='solid' x1='436' x2='468' y1='432' y2='432'/>
+    <line class='solid' x1='416' x2='436' y1='440' y2='440'/>
+    <line class='solid' x1='436' x2='436' y1='432' y2='448'/>
+    <line class='solid' x1='436' x2='468' y1='448' y2='448'/>
+    <line class='solid' x1='468' x2='468' y1='432' y2='448'/>
+    <line class='solid' x1='468' x2='480' y1='440' y2='440'/>
+    <path class='nofill' d='M 484,436 A 4,4 0,0,1 480,440'/>
+  </g>
+  <g>
+    <line class='solid' x1='412' x2='412' y1='444' y2='472'/>
+    <path class='nofill' d='M 408,472 A 4,4 0,0,0 404,476'/>
+    <line class='solid' x1='404' x2='404' y1='476' y2='516'/>
+    <line class='solid' x1='408' x2='416' y1='472' y2='472'/>
+    <path class='nofill' d='M 416,472 A 4,4 0,0,1 420,476'/>
+    <line class='solid' x1='420' x2='420' y1='476' y2='516'/>
+    <path class='nofill' d='M 404,516 A 4,4 0,0,0 408,520'/>
+    <line class='solid' x1='408' x2='416' y1='520' y2='520'/>
+    <line class='solid' x1='412' x2='412' y1='520' y2='544'/>
+    <path class='nofill' d='M 420,516 A 4,4 0,0,1 416,520'/>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/presentations/training/demo/images/svgbob-mindmap-test.svg 
b/presentations/training/demo/images/svgbob-mindmap-test.svg
new file mode 100644
index 0000000..64499d5
--- /dev/null
+++ b/presentations/training/demo/images/svgbob-mindmap-test.svg
@@ -0,0 +1,252 @@
+<svg class='svgbob' height='464' preserveAspectRatio='xMidYMid meet' 
viewBox='0 0 544 464' width='544' xmlns='http://www.w3.org/2000/svg'>
+  <style>.svgbob line, .svgbob path, .svgbob circle, .svgbob rect, .svgbob 
polygon {
+  stroke: black;
+  stroke-width: 2;
+  stroke-opacity: 1;
+  fill-opacity: 1;
+  stroke-linecap: round;
+  stroke-linejoin: miter;
+}
+
+.svgbob text {
+  white-space: pre;
+  fill: black;
+  font-family: Iosevka Fixed, monospace;
+  font-size: 14px;
+}
+
+.svgbob rect.backdrop {
+  stroke: none;
+  fill: white;
+}
+
+.svgbob .broken {
+  stroke-dasharray: 8;
+}
+
+.svgbob .filled {
+  fill: black;
+}
+
+.svgbob .bg_filled {
+  fill: white;
+  stroke-width: 1;
+}
+
+.svgbob .nofill {
+  fill: white;
+}
+
+.svgbob .end_marked_arrow {
+  marker-end: url(#arrow);
+}
+
+.svgbob .start_marked_arrow {
+  marker-start: url(#arrow);
+}
+
+.svgbob .end_marked_diamond {
+  marker-end: url(#diamond);
+}
+
+.svgbob .start_marked_diamond {
+  marker-start: url(#diamond);
+}
+
+.svgbob .end_marked_circle {
+  marker-end: url(#circle);
+}
+
+.svgbob .start_marked_circle {
+  marker-start: url(#circle);
+}
+
+.svgbob .end_marked_open_circle {
+  marker-end: url(#open_circle);
+}
+
+.svgbob .start_marked_open_circle {
+  marker-start: url(#open_circle);
+}
+
+.svgbob .end_marked_big_open_circle {
+  marker-end: url(#big_open_circle);
+}
+
+.svgbob .start_marked_big_open_circle {
+  marker-start: url(#big_open_circle);
+}
+
+</style>
+  <defs>
+    <marker id='arrow' markerHeight='7' markerWidth='7' 
orient='auto-start-reverse' refX='4' refY='2' viewBox='-2 -2 8 8'>
+      <polygon points='0,0 0,4 4,2 0,0'/>
+    </marker>
+    <marker id='diamond' markerHeight='7' markerWidth='7' 
orient='auto-start-reverse' refX='4' refY='2' viewBox='-2 -2 8 8'>
+      <polygon points='0,2 2,0 4,2 2,4 0,2'/>
+    </marker>
+    <marker id='circle' markerHeight='7' markerWidth='7' 
orient='auto-start-reverse' refX='4' refY='4' viewBox='0 0 8 8'>
+      <circle class='filled' cx='4' cy='4' r='2'/>
+    </marker>
+    <marker id='open_circle' markerHeight='7' markerWidth='7' 
orient='auto-start-reverse' refX='4' refY='4' viewBox='0 0 8 8'>
+      <circle class='bg_filled' cx='4' cy='4' r='2'/>
+    </marker>
+    <marker id='big_open_circle' markerHeight='7' markerWidth='7' 
orient='auto-start-reverse' refX='4' refY='4' viewBox='0 0 8 8'>
+      <circle class='bg_filled' cx='4' cy='4' r='3'/>
+    </marker>
+  </defs>
+  <rect class='backdrop' height='464' width='544' x='0' y='0'/>
+  <line class='solid end_marked_open_circle' x1='354' x2='284' y1='12' 
y2='152'/>
+  <polygon class='filled' points='376,4 384,8 376,12'/>
+  <polygon class='filled' points='376,36 384,40 376,44'/>
+  <line class='solid end_marked_circle' x1='156' x2='156' y1='56' y2='56'/>
+  <line class='solid end_marked_open_circle' x1='222' x2='268' y1='60' 
y2='152'/>
+  <polygon class='filled' points='376,116 384,120 376,124'/>
+  <line class='solid end_marked_open_circle' x1='312' x2='300' y1='168' 
y2='168'/>
+  <line class='solid end_marked_circle' x1='360' x2='396' y1='184' y2='184'/>
+  <line class='solid' x1='392' x2='424' y1='184' y2='184'/>
+  <polygon class='filled' points='424,180 432,184 424,188'/>
+  <line class='solid end_marked_open_circle' x1='302' x2='300' y1='204' 
y2='200'/>
+  <line class='solid end_marked_open_circle' x1='250' x2='252' y1='220' 
y2='216'/>
+  <line class='solid end_marked_open_circle' x1='278' x2='276' y1='220' 
y2='216'/>
+  <line class='solid end_marked_open_circle' x1='294' x2='292' y1='220' 
y2='216'/>
+  <polygon class='filled' points='384,260 392,264 384,268'/>
+  <polygon class='filled' points='424,292 432,296 424,300'/>
+  <polygon class='filled' points='177,324 170,332 170,321'/>
+  <polygon class='filled' points='392,324 400,328 392,332'/>
+  <polygon class='filled' points='177,356 170,364 170,353'/>
+  <text x='106' y='380'>Worklaod</text>
+  <polygon class='filled' points='376,372 384,376 376,380'/>
+  <polygon class='filled' points='384,372 392,376 384,380'/>
+  <polygon class='filled' points='177,388 170,396 170,385'/>
+  <polygon class='filled' points='177,420 170,428 170,417'/>
+  <text x='402' y='12'>Alpha</text>
+  <text x='402' y='44'>Initial</text>
+  <polygon class='filled' points='448,68 456,72 448,76'/>
+  <polygon class='filled' points='456,100 464,104 456,108'/>
+  <text x='466' y='44'>Release</text>
+  <text x='82' y='60'>Planning</text>
+  <text x='466' y='76'>Patch</text>
+  <text x='514' y='76'>1</text>
+  <text x='50' y='92'>Initial</text>
+  <text x='114' y='92'>research</text>
+  <line class='solid end_marked_circle' x1='134' x2='132' y1='108' y2='104'/>
+  <polygon class='filled' points='224,180 232,184 224,188'/>
+  <text x='482' y='108'>Patch</text>
+  <text x='530' y='108'>2</text>
+  <text x='394' y='124'>Beta</text>
+  <text x='450' y='188'>.</text>
+  <text x='466' y='188'>Release</text>
+  <text x='530' y='188'>.</text>
+  <text x='410' y='268'>Push</text>
+  <text x='450' y='268'>backs</text>
+  <text x='442' y='300'>Setbacks</text>
+  <text x='410' y='332'>Reception</text>
+  <text x='130' y='348'>Team</text>
+  <text x='402' y='380'>Career</text>
+  <text x='458' y='380'>change</text>
+  <text x='138' y='412'>PTO</text>
+  <text x='138' y='444'>Bug</text>
+  <g>
+    <path class='nofill' d='M 360,8 A 8,8 0,0,0 354,12'/>
+    <line class='solid' x1='360' x2='376' y1='8' y2='8'/>
+  </g>
+  <g>
+    <path class='nofill' d='M 344,40 A 8,8 0,0,0 338,44'/>
+    <line class='solid' x1='344' x2='376' y1='40' y2='40'/>
+  </g>
+  <g>
+    <line class='solid' x1='160' x2='216' y1='56' y2='56'/>
+    <path class='nofill' d='M 216,56 A 8,8 0,0,1 222,60'/>
+  </g>
+  <g>
+    <path class='nofill' d='M 304,120 A 8,8 0,0,0 298,124'/>
+    <line class='solid' x1='304' x2='376' y1='120' y2='120'/>
+  </g>
+  <g>
+    <path class='nofill' d='M 256,168 A 8,8 0,0,0 250,172'/>
+    <line class='solid' x1='250' x2='248' y1='172' y2='176'/>
+    <line class='solid' x1='256' x2='280' y1='168' y2='168'/>
+    <path class='nofill' d='M 280,168 A 8,8 0,0,1 286,172'/>
+    <line class='solid' x1='286' x2='288' y1='172' y2='176'/>
+    <path class='nofill' d='M 248,176 A 16,16 0,0,0 248,192'/>
+    <path class='nofill' d='M 288,176 A 16,16 0,0,1 288,192'/>
+    <line class='solid' x1='248' x2='250' y1='192' y2='196'/>
+    <path class='nofill' d='M 250,196 A 8,8 0,0,0 256,200'/>
+    <line class='solid' x1='256' x2='280' y1='200' y2='200'/>
+    <line class='solid' x1='288' x2='286' y1='192' y2='196'/>
+    <path class='nofill' d='M 286,196 A 8,8 0,0,1 280,200'/>
+  </g>
+  <g>
+    <line class='solid' x1='312' x2='320' y1='168' y2='168'/>
+    <line class='solid' x1='320' x2='328' y1='168' y2='176'/>
+    <line class='solid' x1='328' x2='352' y1='176' y2='176'/>
+    <line class='solid' x1='352' x2='360' y1='176' y2='184'/>
+  </g>
+  <g>
+    <line class='solid' x1='304' x2='330' y1='208' y2='260'/>
+    <path class='nofill' d='M 330,260 A 8,8 0,0,0 336,264'/>
+    <line class='solid' x1='336' x2='384' y1='264' y2='264'/>
+    <line class='solid' x1='372' x2='386' y1='264' y2='292'/>
+    <path class='nofill' d='M 386,292 A 8,8 0,0,0 392,296'/>
+    <line class='solid' x1='392' x2='424' y1='296' y2='296'/>
+  </g>
+  <g>
+    <line class='solid' x1='248' x2='238' y1='224' y2='244'/>
+    <path class='nofill' d='M 216,248 A 8,8 0,0,0 210,252'/>
+    <line class='solid' x1='210' x2='174' y1='252' y2='324'/>
+    <line class='solid' x1='216' x2='232' y1='248' y2='248'/>
+    <path class='nofill' d='M 238,244 A 8,8 0,0,1 232,248'/>
+  </g>
+  <g>
+    <line class='solid' x1='280' x2='344' y1='224' y2='352'/>
+    <line class='solid' x1='344' x2='354' y1='352' y2='372'/>
+    <path class='nofill' d='M 354,372 A 8,8 0,0,0 360,376'/>
+    <line class='solid' x1='360' x2='376' y1='376' y2='376'/>
+  </g>
+  <g>
+    <line class='solid' x1='296' x2='346' y1='224' y2='324'/>
+    <path class='nofill' d='M 346,324 A 8,8 0,0,0 352,328'/>
+    <line class='solid' x1='352' x2='392' y1='328' y2='328'/>
+  </g>
+  <g>
+    <line class='solid' x1='196' x2='196' y1='284' y2='308'/>
+    <path class='nofill' d='M 196,308 A 16,16 0,0,1 194,316'/>
+    <line class='solid' x1='194' x2='174' y1='316' y2='356'/>
+  </g>
+  <g>
+    <line class='solid' x1='196' x2='196' y1='316' y2='340'/>
+    <path class='nofill' d='M 196,340 A 16,16 0,0,1 194,348'/>
+    <line class='solid' x1='194' x2='174' y1='348' y2='388'/>
+  </g>
+  <g>
+    <line class='solid' x1='196' x2='196' y1='348' y2='372'/>
+    <path class='nofill' d='M 196,372 A 16,16 0,0,1 194,380'/>
+    <line class='solid' x1='194' x2='174' y1='380' y2='420'/>
+  </g>
+  <g>
+    <line class='solid' x1='408' x2='418' y1='48' y2='68'/>
+    <path class='nofill' d='M 418,68 A 8,8 0,0,0 424,72'/>
+    <line class='solid' x1='424' x2='448' y1='72' y2='72'/>
+  </g>
+  <g>
+    <line class='solid' x1='424' x2='434' y1='80' y2='100'/>
+    <path class='nofill' d='M 434,100 A 8,8 0,0,0 440,104'/>
+    <line class='solid' x1='440' x2='456' y1='104' y2='104'/>
+  </g>
+  <g>
+    <line class='solid' x1='136' x2='170' y1='112' y2='180'/>
+    <path class='nofill' d='M 170,180 A 8,8 0,0,0 176,184'/>
+    <line class='solid' x1='176' x2='224' y1='184' y2='184'/>
+  </g>
+  <g>
+    <line class='solid' x1='464' x2='520' y1='160' y2='160'/>
+    <line class='solid' x1='464' x2='456' y1='160' y2='176'/>
+    <line class='solid' x1='520' x2='528' y1='160' y2='176'/>
+  </g>
+  <g>
+    <line class='solid' x1='456' x2='464' y1='192' y2='208'/>
+    <line class='solid' x1='464' x2='520' y1='208' y2='208'/>
+    <line class='solid' x1='528' x2='520' y1='192' y2='208'/>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/presentations/training/demo/images/syntrax-test.svg 
b/presentations/training/demo/images/syntrax-test.svg
new file mode 100644
index 0000000..9aca2f0
--- /dev/null
+++ b/presentations/training/demo/images/syntrax-test.svg
@@ -0,0 +1,168 @@
+<?xml version='1.0' encoding='UTF-8' standalone='no'?>
+
+<svg height='231' preserveAspectRatio='xMidYMid meet' xml:space='preserve' 
version='1.1' viewBox='0 0 628 231' width='628' 
xmlns:xlink='http://www.w3.org/1999/xlink' xmlns='http://www.w3.org/2000/svg'>
+<style type='text/css'>
+<![CDATA[
+.title_font {fill:#000000; text-anchor:middle;
+    font-family:Sans; font-size:22pt; font-weight:bold; font-style:normal;}
+.bubble_font {fill:#000000; text-anchor:middle;
+    font-family:Sans; font-size:14pt; font-weight:bold; font-style:normal;}
+.box_font {fill:#000000; text-anchor:middle;
+    font-family:Times; font-size:14pt; font-weight:normal; font-style:italic;}
+.token_font {fill:#000000; text-anchor:middle;
+    font-family:Sans; font-size:16pt; font-weight:bold; font-style:normal;}
+.label {fill:#000;
+  text-anchor:middle;
+  font-size:16pt; font-weight:bold; font-family:Sans;}
+.link {fill: #0D47A1;}
+.link:hover {fill: #0D47A1; text-decoration:underline;}
+.link:visited {fill: #4A148C;}
+]]>
+</style>
+<defs>
+  <marker id='arrow' markerHeight='4' markerUnits='strokeWidth' 
markerWidth='5' orient='auto' refX='2.5' refY='2'>
+    <path d='M0,0 L0.5,2 L0,4 L4.5,2 z' fill='#000000'/>
+  </marker>
+</defs>
+<rect fill='white' height='100%' width='100%'/><circle cx='76.5' cy='43.5' 
fill='#000000' fill-opacity='0.4980392156862745' r='15.0' stroke='none'/>
+<path d='M181.0,37.0 A14.0,14.0 0 0,1 181.0,9.0 H186.0 A14.0,14.0 0 0,1 
186.0,37.0 z' fill='#000000' fill-opacity='0.4980392156862745' stroke='none'/>
+<path d='M181.0,71.5 A14.0,14.0 0 0,1 181.0,43.5 H207.0 A14.0,14.0 0 0,1 
207.0,71.5 z' fill='#000000' fill-opacity='0.4980392156862745' stroke='none'/>
+<path d='M271.0,95.5 A14.0,14.0 0 0,1 271.0,67.5 H297.0 A14.0,14.0 0 0,1 
297.0,95.5 z' fill='#000000' fill-opacity='0.4980392156862745' stroke='none'/>
+<circle cx='414.0' cy='43.5' fill='#000000' fill-opacity='0.4980392156862745' 
r='15.0' stroke='none'/>
+<path d='M479.0,57.5 A14.0,14.0 0 0,1 479.0,29.5 H505.0 A14.0,14.0 0 0,1 
505.0,57.5 z' fill='#000000' fill-opacity='0.4980392156862745' stroke='none'/>
+<path d='M309.0,170.0 A14.0,14.0 0 0,1 309.0,142.0 H314.0 A14.0,14.0 0 0,1 
314.0,170.0 z' fill='#000000' fill-opacity='0.4980392156862745' stroke='none'/>
+<path d='M309.0,204.5 A14.0,14.0 0 0,1 309.0,176.5 H314.0 A14.0,14.0 0 0,1 
314.0,204.5 z' fill='#000000' fill-opacity='0.4980392156862745' stroke='none'/>
+<path d='M418.0,191.5 A15.0,15.0 0 0,1 418.0,161.5 H428.0 A15.0,15.0 0 0,1 
428.0,191.5 z' fill='#000000' fill-opacity='0.4980392156862745' stroke='none'/>
+<circle cx='418.5' cy='213.0' fill='#000000' fill-opacity='0.4980392156862745' 
r='15.0' stroke='none'/>
+<path d='M521.0,170.0 A14.0,14.0 0 0,1 521.0,142.0 H547.0 A14.0,14.0 0 0,1 
547.0,170.0 z' fill='#000000' fill-opacity='0.4980392156862745' stroke='none'/>
+<circle cx='9.0' cy='19.0' fill='#FFFFFF' r='3.0' stroke='#000000' 
stroke-width='2'/>
+<line stroke='#000000' stroke-width='2' x1='72.0' x2='73.0' y1='19.0' 
y2='19.0'/>
+<circle cx='73.5' cy='40.5' fill='#B3E5FC' r='15.0' stroke='#000000' 
stroke-width='2'/>
+<text class='token_font' x='73.5' y='47.5'>-</text>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='29.0' 
x2='68.0' y1='19.0' y2='19.0'/>
+<line stroke='#000000' stroke-width='2' x1='73.0' x2='119.0' y1='19.0' 
y2='19.0'/>
+<path d='M38.0,28.0 A9.0,9.0 0 0,0 29.0,19.0' fill='none' stroke='#000000' 
stroke-width='2'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='47.0' 
x2='53.0' y1='39.5' y2='39.5'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='90.0' 
x2='96.0' y1='39.5' y2='39.5'/>
+<path d='M38.0,30.5 A9.0,9.0 0 0,0 47.0,39.5' fill='none' stroke='#000000' 
stroke-width='2'/>
+<path d='M100.0,39.5 A9.0,9.0 0 0,0 109.0,30.5' fill='none' stroke='#000000' 
stroke-width='2'/>
+<path d='M118.0,19.0 A9.0,9.0 0 0,0 109.0,28.0' fill='none' stroke='#000000' 
stroke-width='2'/>
+<line stroke='#000000' stroke-width='2' x1='38.0' x2='38.0' y1='30.5' 
y2='28.0'/>
+<line stroke='#000000' stroke-width='2' x1='109.0' x2='109.0' y1='30.5' 
y2='28.0'/>
+<path d='M178.0,34.0 A14.0,14.0 0 0,1 178.0,6.0 H183.0 A14.0,14.0 0 0,1 
183.0,34.0 z' fill='#B3E5FC' stroke='#000000' stroke-width='2'/>
+<text class='bubble_font' x='180.5' y='26.0'>0</text>
+<path d='M178.0,68.5 A14.0,14.0 0 0,1 178.0,40.5 H204.0 A14.0,14.0 0 0,1 
204.0,68.5 z' fill='#B3E5FC' stroke='#000000' stroke-width='2'/>
+<text class='bubble_font' x='191.0' y='60.5'>1-9</text>
+<line stroke='#000000' stroke-width='2' x1='279.5' x2='280.5' y1='53.5' 
y2='53.5'/>
+<path d='M268.0,92.5 A14.0,14.0 0 0,1 268.0,64.5 H294.0 A14.0,14.0 0 0,1 
294.0,92.5 z' fill='#B3E5FC' stroke='#000000' stroke-width='2'/>
+<text class='bubble_font' x='281.0' y='84.5'>0-9</text>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='253.0' 
x2='275.5' y1='53.5' y2='53.5'/>
+<line stroke='#000000' stroke-width='2' x1='280.5' x2='309.0' y1='53.5' 
y2='53.5'/>
+<line stroke='#000000' stroke-width='2' x1='236.0' x2='253.0' y1='53.5' 
y2='53.5'/>
+<path d='M253.0,53.5 A12.0,12.0 0 0,0 253.0,77.5' fill='none' stroke='#000000' 
stroke-width='2'/>
+<path d='M309.0,77.5 A12.0,12.0 0 0,0 309.0,53.5' fill='none' stroke='#000000' 
stroke-width='2'/>
+<line stroke='#000000' stroke-width='2' x1='309.0' x2='318.0' y1='53.5' 
y2='53.5'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='218.0' 
x2='232.0' y1='53.5' y2='53.5'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='135.0' 
x2='159.0' y1='19.0' y2='19.0'/>
+<line stroke='#000000' stroke-width='2' x1='198.0' x2='351.0' y1='19.0' 
y2='19.0'/>
+<path d='M144.0,28.0 A9.0,9.0 0 0,0 135.0,19.0' fill='none' stroke='#000000' 
stroke-width='2'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='153.0' 
x2='159.0' y1='53.5' y2='53.5'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='318.0' 
x2='328.0' y1='53.5' y2='53.5'/>
+<path d='M144.0,44.5 A9.0,9.0 0 0,0 153.0,53.5' fill='none' stroke='#000000' 
stroke-width='2'/>
+<path d='M332.0,53.5 A9.0,9.0 0 0,0 341.0,44.5' fill='none' stroke='#000000' 
stroke-width='2'/>
+<path d='M350.0,19.0 A9.0,9.0 0 0,0 341.0,28.0' fill='none' stroke='#000000' 
stroke-width='2'/>
+<line stroke='#000000' stroke-width='2' x1='144.0' x2='144.0' y1='44.5' 
y2='28.0'/>
+<line stroke='#000000' stroke-width='2' x1='341.0' x2='341.0' y1='44.5' 
y2='28.0'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='117.0' 
x2='131.0' y1='19.0' y2='19.0'/>
+<line stroke='#000000' stroke-width='2' x1='460.375' x2='461.375' y1='19.0' 
y2='19.0'/>
+<circle cx='411.0' cy='40.5' fill='#B3E5FC' r='15.0' stroke='#000000' 
stroke-width='2'/>
+<text class='token_font' x='411.0' y='47.5'>.</text>
+<path d='M476.0,54.5 A14.0,14.0 0 0,1 476.0,26.5 H502.0 A14.0,14.0 0 0,1 
502.0,54.5 z' fill='#B3E5FC' stroke='#000000' stroke-width='2'/>
+<text class='bubble_font' x='489.0' y='46.5'>0-9</text>
+<line stroke='#000000' stroke-width='2' x1='487.5' x2='488.5' y1='61.0' 
y2='61.0'/>
+<line stroke='#000000' stroke-width='2' x1='461.0' x2='487.5' y1='61.0' 
y2='61.0'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='517.0' 
x2='492.5' y1='61.0' y2='61.0'/>
+<line stroke='#000000' stroke-width='2' x1='444.0' x2='461.0' y1='39.5' 
y2='39.5'/>
+<path d='M461.0,39.5 A10.75,10.75 0 0,0 461.0,61.0' fill='none' 
stroke='#000000' stroke-width='2'/>
+<path d='M517.0,61.0 A10.75,10.75 0 0,0 517.0,39.5' fill='none' 
stroke='#000000' stroke-width='2'/>
+<line stroke='#000000' stroke-width='2' x1='517.0' x2='526.0' y1='39.5' 
y2='39.5'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='426.0' 
x2='440.0' y1='39.5' y2='39.5'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='367.0' 
x2='456.375' y1='19.0' y2='19.0'/>
+<line stroke='#000000' stroke-width='2' x1='461.375' x2='557.75' y1='19.0' 
y2='19.0'/>
+<path d='M376.0,28.0 A9.0,9.0 0 0,0 367.0,19.0' fill='none' stroke='#000000' 
stroke-width='2'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='385.0' 
x2='391.0' y1='39.5' y2='39.5'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='526.0' 
x2='534.75' y1='39.5' y2='39.5'/>
+<path d='M376.0,30.5 A9.0,9.0 0 0,0 385.0,39.5' fill='none' stroke='#000000' 
stroke-width='2'/>
+<path d='M538.75,39.5 A9.0,9.0 0 0,0 547.75,30.5' fill='none' stroke='#000000' 
stroke-width='2'/>
+<path d='M556.75,19.0 A9.0,9.0 0 0,0 547.75,28.0' fill='none' stroke='#000000' 
stroke-width='2'/>
+<line stroke='#000000' stroke-width='2' x1='376.0' x2='376.0' y1='30.5' 
y2='28.0'/>
+<line stroke='#000000' stroke-width='2' x1='547.75' x2='547.75' y1='30.5' 
y2='28.0'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='349.0' 
x2='363.0' y1='19.0' y2='19.0'/>
+<line stroke='#000000' stroke-width='2' x1='415.875' x2='416.875' y1='132.5' 
y2='132.5'/>
+<path d='M306.0,167.0 A14.0,14.0 0 0,1 306.0,139.0 H311.0 A14.0,14.0 0 0,1 
311.0,167.0 z' fill='#B3E5FC' stroke='#000000' stroke-width='2'/>
+<text class='bubble_font' x='308.5' y='159.0'>e</text>
+<path d='M306.0,201.5 A14.0,14.0 0 0,1 306.0,173.5 H311.0 A14.0,14.0 0 0,1 
311.0,201.5 z' fill='#B3E5FC' stroke='#000000' stroke-width='2'/>
+<text class='bubble_font' x='308.5' y='193.5'>E</text>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='263.0' 
x2='287.0' y1='152.0' y2='152.0'/>
+<line stroke='#000000' stroke-width='2' x1='326.0' x2='355.0' y1='152.0' 
y2='152.0'/>
+<path d='M272.0,161.0 A9.0,9.0 0 0,0 263.0,152.0' fill='none' stroke='#000000' 
stroke-width='2'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='281.0' 
x2='287.0' y1='186.5' y2='186.5'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='326.0' 
x2='332.0' y1='186.5' y2='186.5'/>
+<path d='M272.0,177.5 A9.0,9.0 0 0,0 281.0,186.5' fill='none' stroke='#000000' 
stroke-width='2'/>
+<path d='M336.0,186.5 A9.0,9.0 0 0,0 345.0,177.5' fill='none' stroke='#000000' 
stroke-width='2'/>
+<path d='M354.0,152.0 A9.0,9.0 0 0,0 345.0,161.0' fill='none' stroke='#000000' 
stroke-width='2'/>
+<line stroke='#000000' stroke-width='2' x1='272.0' x2='272.0' y1='177.5' 
y2='161.0'/>
+<line stroke='#000000' stroke-width='2' x1='345.0' x2='345.0' y1='177.5' 
y2='161.0'/>
+<line stroke='#000000' stroke-width='2' x1='418.5' x2='419.5' y1='152.0' 
y2='152.0'/>
+<path d='M415.0,188.5 A15.0,15.0 0 0,1 415.0,158.5 H425.0 A15.0,15.0 0 0,1 
425.0,188.5 z' fill='#B3E5FC' stroke='#000000' stroke-width='2'/>
+<text class='token_font' x='420.0' y='180.5'>+</text>
+<circle cx='415.5' cy='210.0' fill='#B3E5FC' r='15.0' stroke='#000000' 
stroke-width='2'/>
+<text class='token_font' x='415.5' y='217.0'>-</text>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='371.0' 
x2='414.5' y1='152.0' y2='152.0'/>
+<line stroke='#000000' stroke-width='2' x1='419.5' x2='470.0' y1='152.0' 
y2='152.0'/>
+<path d='M380.0,161.0 A9.0,9.0 0 0,0 371.0,152.0' fill='none' stroke='#000000' 
stroke-width='2'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='389.0' 
x2='395.0' y1='172.5' y2='172.5'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='441.0' 
x2='447.0' y1='172.5' y2='172.5'/>
+<path d='M380.0,163.5 A9.0,9.0 0 0,0 389.0,172.5' fill='none' stroke='#000000' 
stroke-width='2'/>
+<path d='M451.0,172.5 A9.0,9.0 0 0,0 460.0,163.5' fill='none' stroke='#000000' 
stroke-width='2'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='389.0' 
x2='395.0' y1='209.0' y2='209.0'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='432.0' 
x2='447.0' y1='209.0' y2='209.0'/>
+<path d='M380.0,200.0 A9.0,9.0 0 0,0 389.0,209.0' fill='none' stroke='#000000' 
stroke-width='2'/>
+<path d='M451.0,209.0 A9.0,9.0 0 0,0 460.0,200.0' fill='none' stroke='#000000' 
stroke-width='2'/>
+<path d='M469.0,152.0 A9.0,9.0 0 0,0 460.0,161.0' fill='none' stroke='#000000' 
stroke-width='2'/>
+<line stroke='#000000' stroke-width='2' x1='380.0' x2='380.0' y1='200.0' 
y2='161.0'/>
+<line stroke='#000000' stroke-width='2' x1='460.0' x2='460.0' y1='200.0' 
y2='161.0'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='353.0' 
x2='367.0' y1='152.0' y2='152.0'/>
+<path d='M518.0,167.0 A14.0,14.0 0 0,1 518.0,139.0 H544.0 A14.0,14.0 0 0,1 
544.0,167.0 z' fill='#B3E5FC' stroke='#000000' stroke-width='2'/>
+<text class='bubble_font' x='531.0' y='159.0'>0-9</text>
+<line stroke='#000000' stroke-width='2' x1='529.5' x2='530.5' y1='173.5' 
y2='173.5'/>
+<line stroke='#000000' stroke-width='2' x1='503.0' x2='529.5' y1='173.5' 
y2='173.5'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='559.0' 
x2='534.5' y1='173.5' y2='173.5'/>
+<line stroke='#000000' stroke-width='2' x1='486.0' x2='503.0' y1='152.0' 
y2='152.0'/>
+<path d='M503.0,152.0 A10.75,10.75 0 0,0 503.0,173.5' fill='none' 
stroke='#000000' stroke-width='2'/>
+<path d='M559.0,173.5 A10.75,10.75 0 0,0 559.0,152.0' fill='none' 
stroke='#000000' stroke-width='2'/>
+<line stroke='#000000' stroke-width='2' x1='559.0' x2='568.0' y1='152.0' 
y2='152.0'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='468.0' 
x2='482.0' y1='152.0' y2='152.0'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='235.0' 
x2='411.875' y1='132.5' y2='132.5'/>
+<line stroke='#000000' stroke-width='2' x1='416.875' x2='600.75' y1='132.5' 
y2='132.5'/>
+<path d='M244.0,141.5 A9.0,9.0 0 0,0 235.0,132.5' fill='none' stroke='#000000' 
stroke-width='2'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='253.0' 
x2='259.0' y1='152.0' y2='152.0'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='568.0' 
x2='577.75' y1='152.0' y2='152.0'/>
+<path d='M244.0,143.0 A9.0,9.0 0 0,0 253.0,152.0' fill='none' stroke='#000000' 
stroke-width='2'/>
+<path d='M581.75,152.0 A9.0,9.0 0 0,0 590.75,143.0' fill='none' 
stroke='#000000' stroke-width='2'/>
+<path d='M599.75,132.5 A9.0,9.0 0 0,0 590.75,141.5' fill='none' 
stroke='#000000' stroke-width='2'/>
+<line stroke='#000000' stroke-width='2' x1='244.0' x2='244.0' y1='143.0' 
y2='141.5'/>
+<line stroke='#000000' stroke-width='2' x1='590.75' x2='590.75' y1='143.0' 
y2='141.5'/>
+<line stroke='#000000' stroke-width='2' x1='556.75' x2='574.75' y1='19.0' 
y2='19.0'/>
+<path d='M583.75,28.0 A9.0,9.0 0 0,0 574.75,19.0' fill='none' stroke='#000000' 
stroke-width='2'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='583.75' 
x2='583.75' y1='28.0' y2='61.75'/>
+<line stroke='#000000' stroke-width='2' x1='583.75' x2='583.75' y1='65.75' 
y2='103.5'/>
+<path d='M574.75,112.5 A9.0,9.0 0 0,0 583.75,103.5' fill='none' 
stroke='#000000' stroke-width='2'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='574.75' 
x2='399.875' y1='112.5' y2='112.50000000000003'/>
+<line stroke='#000000' stroke-width='2' x1='395.875' x2='217.0' y1='112.5' 
y2='112.5'/>
+<path d='M217.0,112.5 A10.0,10.0 0 0,0 217.0,132.5' fill='none' 
stroke='#000000' stroke-width='2'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='217.0' 
x2='231.0' y1='132.5' y2='132.5'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='11.0' 
x2='25.0' y1='19.0' y2='19.0'/>
+<circle cx='619.75' cy='132.5' fill='#FFFFFF' r='3.0' stroke='#000000' 
stroke-width='2'/>
+<line marker-end='url(#arrow)' stroke='#000000' stroke-width='2' x1='598.75' 
x2='612.75' y1='132.5' y2='132.5'/>
+</svg>
\ No newline at end of file
diff --git a/presentations/training/demo/index.html 
b/presentations/training/demo/index.html
index e508bd8..2abc711 100644
--- a/presentations/training/demo/index.html
+++ b/presentations/training/demo/index.html
@@ -424,7 +424,7 @@ Neat huh?</p></div></aside></div></section>
 <section id="blank-screen"><h2>Blank screen</h2><div 
class="slide-content"><div class="paragraph"><p>You can press 
<code><strong>b</strong></code> or <code><strong>.</strong></code> to blank 
your current screen.</p></div>
 <div class="paragraph"><p>Hit it again to bring it 
back.</p></div></div></section>
 <section id="overview"><h2>Overview</h2><div class="slide-content"><div 
class="paragraph"><p>Press the <code><strong>esc</strong></code> key to get an 
overview of your slides.</p></div></div></section>
-<section><section id="attributes"><h2>Attributes</h2><div 
class="slide-content"><div class="paragraph"><p>Press the down arrow key to see 
the next sub-slide.</p></div></div></section><section 
id="attributes-part-1"><h2>Attributes Part 1</h2><div 
class="slide-content"><div class="dlist"><div 
class="title">Built-in</div><dl><dt 
class="hdlist1">asciidoctor-version</dt><dd><p>2.0.23</p></dd><dt 
class="hdlist1">safe-mode-name</dt><dd><p>unsafe</p></dd><dt 
class="hdlist1">docdir</dt><dd><p>/ho [...]
+<section><section id="attributes"><h2>Attributes</h2><div 
class="slide-content"><div class="paragraph"><p>Press the down arrow key to see 
the next sub-slide.</p></div></div></section><section 
id="attributes-part-1"><h2>Attributes Part 1</h2><div 
class="slide-content"><div class="dlist"><div 
class="title">Built-in</div><dl><dt 
class="hdlist1">asciidoctor-version</dt><dd><p>2.0.23</p></dd><dt 
class="hdlist1">safe-mode-name</dt><dd><p>unsafe</p></dd><dt 
class="hdlist1">docdir</dt><dd><p>/ws [...]
 <section id="including-documents-from-subdir"><h2>Including documents from 
subdir</h2><div class="slide-content"><div class="paragraph"><div 
class="title">include::subdir/_b.adoc[]</div><p>content from 
<em>src/docs/asciidoc/subdir/_b.adoc</em>.</p></div>
 <div class="exampleblock"><div class="title">Example 1. 
include::_c.adoc[]</div><div class="content"><div class="paragraph"><p>content 
from 
<em>src/docs/asciidoc/subdir/_c.adoc</em>.</p></div></div></div></div></section>
 <section id="images"><h2>Images</h2><div class="slide-content"><div 
class="imageblock thumb"><img src="images/logo-apache.png" alt="logo 
apache"></div></div></section>
@@ -440,44 +440,46 @@ Neat huh?</p></div></aside></div></section>
 <div class="ulist 
east"><ul><li><p>Blah</p></li><li><p>Blah</p></li><li><p>Blah</p></li><li><p>Blah</p></li><li><p>Blah</p></li></ul></div></div></section>
 <section id="fontawesome-icons"><h2>Fontawesome Icons</h2><div 
class="slide-content"><div class="ulist"><ul><li><p><span class="icon green"><i 
class="fa fa-check"></i></span></p></li><li><p><span class="icon"><i class="fa 
fa-wrench"></i></span></p></li><li><p><span class="icon orange"><i class="fa 
fa-beer"></i></span></p></li></ul></div>
 <aside class="notes"><div class="ulist"><ul><li><p>Find icons here: <a 
href="https://fontawesome.com/v4.7.0/icons/"; 
class="bare">https://fontawesome.com/v4.7.0/icons/</a></p></li><li><p>Color 
icons by defining css styles in apache.css and referencing them with 
"role"</p></li></ul></div></aside></div></section>
-<section><section id="diagrams"><h2>Diagrams</h2><div 
class="slide-content"><div class="paragraph"><p>Press the down arrow key to see 
the different types of diagrams</p></div></div></section><section 
id="ditaa-diagram"><h2>Ditaa Diagram</h2><div class="slide-content"><div 
class="imageblock"><img src="images/asciidoctor-diagram-process.png" 
alt="asciidoctor diagram process"></div></div></section><section 
id="plantuml-diagram"><h2>PlantUML Diagram</h2><div class="slide-content"><div 
class= [...]
-{
-  write -&gt; convert -&gt; image
+<section><section id="diagrams"><h2>Diagrams</h2><div 
class="slide-content"><div class="paragraph"><p>Press the down arrow key to see 
the different types of diagrams</p></div></div></section><section 
id="ditaa-diagram"><h2>Ditaa Diagram</h2><div class="slide-content"><div 
class="imageblock"><img src="images/asciidoctor-diagram-process.png" 
alt="asciidoctor diagram process"></div></div></section><section 
id="plantuml-diagram"><h2>PlantUML Diagram</h2><div class="slide-content"><div 
class= [...]
+convert: unable to read font `Impact' @ error/annotate.c/RenderFreetype/1396.
+convert: no images defined `/tmp/meme20250830-1-jlmxk7.png' @ 
error/convert.c/ConvertImageCommand/3229.</pre></div></div></div></section><section
 id="entity-relation-diagram"><h2>Entity Relation Diagram</h2><div 
class="slide-content"><div class="imageblock"><img src="images/erd-test.svg" 
alt="erd test"></div>
+<aside class="notes"></aside></div></section><section 
id="mermaid-flowchart"><h2>Mermaid: Flowchart</h2><div 
class="slide-content"><div class="listingblock"><div 
class="content"><pre>Failed to generate image: mmdc failed:
+Error: Failed to launch the browser process!
+/root/.cache/puppeteer/chrome/linux-1108766/chrome-linux/chrome: error while 
loading shared libraries: libnss3.so: cannot open shared object file: No such 
file or directory
+
+
+TROUBLESHOOTING: https://pptr.dev/troubleshooting
+
+    at Interface.onClose 
(file:///root/.nvm/versions/node/v22.18.0/lib/node_modules/@mermaid-js/mermaid-cli/node_modules/@puppeteer/browsers/lib/esm/launch.js:253:24)
+    at Interface.emit (node:events:530:35)
+    at Interface.close (node:internal/readline/interface:534:10)
+    at Socket.onend (node:internal/readline/interface:260:10)
+    at Socket.emit (node:events:530:35)
+    at endReadableNT (node:internal/streams/readable:1698:12)
+    at process.processTicksAndRejections 
(node:internal/process/task_queues:90:21)
+
 
-  lane user {
-     label = "User"
-     write [label = "Writing reST"];
-     image [label = "Get diagram IMAGE"];
-  }
-  lane actdiag {
-     convert [label = "Convert reST to Image"];
-  }
-}</pre></div></div></div></section><section id="nwdiag-diagram"><h2>Nwdiag 
Diagram</h2><div class="slide-content"><div class="imageblock"><img 
src="images/nwdiag-test.png" alt="nwdiag test"></div></div></section><section 
id="rackdiag-diagram"><h2>Rackdiag Diagram</h2><div class="slide-content"><div 
class="imageblock"><img src="images/rackdiag-test.png" alt="rackdiag 
test"></div></div></section><section id="packetdiag-diagram"><h2>Packetdiag 
Diagram</h2><div class="slide-content"><div cla [...]
-[Person]
-*name
-height
-weight
-+birth_location_id
-
-[Location]
-*id
-city
-state
-country
-
-# Cardinality    Syntax
-# 0 or 1         ?
-# exactly 1      1
-# 0 or more      *
-# 1 or more      +
-Person *--1 Location</pre></div></div>
-<aside class="notes"></aside></div></section><section 
id="mermaid-flowchart"><h2>Mermaid: Flowchart</h2><div 
class="slide-content"><div class="listingblock"><div 
class="content"><pre>Failed to generate image: Could not find the 'mmdc' 
executable in PATH; add it to the PATH or specify its location using the 'mmdc' 
document attribute
 graph TD;
     A--&gt;B;
     A--&gt;C;
     B--&gt;D;
     C--&gt;D;</pre></div></div>
-<aside class="notes"></aside></div></section><section 
id="mermaid-sequence-diagram"><h2>Mermaid: Sequence Diagram</h2><div 
class="slide-content"><div class="listingblock"><div 
class="content"><pre>Failed to generate image: Could not find the 'mmdc' 
executable in PATH; add it to the PATH or specify its location using the 'mmdc' 
document attribute
+<aside class="notes"></aside></div></section><section 
id="mermaid-sequence-diagram"><h2>Mermaid: Sequence Diagram</h2><div 
class="slide-content"><div class="listingblock"><div 
class="content"><pre>Failed to generate image: mmdc failed:
+Error: Failed to launch the browser process!
+/root/.cache/puppeteer/chrome/linux-1108766/chrome-linux/chrome: error while 
loading shared libraries: libnss3.so: cannot open shared object file: No such 
file or directory
+
+
+TROUBLESHOOTING: https://pptr.dev/troubleshooting
+
+    at Interface.onClose 
(file:///root/.nvm/versions/node/v22.18.0/lib/node_modules/@mermaid-js/mermaid-cli/node_modules/@puppeteer/browsers/lib/esm/launch.js:253:24)
+    at Interface.emit (node:events:530:35)
+    at Interface.close (node:internal/readline/interface:534:10)
+    at Socket.onend (node:internal/readline/interface:260:10)
+    at Socket.emit (node:events:530:35)
+    at endReadableNT (node:internal/streams/readable:1698:12)
+    at process.processTicksAndRejections 
(node:internal/process/task_queues:90:21)
+
+
 sequenceDiagram
     participant Alice
     participant Bob
@@ -488,7 +490,22 @@ sequenceDiagram
     Note right of John: Rational thoughts &lt;br/&gt;prevail...
     John--&gt;Alice: Great!
     John-&gt;Bob: How about you?
-    Bob--&gt;John: Jolly good!</pre></div></div></div></section><section 
id="mermaid-gant-diagram"><h2>Mermaid: Gant Diagram</h2><div 
class="slide-content"><div class="listingblock"><div 
class="content"><pre>Failed to generate image: Could not find the 'mmdc' 
executable in PATH; add it to the PATH or specify its location using the 'mmdc' 
document attribute
+    Bob--&gt;John: Jolly good!</pre></div></div></div></section><section 
id="mermaid-gant-diagram"><h2>Mermaid: Gant Diagram</h2><div 
class="slide-content"><div class="listingblock"><div 
class="content"><pre>Failed to generate image: mmdc failed:
+Error: Failed to launch the browser process!
+/root/.cache/puppeteer/chrome/linux-1108766/chrome-linux/chrome: error while 
loading shared libraries: libnss3.so: cannot open shared object file: No such 
file or directory
+
+
+TROUBLESHOOTING: https://pptr.dev/troubleshooting
+
+    at Interface.onClose 
(file:///root/.nvm/versions/node/v22.18.0/lib/node_modules/@mermaid-js/mermaid-cli/node_modules/@puppeteer/browsers/lib/esm/launch.js:253:24)
+    at Interface.emit (node:events:530:35)
+    at Interface.close (node:internal/readline/interface:534:10)
+    at Socket.onend (node:internal/readline/interface:260:10)
+    at Socket.emit (node:events:530:35)
+    at endReadableNT (node:internal/streams/readable:1698:12)
+    at process.processTicksAndRejections 
(node:internal/process/task_queues:90:21)
+
+
 gantt
         dateFormat  YYYY-MM-DD
         title Adding GANTT diagram functionality to mermaid
@@ -503,76 +520,7 @@ gantt
         Create tests for parser             :crit, active, 3d
         Future task in critical line        :crit, 5d
         Create tests for renderer           :2d
-        Add to mermaid                      
:1d</pre></div></div></div></section><section id="svgbob-mindmap"><h2>SVGBob: 
Mindmap</h2><div class="slide-content"><div class="listingblock"><div 
class="content"><pre>Failed to generate image: Could not find the 'svgbob', 
'svgbob_cli' executable in PATH; add it to the PATH or specify its location 
using the 'svgbob' document attribute
-                                            .--&gt;  Alpha
-                                           /
-                                          .----&gt;  Initial Release
-          Planning *-------.             /         \
-                            \           /           '---&gt; Patch 1
-      Initial research       \         /             \
-                *             \       /               '--&gt;  Patch 2
-                 \             \     .---------&gt; Beta
-                  \             \   /
-                   \             o o                      _______
-                    \          .---. o--.___             /       \
-                     '------&gt; (     )       '----*---&gt;  . Release .
-                               `---' o                   \_______/
-                               o  o o \
-                              /    \ \ \
-                          .--'      \ \ \
-                         /           \ \ '----+-&gt;  Push backs
-                        .             \ \      \
-                       /|              \ \      '----&gt; Setbacks
-                      / .               \ \
-                     V /|                \ '-----&gt; Reception
-                Team  / .                 \
-                     v /|                  \
-             Worklaod / .                   '--&gt;&gt; Career change
-                     V /
-                 PTO  /
-                     V
-                 Bug</pre></div></div></div></section><section 
id="svgbob-circuit-diagram"><h2>SVGBob: Circuit Diagram</h2><div 
class="slide-content"><div class="listingblock"><div 
class="content"><pre>Failed to generate image: Could not find the 'svgbob', 
'svgbob_cli' executable in PATH; add it to the PATH or specify its location 
using the 'svgbob' document attribute
-     +10-15V           ___0,047R
-      *------o------o-|___|-o--o---------o----o-------.
-             |      |       |  |         |    |       |
-            ---     |       | .+.        |    |       |
-      470uF  | +    |       | | |        |    |      .+.
-      *------o      '--.    | '+'       .+.   |      '-'
-             |         |6   |7 |8    1k | |   |       |
-            GND      .-+----+--+--.     | |   |       |
-                     |            |     '+'   |       |
-                     |            |1     |  |/  BC    |
-                     |            +------o--+   547   |
-                     |            |      |  |`&gt;       |
-                     |            |     ,+.   |       |
-                     |            | 220R| |   o----||-+  IRF9Z34
-                     |            |     | |   |    |+-&gt;
-                     |  MC34063   |     `+'   |    ||-+
-                     |            |      |    |       |  BYV29     -12V6
-                     |            |      '----'       o--|&lt;-o----o--X OUT
-                     |            |2                  |     |    |
-                     |            |--o                C|    |    |
-                     |            | GND         30uH  C|    |   --- 470
-                     |            |3      1nF         C|    |
-                     |            |-------||--.       |     |    | +
-                     '-----+----+-'           |      GND    |   GND
-                          5|   4|             |             |
-                           |    '-------------o-------------o
-                           |                           ___  |
-                           '------/\/\/------------o--|___|-'
-                                                   |       1k0
-                                                  .+.
-                                                  | | 5k6 + 3k3
-                                                  | | in Serie
-                                                  '+'
-                                                   |
-                                                  
GND</pre></div></div></div></section><section id="syntrax"><h2>Syntrax</h2><div 
class="slide-content"><div class="listingblock"><div 
class="content"><pre>Failed to generate image: Could not find the 'syntrax' 
executable in PATH; add it to the PATH or specify its location using the 
'syntrax' document attribute
-indentstack(10,
-  line(opt('-'), choice('0', line('1-9', loop(None, '0-9'))),
-    opt('.', loop('0-9', None))),
-
-  line(opt(choice('e', 'E'), choice(None, '+', '-'), loop('0-9', None)))
-)</pre></div></div></div></section><section id="vega"><h2>Vega</h2><div 
class="slide-content"><div class="listingblock"><div 
class="content"><pre>Failed to generate image: Could not find the 'vg2svg' 
executable in PATH; add it to the PATH or specify its location using the 
'vg2svg' document attribute
+        Add to mermaid                      
:1d</pre></div></div></div></section><section id="svgbob-mindmap"><h2>SVGBob: 
Mindmap</h2><div class="slide-content"><div class="imageblock"><img 
src="images/svgbob-mindmap-test.svg" alt="svgbob mindmap 
test"></div></div></section><section id="svgbob-circuit-diagram"><h2>SVGBob: 
Circuit Diagram</h2><div class="slide-content"><div class="imageblock"><img 
src="images/svgbob-circuit-diagram-test.svg" alt="svgbob circuit diagram 
test"></div></div>< [...]
 {
   "$schema": "https://vega.github.io/schema/vega/v5.json";,
   "width": 1000,
diff --git a/presentations/training/presentation/META-INF/MANIFEST.MF 
b/presentations/training/presentation/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/training/presentation/META-INF/MANIFEST.MF
+++ b/presentations/training/presentation/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 
diff --git a/presentations/zookeeper/META-INF/MANIFEST.MF 
b/presentations/zookeeper/META-INF/MANIFEST.MF
index 14829d1..a01ba16 100644
--- a/presentations/zookeeper/META-INF/MANIFEST.MF
+++ b/presentations/zookeeper/META-INF/MANIFEST.MF
@@ -1,4 +1,4 @@
 Manifest-Version: 1.0
 Created-By: Maven WAR Plugin 3.4.0
-Build-Jdk-Spec: 11
+Build-Jdk-Spec: 21
 

Reply via email to