diff --git a/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/carSlope.fig b/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/carSlope.fig
new file mode 100644
index 0000000000000000000000000000000000000000..ad2d90c82801f1c3cef59d9f341269ef9b82641f
--- /dev/null
+++ b/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/carSlope.fig
@@ -0,0 +1,72 @@
+#FIG 3.2  Produced by xfig version 3.2.5c
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+5 1 0 1 0 7 50 -1 -1 4.000 0 0 0 0 492.188 5723.438 450 4950 990 5130 1215 5445
+5 1 0 1 0 7 50 -1 -1 4.000 0 0 0 0 2072.812 5526.562 2115 6300 1575 6120 1350 5805
+5 1 2 1 0 7 50 -1 -1 3.000 0 0 0 0 3416.500 7120.178 2912 6102 3434 5984 3921 6102
+5 1 0 1 0 7 50 -1 -1 4.000 0 0 0 0 2688.506 6264.902 2909 6110 2951 6204 2954 6311
+5 1 0 1 0 7 50 -1 -1 4.000 0 1 0 0 4132.494 6270.902 3912 6116 3870 6210 3867 6317
+5 1 0 1 0 7 50 -1 -1 0.000 0 0 1 0 3487.500 5557.500 3465 6615 3060 6525 2655 6210
+	2 1 1.00 60.00 120.00
+6 231 4805 520 4940
+6 250 4863 366 4940
+5 1 0 1 0 7 50 -1 -1 4.000 0 0 0 0 308.500 4920.500 270 4921 308 4882 347 4921
+1 3 0 1 0 7 50 -1 -1 4.000 1 0.0000 308 4921 19 19 308 4921 308 4940
+-6
+6 404 4863 520 4940
+5 1 0 1 0 7 50 -1 -1 4.000 0 0 0 0 462.500 4920.500 424 4921 462 4882 501 4921
+1 3 0 1 0 7 50 -1 -1 4.000 1 0.0000 462 4921 19 19 462 4921 462 4940
+-6
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 347 4921 424 4921
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 4
+	 270 4921 231 4921 231 4863 308 4863
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 7
+	 308 4863 327 4805 404 4805 462 4863 520 4863 520 4921
+	 501 4921
+-6
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 1215 5445 1350 5805
+2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 1935 6300 450 6300
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2
+	2 1 1.00 60.00 120.00
+	2 1 1.00 60.00 120.00
+	 495 4905 495 6345
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 270 4950 450 4950
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 3
+	 2113 6302 2385 6302 2912 6102
+2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 2430 6308 4403 6305
+2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 2914 6094 2239 6094
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2
+	2 1 1.00 60.00 120.00
+	 2340 5741 2340 6101
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 0 2
+	2 1 1.00 60.00 120.00
+	 2340 6685 2340 6280
+2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 2925 6120 2925 5445
+2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 3915 6120 3915 5445
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 1 1 2
+	2 1 1.00 60.00 120.00
+	2 1 1.00 60.00 120.00
+	 2925 5490 3915 5490
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 3
+	 4731 6302 4449 6301 3922 6101
+4 0 0 50 -1 0 12 0.0000 6 180 525 540 5670 $h_1$\001
+4 0 0 50 -1 0 12 0.0000 6 180 525 2205 6255 $h_2$\001
+4 0 0 50 -1 0 12 0.0000 6 165 315 3240 5445 $d$\001
+4 0 0 50 -1 0 12 0.0000 6 195 720 3960 6300 $\\alpha$\001
+4 0 0 50 -1 0 12 0.0000 6 195 720 2790 6300 $\\alpha$\001
+4 0 0 50 -1 0 12 0.0000 4 180 435 3510 6660 slope\001
+4 0 0 50 -1 0 12 0.0000 4 135 1065 -630 6345 Ground level\001
diff --git a/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/class.svg b/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/class.svg
new file mode 100644
index 0000000000000000000000000000000000000000..42cbfefad63354c512ce2852fd64a72984af23d7
--- /dev/null
+++ b/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/class.svg
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="150mm"
+   height="100mm"
+   viewBox="0 0 531.49606 354.33071"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="class.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;"
+       inkscape:isstock="true">
+      <path
+         id="path4218"
+         style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-3"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4218-6"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-5"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4218-3"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-6"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4218-2"
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.7143011"
+     inkscape:cx="250.9116"
+     inkscape:cy="182.64224"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1600"
+     inkscape:window-height="1176"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid4267" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-698.0315)">
+    <rect
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       id="rect3336"
+       width="110.69817"
+       height="107.49761"
+       x="167.36681"
+       y="723.32617"
+       ry="12.831872" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="187.67564"
+       y="748.59698"
+       id="text3338"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3340"
+         x="187.67564"
+         y="748.59698">Human</tspan></text>
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       d="M 166.39144,758.36097 276.44506,757.2521"
+       id="path3342"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="177.26752"
+       y="780.41772"
+       id="text3344"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3346"
+         x="177.26752"
+         y="780.41772">name</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="179.28191"
+       y="800.05817"
+       id="text3348"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3350"
+         x="179.28191"
+         y="800.05817">image</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="179.28191"
+       y="822.72021"
+       id="text3352"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3354"
+         x="179.28191"
+         y="822.72021">sex</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="60.304554"
+       y="973.25507"
+       id="text3375"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3377"
+         x="60.304554"
+         y="973.25507">Jane</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="158.13068"
+       y="1017.6138"
+       id="text3379"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3381"
+         x="158.13068"
+         y="1017.6138">Tim</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="278.02484"
+       y="1016.54"
+       id="text3383"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3385"
+         x="278.02484"
+         y="1016.54">Michael</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="405.40158"
+       y="969.80597"
+       id="text3387"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3389"
+         x="405.40158"
+         y="969.80597">Sarah</tspan></text>
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#Arrow2Lend);enable-background:accumulate"
+       d="M 90.605334,950.54249 160.39149,839.00812"
+       id="path3391"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#Arrow2Lend-3);enable-background:accumulate"
+       d="M 292.36887,990.72248 253.47143,853.39878"
+       id="path3391-7"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#Arrow2Lend-5);enable-background:accumulate"
+       d="M 408.05243,951.67007 288.47124,837.92519"
+       id="path3391-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#Arrow2Lend-6);enable-background:accumulate"
+       d="m 177.79058,992.19615 33.6811,-137.32369"
+       id="path3391-9"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+</svg>
diff --git a/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/codingbatSleepExample.bmp b/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/codingbatSleepExample.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..680e0451688399a88dc22821263c65f247dbe322
Binary files /dev/null and b/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/codingbatSleepExample.bmp differ
diff --git a/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/freedocs.svg b/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/freedocs.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a72118eae108e47a95ba4579f490196163d9df08
--- /dev/null
+++ b/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/freedocs.svg
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Created with qrencode 3.4.2 (http://fukuchi.org/works/qrencode/index.html.en) -->
+<svg width="3.92cm" height="3.92cm" viewBox="0 0 37 37" preserveAspectRatio="none" version="1.1" xmlns="http://www.w3.org/2000/svg">
+	<g id="QRcode">
+		<rect x="0" y="0" width="37" height="37" fill="#ffffff" />
+		<g id="Pattern">
+			<rect x="4" y="4" width="7" height="1" fill="#000000" />
+			<rect x="14" y="4" width="1" height="1" fill="#000000" />
+			<rect x="16" y="4" width="2" height="1" fill="#000000" />
+			<rect x="19" y="4" width="1" height="1" fill="#000000" />
+			<rect x="21" y="4" width="4" height="1" fill="#000000" />
+			<rect x="26" y="4" width="7" height="1" fill="#000000" />
+			<rect x="4" y="5" width="1" height="1" fill="#000000" />
+			<rect x="10" y="5" width="1" height="1" fill="#000000" />
+			<rect x="12" y="5" width="1" height="1" fill="#000000" />
+			<rect x="14" y="5" width="1" height="1" fill="#000000" />
+			<rect x="17" y="5" width="4" height="1" fill="#000000" />
+			<rect x="26" y="5" width="1" height="1" fill="#000000" />
+			<rect x="32" y="5" width="1" height="1" fill="#000000" />
+			<rect x="4" y="6" width="1" height="1" fill="#000000" />
+			<rect x="6" y="6" width="3" height="1" fill="#000000" />
+			<rect x="10" y="6" width="1" height="1" fill="#000000" />
+			<rect x="16" y="6" width="2" height="1" fill="#000000" />
+			<rect x="19" y="6" width="2" height="1" fill="#000000" />
+			<rect x="24" y="6" width="1" height="1" fill="#000000" />
+			<rect x="26" y="6" width="1" height="1" fill="#000000" />
+			<rect x="28" y="6" width="3" height="1" fill="#000000" />
+			<rect x="32" y="6" width="1" height="1" fill="#000000" />
+			<rect x="4" y="7" width="1" height="1" fill="#000000" />
+			<rect x="6" y="7" width="3" height="1" fill="#000000" />
+			<rect x="10" y="7" width="1" height="1" fill="#000000" />
+			<rect x="12" y="7" width="3" height="1" fill="#000000" />
+			<rect x="16" y="7" width="1" height="1" fill="#000000" />
+			<rect x="18" y="7" width="2" height="1" fill="#000000" />
+			<rect x="21" y="7" width="2" height="1" fill="#000000" />
+			<rect x="26" y="7" width="1" height="1" fill="#000000" />
+			<rect x="28" y="7" width="3" height="1" fill="#000000" />
+			<rect x="32" y="7" width="1" height="1" fill="#000000" />
+			<rect x="4" y="8" width="1" height="1" fill="#000000" />
+			<rect x="6" y="8" width="3" height="1" fill="#000000" />
+			<rect x="10" y="8" width="1" height="1" fill="#000000" />
+			<rect x="13" y="8" width="1" height="1" fill="#000000" />
+			<rect x="20" y="8" width="5" height="1" fill="#000000" />
+			<rect x="26" y="8" width="1" height="1" fill="#000000" />
+			<rect x="28" y="8" width="3" height="1" fill="#000000" />
+			<rect x="32" y="8" width="1" height="1" fill="#000000" />
+			<rect x="4" y="9" width="1" height="1" fill="#000000" />
+			<rect x="10" y="9" width="1" height="1" fill="#000000" />
+			<rect x="12" y="9" width="2" height="1" fill="#000000" />
+			<rect x="15" y="9" width="2" height="1" fill="#000000" />
+			<rect x="19" y="9" width="1" height="1" fill="#000000" />
+			<rect x="26" y="9" width="1" height="1" fill="#000000" />
+			<rect x="32" y="9" width="1" height="1" fill="#000000" />
+			<rect x="4" y="10" width="7" height="1" fill="#000000" />
+			<rect x="12" y="10" width="1" height="1" fill="#000000" />
+			<rect x="14" y="10" width="1" height="1" fill="#000000" />
+			<rect x="16" y="10" width="1" height="1" fill="#000000" />
+			<rect x="18" y="10" width="1" height="1" fill="#000000" />
+			<rect x="20" y="10" width="1" height="1" fill="#000000" />
+			<rect x="22" y="10" width="1" height="1" fill="#000000" />
+			<rect x="24" y="10" width="1" height="1" fill="#000000" />
+			<rect x="26" y="10" width="7" height="1" fill="#000000" />
+			<rect x="13" y="11" width="3" height="1" fill="#000000" />
+			<rect x="18" y="11" width="3" height="1" fill="#000000" />
+			<rect x="4" y="12" width="5" height="1" fill="#000000" />
+			<rect x="10" y="12" width="4" height="1" fill="#000000" />
+			<rect x="15" y="12" width="1" height="1" fill="#000000" />
+			<rect x="19" y="12" width="1" height="1" fill="#000000" />
+			<rect x="21" y="12" width="1" height="1" fill="#000000" />
+			<rect x="23" y="12" width="1" height="1" fill="#000000" />
+			<rect x="25" y="12" width="1" height="1" fill="#000000" />
+			<rect x="27" y="12" width="1" height="1" fill="#000000" />
+			<rect x="29" y="12" width="1" height="1" fill="#000000" />
+			<rect x="31" y="12" width="1" height="1" fill="#000000" />
+			<rect x="4" y="13" width="5" height="1" fill="#000000" />
+			<rect x="12" y="13" width="1" height="1" fill="#000000" />
+			<rect x="14" y="13" width="1" height="1" fill="#000000" />
+			<rect x="16" y="13" width="3" height="1" fill="#000000" />
+			<rect x="20" y="13" width="1" height="1" fill="#000000" />
+			<rect x="23" y="13" width="6" height="1" fill="#000000" />
+			<rect x="32" y="13" width="1" height="1" fill="#000000" />
+			<rect x="4" y="14" width="3" height="1" fill="#000000" />
+			<rect x="10" y="14" width="3" height="1" fill="#000000" />
+			<rect x="14" y="14" width="1" height="1" fill="#000000" />
+			<rect x="17" y="14" width="3" height="1" fill="#000000" />
+			<rect x="21" y="14" width="2" height="1" fill="#000000" />
+			<rect x="27" y="14" width="2" height="1" fill="#000000" />
+			<rect x="6" y="15" width="1" height="1" fill="#000000" />
+			<rect x="8" y="15" width="2" height="1" fill="#000000" />
+			<rect x="11" y="15" width="2" height="1" fill="#000000" />
+			<rect x="16" y="15" width="2" height="1" fill="#000000" />
+			<rect x="20" y="15" width="1" height="1" fill="#000000" />
+			<rect x="23" y="15" width="3" height="1" fill="#000000" />
+			<rect x="27" y="15" width="3" height="1" fill="#000000" />
+			<rect x="31" y="15" width="1" height="1" fill="#000000" />
+			<rect x="4" y="16" width="3" height="1" fill="#000000" />
+			<rect x="10" y="16" width="2" height="1" fill="#000000" />
+			<rect x="13" y="16" width="2" height="1" fill="#000000" />
+			<rect x="16" y="16" width="1" height="1" fill="#000000" />
+			<rect x="18" y="16" width="1" height="1" fill="#000000" />
+			<rect x="21" y="16" width="1" height="1" fill="#000000" />
+			<rect x="23" y="16" width="1" height="1" fill="#000000" />
+			<rect x="29" y="16" width="2" height="1" fill="#000000" />
+			<rect x="4" y="17" width="1" height="1" fill="#000000" />
+			<rect x="6" y="17" width="3" height="1" fill="#000000" />
+			<rect x="11" y="17" width="1" height="1" fill="#000000" />
+			<rect x="23" y="17" width="1" height="1" fill="#000000" />
+			<rect x="25" y="17" width="4" height="1" fill="#000000" />
+			<rect x="32" y="17" width="1" height="1" fill="#000000" />
+			<rect x="8" y="18" width="4" height="1" fill="#000000" />
+			<rect x="15" y="18" width="2" height="1" fill="#000000" />
+			<rect x="19" y="18" width="1" height="1" fill="#000000" />
+			<rect x="24" y="18" width="1" height="1" fill="#000000" />
+			<rect x="26" y="18" width="5" height="1" fill="#000000" />
+			<rect x="5" y="19" width="1" height="1" fill="#000000" />
+			<rect x="9" y="19" width="1" height="1" fill="#000000" />
+			<rect x="11" y="19" width="5" height="1" fill="#000000" />
+			<rect x="18" y="19" width="3" height="1" fill="#000000" />
+			<rect x="22" y="19" width="1" height="1" fill="#000000" />
+			<rect x="26" y="19" width="3" height="1" fill="#000000" />
+			<rect x="31" y="19" width="1" height="1" fill="#000000" />
+			<rect x="7" y="20" width="1" height="1" fill="#000000" />
+			<rect x="9" y="20" width="2" height="1" fill="#000000" />
+			<rect x="13" y="20" width="1" height="1" fill="#000000" />
+			<rect x="15" y="20" width="1" height="1" fill="#000000" />
+			<rect x="19" y="20" width="3" height="1" fill="#000000" />
+			<rect x="23" y="20" width="1" height="1" fill="#000000" />
+			<rect x="29" y="20" width="2" height="1" fill="#000000" />
+			<rect x="4" y="21" width="1" height="1" fill="#000000" />
+			<rect x="6" y="21" width="2" height="1" fill="#000000" />
+			<rect x="11" y="21" width="1" height="1" fill="#000000" />
+			<rect x="16" y="21" width="3" height="1" fill="#000000" />
+			<rect x="20" y="21" width="1" height="1" fill="#000000" />
+			<rect x="23" y="21" width="6" height="1" fill="#000000" />
+			<rect x="30" y="21" width="1" height="1" fill="#000000" />
+			<rect x="32" y="21" width="1" height="1" fill="#000000" />
+			<rect x="4" y="22" width="1" height="1" fill="#000000" />
+			<rect x="8" y="22" width="1" height="1" fill="#000000" />
+			<rect x="10" y="22" width="3" height="1" fill="#000000" />
+			<rect x="14" y="22" width="1" height="1" fill="#000000" />
+			<rect x="17" y="22" width="3" height="1" fill="#000000" />
+			<rect x="24" y="22" width="2" height="1" fill="#000000" />
+			<rect x="30" y="22" width="1" height="1" fill="#000000" />
+			<rect x="4" y="23" width="1" height="1" fill="#000000" />
+			<rect x="8" y="23" width="1" height="1" fill="#000000" />
+			<rect x="12" y="23" width="3" height="1" fill="#000000" />
+			<rect x="16" y="23" width="2" height="1" fill="#000000" />
+			<rect x="24" y="23" width="1" height="1" fill="#000000" />
+			<rect x="26" y="23" width="1" height="1" fill="#000000" />
+			<rect x="28" y="23" width="1" height="1" fill="#000000" />
+			<rect x="31" y="23" width="1" height="1" fill="#000000" />
+			<rect x="4" y="24" width="1" height="1" fill="#000000" />
+			<rect x="8" y="24" width="1" height="1" fill="#000000" />
+			<rect x="10" y="24" width="1" height="1" fill="#000000" />
+			<rect x="13" y="24" width="2" height="1" fill="#000000" />
+			<rect x="16" y="24" width="1" height="1" fill="#000000" />
+			<rect x="18" y="24" width="4" height="1" fill="#000000" />
+			<rect x="23" y="24" width="6" height="1" fill="#000000" />
+			<rect x="30" y="24" width="3" height="1" fill="#000000" />
+			<rect x="12" y="25" width="1" height="1" fill="#000000" />
+			<rect x="20" y="25" width="1" height="1" fill="#000000" />
+			<rect x="24" y="25" width="1" height="1" fill="#000000" />
+			<rect x="28" y="25" width="5" height="1" fill="#000000" />
+			<rect x="4" y="26" width="7" height="1" fill="#000000" />
+			<rect x="12" y="26" width="1" height="1" fill="#000000" />
+			<rect x="14" y="26" width="3" height="1" fill="#000000" />
+			<rect x="19" y="26" width="2" height="1" fill="#000000" />
+			<rect x="23" y="26" width="2" height="1" fill="#000000" />
+			<rect x="26" y="26" width="1" height="1" fill="#000000" />
+			<rect x="28" y="26" width="3" height="1" fill="#000000" />
+			<rect x="4" y="27" width="1" height="1" fill="#000000" />
+			<rect x="10" y="27" width="1" height="1" fill="#000000" />
+			<rect x="14" y="27" width="2" height="1" fill="#000000" />
+			<rect x="18" y="27" width="2" height="1" fill="#000000" />
+			<rect x="22" y="27" width="3" height="1" fill="#000000" />
+			<rect x="28" y="27" width="1" height="1" fill="#000000" />
+			<rect x="31" y="27" width="1" height="1" fill="#000000" />
+			<rect x="4" y="28" width="1" height="1" fill="#000000" />
+			<rect x="6" y="28" width="3" height="1" fill="#000000" />
+			<rect x="10" y="28" width="1" height="1" fill="#000000" />
+			<rect x="12" y="28" width="1" height="1" fill="#000000" />
+			<rect x="15" y="28" width="1" height="1" fill="#000000" />
+			<rect x="19" y="28" width="1" height="1" fill="#000000" />
+			<rect x="21" y="28" width="1" height="1" fill="#000000" />
+			<rect x="24" y="28" width="5" height="1" fill="#000000" />
+			<rect x="30" y="28" width="1" height="1" fill="#000000" />
+			<rect x="4" y="29" width="1" height="1" fill="#000000" />
+			<rect x="6" y="29" width="3" height="1" fill="#000000" />
+			<rect x="10" y="29" width="1" height="1" fill="#000000" />
+			<rect x="12" y="29" width="1" height="1" fill="#000000" />
+			<rect x="14" y="29" width="1" height="1" fill="#000000" />
+			<rect x="16" y="29" width="3" height="1" fill="#000000" />
+			<rect x="20" y="29" width="1" height="1" fill="#000000" />
+			<rect x="24" y="29" width="1" height="1" fill="#000000" />
+			<rect x="27" y="29" width="1" height="1" fill="#000000" />
+			<rect x="29" y="29" width="4" height="1" fill="#000000" />
+			<rect x="4" y="30" width="1" height="1" fill="#000000" />
+			<rect x="6" y="30" width="3" height="1" fill="#000000" />
+			<rect x="10" y="30" width="1" height="1" fill="#000000" />
+			<rect x="12" y="30" width="1" height="1" fill="#000000" />
+			<rect x="14" y="30" width="1" height="1" fill="#000000" />
+			<rect x="17" y="30" width="4" height="1" fill="#000000" />
+			<rect x="23" y="30" width="2" height="1" fill="#000000" />
+			<rect x="26" y="30" width="6" height="1" fill="#000000" />
+			<rect x="4" y="31" width="1" height="1" fill="#000000" />
+			<rect x="10" y="31" width="1" height="1" fill="#000000" />
+			<rect x="12" y="31" width="2" height="1" fill="#000000" />
+			<rect x="16" y="31" width="2" height="1" fill="#000000" />
+			<rect x="20" y="31" width="1" height="1" fill="#000000" />
+			<rect x="22" y="31" width="1" height="1" fill="#000000" />
+			<rect x="24" y="31" width="2" height="1" fill="#000000" />
+			<rect x="29" y="31" width="1" height="1" fill="#000000" />
+			<rect x="31" y="31" width="1" height="1" fill="#000000" />
+			<rect x="4" y="32" width="7" height="1" fill="#000000" />
+			<rect x="12" y="32" width="1" height="1" fill="#000000" />
+			<rect x="16" y="32" width="1" height="1" fill="#000000" />
+			<rect x="18" y="32" width="2" height="1" fill="#000000" />
+			<rect x="21" y="32" width="1" height="1" fill="#000000" />
+			<rect x="26" y="32" width="3" height="1" fill="#000000" />
+			<rect x="30" y="32" width="1" height="1" fill="#000000" />
+		</g>
+	</g>
+</svg>
diff --git a/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/hashing.svg b/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/hashing.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b6beae98e6bc984576ea44500c3b944dbdbe71d2
--- /dev/null
+++ b/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/hashing.svg
@@ -0,0 +1,4889 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:ns1="https://launchpad.net/jessyink"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="1052.3622"
+   height="744.09448"
+   id="svg2"
+   version="1.2"
+   inkscape:version="0.91+devel r"
+   sodipodi:docname="hashing.svg"
+   viewBox="0 0 1052.3622 744.09448">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.1925552"
+     inkscape:cx="540.4362"
+     inkscape:cy="370.37017"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1600"
+     inkscape:window-height="1176"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     inkscape:snap-global="true"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:snap-grids="true">
+    <inkscape:grid
+       snapvisiblegridlinesonly="true"
+       enabled="true"
+       visible="true"
+       empspacing="5"
+       id="grid5239"
+       type="xygrid" />
+    <sodipodi:guide
+       id="guide3149"
+       position="680,750"
+       orientation="0,1"
+       inkscape:locked="false" />
+  </sodipodi:namedview>
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="EmptyTriangleOutL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyTriangleOutL"
+       style="overflow:visible">
+      <path
+         id="path6166"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         transform="matrix(0.8,0,0,0.8,-4.8,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="DotM"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="DotM">
+      <path
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         id="path4359"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5023"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mstart"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5020"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Lend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5017"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Lstart"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lstart">
+      <path
+         transform="matrix(0.8,0,0,0.8,10,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5014"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mstart-8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5020-3"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-2"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5023-9"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mstart-4"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5020-1"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-22"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5023-1"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mstart-6"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5020-8"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5023-5"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="DotMo"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="DotMo">
+      <path
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         style="fill:#d40000;fill-rule:evenodd;stroke:#d40000;stroke-width:1.00000003pt"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         id="path5187"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6o"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend-6o">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#d40000;fill-rule:evenodd;stroke:#d40000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5190"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="DotMo1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="DotMo1">
+      <path
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         id="path6031"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6n"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend-6n">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path6034"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="DotMoc"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="DotMoc">
+      <path
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         id="path6037"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6F"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend-6F">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path6040"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="DotMocK"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="DotMocK">
+      <path
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         id="path6279"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6Fa"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend-6Fa">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path6282"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="DotMo17"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="DotMo17">
+      <path
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         style="fill:#d40000;fill-rule:evenodd;stroke:#d40000;stroke-width:1.00000003pt"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         id="path6529"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6nl"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend-6nl">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#d40000;fill-rule:evenodd;stroke:#d40000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path6532"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="DotMocKE"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="DotMocKE">
+      <path
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         style="fill:#d40000;fill-rule:evenodd;stroke:#d40000;stroke-width:1.00000003pt"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         id="path6535"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6FaK"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend-6FaK">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#d40000;fill-rule:evenodd;stroke:#d40000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path6538"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6-8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5023-5-4"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyTriangleOutL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyTriangleOutL-6"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6166-3"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         transform="matrix(0.8,0,0,0.8,-4.8,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyTriangleOutL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyTriangleOutL-3"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6166-9"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         transform="matrix(0.8,0,0,0.8,-4.8,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyTriangleOutL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyTriangleOutL-9"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6166-5"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         transform="matrix(0.8,0,0,0.8,-4.8,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyTriangleOutL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyTriangleOutL-8"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6166-53"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         transform="matrix(0.8,0,0,0.8,-4.8,0)" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6n-8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend-6n">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path6034-5"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6-8-9"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 Z"
+         id="path5023-5-4-4"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <filter
+       inkscape:label="Channel Transparency"
+       style="color-interpolation-filters:sRGB;"
+       id="filter5531">
+      <feColorMatrix
+         values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 -1 0.5 0.5 1 0 "
+         in="SourceGraphic"
+         result="colormatrix"
+         id="feColorMatrix5527" />
+      <feComposite
+         in="colormatrix"
+         in2="SourceGraphic"
+         operator="in"
+         result="composite1"
+         id="feComposite5529" />
+    </filter>
+    <filter
+       style="color-interpolation-filters:sRGB"
+       id="filter6524"
+       inkscape:label="filter1" />
+  </defs>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     ns1:masterSlide="masterSlide"
+     inkscape:label="MASTER"
+     id="layer4"
+     inkscape:groupmode="layer"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <rect
+       y="4.0944824"
+       x="0"
+       height="50"
+       width="1050"
+       id="rect3358"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffcc00;fill-opacity:1;stroke:#d4aa00;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
+    <text
+       sodipodi:linespacing="125%"
+       id="text3607"
+       y="44.094482"
+       x="930"
+       style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         id="tspan4266"
+         y="44.094482"
+         x="930"
+         sodipodi:role="line">Hashing</tspan></text>
+  </g>
+  <g
+     style="display:inline"
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="Crowd of people">
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot4383"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><flowRegion
+         id="flowRegion4385"><rect
+           id="rect4387"
+           width="210.1855"
+           height="251.79218"
+           x="131.99362"
+           y="92.017303" /></flowRegion><flowPara
+         id="flowPara4389" /></flowRoot>    <text
+       sodipodi:linespacing="125%"
+       id="text6944"
+       y="44.094482"
+       x="10"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="44.094482"
+         x="10"
+         id="tspan6946"
+         sodipodi:role="line">A crowd of people</tspan></text>
+    <image
+       y="204.09448"
+       x="40"
+       id="image3549"
+       xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAFBAZADASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD36ilo oATNFLSUAGaM0tFABmkpaKAEzRS0UAJRS0UAJRS0UAJRmlooASilooASilooASilooASiiloASii loASilpKACiiloASilooASilpKACilooASilpKACilooATNFLRQAlFLRQAlFFFABRS0UAJRRRQAt FJRQAUUtJQAtFJRQAtFJRQAtFJRQAtFJRQAtFJRQAtFJRQAtJRRQAtFJRQAtFJRQAUtJXP6xq7bm tbZsAcO4/kKTdhNpGjd6vaWhKli7j+FOcVnv4kcn5LZQPd//AK1YGaq3V+lvkKN7+nYVm5mEqvKr s62HxGhYCaAqP7ynNa8FxFcx74ZFdfavHbvWL052yBB6KKz08SavYzebb30isPUAg/nSVU45ZnCD 1TPd6K868N/E2K6mS01lEgkY4W4ThCf9odvr0+leiA5GRyK1Uk9jtoYinXjzU2LRSUUzcWikooAW koooAWikooAWkoooAWikooAKWkooAKWkooAKKKKACiiigBaKSigBaKSigBaKSigBaKSigBaKSigB aKSigBaKSigBaKSigBaKSigBaKSigBaKSigChrN6bKwZlOJHOxfb3rjQa3PFEhM1vH2Clvz/AP1V gDkgVlN6nPUeok8hVMDqe9Y9x3rVuKyrispHBWlcx7nvWTcdTWtc96ybjqag8fEGc/WvWvhf4jkv 7KXSLqQtLaqGhYnkx9MfgcfgR6V5K/Wum+HE7Q+OLJFPEqyI3uNhb+YFVCVpIMuqunXjbroe70Ul FdZ9eLRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUU ALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUAcz4oTFxbv6qR+R/+vWGn3xXTeJo t1nFJj7j4/Aj/wCsK5hOGFYy3OaruyK4rKuK1bisq471nI8+oY9z3rJuK1rnvWTcVB5OIM5+tdP8 N4TL44s3HSJJHP8A3yR/WuYfrXf/AAkszJrN/eY4hgEf4sc/+y04q80Rl8ebERXmevUUlFdh9kLR SUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUA LRSUUALRSUUALRRSUALRSUUALRSUUALRSUUALRSUUAUdZi87Sbhe4XcPw5riRxXobqJI2RujDBrz 6RDFK8bdVJU/hWczGqupDcVlXHetSfpWXcd6xkeZVMe571k3Heta571k3HeoPJxBnP1r1/4UWXke HLi6Iwbic4PqqgD+e6vIH619A+D7L7B4S02AjB8kOw9C3zH9TWlJe9c6Mmp81Zy7I3KKSiuk+nFo pKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFooooAKKKKACiiigAoopKAFo pKWgAopKKAFooooAKKSigBaKKSgBaSiloAKKKSgBa4nW4fJ1aYAcMd4/H/6+a7Wua8UQ4mgmA+8p U/hz/WomtDOovdObm+6Ky7itWYfuzWVcd6wkeZXWpj3Pesm46mta571k3HeoPHxBXsbQ32p2tovW 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 e9Hme9O5hzlvzPejzPeqnme9Hme9Fw5y35nvR5nvVTzPejzPei4c5b8z3o8z3qp5nvR5nvRcOct+ Z70eZ71U8z3o8z3ouHOW/M96PM96qeZ70eZ70XDnLfme9Hme9VPM96PM96LhzlvzPejzPeqnme9H me9Fw5y35nvR5nvVTzPejzPei4c5b8z3o8z3qp5nvR5nvRcOct+Z70eZ71U8z3o8z3ouHOW/M96P M96qeZ70eZ70XDnLfme9Hme9VPM96PM96Lhzks0NtcvE08EUrRNvjLoGKN6jPQ0tvDb2cIhtoY4Y hkhI1CqM+wqHzPejzPenzMPadC35nvR5nvVTzPejzPelcOct+Z70eZ71U8z3o8z3ouHOW/M96PM9 6qeZ70eZ70XDnLfme9Hme9VPM96PM96LhzlvzPejzPeqnme9Hme9Fw5y35nvR5nvVTzPejzPei4c 5b8z3o8yqnme9Hme9Fw5ywRE33kU/UCk8uD/AJ4x/wDfIqDzPejzPei4uZFjbF/zzT/vkU5WVRhQ APaqvme9Hme9AcxZbY33lU/UUpZWGGAP1qr5nvR5nvRcOZFgLEDkRoD67RTgyjoAKq+Z70eZ70XD mRDRRRQZhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//Z "
+       height="321"
+       width="400" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="530"
+       y="215.09448"
+       id="text3552"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3554"
+         x="530"
+         y="215.09448">Searching for:</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="560"
+       y="265.09448"
+       id="text3556"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3558"
+         x="560"
+         y="265.09448">➢ Tim Evans</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="560"
+       y="325.09448"
+       id="text3556-8"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3558-1"
+         x="560"
+         y="325.09448">➢ Age 30 years</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="560"
+       y="445.09448"
+       id="text3556-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3558-4"
+         x="560"
+         y="445.09448">➢ Dark hair</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="560"
+       y="505.09448"
+       id="text3556-88"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3558-9"
+         x="560"
+         y="505.09448">➢ SSN 519-79-7723</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="560"
+       y="385.09448"
+       id="text3556-8-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3558-1-3"
+         x="560"
+         y="385.09448">➢ 1.85m tall</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="Filtering"
+     style="display:none">
+    <image
+       y="274.09448"
+       x="600"
+       id="image3206"
+       xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAGQAQoDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iii gAooooAKKKKACikooAWiiigAooooAKKbI6RRtJI6oiglmY4AHqTXDax8VvD+nRS/ZHe+lXO0R8Ix /wB40m7DSb2O7orwhvj7qEMx83R7Qx56LI+fz/8ArV2fhT4v6F4jlW3nVrG4bgb33Jn/AHuMfiMe 9LmQ+RnolFIORkHilqiQoopKAFopKKAFopKKAFooooAKKKKACiiigAooooAKKKSgBaKKKACiikoA WikpaACikooAWiiigAoopKAPEfi/43mlv/8AhGNPdgikfaSh5duu36D+f0rmLDwgktmDdSsJWHCj otZ0kE1/8Qby6uASxuW4Psea9Gt4lJUmuKvUaeh6OGpxtdnF3Hw6Z7YNbyh5D1U8D65rmNQ8Datp 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 KKKACjFFFABS4pKKAP/Z "
+       height="400"
+       width="266" />
+    <a
+       id="a7468"
+       xlink:href="http://www.javapractices.com/topic/TopicAction.do?Id=129"
+       xlink:title="http://www.javapractices.com/topic/TopicAction.do?Id=129"
+       target="_blank">
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+         x="10"
+         y="44.094482"
+         id="text6944-0"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan6946-4"
+           x="10"
+           y="44.094482">Filtering</tspan></text>
+    </a>
+    <image
+       style="display:inline"
+       y="93.094482"
+       x="10"
+       id="image3549-2"
+       xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAFBAZADASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD36ilo oATNFLSUAGaM0tFABmkpaKAEzRS0UAJRS0UAJRS0UAJRmlooASilooASilooASilooASiiloASii loASilpKACiiloASilooASilpKACilooASilpKACilooATNFLRQAlFLRQAlFFFABRS0UAJRRRQAt FJRQAUUtJQAtFJRQAtFJRQAtFJRQAtFJRQAtFJRQAtFJRQAtJRRQAtFJRQAtFJRQAUtJXP6xq7bm tbZsAcO4/kKTdhNpGjd6vaWhKli7j+FOcVnv4kcn5LZQPd//AK1YGaq3V+lvkKN7+nYVm5mEqvKr s62HxGhYCaAqP7ynNa8FxFcx74ZFdfavHbvWL052yBB6KKz08SavYzebb30isPUAg/nSVU45ZnCD 1TPd6K868N/E2K6mS01lEgkY4W4ThCf9odvr0+leiA5GRyK1Uk9jtoYinXjzU2LRSUUzcWikooAW koooAWikooAWkoooAWikooAKWkooAKWkooAKKKKACiiigBaKSigBaKSigBaKSigBaKSigBaKSigB aKSigBaKSigBaKSigBaKSigBaKSigBaKSigChrN6bKwZlOJHOxfb3rjQa3PFEhM1vH2Clvz/AP1V gDkgVlN6nPUeok8hVMDqe9Y9x3rVuKyrispHBWlcx7nvWTcdTWtc96ybjqag8fEGc/WvWvhf4jkv 7KXSLqQtLaqGhYnkx9MfgcfgR6V5K/Wum+HE7Q+OLJFPEqyI3uNhb+YFVCVpIMuqunXjbroe70Ul FdZ9eLRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUU ALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUAcz4oTFxbv6qR+R/+vWGn3xXTeJo t1nFJj7j4/Aj/wCsK5hOGFYy3OaruyK4rKuK1bisq471nI8+oY9z3rJuK1rnvWTcVB5OIM5+tdP8 N4TL44s3HSJJHP8A3yR/WuYfrXf/AAkszJrN/eY4hgEf4sc/+y04q80Rl8ebERXmevUUlFdh9kLR SUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUALRSUUA LRSUUALRSUUALRRSUALRSUUALRSUUALRSUUALRSUUAUdZi87Sbhe4XcPw5riRxXobqJI2RujDBrz 6RDFK8bdVJU/hWczGqupDcVlXHetSfpWXcd6xkeZVMe571k3Heta571k3HeoPJxBnP1r1/4UWXke HLi6Iwbic4PqqgD+e6vIH619A+D7L7B4S02AjB8kOw9C3zH9TWlJe9c6Mmp81Zy7I3KKSiuk+nFo pKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFopKKAFooooAKKKKACiiigAoopKAFo pKWgAopKKAFooooAKKSigBaKKSgBaSiloAKKKSgBa4nW4fJ1aYAcMd4/H/6+a7Wua8UQ4mgmA+8p U/hz/WomtDOovdObm+6Ky7itWYfuzWVcd6wkeZXWpj3Pesm46mta571k3HeoPHxBXsbQ32p2tovW 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 e9Hme9O5hzlvzPejzPeqnme9Hme9Fw5y35nvR5nvVTzPejzPei4c5b8z3o8z3qp5nvR5nvRcOct+ Z70eZ71U8z3o8z3ouHOW/M96PM96qeZ70eZ70XDnLfme9Hme9VPM96PM96LhzlvzPejzPeqnme9H me9Fw5y35nvR5nvVTzPejzPei4c5b8z3o8z3qp5nvR5nvRcOct+Z70eZ71U8z3o8z3ouHOW/M96P M96qeZ70eZ70XDnLfme9Hme9VPM96PM96Lhzks0NtcvE08EUrRNvjLoGKN6jPQ0tvDb2cIhtoY4Y hkhI1CqM+wqHzPejzPenzMPadC35nvR5nvVTzPejzPelcOct+Z70eZ71U8z3o8z3ouHOW/M96PM9 6qeZ70eZ70XDnLfme9Hme9VPM96PM96LhzlvzPejzPeqnme9Hme9Fw5y35nvR5nvVTzPejzPei4c 5b8z3o8yqnme9Hme9Fw5ywRE33kU/UCk8uD/AJ4x/wDfIqDzPejzPei4uZFjbF/zzT/vkU5WVRhQ APaqvme9Hme9AcxZbY33lU/UUpZWGGAP1qr5nvR5nvRcOZFgLEDkRoD67RTgyjoAKq+Z70eZ70XD mRDRRRQZhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//Z "
+       height="321"
+       width="400" />
+    <image
+       y="54.094482"
+       x="784"
+       id="image3268"
+       xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAGQAQoDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iii gBKWiigBKKWigApKWkoAKWkpaACkpaSgAopaSgBaSlqlqeq2OjWbXeoXKW8AON7nv6UAXKK8G8T/ ABu1C4upYPDyxwWq8Cd03SHj0OQK4tPiX4shn8x9dugM7iHY4H4Hj8KAPq2lrxfwz8coPNitfEQi Ibj7VbKRg/7S9/qPyr2O2uYLy3juLaVJYZF3JIhyGHqDQBJRRS0AFJS0UAJS0UUAFFJS0AJS0UUA JS0UUAFJS0lAC0lLSUALRRSUALRRRQAUUUlABS0lLQAUUUUAFJRRQAtfOfxU1288S+Jn0iFHVbSV ooo1OQ5BxuPuSP0FfRdeJ29hG3xkvBPGuFuXdVI/2dwP6g1MnZFQV2YmkfBzUZbM/wBoXEUTvhtq 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 "
+       height="400"
+       width="266" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="440"
+       y="164.09448"
+       id="text3556-8-6"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3558-1-9"
+         x="440"
+         y="164.09448">➢ Age 30 years</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="440"
+       y="284.09448"
+       id="text3556-5-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3558-4-0"
+         x="440"
+         y="284.09448">➢ Dark hair</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="440"
+       y="224.09448"
+       id="text3556-8-3-6"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3558-1-3-5"
+         x="440"
+         y="224.09448">➢ 1.85m tall</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="410"
+       y="124.09448"
+       id="text3556-8-6-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3558-1-9-0"
+         x="410"
+         y="124.09448">Step 1:</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="318.2605"
+       y="613.44324"
+       id="text3556-8-6-9-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3558-1-9-0-6"
+         x="318.2605"
+         y="613.44324">Step 2:</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="318.2605"
+       y="663.44324"
+       id="text3556-84"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3558-0"
+         x="318.2605"
+         y="663.44324">➢ Tim Evans</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="318.2605"
+       y="712.44324"
+       id="text3556-88-7"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3558-9-1"
+         x="318.2605"
+         y="712.44324">➢ SSN 519-79-7723</tspan></text>
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#Arrow1Mend-6-8);enable-background:accumulate"
+       d="M 684.81169,187.22531 760,234.09448"
+       id="path3408"
+       inkscape:connector-curvature="0" />
+    <image
+       style="display:inline"
+       y="454.09448"
+       x="20"
+       id="image3268-4"
+       xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAGQAQoDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iii gBKWiigBKKWigApKWkoAKWkpaACkpaSgAopaSgBaSlqlqeq2OjWbXeoXKW8AON7nv6UAXKK8G8T/ ABu1C4upYPDyxwWq8Cd03SHj0OQK4tPiX4shn8x9dugM7iHY4H4Hj8KAPq2lrxfwz8coPNitfEQi Ibj7VbKRg/7S9/qPyr2O2uYLy3juLaVJYZF3JIhyGHqDQBJRRS0AFJS0UAJS0UUAFFJS0AJS0UUA JS0UUAFJS0lAC0lLSUALRRSUALRRRQAUUUlABS0lLQAUUUUAFJRRQAtfOfxU1288S+Jn0iFHVbSV ooo1OQ5BxuPuSP0FfRdeJ29hG3xkvBPGuFuXdVI/2dwP6g1MnZFQV2YmkfBzUZbM/wBoXEUTvhtq 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 "
+       height="260"
+       width="160" />
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#Arrow1Mend-6n);enable-background:accumulate"
+       d="M 300,614.09448 174.27938,545.57932"
+       id="path3410-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     style="display:none"
+     inkscape:label="Hashing of strings"
+     id="g3105"
+     inkscape:groupmode="layer">
+    <rect
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:3;marker:none;enable-background:accumulate"
+       id="rect3178"
+       width="280"
+       height="30"
+       x="10.000008"
+       y="322.38171" />
+    <rect
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:3;marker:none;enable-background:accumulate"
+       id="rect3178-6"
+       width="280"
+       height="30"
+       x="11.211769"
+       y="241.16785" />
+    <a
+       target="_blank"
+       xlink:title="http://www.javapractices.com/topic/TopicAction.do?Id=129"
+       xlink:href="http://www.javapractices.com/topic/TopicAction.do?Id=129"
+       id="a3111">
+      <text
+         sodipodi:linespacing="125%"
+         id="text3113"
+         y="44.094482"
+         x="10"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           y="44.094482"
+           x="10"
+           id="tspan3115"
+           sodipodi:role="line">Hashing string values</tspan></text>
+    </a>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="20"
+       y="264.09448"
+       id="text3132"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3134"
+         x="20"
+         y="264.09448">FB</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="20"
+       y="344.09448"
+       id="text3136"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3138"
+         x="20"
+         y="344.09448">Ea</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="120"
+       y="264.09448"
+       id="text3140"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3142"
+         x="120"
+         y="264.09448">2236</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="120"
+       y="344.09448"
+       id="text3144"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3146"
+         x="120"
+         y="344.09448">2236</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="20"
+       y="304.09448"
+       id="text3148"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3150"
+         x="20"
+         y="304.09448">Jim</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="120"
+       y="304.09448"
+       id="text3152"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3154"
+         x="120"
+         y="304.09448">74478</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="20"
+       y="384.09448"
+       id="text3156"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3158"
+         x="20"
+         y="384.09448">Clive</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="120"
+       y="384.09448"
+       id="text3160"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3162"
+         x="120"
+         y="384.09448">65197999</tspan></text>
+    <rect
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       id="rect3164"
+       width="280"
+       height="220"
+       x="10"
+       y="184.09448"
+       ry="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:22px;line-height:125%;font-family:Monospace;-inkscape-font-specification:'Monospace Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="15.6017"
+       y="213.8931"
+       id="text3166"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3168"
+         x="15.6017"
+         y="213.8931">String</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:22px;line-height:125%;font-family:Monospace;-inkscape-font-specification:'Monospace Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="120"
+       y="214.09448"
+       id="text3170"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3172"
+         x="120"
+         y="214.09448">Hash value</tspan></text>
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       d="m 110,184.09448 v 220"
+       id="path3174"
+       inkscape:connector-curvature="0" />
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       d="M 10,224.09448 H 290"
+       id="path3176"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="36.582817"
+       y="109.01679"
+       id="text4148"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4150"
+         x="36.582817"
+         y="109.01679">Search for existence of string &quot;<tspan
+   style="fill:#ff0000"
+   id="tspan4164">Ea</tspan>&quot;</tspan><tspan
+         sodipodi:role="line"
+         x="36.582817"
+         y="154.01678"
+         id="tspan4160">  (having hash value <tspan
+   style="fill:#ff0000"
+   id="tspan4166">2236</tspan>)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="310"
+       y="224.09448"
+       id="text4156"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4158"
+         x="310"
+         y="224.09448">Step 1:</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="740"
+       y="254.09448"
+       id="text3132-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3134-4"
+         x="740"
+         y="254.09448">FB</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="740"
+       y="284.09448"
+       id="text3136-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3138-4"
+         x="740"
+         y="284.09448">Ea</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="840"
+       y="254.09448"
+       id="text3140-6"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3142-9"
+         x="840"
+         y="254.09448">2236</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:22px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="840"
+       y="284.09448"
+       id="text3144-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3146-4"
+         x="840"
+         y="284.09448">2236</tspan></text>
+    <rect
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       id="rect3164-6"
+       width="280"
+       height="120"
+       x="730"
+       y="184.09448"
+       ry="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:22px;line-height:125%;font-family:Monospace;-inkscape-font-specification:'Monospace Bold';letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="735.60168"
+       y="213.8931"
+       id="text3166-7"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3168-0"
+         x="735.60168"
+         y="213.8931">String</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:22px;line-height:125%;font-family:Monospace;-inkscape-font-specification:'Monospace Bold';letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="840"
+       y="214.09448"
+       id="text3170-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3172-8"
+         x="840"
+         y="214.09448">Hash value</tspan></text>
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       d="m 830,184.09448 v 120"
+       id="path3174-5"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       d="m 730,224.09448 h 280"
+       id="path3176-0"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="310"
+       y="264.09448"
+       id="text4156-4"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4158-1"
+         x="310"
+         y="264.09448">hash value == <tspan
+   style="fill:#ff0000"
+   id="tspan4567">2236</tspan></tspan></text>
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#Arrow1Mend-6-8);enable-background:accumulate"
+       d="m 300,354.09448 420,-70"
+       id="path4279"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="590"
+       y="504.09448"
+       id="text4156-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4158-7"
+         x="590"
+         y="504.09448">Step 2:</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="590"
+       y="554.09448"
+       id="text4156-4-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4158-1-7"
+         x="590"
+         y="554.09448">s.equals(&quot;<tspan
+   style="fill:#ff0000"
+   id="tspan4569">Ea</tspan>&quot;)</tspan></text>
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#Arrow1Mend-6-8);enable-background:accumulate"
+       d="m 710,324.09448 -360,250"
+       id="path4279-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="50"
+       y="644.09448"
+       id="text4148-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="50"
+         y="644.09448"
+         id="tspan4160-2">Result: String &quot;<tspan
+   style="fill:#ff0000"
+   id="tspan4638">Ea</tspan>&quot;found in collection</tspan></text>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot4648"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><flowRegion
+         id="flowRegion4650"><rect
+           id="rect4652"
+           width="428.4917"
+           height="139.19691"
+           x="498.09015"
+           y="395.26367" /></flowRegion><flowPara
+         id="flowPara4654" /></flowRoot>  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="hashcode() and equals()"
+     style="display:none">
+    <a
+       style="display:inline"
+       target="_blank"
+       xlink:title="http://www.javapractices.com/topic/TopicAction.do?Id=129"
+       xlink:href="http://www.javapractices.com/topic/TopicAction.do?Id=129"
+       id="a3111-9">
+      <text
+         sodipodi:linespacing="125%"
+         id="text3113-5"
+         y="44.094482"
+         x="10"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+         xml:space="preserve"><tspan
+           y="44.094482"
+           x="10"
+           id="tspan3115-2"
+           sodipodi:role="line">hashCode() and equals()</tspan></text>
+    </a>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="10"
+       y="154.09448"
+       id="text3197"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3199"
+         x="10"
+         y="154.09448">obj1.equals(obj2) ⇒ obj1.hashCode() == obj2.hashCode()</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:San;-inkscape-font-specification:San;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="35.851158"
+       y="260.46964"
+       id="text3201"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3203"
+         x="35.851158"
+         y="260.46964">The inverse statement is false in general,</tspan><tspan
+         sodipodi:role="line"
+         x="35.851158"
+         y="305.46964"
+         id="tspan3205">see previous string example:</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="110"
+       y="384.09448"
+       id="text3232"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3234"
+         x="110"
+         y="384.09448">&quot;FB&quot;.hashCode() == &quot;Ea&quot;.hashCode()</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="110"
+       y="514.09448"
+       id="text3232-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3234-7"
+         x="110"
+         y="514.09448">&quot;FB&quot;.equals(&quot;Ea&quot;) == false</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:San;-inkscape-font-specification:San;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="200"
+       y="444.09448"
+       id="text3201-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="200"
+         y="444.09448"
+         id="tspan3205-8"
+         style="fill:#ff0000">but:</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Set of Strings"
+     style="display:none">
+    <path
+       id="path3249"
+       d="m 613.00825,224.17447 c 14.37593,0 26.00801,9.09895 26.00801,20.34422 0,11.24525 -11.63208,20.3442 -26.00801,20.3442 H 352.92811 c -14.37593,0 -26.00802,-9.09895 -26.00802,-20.3442 0,-11.24527 11.63209,-20.34422 26.00802,-20.34422 z m 234.07211,389.28264 c 0,109.70741 -110.73724,119.32387 -262.31519,119.32387 -32.30683,0 -66.46836,-0.43739 -101.79699,-0.43739 -35.35464,0 -69.49016,0.43739 -101.823,0.43739 -151.52594,-9.6e-4 -262.28919,-9.65588 -262.28919,-119.32387 0,-98.94025 90.16491,-254.74002 219.01023,-328.24874 h 290.1779 c 128.87134,73.50872 219.03624,229.30849 219.03624,328.24874 z m -52.01602,0 c 0,-83.12518 -75.17941,-218.26285 -184.69753,-287.56032 H 355.51916 c -109.46773,69.29618 -184.64714,204.43514 -184.64714,287.56032 0,59.00584 30.40174,78.63546 210.27316,78.63546 15.67145,0 31.74766,-0.11952 48.20585,-0.19837 17.50015,-0.11952 35.40504,-0.23905 53.61552,-0.23905 18.21049,0 36.11701,0.11953 53.59114,0.23905 16.45819,0.0802 32.56041,0.19837 48.20585,0.19837 179.92506,-9.6e-4 210.3008,-19.62962 210.3008,-78.63546 z M 274.90406,91.024159 c 10.00659,-6.59661 22.32463,-9.257887 36.0146,-9.257887 56.35937,0 135.72932,44.900948 169.86484,44.900948 0.76236,0 1.47271,0 2.18468,-0.0394 0.71196,0.0394 1.42231,0.0394 2.18466,0.0394 34.13552,0 113.53149,-44.900948 169.86485,-44.900948 13.66396,0 26.00802,2.662548 36.01459,9.257887 52.01603,34.330861 -62.98816,112.807371 -62.98816,112.807371 h -290.1779 c 0,-9.6e-4 -114.97817,-78.47651 -62.96216,-112.807371 z m 242.42883,72.117691 h 90.1389 c 17.57653,-13.78829 33.32276,-29.40375 40.68792,-40.29171 -20.77553,2.34467 -52.26961,13.8277 -75.94178,22.41042 -19.7092,7.23236 -37.7929,13.82897 -54.88504,17.88129 z M 317.77666,122.85141 c 7.34075,10.88797 23.0626,26.50342 40.66353,40.2917 h 90.16489 c -17.09375,-4.05358 -35.17746,-10.64892 -54.88665,-17.88128 -23.64616,-8.58272 -55.14024,-20.06575 -75.94177,-22.41042 z"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="10"
+       y="44.094482"
+       id="text3239"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3241"
+         x="10"
+         y="44.094482">A set of strings</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="-31.396935"
+       y="652.56903"
+       id="text3132-58"
+       sodipodi:linespacing="125%"
+       transform="rotate(-24.563173)"><tspan
+         sodipodi:role="line"
+         id="tspan3134-9"
+         x="-31.396935"
+         y="652.56903">FB</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#ff0000;fill-opacity:1;stroke:none"
+       x="11.855068"
+       y="647.63092"
+       id="text3140-4"
+       sodipodi:linespacing="125%"
+       transform="rotate(-24.563173)"><tspan
+         sodipodi:role="line"
+         id="tspan3142-4"
+         x="11.855068"
+         y="647.63092">(2236)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="542.52319"
+       y="60.756874"
+       id="text3136-4"
+       sodipodi:linespacing="125%"
+       transform="rotate(39.93424)"><tspan
+         sodipodi:role="line"
+         id="tspan3138-5"
+         x="542.52319"
+         y="60.756874">Ea</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#ff0000;fill-opacity:1;stroke:none"
+       x="586.61011"
+       y="62.005608"
+       id="text3144-4"
+       sodipodi:linespacing="125%"
+       transform="rotate(39.93424)"><tspan
+         sodipodi:role="line"
+         id="tspan3146-1"
+         x="586.61011"
+         y="62.005608">(2236)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="560"
+       y="514.09448"
+       id="text3148-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3150-9"
+         x="560"
+         y="514.09448">Jim</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#ff0000;fill-opacity:1;stroke:none"
+       x="620"
+       y="514.09448"
+       id="text3152-4"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3154-2"
+         x="620"
+         y="514.09448">(74478)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="542.43622"
+       y="468.46069"
+       id="text3156-7"
+       sodipodi:linespacing="125%"
+       transform="rotate(12.240063)"><tspan
+         sodipodi:role="line"
+         id="tspan3158-6"
+         x="542.43622"
+         y="468.46069">Clive</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#ff0000;fill-opacity:1;stroke:none"
+       x="646.02496"
+       y="477.9978"
+       id="text3160-4"
+       sodipodi:linespacing="125%"
+       transform="rotate(12.240063)"><tspan
+         sodipodi:role="line"
+         id="tspan3162-0"
+         x="646.02496"
+         y="477.9978">(65197999)</tspan></text>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3354"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><flowRegion
+         id="flowRegion3356"><rect
+           id="rect3359"
+           width="371.47128"
+           height="262.46164"
+           x="327.86743"
+           y="365.07639" /></flowRegion><flowPara
+         id="flowPara3361" /></flowRoot>  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="Dictionary"
+     style="display:none">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="10"
+       y="44.094482"
+       id="text3239-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3241-9"
+         x="10"
+         y="44.094482">Dictionary</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="280"
+       y="464.09448"
+       id="text4343"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4345"
+         x="280"
+         y="464.09448">Garçon</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="280"
+       y="514.09448"
+       id="text4343-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4345-7"
+         x="280"
+         y="514.09448">nager</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="280"
+       y="414.09448"
+       id="text4343-05"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4345-0"
+         x="280"
+         y="414.09448">Rêve</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="280"
+       y="564.09448"
+       id="text4343-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4345-2"
+         x="280"
+         y="564.09448">Soleil</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="140"
+       y="464.09448"
+       id="text4343-03"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4345-4"
+         x="140"
+         y="464.09448">Waiter</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="140"
+       y="514.09448"
+       id="text4343-0-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4345-7-6"
+         x="140"
+         y="514.09448">swim</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="140"
+       y="414.09448"
+       id="text4343-05-7"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4345-0-0"
+         x="140"
+         y="414.09448">Dream</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="140"
+       y="564.09448"
+       id="text4343-9-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4345-2-1"
+         x="140"
+         y="564.09448">Sun</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="140"
+       y="364.09448"
+       id="text4343-05-7-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4345-0-0-2"
+         x="140"
+         y="364.09448">Key</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="280"
+       y="364.09448"
+       id="text4343-05-7-56"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4345-0-0-1"
+         x="280"
+         y="364.09448">Value</tspan></text>
+    <rect
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       id="rect4455"
+       width="280"
+       height="250"
+       x="130"
+       y="324.09448" />
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       d="m 260,324.09448 v 250"
+       id="path4457"
+       inkscape:connector-curvature="0" />
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       d="M 130,374.09448 H 410"
+       id="path4459"
+       inkscape:connector-curvature="0" />
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       d="m 130.74913,424.5939 h 280"
+       id="path4459-5"
+       inkscape:connector-curvature="0" />
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       d="m 131.58766,474.90603 h 280"
+       id="path4459-6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       d="m 131.58766,524.37964 h 280"
+       id="path4459-9"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="40"
+       y="164.09448"
+       id="text3239-1-8"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3241-9-1"
+         x="40"
+         y="164.09448">Example: English ↦ French</tspan></text>
+  </g>
+  <g
+     inkscape:label="Set valued dictionary"
+     id="g4493"
+     inkscape:groupmode="layer"
+     style="display:none">
+    <text
+       sodipodi:linespacing="125%"
+       id="text4495"
+       y="44.094482"
+       x="10"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="44.094482"
+         x="10"
+         id="tspan4497"
+         sodipodi:role="line">Set valued dictionary </tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4499"
+       y="294.09448"
+       x="280"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="294.09448"
+         x="280"
+         id="tspan4501"
+         sodipodi:role="line">{Garçon, Serveur, Sommelier}</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4503"
+       y="344.09448"
+       x="280"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="344.09448"
+         x="280"
+         id="tspan4505"
+         sodipodi:role="line">{nager, se baigner}</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4507"
+       y="244.09448"
+       x="280"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="244.09448"
+         x="280"
+         id="tspan4509"
+         sodipodi:role="line">{Rêve, Illusion}</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4511"
+       y="394.09448"
+       x="280"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="394.09448"
+         x="280"
+         id="tspan4513"
+         sodipodi:role="line">{Soleil}</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4515"
+       y="294.09448"
+       x="140"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="294.09448"
+         x="140"
+         id="tspan4517"
+         sodipodi:role="line">Waiter</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4519"
+       y="344.09448"
+       x="140"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="344.09448"
+         x="140"
+         id="tspan4521"
+         sodipodi:role="line">swim</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4523"
+       y="244.09448"
+       x="140"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="244.09448"
+         x="140"
+         id="tspan4525"
+         sodipodi:role="line">Dream</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4527"
+       y="394.09448"
+       x="140"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="394.09448"
+         x="140"
+         id="tspan4529"
+         sodipodi:role="line">Sun</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4531"
+       y="194.09448"
+       x="140"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="194.09448"
+         x="140"
+         id="tspan4533"
+         sodipodi:role="line">Key</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4535"
+       y="194.09448"
+       x="280"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="194.09448"
+         x="280"
+         id="tspan4537"
+         sodipodi:role="line">Value</tspan></text>
+    <rect
+       y="154.09448"
+       x="130"
+       height="250"
+       width="650"
+       id="rect4539"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4541"
+       d="m 260,154.09448 v 250"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4543"
+       d="M 130,204.09448 H 780"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4545"
+       d="M 130.74913,254.5939 780,254.09448"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4547"
+       d="M 131.58766,304.90603 780,304.09448"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4549"
+       d="M 131.58766,354.37964 780,354.09448"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Ordering Words by length"
+     style="display:none">
+    <text
+       sodipodi:linespacing="125%"
+       id="text4495-0"
+       y="44.094482"
+       x="10"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="44.094482"
+         x="10"
+         id="tspan4497-1"
+         sodipodi:role="line">Grouping words by length </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="36.895569"
+       y="130.28642"
+       id="text4746"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4748"
+         x="36.895569"
+         y="130.28642">my text does contain some words of different lengths</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4515-6"
+       y="444.09448"
+       x="20"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="444.09448"
+         x="20"
+         id="tspan4517-7"
+         sodipodi:role="line">4</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4519-8"
+       y="494.09448"
+       x="20"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="494.09448"
+         x="20"
+         id="tspan4521-0"
+         sodipodi:role="line">5</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4523-1"
+       y="394.09448"
+       x="20"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="394.09448"
+         x="20"
+         id="tspan4525-1"
+         sodipodi:role="line">2</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4527-6"
+       y="544.09448"
+       x="20"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="544.09448"
+         x="20"
+         id="tspan4529-1"
+         sodipodi:role="line">7</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4531-8"
+       y="344.09448"
+       x="20"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="344.09448"
+         x="20"
+         id="tspan4533-0"
+         sodipodi:role="line">Key</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4535-6"
+       y="344.09448"
+       x="120"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="344.09448"
+         x="120"
+         id="tspan4537-8"
+         sodipodi:role="line">Value</tspan></text>
+    <rect
+       y="304.09448"
+       x="10"
+       height="310"
+       width="450"
+       id="rect4539-6"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4541-6"
+       d="m 98.07322,302.41741 v 310"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4543-3"
+       d="M 10,354.09448 H 460"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4545-6"
+       d="M 10.74913,404.5939 460,404.09448"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4547-1"
+       d="M 11.58766,454.90603 460,454.09448"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4549-6"
+       d="M 11.58766,504.37964 460,504.09448"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="110"
+       y="394.09448"
+       id="text4851"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4853"
+         x="110"
+         y="394.09448">{my, of}</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="110"
+       y="444.09448"
+       id="text4855"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4857"
+         x="110"
+         y="444.09448">{text, does, some}</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="110"
+       y="494.09448"
+       id="text4871"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4873"
+         x="110"
+         y="494.09448">{words}</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="110"
+       y="604.09448"
+       id="text4879"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4881"
+         x="110"
+         y="604.09448">{different}</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="110"
+       y="544.09448"
+       id="text4883"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4885"
+         x="110"
+         y="544.09448">{contain, lengths}</tspan></text>
+    <path
+       inkscape:connector-curvature="0"
+       id="path4549-6-7"
+       d="M 12.605015,555.53031 460,554.09448"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       sodipodi:nodetypes="cc" />
+    <text
+       sodipodi:linespacing="125%"
+       id="text4527-6-1"
+       y="594.09448"
+       x="20"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="594.09448"
+         x="20"
+         id="tspan4529-1-6"
+         sodipodi:role="line">9</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4515-6-7"
+       y="444.09448"
+       x="690"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="444.09448"
+         x="690"
+         id="tspan4517-7-2"
+         sodipodi:role="line">4</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4519-8-8"
+       y="494.09448"
+       x="690"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="494.09448"
+         x="690"
+         id="tspan4521-0-9"
+         sodipodi:role="line">5</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4523-1-4"
+       y="394.09448"
+       x="690"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="394.09448"
+         x="690"
+         id="tspan4525-1-8"
+         sodipodi:role="line">2</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4527-6-7"
+       y="544.09448"
+       x="690"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="544.09448"
+         x="690"
+         id="tspan4529-1-65"
+         sodipodi:role="line">7</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4531-8-2"
+       y="344.09448"
+       x="690"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="344.09448"
+         x="690"
+         id="tspan4533-0-4"
+         sodipodi:role="line">Key</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text4535-6-2"
+       y="344.09448"
+       x="780"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:'Sans Bold';letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="344.09448"
+         x="780"
+         id="tspan4537-8-2"
+         sodipodi:role="line">Value</tspan></text>
+    <rect
+       y="304.09448"
+       x="680"
+       height="310"
+       width="210"
+       id="rect4539-6-5"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4541-6-5"
+       d="m 769.75029,304.09448 v 310"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4543-3-3"
+       d="M 680,354.09448 H 890"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4545-6-3"
+       d="M 680.74913,404.5939 890,404.09448"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4547-1-6"
+       d="M 681.58766,454.90603 890,454.09448"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4549-6-4"
+       d="M 681.58766,504.37964 890,504.09448"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="780"
+       y="394.09448"
+       id="text4851-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4853-4"
+         x="780"
+         y="394.09448">2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="780"
+       y="444.09448"
+       id="text4855-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4857-1"
+         x="780"
+         y="444.09448">3</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="780"
+       y="494.09448"
+       id="text4871-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4873-5"
+         x="780"
+         y="494.09448">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="780"
+       y="594.09448"
+       id="text4879-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4881-1"
+         x="780"
+         y="594.09448">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Monospace;-inkscape-font-specification:Monospace;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="780"
+       y="544.09448"
+       id="text4883-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4885-6"
+         x="780"
+         y="544.09448">2</tspan></text>
+    <path
+       inkscape:connector-curvature="0"
+       id="path4549-6-7-5"
+       d="M 682.60502,555.53031 890,554.09448"
+       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+       sodipodi:nodetypes="cc" />
+    <text
+       sodipodi:linespacing="125%"
+       id="text4527-6-1-9"
+       y="594.09448"
+       x="690"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       xml:space="preserve"><tspan
+         y="594.09448"
+         x="690"
+         id="tspan4529-1-6-5"
+         sodipodi:role="line">9</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+       x="10"
+       y="234.09448"
+       id="text5034"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan5036"
+         x="10"
+         y="234.09448">List of words by </tspan><tspan
+         sodipodi:role="line"
+         x="10"
+         y="274.09448"
+         id="tspan5038">word length</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+       x="680"
+       y="234.09448"
+       id="text5034-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan5036-8"
+         x="680"
+         y="234.09448">Word frequencies </tspan><tspan
+         sodipodi:role="line"
+         x="680"
+         y="274.09448"
+         id="tspan5038-4">by word length</tspan></text>
+  </g>
+  <script
+     ns1:version="1.5.5"
+     id="JessyInk">// Copyright 2008, 2009 Hannes Hochreiner
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program.  If not, see http://www.gnu.org/licenses/.
+
+// Set onload event handler.
+window.onload = jessyInkInit;
+
+// Creating a namespace dictionary. The standard Inkscape namespaces are taken from inkex.py.
+var NSS = new Object();
+NSS['sodipodi']='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd';
+NSS['cc']='http://web.resource.org/cc/';
+NSS['svg']='http://www.w3.org/2000/svg';
+NSS['dc']='http://purl.org/dc/elements/1.1/';
+NSS['rdf']='http://www.w3.org/1999/02/22-rdf-syntax-ns#';
+NSS['inkscape']='http://www.inkscape.org/namespaces/inkscape';
+NSS['xlink']='http://www.w3.org/1999/xlink';
+NSS['xml']='http://www.w3.org/XML/1998/namespace';
+NSS['jessyink']='https://launchpad.net/jessyink';
+
+// Keycodes.
+var LEFT_KEY = 37; // cursor left keycode
+var UP_KEY = 38; // cursor up keycode
+var RIGHT_KEY = 39; // cursor right keycode
+var DOWN_KEY = 40; // cursor down keycode
+var PAGE_UP_KEY = 33; // page up keycode
+var PAGE_DOWN_KEY = 34; // page down keycode
+var HOME_KEY = 36; // home keycode
+var END_KEY = 35; // end keycode
+var ENTER_KEY = 13; // next slide
+var SPACE_KEY = 32;
+var ESCAPE_KEY = 27;
+
+// Presentation modes.
+var SLIDE_MODE = 1;
+var INDEX_MODE = 2;
+var DRAWING_MODE = 3;
+
+// Mouse handler actions.
+var MOUSE_UP = 1;
+var MOUSE_DOWN = 2;
+var MOUSE_MOVE = 3;
+var MOUSE_WHEEL = 4;
+
+// Parameters.
+var ROOT_NODE = document.getElementsByTagNameNS(NSS[&quot;svg&quot;], &quot;svg&quot;)[0];
+var HEIGHT = 0;
+var WIDTH = 0;
+var INDEX_COLUMNS_DEFAULT = 4;
+var INDEX_COLUMNS = INDEX_COLUMNS_DEFAULT;
+var INDEX_OFFSET = 0;
+var STATE_START = -1;
+var STATE_END = -2;
+var BACKGROUND_COLOR = null;
+var slides = new Array();
+
+// Initialisation.
+var currentMode = SLIDE_MODE;
+var masterSlide = null;
+var activeSlide = 0;
+var activeEffect = 0;
+var timeStep = 30; // 40 ms equal 25 frames per second.
+var lastFrameTime = null;
+var processingEffect = false;
+var transCounter = 0;
+var effectArray = 0;
+var defaultTransitionInDict = new Object();
+defaultTransitionInDict[&quot;name&quot;] = &quot;appear&quot;;
+var defaultTransitionOutDict = new Object();
+defaultTransitionOutDict[&quot;name&quot;] = &quot;appear&quot;;
+var jessyInkInitialised = false;
+
+// Initialise char and key code dictionaries.
+var charCodeDictionary = getDefaultCharCodeDictionary();
+var keyCodeDictionary = getDefaultKeyCodeDictionary();
+
+// Initialise mouse handler dictionary.
+var mouseHandlerDictionary = getDefaultMouseHandlerDictionary();
+
+var progress_bar_visible = false;
+var timer_elapsed = 0;
+var timer_start = timer_elapsed;
+var timer_duration = 15; // 15 minutes
+
+var history_counter = 0;
+var history_original_elements = new Array();
+var history_presentation_elements = new Array();
+
+var mouse_original_path = null;
+var mouse_presentation_path = null;
+var mouse_last_x = -1;
+var mouse_last_y = -1;
+var mouse_min_dist_sqr = 3 * 3;
+var path_colour = &quot;red&quot;;
+var path_width_default = 3;
+var path_width = path_width_default;
+var path_paint_width = path_width;
+
+var number_of_added_slides = 0;
+
+/** Initialisation function.
+ *  The whole presentation is set-up in this function.
+ */
+function jessyInkInit()
+{
+	// Make sure we only execute this code once. Double execution can occur if the onload event handler is set
+	// in the main svg tag as well (as was recommended in earlier versions). Executing this function twice does
+	// not lead to any problems, but it takes more time.
+	if (jessyInkInitialised)
+		return;
+
+	// Making the presentation scaleable.
+	var VIEWBOX = ROOT_NODE.getAttribute(&quot;viewBox&quot;);
+
+	if (VIEWBOX)
+	{
+		WIDTH = ROOT_NODE.viewBox.animVal.width;
+		HEIGHT = ROOT_NODE.viewBox.animVal.height;
+	}
+	else
+	{
+		HEIGHT = parseFloat(ROOT_NODE.getAttribute(&quot;height&quot;));
+		WIDTH = parseFloat(ROOT_NODE.getAttribute(&quot;width&quot;));
+		ROOT_NODE.setAttribute(&quot;viewBox&quot;, &quot;0 0 &quot; + WIDTH + &quot; &quot; + HEIGHT);
+	}
+
+	ROOT_NODE.setAttribute(&quot;width&quot;, &quot;100%&quot;);
+	ROOT_NODE.setAttribute(&quot;height&quot;, &quot;100%&quot;);
+
+	// Setting the background color.
+	var namedViews = document.getElementsByTagNameNS(NSS[&quot;sodipodi&quot;], &quot;namedview&quot;);
+
+	for (var counter = 0; counter &lt; namedViews.length; counter++)
+	{
+		if (namedViews[counter].hasAttribute(&quot;id&quot;) &amp;&amp; namedViews[counter].hasAttribute(&quot;pagecolor&quot;))
+		{
+			if (namedViews[counter].getAttribute(&quot;id&quot;) == &quot;base&quot;)
+			{
+				BACKGROUND_COLOR = namedViews[counter].getAttribute(&quot;pagecolor&quot;);
+				var newAttribute = &quot;background-color:&quot; + BACKGROUND_COLOR + &quot;;&quot;;
+
+				if (ROOT_NODE.hasAttribute(&quot;style&quot;))
+					newAttribute += ROOT_NODE.getAttribute(&quot;style&quot;);
+
+				ROOT_NODE.setAttribute(&quot;style&quot;, newAttribute);
+			}
+		}
+	}
+
+	// Defining clip-path.
+	var defsNodes = document.getElementsByTagNameNS(NSS[&quot;svg&quot;], &quot;defs&quot;);
+
+	if (defsNodes.length &gt; 0)
+	{
+		var existingClipPath = document.getElementById(&quot;jessyInkSlideClipPath&quot;);
+
+		if (!existingClipPath)
+		{
+			var rectNode = document.createElementNS(NSS[&quot;svg&quot;], &quot;rect&quot;);
+			var clipPath = document.createElementNS(NSS[&quot;svg&quot;], &quot;clipPath&quot;);
+
+			rectNode.setAttribute(&quot;x&quot;, 0);
+			rectNode.setAttribute(&quot;y&quot;, 0);
+			rectNode.setAttribute(&quot;width&quot;, WIDTH);
+			rectNode.setAttribute(&quot;height&quot;, HEIGHT);
+
+			clipPath.setAttribute(&quot;id&quot;, &quot;jessyInkSlideClipPath&quot;);
+			clipPath.setAttribute(&quot;clipPathUnits&quot;, &quot;userSpaceOnUse&quot;);
+
+			clipPath.appendChild(rectNode);
+			defsNodes[0].appendChild(clipPath);
+		}
+	}
+
+	// Making a list of the slide and finding the master slide.
+	var nodes = document.getElementsByTagNameNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+	var tempSlides = new Array();
+	var existingJessyInkPresentationLayer = null;
+
+	for (var counter = 0; counter &lt; nodes.length; counter++)
+	{
+		if (nodes[counter].getAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;) &amp;&amp; (nodes[counter].getAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;) == &quot;layer&quot;))
+		{
+			if (nodes[counter].getAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;) &amp;&amp; nodes[counter].getAttributeNS(NSS[&quot;jessyink&quot;], &quot;masterSlide&quot;) == &quot;masterSlide&quot;)
+				masterSlide = nodes[counter];
+			else if (nodes[counter].getAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;) &amp;&amp; nodes[counter].getAttributeNS(NSS[&quot;jessyink&quot;], &quot;presentationLayer&quot;) == &quot;presentationLayer&quot;)
+				existingJessyInkPresentationLayer = nodes[counter];
+			else
+				tempSlides.push(nodes[counter].getAttribute(&quot;id&quot;));
+		}
+		else if (nodes[counter].getAttributeNS(NSS['jessyink'], 'element'))
+		{
+			handleElement(nodes[counter]);
+		}
+	}
+
+	// Hide master slide set default transitions.
+	if (masterSlide)
+	{
+		masterSlide.style.display = &quot;none&quot;;
+
+		if (masterSlide.hasAttributeNS(NSS[&quot;jessyink&quot;], &quot;transitionIn&quot;))
+			defaultTransitionInDict = propStrToDict(masterSlide.getAttributeNS(NSS[&quot;jessyink&quot;], &quot;transitionIn&quot;));
+
+		if (masterSlide.hasAttributeNS(NSS[&quot;jessyink&quot;], &quot;transitionOut&quot;))
+			defaultTransitionOutDict = propStrToDict(masterSlide.getAttributeNS(NSS[&quot;jessyink&quot;], &quot;transitionOut&quot;));
+	}
+
+	if (existingJessyInkPresentationLayer != null)
+	{
+		existingJessyInkPresentationLayer.parentNode.removeChild(existingJessyInkPresentationLayer);
+	}
+
+	// Set start slide.
+	var hashObj = new LocationHash(window.location.hash);
+
+	activeSlide = hashObj.slideNumber;
+	activeEffect = hashObj.effectNumber;
+
+	if (activeSlide &lt; 0)
+		activeSlide = 0;
+	else if (activeSlide &gt;= tempSlides.length)
+		activeSlide = tempSlides.length - 1;
+
+	var originalNode = document.getElementById(tempSlides[counter]);
+
+	var JessyInkPresentationLayer = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+	JessyInkPresentationLayer.setAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;, &quot;layer&quot;);
+	JessyInkPresentationLayer.setAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;, &quot;JessyInk Presentation Layer&quot;);
+	JessyInkPresentationLayer.setAttributeNS(NSS[&quot;jessyink&quot;], &quot;presentationLayer&quot;, &quot;presentationLayer&quot;);
+	JessyInkPresentationLayer.setAttribute(&quot;id&quot;, &quot;jessyink_presentation_layer&quot;);
+	JessyInkPresentationLayer.style.display = &quot;inherit&quot;;
+	ROOT_NODE.appendChild(JessyInkPresentationLayer);
+
+	// Gathering all the information about the transitions and effects of the slides, set the background
+	// from the master slide and substitute the auto-texts.
+	for (var counter = 0; counter &lt; tempSlides.length; counter++)
+	{
+		var originalNode = document.getElementById(tempSlides[counter]);
+		originalNode.style.display = &quot;none&quot;;
+		var node = suffixNodeIds(originalNode.cloneNode(true), &quot;_&quot; + counter);
+		JessyInkPresentationLayer.appendChild(node);
+		slides[counter] = new Object();
+		slides[counter][&quot;original_element&quot;] = originalNode;
+		slides[counter][&quot;element&quot;] = node;
+
+		// Set build in transition.
+		slides[counter][&quot;transitionIn&quot;] = new Object();
+
+		var dict;
+
+		if (node.hasAttributeNS(NSS[&quot;jessyink&quot;], &quot;transitionIn&quot;))
+			dict = propStrToDict(node.getAttributeNS(NSS[&quot;jessyink&quot;], &quot;transitionIn&quot;));
+		else
+			dict = defaultTransitionInDict;
+
+		slides[counter][&quot;transitionIn&quot;][&quot;name&quot;] = dict[&quot;name&quot;];
+		slides[counter][&quot;transitionIn&quot;][&quot;options&quot;] = new Object();
+
+		for (key in dict)
+			if (key != &quot;name&quot;)
+				slides[counter][&quot;transitionIn&quot;][&quot;options&quot;][key] = dict[key];
+
+		// Set build out transition.
+		slides[counter][&quot;transitionOut&quot;] = new Object();
+
+		if (node.hasAttributeNS(NSS[&quot;jessyink&quot;], &quot;transitionOut&quot;))
+			dict = propStrToDict(node.getAttributeNS(NSS[&quot;jessyink&quot;], &quot;transitionOut&quot;));
+		else
+			dict = defaultTransitionOutDict;
+
+		slides[counter][&quot;transitionOut&quot;][&quot;name&quot;] = dict[&quot;name&quot;];
+		slides[counter][&quot;transitionOut&quot;][&quot;options&quot;] = new Object();
+
+		for (key in dict)
+			if (key != &quot;name&quot;)
+				slides[counter][&quot;transitionOut&quot;][&quot;options&quot;][key] = dict[key];
+
+		// Copy master slide content.
+		if (masterSlide)
+		{
+			var clonedNode = suffixNodeIds(masterSlide.cloneNode(true), &quot;_&quot; + counter);
+			clonedNode.removeAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;);
+			clonedNode.removeAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;);
+			clonedNode.style.display = &quot;inherit&quot;;
+
+			node.insertBefore(clonedNode, node.firstChild);
+		}
+
+		// Setting clip path.
+		node.setAttribute(&quot;clip-path&quot;, &quot;url(#jessyInkSlideClipPath)&quot;);
+
+		// Substitute auto texts.
+		substituteAutoTexts(node, node.getAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;), counter + 1, tempSlides.length);
+
+		node.removeAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;);
+		node.removeAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;);
+
+		// Set effects.
+		var tempEffects = new Array();
+		var groups = new Object();
+
+		for (var IOCounter = 0; IOCounter &lt;= 1; IOCounter++)
+		{
+			var propName = &quot;&quot;;
+			var dir = 0;
+
+			if (IOCounter == 0)
+			{
+				propName = &quot;effectIn&quot;;
+				dir = 1;
+			}
+			else if (IOCounter == 1)
+			{
+				propName = &quot;effectOut&quot;;
+				dir = -1;
+			}
+
+			var effects = getElementsByPropertyNS(node, NSS[&quot;jessyink&quot;], propName);
+
+			for (var effectCounter = 0; effectCounter &lt; effects.length; effectCounter++)
+			{
+				var element = document.getElementById(effects[effectCounter]);
+				var dict = propStrToDict(element.getAttributeNS(NSS[&quot;jessyink&quot;], propName));
+
+				// Put every element that has an effect associated with it, into its own group.
+				// Unless of course, we already put it into its own group.
+				if (!(groups[element.id]))
+				{
+					var newGroup = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+
+					element.parentNode.insertBefore(newGroup, element);
+					newGroup.appendChild(element.parentNode.removeChild(element));
+					groups[element.id] = newGroup;
+				}
+
+				var effectDict = new Object();
+
+				effectDict[&quot;effect&quot;] = dict[&quot;name&quot;];
+				effectDict[&quot;dir&quot;] = dir;
+				effectDict[&quot;element&quot;] = groups[element.id];
+
+				for (var option in dict)
+				{
+					if ((option != &quot;name&quot;) &amp;&amp; (option != &quot;order&quot;))
+					{
+						if (!effectDict[&quot;options&quot;])
+							effectDict[&quot;options&quot;] = new Object();
+
+						effectDict[&quot;options&quot;][option] = dict[option];
+					}
+				}
+
+				if (!tempEffects[dict[&quot;order&quot;]])
+					tempEffects[dict[&quot;order&quot;]] = new Array();
+
+				tempEffects[dict[&quot;order&quot;]][tempEffects[dict[&quot;order&quot;]].length] = effectDict;
+			}
+		}
+
+		// Make invisible, but keep in rendering tree to ensure that bounding box can be calculated.
+		node.setAttribute(&quot;opacity&quot;,0);
+		node.style.display = &quot;inherit&quot;;
+
+		// Create a transform group.
+		var transformGroup = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+
+		// Add content to transform group.
+		while (node.firstChild)
+			transformGroup.appendChild(node.firstChild);
+
+		// Transfer the transform attribute from the node to the transform group.
+		if (node.getAttribute(&quot;transform&quot;))
+		{
+			transformGroup.setAttribute(&quot;transform&quot;, node.getAttribute(&quot;transform&quot;));
+			node.removeAttribute(&quot;transform&quot;);
+		}
+
+		// Create a view group.
+		var viewGroup = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+
+		viewGroup.appendChild(transformGroup);
+		slides[counter][&quot;viewGroup&quot;] = node.appendChild(viewGroup);
+
+		// Insert background.
+		if (BACKGROUND_COLOR != null)
+		{
+			var rectNode = document.createElementNS(NSS[&quot;svg&quot;], &quot;rect&quot;);
+
+			rectNode.setAttribute(&quot;x&quot;, 0);
+			rectNode.setAttribute(&quot;y&quot;, 0);
+			rectNode.setAttribute(&quot;width&quot;, WIDTH);
+			rectNode.setAttribute(&quot;height&quot;, HEIGHT);
+			rectNode.setAttribute(&quot;id&quot;, &quot;jessyInkBackground&quot; + counter);
+			rectNode.setAttribute(&quot;fill&quot;, BACKGROUND_COLOR);
+
+			slides[counter][&quot;viewGroup&quot;].insertBefore(rectNode, slides[counter][&quot;viewGroup&quot;].firstChild);
+		}
+
+		// Set views.
+		var tempViews = new Array();
+		var views = getElementsByPropertyNS(node, NSS[&quot;jessyink&quot;], &quot;view&quot;);
+		var matrixOld = (new matrixSVG()).fromElements(1, 0, 0, 0, 1, 0, 0, 0, 1);
+
+		// Set initial view even if there are no other views.
+		slides[counter][&quot;viewGroup&quot;].setAttribute(&quot;transform&quot;, matrixOld.toAttribute());
+		slides[counter].initialView = matrixOld.toAttribute();
+
+		for (var viewCounter = 0; viewCounter &lt; views.length; viewCounter++)
+		{
+			var element = document.getElementById(views[viewCounter]);
+			var dict = propStrToDict(element.getAttributeNS(NSS[&quot;jessyink&quot;], &quot;view&quot;));
+
+			if (dict[&quot;order&quot;] == 0)
+			{
+				matrixOld = pointMatrixToTransformation(rectToMatrix(element)).mult((new matrixSVG()).fromSVGMatrix(slides[counter].viewGroup.getScreenCTM()).inv().mult((new matrixSVG()).fromSVGMatrix(element.parentNode.getScreenCTM())).inv());
+				slides[counter].initialView = matrixOld.toAttribute();
+			}
+			else
+			{
+				var effectDict = new Object();
+
+				effectDict[&quot;effect&quot;] = dict[&quot;name&quot;];
+				effectDict[&quot;dir&quot;] = 1;
+				effectDict[&quot;element&quot;] = slides[counter][&quot;viewGroup&quot;];
+				effectDict[&quot;order&quot;] = dict[&quot;order&quot;];
+
+				for (var option in dict)
+				{
+					if ((option != &quot;name&quot;) &amp;&amp; (option != &quot;order&quot;))
+					{
+						if (!effectDict[&quot;options&quot;])
+							effectDict[&quot;options&quot;] = new Object();
+
+						effectDict[&quot;options&quot;][option] = dict[option];
+					}
+				}
+
+				effectDict[&quot;options&quot;][&quot;matrixNew&quot;] = pointMatrixToTransformation(rectToMatrix(element)).mult((new matrixSVG()).fromSVGMatrix(slides[counter].viewGroup.getScreenCTM()).inv().mult((new matrixSVG()).fromSVGMatrix(element.parentNode.getScreenCTM())).inv());
+
+				tempViews[dict[&quot;order&quot;]] = effectDict;
+			}
+
+			// Remove element.
+			element.parentNode.removeChild(element);
+		}
+
+		// Consolidate view array and append it to the effect array.
+		if (tempViews.length &gt; 0)
+		{
+			for (var viewCounter = 0; viewCounter &lt; tempViews.length; viewCounter++)
+			{
+				if (tempViews[viewCounter])
+				{
+					tempViews[viewCounter][&quot;options&quot;][&quot;matrixOld&quot;] = matrixOld;
+					matrixOld = tempViews[viewCounter][&quot;options&quot;][&quot;matrixNew&quot;];
+
+					if (!tempEffects[tempViews[viewCounter][&quot;order&quot;]])
+						tempEffects[tempViews[viewCounter][&quot;order&quot;]] = new Array();
+
+					tempEffects[tempViews[viewCounter][&quot;order&quot;]][tempEffects[tempViews[viewCounter][&quot;order&quot;]].length] = tempViews[viewCounter];
+				}
+			}
+		}
+
+		// Set consolidated effect array.
+		if (tempEffects.length &gt; 0)
+		{
+			slides[counter][&quot;effects&quot;] = new Array();
+
+			for (var effectCounter = 0; effectCounter &lt; tempEffects.length; effectCounter++)
+			{
+				if (tempEffects[effectCounter])
+					slides[counter][&quot;effects&quot;][slides[counter][&quot;effects&quot;].length] = tempEffects[effectCounter];
+			}
+		}
+
+		node.setAttribute(&quot;onmouseover&quot;, &quot;if ((currentMode == INDEX_MODE) &amp;&amp; ( activeSlide != &quot; + counter + &quot;)) { indexSetActiveSlide(&quot; + counter + &quot;); };&quot;);
+
+		// Set visibility for initial state.
+		if (counter == activeSlide)
+		{
+			node.style.display = &quot;inherit&quot;;
+			node.setAttribute(&quot;opacity&quot;,1);
+		}
+		else
+		{
+			node.style.display = &quot;none&quot;;
+			node.setAttribute(&quot;opacity&quot;,0);
+		}
+	}
+
+	// Set key handler.
+	var jessyInkObjects = document.getElementsByTagNameNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+
+	for (var counter = 0; counter &lt; jessyInkObjects.length; counter++)
+	{
+		var elem = jessyInkObjects[counter];
+
+		if (elem.getAttributeNS(NSS[&quot;jessyink&quot;], &quot;customKeyBindings&quot;))
+		{
+			if (elem.getCustomKeyBindings != undefined)
+				keyCodeDictionary = elem.getCustomKeyBindings();
+
+			if (elem.getCustomCharBindings != undefined)
+				charCodeDictionary = elem.getCustomCharBindings();
+		}
+	}
+
+	// Set mouse handler.
+	var jessyInkMouseHandler = document.getElementsByTagNameNS(NSS[&quot;jessyink&quot;], &quot;mousehandler&quot;);
+
+	for (var counter = 0; counter &lt; jessyInkMouseHandler.length; counter++)
+	{
+		var elem = jessyInkMouseHandler[counter];
+
+		if (elem.getMouseHandler != undefined)
+		{
+			var tempDict = elem.getMouseHandler();
+
+			for (mode in tempDict)
+			{
+				if (!mouseHandlerDictionary[mode])
+					mouseHandlerDictionary[mode] = new Object();
+
+				for (handler in tempDict[mode])
+					mouseHandlerDictionary[mode][handler] = tempDict[mode][handler];
+			}
+		}
+	}
+
+	// Check effect number.
+	if ((activeEffect &lt; 0) || (!slides[activeSlide].effects))
+	{
+		activeEffect = 0;
+	}
+	else if (activeEffect &gt; slides[activeSlide].effects.length)
+	{
+		activeEffect = slides[activeSlide].effects.length;
+	}
+
+	createProgressBar(JessyInkPresentationLayer);
+	hideProgressBar();
+	setProgressBarValue(activeSlide);
+	setTimeIndicatorValue(0);
+	setInterval(&quot;updateTimer()&quot;, 1000);
+	setSlideToState(activeSlide, activeEffect);
+	jessyInkInitialised = true;
+}
+
+/** Function to subtitute the auto-texts.
+ *
+ *  @param node the node
+ *  @param slideName name of the slide the node is on
+ *  @param slideNumber number of the slide the node is on
+ *  @param numberOfSlides number of slides in the presentation
+ */
+function substituteAutoTexts(node, slideName, slideNumber, numberOfSlides)
+{
+	var texts = node.getElementsByTagNameNS(NSS[&quot;svg&quot;], &quot;tspan&quot;);
+
+	for (var textCounter = 0; textCounter &lt; texts.length; textCounter++)
+	{
+		if (texts[textCounter].getAttributeNS(NSS[&quot;jessyink&quot;], &quot;autoText&quot;) == &quot;slideNumber&quot;)
+			texts[textCounter].firstChild.nodeValue = slideNumber;
+		else if (texts[textCounter].getAttributeNS(NSS[&quot;jessyink&quot;], &quot;autoText&quot;) == &quot;numberOfSlides&quot;)
+			texts[textCounter].firstChild.nodeValue = numberOfSlides;
+		else if (texts[textCounter].getAttributeNS(NSS[&quot;jessyink&quot;], &quot;autoText&quot;) == &quot;slideTitle&quot;)
+			texts[textCounter].firstChild.nodeValue = slideName;
+	}
+}
+
+/** Convenience function to get an element depending on whether it has a property with a particular name.
+ *	This function emulates some dearly missed XPath functionality.
+ *
+ *  @param node the node
+ *  @param namespace namespace of the attribute
+ *  @param name attribute name
+ */
+function getElementsByPropertyNS(node, namespace, name)
+{
+	var elems = new Array();
+
+	if (node.getAttributeNS(namespace, name))
+		elems.push(node.getAttribute(&quot;id&quot;));
+
+	for (var counter = 0; counter &lt; node.childNodes.length; counter++)
+	{
+		if (node.childNodes[counter].nodeType == 1)
+			elems = elems.concat(getElementsByPropertyNS(node.childNodes[counter], namespace, name));
+	}
+
+	return elems;
+}
+
+/** Function to dispatch the next effect, if there is none left, change the slide.
+ *
+ *  @param dir direction of the change (1 = forwards, -1 = backwards)
+ */
+function dispatchEffects(dir)
+{
+	if (slides[activeSlide][&quot;effects&quot;] &amp;&amp; (((dir == 1) &amp;&amp; (activeEffect &lt; slides[activeSlide][&quot;effects&quot;].length)) || ((dir == -1) &amp;&amp; (activeEffect &gt; 0))))
+	{
+		processingEffect = true;
+
+		if (dir == 1)
+		{
+			effectArray = slides[activeSlide][&quot;effects&quot;][activeEffect];
+			activeEffect += dir;
+		}
+		else if (dir == -1)
+		{
+			activeEffect += dir;
+			effectArray = slides[activeSlide][&quot;effects&quot;][activeEffect];
+		}
+
+		transCounter = 0;
+		startTime = (new Date()).getTime();
+		lastFrameTime = null;
+		effect(dir);
+	}
+	else if (((dir == 1) &amp;&amp; (activeSlide &lt; (slides.length - 1))) || (((dir == -1) &amp;&amp; (activeSlide &gt; 0))))
+	{
+		changeSlide(dir);
+	}
+}
+
+/** Function to skip effects and directly either put the slide into start or end state or change slides.
+ *
+ *  @param dir direction of the change (1 = forwards, -1 = backwards)
+ */
+function skipEffects(dir)
+{
+	if (slides[activeSlide][&quot;effects&quot;] &amp;&amp; (((dir == 1) &amp;&amp; (activeEffect &lt; slides[activeSlide][&quot;effects&quot;].length)) || ((dir == -1) &amp;&amp; (activeEffect &gt; 0))))
+	{
+		processingEffect = true;
+
+		if (slides[activeSlide][&quot;effects&quot;] &amp;&amp; (dir == 1))
+			activeEffect = slides[activeSlide][&quot;effects&quot;].length;
+		else
+			activeEffect = 0;
+
+		if (dir == 1)
+			setSlideToState(activeSlide, STATE_END);
+		else
+			setSlideToState(activeSlide, STATE_START);
+
+		processingEffect = false;
+	}
+	else if (((dir == 1) &amp;&amp; (activeSlide &lt; (slides.length - 1))) || (((dir == -1) &amp;&amp; (activeSlide &gt; 0))))
+	{
+		changeSlide(dir);
+	}
+}
+
+/** Function to change between slides.
+ *
+ *  @param dir direction (1 = forwards, -1 = backwards)
+ */
+function changeSlide(dir)
+{
+	processingEffect = true;
+	effectArray = new Array();
+
+	effectArray[0] = new Object();
+	if (dir == 1)
+	{
+		effectArray[0][&quot;effect&quot;] = slides[activeSlide][&quot;transitionOut&quot;][&quot;name&quot;];
+		effectArray[0][&quot;options&quot;] = slides[activeSlide][&quot;transitionOut&quot;][&quot;options&quot;];
+		effectArray[0][&quot;dir&quot;] = -1;
+	}
+	else if (dir == -1)
+	{
+		effectArray[0][&quot;effect&quot;] = slides[activeSlide][&quot;transitionIn&quot;][&quot;name&quot;];
+		effectArray[0][&quot;options&quot;] = slides[activeSlide][&quot;transitionIn&quot;][&quot;options&quot;];
+		effectArray[0][&quot;dir&quot;] = 1;
+	}
+	effectArray[0][&quot;element&quot;] = slides[activeSlide][&quot;element&quot;];
+
+	activeSlide += dir;
+	setProgressBarValue(activeSlide);
+
+	effectArray[1] = new Object();
+
+	if (dir == 1)
+	{
+		effectArray[1][&quot;effect&quot;] = slides[activeSlide][&quot;transitionIn&quot;][&quot;name&quot;];
+		effectArray[1][&quot;options&quot;] = slides[activeSlide][&quot;transitionIn&quot;][&quot;options&quot;];
+		effectArray[1][&quot;dir&quot;] = 1;
+	}
+	else if (dir == -1)
+	{
+		effectArray[1][&quot;effect&quot;] = slides[activeSlide][&quot;transitionOut&quot;][&quot;name&quot;];
+		effectArray[1][&quot;options&quot;] = slides[activeSlide][&quot;transitionOut&quot;][&quot;options&quot;];
+		effectArray[1][&quot;dir&quot;] = -1;
+	}
+
+	effectArray[1][&quot;element&quot;] = slides[activeSlide][&quot;element&quot;];
+
+	if (slides[activeSlide][&quot;effects&quot;] &amp;&amp; (dir == -1))
+		activeEffect = slides[activeSlide][&quot;effects&quot;].length;
+	else
+		activeEffect = 0;
+
+	if (dir == -1)
+		setSlideToState(activeSlide, STATE_END);
+	else
+		setSlideToState(activeSlide, STATE_START);
+
+	transCounter = 0;
+	startTime = (new Date()).getTime();
+	lastFrameTime = null;
+	effect(dir);
+}
+
+/** Function to toggle between index and slide mode.
+*/
+function toggleSlideIndex()
+{
+	var suspendHandle = ROOT_NODE.suspendRedraw(500);
+
+	if (currentMode == SLIDE_MODE)
+	{
+		hideProgressBar();		
+		INDEX_OFFSET = -1;
+		indexSetPageSlide(activeSlide);
+		currentMode = INDEX_MODE;
+	}
+	else if (currentMode == INDEX_MODE)
+	{
+		for (var counter = 0; counter &lt; slides.length; counter++)
+		{
+			slides[counter][&quot;element&quot;].setAttribute(&quot;transform&quot;,&quot;scale(1)&quot;);
+
+			if (counter == activeSlide)
+			{
+				slides[counter][&quot;element&quot;].style.display = &quot;inherit&quot;;
+				slides[counter][&quot;element&quot;].setAttribute(&quot;opacity&quot;,1);
+				activeEffect = 0;
+			}
+			else
+			{
+				slides[counter][&quot;element&quot;].setAttribute(&quot;opacity&quot;,0);
+				slides[counter][&quot;element&quot;].style.display = &quot;none&quot;;
+			}
+		}
+		currentMode = SLIDE_MODE;
+		setSlideToState(activeSlide, STATE_START);
+		setProgressBarValue(activeSlide);
+
+		if (progress_bar_visible)
+		{
+			showProgressBar();
+		}
+	}
+
+	ROOT_NODE.unsuspendRedraw(suspendHandle);
+	ROOT_NODE.forceRedraw();
+}
+
+/** Function to run an effect.
+ *
+ *  @param dir direction in which to play the effect (1 = forwards, -1 = backwards)
+ */
+function effect(dir)
+{
+	var done = true;
+
+	var suspendHandle = ROOT_NODE.suspendRedraw(200);
+
+	for (var counter = 0; counter &lt; effectArray.length; counter++)
+	{
+		if (effectArray[counter][&quot;effect&quot;] == &quot;fade&quot;)
+			done &amp;= fade(parseInt(effectArray[counter][&quot;dir&quot;]) * dir, effectArray[counter][&quot;element&quot;], transCounter, effectArray[counter][&quot;options&quot;]);
+		else if (effectArray[counter][&quot;effect&quot;] == &quot;appear&quot;)
+			done &amp;= appear(parseInt(effectArray[counter][&quot;dir&quot;]) * dir, effectArray[counter][&quot;element&quot;], transCounter, effectArray[counter][&quot;options&quot;]);
+		else if (effectArray[counter][&quot;effect&quot;] == &quot;pop&quot;)
+			done &amp;= pop(parseInt(effectArray[counter][&quot;dir&quot;]) * dir, effectArray[counter][&quot;element&quot;], transCounter, effectArray[counter][&quot;options&quot;]);
+		else if (effectArray[counter][&quot;effect&quot;] == &quot;view&quot;)
+			done &amp;= view(parseInt(effectArray[counter][&quot;dir&quot;]) * dir, effectArray[counter][&quot;element&quot;], transCounter, effectArray[counter][&quot;options&quot;]);
+	}
+
+	ROOT_NODE.unsuspendRedraw(suspendHandle);
+	ROOT_NODE.forceRedraw();
+
+	if (!done)
+	{
+		var currentTime = (new Date()).getTime();
+		var timeDiff = 1;
+
+		transCounter = currentTime - startTime;
+
+		if (lastFrameTime != null)
+		{
+			timeDiff = timeStep - (currentTime - lastFrameTime);
+
+			if (timeDiff &lt;= 0)
+				timeDiff = 1;
+		}
+
+		lastFrameTime = currentTime;
+
+		window.setTimeout(&quot;effect(&quot; + dir + &quot;)&quot;, timeDiff);
+	}
+	else
+	{
+		window.location.hash = (activeSlide + 1) + '_' + activeEffect;
+		processingEffect = false;
+	}
+}
+
+/** Function to display the index sheet.
+ *
+ *  @param offsetNumber offset number
+ */
+function displayIndex(offsetNumber)
+{
+	var offsetX = 0;
+	var offsetY = 0;
+
+	if (offsetNumber &lt; 0)
+		offsetNumber = 0;
+	else if (offsetNumber &gt;= slides.length)
+		offsetNumber = slides.length - 1;
+
+	for (var counter = 0; counter &lt; slides.length; counter++)
+	{
+		if ((counter &lt; offsetNumber) || (counter &gt; offsetNumber + INDEX_COLUMNS * INDEX_COLUMNS - 1))
+		{
+			slides[counter][&quot;element&quot;].setAttribute(&quot;opacity&quot;,0);
+			slides[counter][&quot;element&quot;].style.display = &quot;none&quot;;
+		}
+		else
+		{
+			offsetX = ((counter - offsetNumber) % INDEX_COLUMNS) * WIDTH;
+			offsetY = Math.floor((counter - offsetNumber) / INDEX_COLUMNS) * HEIGHT;
+
+			slides[counter][&quot;element&quot;].setAttribute(&quot;transform&quot;,&quot;scale(&quot;+1/INDEX_COLUMNS+&quot;) translate(&quot;+offsetX+&quot;,&quot;+offsetY+&quot;)&quot;);
+			slides[counter][&quot;element&quot;].style.display = &quot;inherit&quot;;
+			slides[counter][&quot;element&quot;].setAttribute(&quot;opacity&quot;,0.5);
+		}
+
+		setSlideToState(counter, STATE_END);
+	}
+
+	//do we need to save the current offset?
+	if (INDEX_OFFSET != offsetNumber)
+		INDEX_OFFSET = offsetNumber;
+}
+
+/** Function to set the active slide in the slide view.
+ *
+ *  @param nbr index of the active slide
+ */
+function slideSetActiveSlide(nbr)
+{
+	if (nbr &gt;= slides.length)
+		nbr = slides.length - 1;
+	else if (nbr &lt; 0)
+		nbr = 0;
+
+	slides[activeSlide][&quot;element&quot;].setAttribute(&quot;opacity&quot;,0);
+	slides[activeSlide][&quot;element&quot;].style.display = &quot;none&quot;;
+
+	activeSlide = parseInt(nbr);
+
+	setSlideToState(activeSlide, STATE_START);
+	slides[activeSlide][&quot;element&quot;].style.display = &quot;inherit&quot;;
+	slides[activeSlide][&quot;element&quot;].setAttribute(&quot;opacity&quot;,1);
+
+	activeEffect = 0;
+	setProgressBarValue(nbr);
+}
+
+/** Function to set the active slide in the index view.
+ *
+ *  @param nbr index of the active slide
+ */
+function indexSetActiveSlide(nbr)
+{
+	if (nbr &gt;= slides.length)
+		nbr = slides.length - 1;
+	else if (nbr &lt; 0)
+		nbr = 0;
+
+	slides[activeSlide][&quot;element&quot;].setAttribute(&quot;opacity&quot;,0.5);
+
+	activeSlide = parseInt(nbr);
+	window.location.hash = (activeSlide + 1) + '_0';
+
+	slides[activeSlide][&quot;element&quot;].setAttribute(&quot;opacity&quot;,1);
+}
+
+/** Function to set the page and active slide in index view. 
+ *
+ *  @param nbr index of the active slide
+ *
+ *  NOTE: To force a redraw,
+ *  set INDEX_OFFSET to -1 before calling indexSetPageSlide().
+ *
+ *  This is necessary for zooming (otherwise the index might not
+ *  get redrawn) and when switching to index mode.
+ *
+ *  INDEX_OFFSET = -1
+ *  indexSetPageSlide(activeSlide);
+ */
+function indexSetPageSlide(nbr)
+{
+	if (nbr &gt;= slides.length)
+		nbr = slides.length - 1;
+	else if (nbr &lt; 0)
+		nbr = 0;
+
+	//calculate the offset
+	var offset = nbr - nbr % (INDEX_COLUMNS * INDEX_COLUMNS);
+
+	if (offset &lt; 0)
+		offset = 0;
+
+	//if different from kept offset, then record and change the page
+	if (offset != INDEX_OFFSET)
+	{
+		INDEX_OFFSET = offset;
+		displayIndex(INDEX_OFFSET);
+	}
+
+	//set the active slide
+	indexSetActiveSlide(nbr);
+}
+
+/** Event handler for key press.
+ *
+ *  @param e the event
+ */
+function keydown(e)
+{
+	if (!e)
+		e = window.event;
+
+	code = e.keyCode || e.charCode;
+
+	if (!processingEffect &amp;&amp; keyCodeDictionary[currentMode] &amp;&amp; keyCodeDictionary[currentMode][code])
+		return keyCodeDictionary[currentMode][code]();
+	else
+		document.onkeypress = keypress;
+}
+// Set event handler for key down.
+document.onkeydown = keydown;
+
+/** Event handler for key press.
+ *
+ *  @param e the event
+ */
+function keypress(e)
+{
+	document.onkeypress = null;
+
+	if (!e)
+		e = window.event;
+
+	str = String.fromCharCode(e.keyCode || e.charCode);
+
+	if (!processingEffect &amp;&amp; charCodeDictionary[currentMode] &amp;&amp; charCodeDictionary[currentMode][str])
+		return charCodeDictionary[currentMode][str]();
+}
+
+/** Function to supply the default char code dictionary.
+ *
+ * @returns default char code dictionary
+ */
+function getDefaultCharCodeDictionary()
+{
+	var charCodeDict = new Object();
+
+	charCodeDict[SLIDE_MODE] = new Object();
+	charCodeDict[INDEX_MODE] = new Object();
+	charCodeDict[DRAWING_MODE] = new Object();
+
+	charCodeDict[SLIDE_MODE][&quot;i&quot;] = function () { return toggleSlideIndex(); };
+	charCodeDict[SLIDE_MODE][&quot;d&quot;] = function () { return slideSwitchToDrawingMode(); };
+	charCodeDict[SLIDE_MODE][&quot;D&quot;] = function () { return slideQueryDuration(); };
+	charCodeDict[SLIDE_MODE][&quot;n&quot;] = function () { return slideAddSlide(activeSlide); };
+	charCodeDict[SLIDE_MODE][&quot;p&quot;] = function () { return slideToggleProgressBarVisibility(); };
+	charCodeDict[SLIDE_MODE][&quot;t&quot;] = function () { return slideResetTimer(); };
+	charCodeDict[SLIDE_MODE][&quot;e&quot;] = function () { return slideUpdateExportLayer(); };
+
+	charCodeDict[DRAWING_MODE][&quot;d&quot;] = function () { return drawingSwitchToSlideMode(); };
+	charCodeDict[DRAWING_MODE][&quot;0&quot;] = function () { return drawingResetPathWidth(); };
+	charCodeDict[DRAWING_MODE][&quot;1&quot;] = function () { return drawingSetPathWidth(1.0); };
+	charCodeDict[DRAWING_MODE][&quot;3&quot;] = function () { return drawingSetPathWidth(3.0); };
+	charCodeDict[DRAWING_MODE][&quot;5&quot;] = function () { return drawingSetPathWidth(5.0); };
+	charCodeDict[DRAWING_MODE][&quot;7&quot;] = function () { return drawingSetPathWidth(7.0); };
+	charCodeDict[DRAWING_MODE][&quot;9&quot;] = function () { return drawingSetPathWidth(9.0); };
+	charCodeDict[DRAWING_MODE][&quot;b&quot;] = function () { return drawingSetPathColour(&quot;blue&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;c&quot;] = function () { return drawingSetPathColour(&quot;cyan&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;g&quot;] = function () { return drawingSetPathColour(&quot;green&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;k&quot;] = function () { return drawingSetPathColour(&quot;black&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;m&quot;] = function () { return drawingSetPathColour(&quot;magenta&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;o&quot;] = function () { return drawingSetPathColour(&quot;orange&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;r&quot;] = function () { return drawingSetPathColour(&quot;red&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;w&quot;] = function () { return drawingSetPathColour(&quot;white&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;y&quot;] = function () { return drawingSetPathColour(&quot;yellow&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;z&quot;] = function () { return drawingUndo(); };
+
+	charCodeDict[INDEX_MODE][&quot;i&quot;] = function () { return toggleSlideIndex(); };
+	charCodeDict[INDEX_MODE][&quot;-&quot;] = function () { return indexDecreaseNumberOfColumns(); };
+	charCodeDict[INDEX_MODE][&quot;=&quot;] = function () { return indexIncreaseNumberOfColumns(); };
+	charCodeDict[INDEX_MODE][&quot;+&quot;] = function () { return indexIncreaseNumberOfColumns(); };
+	charCodeDict[INDEX_MODE][&quot;0&quot;] = function () { return indexResetNumberOfColumns(); };
+
+	return charCodeDict;
+}
+
+/** Function to supply the default key code dictionary.
+ *
+ * @returns default key code dictionary
+ */
+function getDefaultKeyCodeDictionary()
+{
+	var keyCodeDict = new Object();
+
+	keyCodeDict[SLIDE_MODE] = new Object();
+	keyCodeDict[INDEX_MODE] = new Object();
+	keyCodeDict[DRAWING_MODE] = new Object();
+
+	keyCodeDict[SLIDE_MODE][LEFT_KEY] = function() { return dispatchEffects(-1); };
+	keyCodeDict[SLIDE_MODE][RIGHT_KEY] = function() { return dispatchEffects(1); };
+	keyCodeDict[SLIDE_MODE][UP_KEY] = function() { return skipEffects(-1); };
+	keyCodeDict[SLIDE_MODE][DOWN_KEY] = function() { return skipEffects(1); };
+	keyCodeDict[SLIDE_MODE][PAGE_UP_KEY] = function() { return dispatchEffects(-1); };
+	keyCodeDict[SLIDE_MODE][PAGE_DOWN_KEY] = function() { return dispatchEffects(1); };
+	keyCodeDict[SLIDE_MODE][HOME_KEY] = function() { return slideSetActiveSlide(0); };
+	keyCodeDict[SLIDE_MODE][END_KEY] = function() { return slideSetActiveSlide(slides.length - 1); };
+	keyCodeDict[SLIDE_MODE][SPACE_KEY] = function() { return dispatchEffects(1); };
+
+	keyCodeDict[INDEX_MODE][LEFT_KEY] = function() { return indexSetPageSlide(activeSlide - 1); };
+	keyCodeDict[INDEX_MODE][RIGHT_KEY] = function() { return indexSetPageSlide(activeSlide + 1); };
+	keyCodeDict[INDEX_MODE][UP_KEY] = function() { return indexSetPageSlide(activeSlide - INDEX_COLUMNS); };
+	keyCodeDict[INDEX_MODE][DOWN_KEY] = function() { return indexSetPageSlide(activeSlide + INDEX_COLUMNS); };
+	keyCodeDict[INDEX_MODE][PAGE_UP_KEY] = function() { return indexSetPageSlide(activeSlide - INDEX_COLUMNS * INDEX_COLUMNS); };
+	keyCodeDict[INDEX_MODE][PAGE_DOWN_KEY] = function() { return indexSetPageSlide(activeSlide + INDEX_COLUMNS * INDEX_COLUMNS); };
+	keyCodeDict[INDEX_MODE][HOME_KEY] = function() { return indexSetPageSlide(0); };
+	keyCodeDict[INDEX_MODE][END_KEY] = function() { return indexSetPageSlide(slides.length - 1); };
+	keyCodeDict[INDEX_MODE][ENTER_KEY] = function() { return toggleSlideIndex(); };
+
+	keyCodeDict[DRAWING_MODE][ESCAPE_KEY] = function () { return drawingSwitchToSlideMode(); };
+
+	return keyCodeDict;
+}
+
+/** Function to handle all mouse events.
+ *
+ *	@param	evnt	event
+ *	@param	action	type of event (e.g. mouse up, mouse wheel)
+ */
+function mouseHandlerDispatch(evnt, action)
+{
+	if (!evnt)
+		evnt = window.event;
+
+	var retVal = true;
+
+	if (!processingEffect &amp;&amp; mouseHandlerDictionary[currentMode] &amp;&amp; mouseHandlerDictionary[currentMode][action])
+	{
+		var subRetVal = mouseHandlerDictionary[currentMode][action](evnt);
+
+		if (subRetVal != null &amp;&amp; subRetVal != undefined)
+			retVal = subRetVal;
+	}
+
+	if (evnt.preventDefault &amp;&amp; !retVal)
+		evnt.preventDefault();
+
+	evnt.returnValue = retVal;
+
+	return retVal;
+}
+
+// Set mouse event handler.
+document.onmousedown = function(e) { return mouseHandlerDispatch(e, MOUSE_DOWN); };
+document.onmouseup = function(e) { return mouseHandlerDispatch(e, MOUSE_UP); };
+document.onmousemove = function(e) { return mouseHandlerDispatch(e, MOUSE_MOVE); };
+
+// Moz
+if (window.addEventListener)
+{
+	window.addEventListener('DOMMouseScroll', function(e) { return mouseHandlerDispatch(e, MOUSE_WHEEL); }, false);
+}
+
+// Opera Safari OK - may not work in IE
+window.onmousewheel = function(e) { return mouseHandlerDispatch(e, MOUSE_WHEEL); };
+
+/** Function to supply the default mouse handler dictionary.
+ *
+ * @returns default mouse handler dictionary
+ */
+function getDefaultMouseHandlerDictionary()
+{
+	var mouseHandlerDict = new Object();
+
+	mouseHandlerDict[SLIDE_MODE] = new Object();
+	mouseHandlerDict[INDEX_MODE] = new Object();
+	mouseHandlerDict[DRAWING_MODE] = new Object();
+
+	mouseHandlerDict[SLIDE_MODE][MOUSE_DOWN] = function(evnt) { return dispatchEffects(1); };
+	mouseHandlerDict[SLIDE_MODE][MOUSE_WHEEL] = function(evnt) { return slideMousewheel(evnt); };
+
+	mouseHandlerDict[INDEX_MODE][MOUSE_DOWN] = function(evnt) { return toggleSlideIndex(); };
+
+	mouseHandlerDict[DRAWING_MODE][MOUSE_DOWN] = function(evnt) { return drawingMousedown(evnt); };
+	mouseHandlerDict[DRAWING_MODE][MOUSE_UP] = function(evnt) { return drawingMouseup(evnt); };
+	mouseHandlerDict[DRAWING_MODE][MOUSE_MOVE] = function(evnt) { return drawingMousemove(evnt); };
+
+	return mouseHandlerDict;
+}
+
+/** Function to switch from slide mode to drawing mode.
+*/
+function slideSwitchToDrawingMode()
+{
+	currentMode = DRAWING_MODE;
+
+	var tempDict;
+
+	if (ROOT_NODE.hasAttribute(&quot;style&quot;))
+		tempDict = propStrToDict(ROOT_NODE.getAttribute(&quot;style&quot;));
+	else
+		tempDict = new Object();
+
+	tempDict[&quot;cursor&quot;] = &quot;crosshair&quot;;
+	ROOT_NODE.setAttribute(&quot;style&quot;, dictToPropStr(tempDict));
+}
+
+/** Function to switch from drawing mode to slide mode.
+*/
+function drawingSwitchToSlideMode()
+{
+	currentMode = SLIDE_MODE;
+
+	var tempDict;
+
+	if (ROOT_NODE.hasAttribute(&quot;style&quot;))
+		tempDict = propStrToDict(ROOT_NODE.getAttribute(&quot;style&quot;));
+	else
+		tempDict = new Object();
+
+	tempDict[&quot;cursor&quot;] = &quot;auto&quot;;
+	ROOT_NODE.setAttribute(&quot;style&quot;, dictToPropStr(tempDict));
+}
+
+/** Function to decrease the number of columns in index mode.
+*/
+function indexDecreaseNumberOfColumns()
+{
+	if (INDEX_COLUMNS &gt;= 3)
+	{
+		INDEX_COLUMNS -= 1;
+		INDEX_OFFSET = -1
+			indexSetPageSlide(activeSlide);
+	}
+}
+
+/** Function to increase the number of columns in index mode.
+*/
+function indexIncreaseNumberOfColumns()
+{
+	if (INDEX_COLUMNS &lt; 7)
+	{
+		INDEX_COLUMNS += 1;
+		INDEX_OFFSET = -1
+			indexSetPageSlide(activeSlide);
+	}
+}
+
+/** Function to reset the number of columns in index mode.
+*/
+function indexResetNumberOfColumns()
+{
+	if (INDEX_COLUMNS != INDEX_COLUMNS_DEFAULT)
+	{
+		INDEX_COLUMNS = INDEX_COLUMNS_DEFAULT;
+		INDEX_OFFSET = -1
+			indexSetPageSlide(activeSlide);
+	}
+}
+
+/** Function to reset path width in drawing mode.
+*/
+function drawingResetPathWidth()
+{
+	path_width = path_width_default;
+	set_path_paint_width();
+}
+
+/** Function to set path width in drawing mode.
+ *
+ * @param width new path width
+ */
+function drawingSetPathWidth(width)
+{
+	path_width = width;
+	set_path_paint_width();
+}
+
+/** Function to set path colour in drawing mode.
+ *
+ * @param colour new path colour
+ */
+function drawingSetPathColour(colour)
+{
+	path_colour = colour;
+}
+
+/** Function to query the duration of the presentation from the user in slide mode.
+*/
+function slideQueryDuration()
+{
+	var new_duration = prompt(&quot;Length of presentation in minutes?&quot;, timer_duration);
+
+	if ((new_duration != null) &amp;&amp; (new_duration != ''))
+	{
+		timer_duration = new_duration;
+	}
+
+	updateTimer();
+}
+
+/** Function to add new slide in slide mode.
+ *
+ * @param afterSlide after which slide to insert the new one
+ */
+function slideAddSlide(afterSlide)
+{
+	addSlide(afterSlide);
+	slideSetActiveSlide(afterSlide + 1);
+	updateTimer();
+}
+
+/** Function to toggle the visibility of the progress bar in slide mode.
+*/
+function slideToggleProgressBarVisibility()
+{
+	if (progress_bar_visible)
+	{
+		progress_bar_visible = false;
+		hideProgressBar();
+	}
+	else
+	{
+		progress_bar_visible = true;
+		showProgressBar();
+	}
+}
+
+/** Function to reset the timer in slide mode.
+*/
+function slideResetTimer()
+{
+	timer_start = timer_elapsed;
+	updateTimer();
+}
+
+/** Convenience function to pad a string with zero in front up to a certain length.
+ */
+function padString(str, len)
+{
+	var outStr = str;
+
+	while (outStr.length &lt; len)
+	{
+		outStr = '0' + outStr;
+	}
+
+	return outStr;
+}
+
+/** Function to update the export layer.
+ */
+function slideUpdateExportLayer()
+{
+	// Suspend redraw since we are going to mess with the slides.
+	var suspendHandle = ROOT_NODE.suspendRedraw(2000);
+
+	var tmpActiveSlide = activeSlide;
+	var tmpActiveEffect = activeEffect;
+	var exportedLayers = new Array();
+
+	for (var counterSlides = 0; counterSlides &lt; slides.length; counterSlides++)
+	{
+		var exportNode;
+
+		setSlideToState(counterSlides, STATE_START);
+
+		var maxEffect = 0;
+
+		if (slides[counterSlides].effects)
+		{
+			maxEffect = slides[counterSlides].effects.length;
+		}
+
+		exportNode = slides[counterSlides].element.cloneNode(true);
+		exportNode.setAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;, &quot;layer&quot;);
+		exportNode.setAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;, &quot;slide_&quot; + padString((counterSlides + 1).toString(), slides.length.toString().length) + &quot;_effect_&quot; + padString(&quot;0&quot;, maxEffect.toString().length));
+
+		exportedLayers.push(exportNode);
+
+		if (slides[counterSlides][&quot;effects&quot;])
+		{	
+			for (var counter = 0; counter &lt; slides[counterSlides][&quot;effects&quot;].length; counter++)
+			{
+				for (var subCounter = 0; subCounter &lt; slides[counterSlides][&quot;effects&quot;][counter].length; subCounter++)
+				{
+					var effect = slides[counterSlides][&quot;effects&quot;][counter][subCounter];
+					if (effect[&quot;effect&quot;] == &quot;fade&quot;)
+						fade(parseInt(effect[&quot;dir&quot;]), effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;appear&quot;)
+						appear(parseInt(effect[&quot;dir&quot;]), effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;pop&quot;)
+						pop(parseInt(effect[&quot;dir&quot;]), effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;view&quot;)
+						view(parseInt(effect[&quot;dir&quot;]), effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+				}
+
+				var layerName = &quot;slide_&quot; + padString((counterSlides + 1).toString(), slides.length.toString().length) + &quot;_effect_&quot; + padString((counter + 1).toString(), maxEffect.toString().length);
+				exportNode = slides[counterSlides].element.cloneNode(true);
+				exportNode.setAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;, &quot;layer&quot;);
+				exportNode.setAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;, layerName);
+				exportNode.setAttribute(&quot;id&quot;, layerName);
+
+				exportedLayers.push(exportNode);
+			}
+		}
+	}
+
+	activeSlide = tmpActiveSlide;
+	activeEffect = tmpActiveEffect;
+	setSlideToState(activeSlide, activeEffect);
+
+	// Copy image.
+	var newDoc = document.documentElement.cloneNode(true);
+
+	// Delete viewbox form new imag and set width and height.
+	newDoc.removeAttribute('viewbox');
+	newDoc.setAttribute('width', WIDTH);
+	newDoc.setAttribute('height', HEIGHT);
+
+	// Delete all layers and script elements.
+	var nodesToBeRemoved = new Array();
+
+	for (var childCounter = 0; childCounter &lt;  newDoc.childNodes.length; childCounter++)
+	{
+		var child = newDoc.childNodes[childCounter];
+
+		if (child.nodeType == 1)
+		{
+			if ((child.nodeName.toUpperCase() == 'G') || (child.nodeName.toUpperCase() == 'SCRIPT'))
+			{
+				nodesToBeRemoved.push(child);
+			}
+		}
+	}
+
+	for (var ndCounter = 0; ndCounter &lt; nodesToBeRemoved.length; ndCounter++)
+	{
+		var nd = nodesToBeRemoved[ndCounter];
+
+		// Before removing the node, check whether it contains any definitions.
+		var defs = nd.getElementsByTagNameNS(NSS[&quot;svg&quot;], &quot;defs&quot;);
+
+		for (var defsCounter = 0; defsCounter &lt; defs.length; defsCounter++)
+		{
+			if (defs[defsCounter].id)
+			{
+				newDoc.appendChild(defs[defsCounter].cloneNode(true));
+			}
+		}
+
+		// Remove node.
+		nd.parentNode.removeChild(nd);
+	}
+
+	// Set current layer.
+	if (exportedLayers[0])
+	{
+		var namedView;
+
+		for (var nodeCounter = 0; nodeCounter &lt; newDoc.childNodes.length; nodeCounter++)
+		{
+			if ((newDoc.childNodes[nodeCounter].nodeType == 1) &amp;&amp; (newDoc.childNodes[nodeCounter].getAttribute('id') == 'base'))
+			{
+				namedView = newDoc.childNodes[nodeCounter];
+			}
+		}
+
+		if (namedView)
+		{
+			namedView.setAttributeNS(NSS['inkscape'], 'current-layer', exportedLayers[0].getAttributeNS(NSS['inkscape'], 'label'));
+		}
+	}
+
+	// Add exported layers.
+	while (exportedLayers.length &gt; 0)
+	{
+		var nd = exportedLayers.pop();
+
+		nd.setAttribute(&quot;opacity&quot;,1);
+		nd.style.display = &quot;inherit&quot;;
+
+		newDoc.appendChild(nd);
+	}
+
+	// Serialise the new document.
+	var serializer = new XMLSerializer();
+	var strm = 
+	{
+		content : &quot;&quot;,
+		close : function() {},  
+		flush : function() {},  
+		write : function(str, count) { this.content += str; }  
+	};
+
+	var xml = serializer.serializeToStream(newDoc, strm, 'UTF-8');
+
+	window.location = 'data:application/svg+xml;base64;charset=utf-8,' + window.btoa(strm.content);
+
+	// Unsuspend redraw.
+	ROOT_NODE.unsuspendRedraw(suspendHandle);
+	ROOT_NODE.forceRedraw();
+}
+
+/** Function to undo last drawing operation.
+*/
+function drawingUndo()
+{
+	mouse_presentation_path = null;
+	mouse_original_path = null;
+
+	if (history_presentation_elements.length &gt; 0)
+	{
+		var p = history_presentation_elements.pop();
+		var parent = p.parentNode.removeChild(p);
+
+		p = history_original_elements.pop();
+		parent = p.parentNode.removeChild(p);
+	}
+}
+
+/** Event handler for mouse down in drawing mode.
+ *
+ *  @param e the event
+ */
+function drawingMousedown(e)
+{
+	var value = 0;
+
+	if (e.button)
+		value = e.button;
+	else if (e.which)
+		value = e.which;
+
+	if (value == 1)
+	{
+		history_counter++;
+
+		var p = calcCoord(e);
+
+		mouse_last_x = e.clientX;
+		mouse_last_y = e.clientY;
+		mouse_original_path = document.createElementNS(NSS[&quot;svg&quot;], &quot;path&quot;);
+		mouse_original_path.setAttribute(&quot;stroke&quot;, path_colour);
+		mouse_original_path.setAttribute(&quot;stroke-width&quot;, path_paint_width);
+		mouse_original_path.setAttribute(&quot;fill&quot;, &quot;none&quot;);
+		mouse_original_path.setAttribute(&quot;id&quot;, &quot;path &quot; + Date());
+		mouse_original_path.setAttribute(&quot;d&quot;, &quot;M&quot; + p.x + &quot;,&quot; + p.y);
+		slides[activeSlide][&quot;original_element&quot;].appendChild(mouse_original_path);
+		history_original_elements.push(mouse_original_path);
+
+		mouse_presentation_path = document.createElementNS(NSS[&quot;svg&quot;], &quot;path&quot;);
+		mouse_presentation_path.setAttribute(&quot;stroke&quot;, path_colour);
+		mouse_presentation_path.setAttribute(&quot;stroke-width&quot;, path_paint_width);
+		mouse_presentation_path.setAttribute(&quot;fill&quot;, &quot;none&quot;);
+		mouse_presentation_path.setAttribute(&quot;id&quot;, &quot;path &quot; + Date() + &quot; presentation copy&quot;);
+		mouse_presentation_path.setAttribute(&quot;d&quot;, &quot;M&quot; + p.x + &quot;,&quot; + p.y);
+
+		if (slides[activeSlide][&quot;viewGroup&quot;])
+			slides[activeSlide][&quot;viewGroup&quot;].appendChild(mouse_presentation_path);
+		else
+			slides[activeSlide][&quot;element&quot;].appendChild(mouse_presentation_path);
+
+		history_presentation_elements.push(mouse_presentation_path);
+
+		return false;
+	}
+
+	return true;
+}
+
+/** Event handler for mouse up in drawing mode.
+ *
+ *  @param e the event
+ */
+function drawingMouseup(e)
+{
+	if(!e)
+		e = window.event;
+
+	if (mouse_presentation_path != null)
+	{
+		var p = calcCoord(e);
+		var d = mouse_presentation_path.getAttribute(&quot;d&quot;);
+		d += &quot; L&quot; + p.x + &quot;,&quot; + p.y;
+		mouse_presentation_path.setAttribute(&quot;d&quot;, d);
+		mouse_presentation_path = null;
+		mouse_original_path.setAttribute(&quot;d&quot;, d);
+		mouse_original_path = null;
+
+		return false;
+	}
+
+	return true;
+}
+
+/** Event handler for mouse move in drawing mode.
+ *
+ *  @param e the event
+ */
+function drawingMousemove(e)
+{
+	if(!e)
+		e = window.event;
+
+	var dist = (mouse_last_x - e.clientX) * (mouse_last_x - e.clientX) + (mouse_last_y - e.clientY) * (mouse_last_y - e.clientY);
+
+	if (mouse_presentation_path == null)
+	{
+		return true;
+	}
+
+	if (dist &gt;= mouse_min_dist_sqr)
+	{
+		var p = calcCoord(e);
+		var d = mouse_presentation_path.getAttribute(&quot;d&quot;);
+		d += &quot; L&quot; + p.x + &quot;,&quot; + p.y;
+		mouse_presentation_path.setAttribute(&quot;d&quot;, d);
+		mouse_original_path.setAttribute(&quot;d&quot;, d);
+		mouse_last_x = e.clientX;
+		mouse_last_y = e.clientY;
+	}
+
+	return false;
+}
+
+/** Event handler for mouse wheel events in slide mode.
+ *  based on http://adomas.org/javascript-mouse-wheel/
+ *
+ *  @param e the event
+ */
+function slideMousewheel(e)
+{
+	var delta = 0;
+
+	if (!e)
+		e = window.event;
+
+	if (e.wheelDelta)
+	{ // IE Opera
+		delta = e.wheelDelta/120;
+	}
+	else if (e.detail)
+	{ // MOZ
+		delta = -e.detail/3;
+	}
+
+	if (delta &gt; 0)
+		skipEffects(-1);
+	else if (delta &lt; 0)
+		skipEffects(1);
+
+	if (e.preventDefault)
+		e.preventDefault();
+
+	e.returnValue = false;
+}
+
+/** Event handler for mouse wheel events in index mode.
+ *  based on http://adomas.org/javascript-mouse-wheel/
+ *
+ *  @param e the event
+ */
+function indexMousewheel(e)
+{
+	var delta = 0;
+
+	if (!e)
+		e = window.event;
+
+	if (e.wheelDelta)
+	{ // IE Opera
+		delta = e.wheelDelta/120;
+	}
+	else if (e.detail)
+	{ // MOZ
+		delta = -e.detail/3;
+	}
+
+	if (delta &gt; 0)
+		indexSetPageSlide(activeSlide - INDEX_COLUMNS * INDEX_COLUMNS);
+	else if (delta &lt; 0)
+		indexSetPageSlide(activeSlide + INDEX_COLUMNS * INDEX_COLUMNS);
+
+	if (e.preventDefault)
+		e.preventDefault();
+
+	e.returnValue = false;
+}
+
+/** Function to set the path paint width.
+*/
+function set_path_paint_width()
+{
+	var svgPoint1 = document.documentElement.createSVGPoint();
+	var svgPoint2 = document.documentElement.createSVGPoint();
+
+	svgPoint1.x = 0.0;
+	svgPoint1.y = 0.0;
+	svgPoint2.x = 1.0;
+	svgPoint2.y = 0.0;
+
+	var matrix = slides[activeSlide][&quot;element&quot;].getTransformToElement(ROOT_NODE);
+
+	if (slides[activeSlide][&quot;viewGroup&quot;])
+		matrix = slides[activeSlide][&quot;viewGroup&quot;].getTransformToElement(ROOT_NODE);
+
+	svgPoint1 = svgPoint1.matrixTransform(matrix);
+	svgPoint2 = svgPoint2.matrixTransform(matrix);
+
+	path_paint_width = path_width / Math.sqrt((svgPoint2.x - svgPoint1.x) * (svgPoint2.x - svgPoint1.x) + (svgPoint2.y - svgPoint1.y) * (svgPoint2.y - svgPoint1.y));
+}
+
+/** The view effect.
+ *
+ *  @param dir direction the effect should be played (1 = forwards, -1 = backwards)
+ *  @param element the element the effect should be applied to
+ *  @param time the time that has elapsed since the beginning of the effect
+ *  @param options a dictionary with additional options (e.g. length of the effect); for the view effect the options need to contain the old and the new matrix.
+ */
+function view(dir, element, time, options)
+{
+	var length = 250;
+	var fraction;
+
+	if (!options[&quot;matrixInitial&quot;])
+	{
+		var tempString = slides[activeSlide][&quot;viewGroup&quot;].getAttribute(&quot;transform&quot;);
+
+		if (tempString)
+			options[&quot;matrixInitial&quot;] = (new matrixSVG()).fromAttribute(tempString);
+		else
+			options[&quot;matrixInitial&quot;] = (new matrixSVG()).fromSVGElements(1, 0, 0, 1, 0, 0);
+	}
+
+	if ((time == STATE_END) || (time == STATE_START))
+		fraction = 1;
+	else
+	{
+		if (options &amp;&amp; options[&quot;length&quot;])
+			length = options[&quot;length&quot;];
+
+		fraction = time / length;
+	}
+
+	if (dir == 1)
+	{
+		if (fraction &lt;= 0)
+		{
+			element.setAttribute(&quot;transform&quot;, options[&quot;matrixInitial&quot;].toAttribute());
+		}
+		else if (fraction &gt;= 1)
+		{
+			element.setAttribute(&quot;transform&quot;, options[&quot;matrixNew&quot;].toAttribute());
+
+			set_path_paint_width();
+
+			options[&quot;matrixInitial&quot;] = null;
+			return true;
+		}
+		else
+		{
+			element.setAttribute(&quot;transform&quot;, options[&quot;matrixInitial&quot;].mix(options[&quot;matrixNew&quot;], fraction).toAttribute());
+		}
+	}
+	else if (dir == -1)
+	{
+		if (fraction &lt;= 0)
+		{
+			element.setAttribute(&quot;transform&quot;, options[&quot;matrixInitial&quot;].toAttribute());
+		}
+		else if (fraction &gt;= 1)
+		{
+			element.setAttribute(&quot;transform&quot;, options[&quot;matrixOld&quot;].toAttribute());
+			set_path_paint_width();
+
+			options[&quot;matrixInitial&quot;] = null;
+			return true;
+		}
+		else
+		{
+			element.setAttribute(&quot;transform&quot;, options[&quot;matrixInitial&quot;].mix(options[&quot;matrixOld&quot;], fraction).toAttribute());
+		}
+	}
+
+	return false;
+}
+
+/** The fade effect.
+ *
+ *  @param dir direction the effect should be played (1 = forwards, -1 = backwards)
+ *  @param element the element the effect should be applied to
+ *  @param time the time that has elapsed since the beginning of the effect
+ *  @param options a dictionary with additional options (e.g. length of the effect)
+ */
+function fade(dir, element, time, options)
+{
+	var length = 250;
+	var fraction;
+
+	if ((time == STATE_END) || (time == STATE_START))
+		fraction = 1;
+	else
+	{
+		if (options &amp;&amp; options[&quot;length&quot;])
+			length = options[&quot;length&quot;];
+
+		fraction = time / length;
+	}
+
+	if (dir == 1)
+	{
+		if (fraction &lt;= 0)
+		{
+			element.style.display = &quot;none&quot;;
+			element.setAttribute(&quot;opacity&quot;, 0);
+		}
+		else if (fraction &gt;= 1)
+		{
+			element.style.display = &quot;inherit&quot;;
+			element.setAttribute(&quot;opacity&quot;, 1);
+			return true;
+		}
+		else
+		{
+			element.style.display = &quot;inherit&quot;;
+			element.setAttribute(&quot;opacity&quot;, fraction);
+		}
+	}
+	else if (dir == -1)
+	{
+		if (fraction &lt;= 0)
+		{
+			element.style.display = &quot;inherit&quot;;
+			element.setAttribute(&quot;opacity&quot;, 1);
+		}
+		else if (fraction &gt;= 1)
+		{
+			element.setAttribute(&quot;opacity&quot;, 0);
+			element.style.display = &quot;none&quot;;
+			return true;
+		}
+		else
+		{
+			element.style.display = &quot;inherit&quot;;
+			element.setAttribute(&quot;opacity&quot;, 1 - fraction);
+		}
+	}
+	return false;
+}
+
+/** The appear effect.
+ *
+ *  @param dir direction the effect should be played (1 = forwards, -1 = backwards)
+ *  @param element the element the effect should be applied to
+ *  @param time the time that has elapsed since the beginning of the effect
+ *  @param options a dictionary with additional options (e.g. length of the effect)
+ */
+function appear(dir, element, time, options)
+{
+	if (dir == 1)
+	{
+		element.style.display = &quot;inherit&quot;;
+		element.setAttribute(&quot;opacity&quot;,1);
+	}
+	else if (dir == -1)
+	{
+		element.style.display = &quot;none&quot;;
+		element.setAttribute(&quot;opacity&quot;,0);
+	}
+	return true;
+}
+
+/** The pop effect.
+ *
+ *  @param dir direction the effect should be played (1 = forwards, -1 = backwards)
+ *  @param element the element the effect should be applied to
+ *  @param time the time that has elapsed since the beginning of the effect
+ *  @param options a dictionary with additional options (e.g. length of the effect)
+ */
+function pop(dir, element, time, options)
+{
+	var length = 500;
+	var fraction;
+
+	if ((time == STATE_END) || (time == STATE_START))
+		fraction = 1;
+	else
+	{
+		if (options &amp;&amp; options[&quot;length&quot;])
+			length = options[&quot;length&quot;];
+
+		fraction = time / length;
+	}
+
+	if (dir == 1)
+	{
+		if (fraction &lt;= 0)
+		{
+			element.setAttribute(&quot;opacity&quot;, 0);
+			element.setAttribute(&quot;transform&quot;, &quot;scale(0)&quot;);
+			element.style.display = &quot;none&quot;;
+		}
+		else if (fraction &gt;= 1)
+		{
+			element.setAttribute(&quot;opacity&quot;, 1);
+			element.removeAttribute(&quot;transform&quot;);
+			element.style.display = &quot;inherit&quot;;
+			return true;
+		}
+		else
+		{
+			element.style.display = &quot;inherit&quot;;
+			var opacityFraction = fraction * 3;
+			if (opacityFraction &gt; 1)
+				opacityFraction = 1;
+			element.setAttribute(&quot;opacity&quot;, opacityFraction);
+			var offsetX = WIDTH * (1.0 - fraction) / 2.0;
+			var offsetY = HEIGHT * (1.0 - fraction) / 2.0;
+			element.setAttribute(&quot;transform&quot;, &quot;translate(&quot; + offsetX + &quot;,&quot; + offsetY + &quot;) scale(&quot; + fraction + &quot;)&quot;);
+		}
+	}
+	else if (dir == -1)
+	{
+		if (fraction &lt;= 0)
+		{
+			element.setAttribute(&quot;opacity&quot;, 1);
+			element.setAttribute(&quot;transform&quot;, &quot;scale(1)&quot;);
+			element.style.display = &quot;inherit&quot;;
+		}
+		else if (fraction &gt;= 1)
+		{
+			element.setAttribute(&quot;opacity&quot;, 0);
+			element.removeAttribute(&quot;transform&quot;);
+			element.style.display = &quot;none&quot;;
+			return true;
+		}
+		else
+		{
+			element.setAttribute(&quot;opacity&quot;, 1 - fraction);
+			element.setAttribute(&quot;transform&quot;, &quot;scale(&quot; + 1 - fraction + &quot;)&quot;);
+			element.style.display = &quot;inherit&quot;;
+		}
+	}
+	return false;
+}
+
+/** Function to set a slide either to the start or the end state.
+ *  
+ *  @param slide the slide to use
+ *  @param state the state into which the slide should be set
+ */
+function setSlideToState(slide, state)
+{
+	slides[slide][&quot;viewGroup&quot;].setAttribute(&quot;transform&quot;, slides[slide].initialView);
+
+	if (slides[slide][&quot;effects&quot;])
+	{	
+		if (state == STATE_END)
+		{
+			for (var counter = 0; counter &lt; slides[slide][&quot;effects&quot;].length; counter++)
+			{
+				for (var subCounter = 0; subCounter &lt; slides[slide][&quot;effects&quot;][counter].length; subCounter++)
+				{
+					var effect = slides[slide][&quot;effects&quot;][counter][subCounter];
+					if (effect[&quot;effect&quot;] == &quot;fade&quot;)
+						fade(effect[&quot;dir&quot;], effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;appear&quot;)
+						appear(effect[&quot;dir&quot;], effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;pop&quot;)
+						pop(effect[&quot;dir&quot;], effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;view&quot;)
+						view(effect[&quot;dir&quot;], effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+				}
+			}
+		}
+		else if (state == STATE_START)
+		{
+			for (var counter = slides[slide][&quot;effects&quot;].length - 1; counter &gt;= 0; counter--)
+			{
+				for (var subCounter = 0; subCounter &lt; slides[slide][&quot;effects&quot;][counter].length; subCounter++)
+				{
+					var effect = slides[slide][&quot;effects&quot;][counter][subCounter];
+					if (effect[&quot;effect&quot;] == &quot;fade&quot;)
+						fade(parseInt(effect[&quot;dir&quot;]) * -1, effect[&quot;element&quot;], STATE_START, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;appear&quot;)
+						appear(parseInt(effect[&quot;dir&quot;]) * -1, effect[&quot;element&quot;], STATE_START, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;pop&quot;)
+						pop(parseInt(effect[&quot;dir&quot;]) * -1, effect[&quot;element&quot;], STATE_START, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;view&quot;)
+						view(parseInt(effect[&quot;dir&quot;]) * -1, effect[&quot;element&quot;], STATE_START, effect[&quot;options&quot;]);	
+				}
+			}
+		}
+		else
+		{
+			setSlideToState(slide, STATE_START);
+
+			for (var counter = 0; counter &lt; slides[slide][&quot;effects&quot;].length &amp;&amp; counter &lt; state; counter++)
+			{
+				for (var subCounter = 0; subCounter &lt; slides[slide][&quot;effects&quot;][counter].length; subCounter++)
+				{
+					var effect = slides[slide][&quot;effects&quot;][counter][subCounter];
+					if (effect[&quot;effect&quot;] == &quot;fade&quot;)
+						fade(effect[&quot;dir&quot;], effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;appear&quot;)
+						appear(effect[&quot;dir&quot;], effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;pop&quot;)
+						pop(effect[&quot;dir&quot;], effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;view&quot;)
+						view(effect[&quot;dir&quot;], effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+				}
+			}
+		}
+	}
+
+	window.location.hash = (activeSlide + 1) + '_' + activeEffect;
+}
+
+/** Convenience function to translate a attribute string into a dictionary.
+ *
+ *	@param str the attribute string
+ *  @return a dictionary
+ *  @see dictToPropStr
+ */
+function propStrToDict(str)
+{
+	var list = str.split(&quot;;&quot;);
+	var obj = new Object();
+
+	for (var counter = 0; counter &lt; list.length; counter++)
+	{
+		var subStr = list[counter];
+		var subList = subStr.split(&quot;:&quot;);
+		if (subList.length == 2)
+		{
+			obj[subList[0]] = subList[1];
+		}	
+	}
+
+	return obj;
+}
+
+/** Convenience function to translate a dictionary into a string that can be used as an attribute.
+ *
+ *  @param dict the dictionary to convert
+ *  @return a string that can be used as an attribute
+ *  @see propStrToDict
+ */
+function dictToPropStr(dict)
+{
+	var str = &quot;&quot;;
+
+	for (var key in dict)
+	{
+		str += key + &quot;:&quot; + dict[key] + &quot;;&quot;;
+	}
+
+	return str;
+}
+
+/** Sub-function to add a suffix to the ids of the node and all its children.
+ *	
+ *	@param node the node to change
+ *	@param suffix the suffix to add
+ *	@param replace dictionary of replaced ids
+ *  @see suffixNodeIds
+ */
+function suffixNoneIds_sub(node, suffix, replace)
+{
+	if (node.nodeType == 1)
+	{
+		if (node.getAttribute(&quot;id&quot;))
+		{
+			var id = node.getAttribute(&quot;id&quot;)
+				replace[&quot;#&quot; + id] = id + suffix;
+			node.setAttribute(&quot;id&quot;, id + suffix);
+		}
+
+		if ((node.nodeName == &quot;use&quot;) &amp;&amp; (node.getAttributeNS(NSS[&quot;xlink&quot;], &quot;href&quot;)) &amp;&amp; (replace[node.getAttribute(NSS[&quot;xlink&quot;], &quot;href&quot;)]))
+			node.setAttribute(NSS[&quot;xlink&quot;], &quot;href&quot;, node.getAttribute(NSS[&quot;xlink&quot;], &quot;href&quot;) + suffix);
+
+		if (node.childNodes)
+		{
+			for (var counter = 0; counter &lt; node.childNodes.length; counter++)
+				suffixNoneIds_sub(node.childNodes[counter], suffix, replace);
+		}
+	}
+}
+
+/** Function to add a suffix to the ids of the node and all its children.
+ *	
+ *	@param node the node to change
+ *	@param suffix the suffix to add
+ *  @return the changed node
+ *  @see suffixNodeIds_sub
+ */
+function suffixNodeIds(node, suffix)
+{
+	var replace = new Object();
+
+	suffixNoneIds_sub(node, suffix, replace);
+
+	return node;
+}
+
+/** Function to build a progress bar.
+ *	
+ *  @param parent node to attach the progress bar to
+ */
+function createProgressBar(parent_node)
+{
+	var g = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+	g.setAttribute(&quot;clip-path&quot;, &quot;url(#jessyInkSlideClipPath)&quot;);
+	g.setAttribute(&quot;id&quot;, &quot;layer_progress_bar&quot;);
+	g.setAttribute(&quot;style&quot;, &quot;display: none;&quot;);
+
+	var rect_progress_bar = document.createElementNS(NSS[&quot;svg&quot;], &quot;rect&quot;);
+	rect_progress_bar.setAttribute(&quot;style&quot;, &quot;marker: none; fill: rgb(128, 128, 128); stroke: none;&quot;);
+	rect_progress_bar.setAttribute(&quot;id&quot;, &quot;rect_progress_bar&quot;);
+	rect_progress_bar.setAttribute(&quot;x&quot;, 0);
+	rect_progress_bar.setAttribute(&quot;y&quot;, 0.99 * HEIGHT);
+	rect_progress_bar.setAttribute(&quot;width&quot;, 0);
+	rect_progress_bar.setAttribute(&quot;height&quot;, 0.01 * HEIGHT);
+	g.appendChild(rect_progress_bar);
+
+	var circle_timer_indicator = document.createElementNS(NSS[&quot;svg&quot;], &quot;circle&quot;);
+	circle_timer_indicator.setAttribute(&quot;style&quot;, &quot;marker: none; fill: rgb(255, 0, 0); stroke: none;&quot;);
+	circle_timer_indicator.setAttribute(&quot;id&quot;, &quot;circle_timer_indicator&quot;);
+	circle_timer_indicator.setAttribute(&quot;cx&quot;, 0.005 * HEIGHT);
+	circle_timer_indicator.setAttribute(&quot;cy&quot;, 0.995 * HEIGHT);
+	circle_timer_indicator.setAttribute(&quot;r&quot;, 0.005 * HEIGHT);
+	g.appendChild(circle_timer_indicator);
+
+	parent_node.appendChild(g);
+}
+
+/** Function to hide the progress bar.
+ *	
+ */
+function hideProgressBar()
+{
+	var progress_bar = document.getElementById(&quot;layer_progress_bar&quot;);
+
+	if (!progress_bar)
+	{
+		return;
+	}
+
+	progress_bar.setAttribute(&quot;style&quot;, &quot;display: none;&quot;);
+}
+
+/** Function to show the progress bar.
+ *	
+ */
+function showProgressBar()
+{
+	var progress_bar = document.getElementById(&quot;layer_progress_bar&quot;);
+
+	if (!progress_bar)
+	{
+		return;
+	}
+
+	progress_bar.setAttribute(&quot;style&quot;, &quot;display: inherit;&quot;);
+}
+
+/** Set progress bar value.
+ *	
+ *	@param value the current slide number
+ *
+ */
+function setProgressBarValue(value)
+{
+	var rect_progress_bar = document.getElementById(&quot;rect_progress_bar&quot;);
+
+	if (!rect_progress_bar)
+	{
+		return;
+	}
+
+	if (value &lt; 1)
+	{
+		// First slide, assumed to be the title of the presentation
+		var x = 0;
+		var w = 0.01 * HEIGHT;
+	}
+	else if (value &gt;= slides.length - 1)
+	{
+		// Last slide, assumed to be the end of the presentation
+		var x = WIDTH - 0.01 * HEIGHT;
+		var w = 0.01 * HEIGHT;
+	}
+	else
+	{
+		value -= 1;
+		value /= (slides.length - 2);
+
+		var x = WIDTH * value;
+		var w = WIDTH / (slides.length - 2);
+	}
+
+	rect_progress_bar.setAttribute(&quot;x&quot;, x);
+	rect_progress_bar.setAttribute(&quot;width&quot;, w);
+}
+
+/** Set time indicator.
+ *	
+ *	@param value the percentage of time elapse so far between 0.0 and 1.0
+ *
+ */
+function setTimeIndicatorValue(value)
+{
+	var circle_timer_indicator = document.getElementById(&quot;circle_timer_indicator&quot;);
+
+	if (!circle_timer_indicator)
+	{
+		return;
+	}
+
+	if (value &lt; 0.0)
+	{
+		value = 0.0;
+	}
+
+	if (value &gt; 1.0)
+	{
+		value = 1.0;
+	}
+
+	var cx = (WIDTH - 0.01 * HEIGHT) * value + 0.005 * HEIGHT;
+	circle_timer_indicator.setAttribute(&quot;cx&quot;, cx);
+}
+
+/** Update timer.
+ *	
+ */
+function updateTimer()
+{
+	timer_elapsed += 1;
+	setTimeIndicatorValue((timer_elapsed - timer_start) / (60 * timer_duration));
+}
+
+/** Convert screen coordinates to document coordinates.
+ *
+ *  @param e event with screen coordinates
+ *
+ *  @return coordinates in SVG file coordinate system	
+ */
+function calcCoord(e)
+{
+	var svgPoint = document.documentElement.createSVGPoint();
+	svgPoint.x = e.clientX + window.pageXOffset;
+	svgPoint.y = e.clientY + window.pageYOffset;
+
+	var matrix = slides[activeSlide][&quot;element&quot;].getScreenCTM();
+
+	if (slides[activeSlide][&quot;viewGroup&quot;])
+		matrix = slides[activeSlide][&quot;viewGroup&quot;].getScreenCTM();
+
+	svgPoint = svgPoint.matrixTransform(matrix.inverse());
+	return svgPoint;
+}
+
+/** Add slide.
+ *
+ *	@param after_slide after which slide the new slide should be inserted into the presentation
+ */
+function addSlide(after_slide)
+{
+	number_of_added_slides++;
+
+	var g = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+	g.setAttribute(&quot;clip-path&quot;, &quot;url(#jessyInkSlideClipPath)&quot;);
+	g.setAttribute(&quot;id&quot;, &quot;Whiteboard &quot; + Date() + &quot; presentation copy&quot;);
+	g.setAttribute(&quot;style&quot;, &quot;display: none;&quot;);
+
+	var new_slide = new Object();
+	new_slide[&quot;element&quot;] = g;
+
+	// Set build in transition.
+	new_slide[&quot;transitionIn&quot;] = new Object();
+	var dict = defaultTransitionInDict;
+	new_slide[&quot;transitionIn&quot;][&quot;name&quot;] = dict[&quot;name&quot;];
+	new_slide[&quot;transitionIn&quot;][&quot;options&quot;] = new Object();
+
+	for (key in dict)
+		if (key != &quot;name&quot;)
+			new_slide[&quot;transitionIn&quot;][&quot;options&quot;][key] = dict[key];
+
+	// Set build out transition.
+	new_slide[&quot;transitionOut&quot;] = new Object();
+	dict = defaultTransitionOutDict;
+	new_slide[&quot;transitionOut&quot;][&quot;name&quot;] = dict[&quot;name&quot;];
+	new_slide[&quot;transitionOut&quot;][&quot;options&quot;] = new Object();
+
+	for (key in dict)
+		if (key != &quot;name&quot;)
+			new_slide[&quot;transitionOut&quot;][&quot;options&quot;][key] = dict[key];
+
+	// Copy master slide content.
+	if (masterSlide)
+	{
+		var clonedNode = suffixNodeIds(masterSlide.cloneNode(true), &quot;_&quot; + Date() + &quot; presentation_copy&quot;);
+		clonedNode.removeAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;);
+		clonedNode.removeAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;);
+		clonedNode.style.display = &quot;inherit&quot;;
+
+		g.appendChild(clonedNode);
+	}
+
+	// Substitute auto texts.
+	substituteAutoTexts(g, &quot;Whiteboard &quot; + number_of_added_slides, &quot;W&quot; + number_of_added_slides, slides.length);
+
+	g.setAttribute(&quot;onmouseover&quot;, &quot;if ((currentMode == INDEX_MODE) &amp;&amp; ( activeSlide != &quot; + (after_slide + 1) + &quot;)) { indexSetActiveSlide(&quot; + (after_slide + 1) + &quot;); };&quot;);
+
+	// Create a transform group.
+	var transformGroup = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+
+	// Add content to transform group.
+	while (g.firstChild)
+		transformGroup.appendChild(g.firstChild);
+
+	// Transfer the transform attribute from the node to the transform group.
+	if (g.getAttribute(&quot;transform&quot;))
+	{
+		transformGroup.setAttribute(&quot;transform&quot;, g.getAttribute(&quot;transform&quot;));
+		g.removeAttribute(&quot;transform&quot;);
+	}
+
+	// Create a view group.
+	var viewGroup = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+
+	viewGroup.appendChild(transformGroup);
+	new_slide[&quot;viewGroup&quot;] = g.appendChild(viewGroup);
+
+	// Insert background.
+	if (BACKGROUND_COLOR != null)
+	{
+		var rectNode = document.createElementNS(NSS[&quot;svg&quot;], &quot;rect&quot;);
+
+		rectNode.setAttribute(&quot;x&quot;, 0);
+		rectNode.setAttribute(&quot;y&quot;, 0);
+		rectNode.setAttribute(&quot;width&quot;, WIDTH);
+		rectNode.setAttribute(&quot;height&quot;, HEIGHT);
+		rectNode.setAttribute(&quot;id&quot;, &quot;jessyInkBackground&quot; + Date());
+		rectNode.setAttribute(&quot;fill&quot;, BACKGROUND_COLOR);
+
+		new_slide[&quot;viewGroup&quot;].insertBefore(rectNode, new_slide[&quot;viewGroup&quot;].firstChild);
+	}
+
+	// Set initial view even if there are no other views.
+	var matrixOld = (new matrixSVG()).fromElements(1, 0, 0, 0, 1, 0, 0, 0, 1);
+
+	new_slide[&quot;viewGroup&quot;].setAttribute(&quot;transform&quot;, matrixOld.toAttribute());
+	new_slide.initialView = matrixOld.toAttribute();
+
+	// Insert slide
+	var node = slides[after_slide][&quot;element&quot;];
+	var next_node = node.nextSibling;
+	var parent_node = node.parentNode;
+
+	if (next_node)
+	{
+		parent_node.insertBefore(g, next_node);
+	}
+	else
+	{
+		parent_node.appendChild(g);
+	}
+
+	g = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+	g.setAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;, &quot;layer&quot;);
+	g.setAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;, &quot;Whiteboard &quot; + number_of_added_slides);
+	g.setAttribute(&quot;clip-path&quot;, &quot;url(#jessyInkSlideClipPath)&quot;);
+	g.setAttribute(&quot;id&quot;, &quot;Whiteboard &quot; + Date());
+	g.setAttribute(&quot;style&quot;, &quot;display: none;&quot;);
+
+	new_slide[&quot;original_element&quot;] = g;
+
+	node = slides[after_slide][&quot;original_element&quot;];
+	next_node = node.nextSibling;
+	parent_node = node.parentNode;
+
+	if (next_node)
+	{
+		parent_node.insertBefore(g, next_node);
+	}
+	else
+	{
+		parent_node.appendChild(g);
+	}
+
+	before_new_slide = slides.slice(0, after_slide + 1);
+	after_new_slide = slides.slice(after_slide + 1);
+	slides = before_new_slide.concat(new_slide, after_new_slide);
+
+	//resetting the counter attributes on the slides that follow the new slide...
+	for (var counter = after_slide+2; counter &lt; slides.length; counter++)
+	{
+		slides[counter][&quot;element&quot;].setAttribute(&quot;onmouseover&quot;, &quot;if ((currentMode == INDEX_MODE) &amp;&amp; ( activeSlide != &quot; + counter + &quot;)) { indexSetActiveSlide(&quot; + counter + &quot;); };&quot;);
+	}
+}
+
+/** Convenience function to obtain a transformation matrix from a point matrix.
+ *
+ *	@param mPoints Point matrix.
+ *	@return A transformation matrix.
+ */
+function pointMatrixToTransformation(mPoints)
+{
+	mPointsOld = (new matrixSVG()).fromElements(0, WIDTH, WIDTH, 0, 0, HEIGHT, 1, 1, 1);
+
+	return mPointsOld.mult(mPoints.inv());
+}
+
+/** Convenience function to obtain a matrix with three corners of a rectangle.
+ *
+ *	@param rect an svg rectangle
+ *	@return a matrixSVG containing three corners of the rectangle
+ */
+function rectToMatrix(rect)
+{
+	rectWidth = rect.getBBox().width;
+	rectHeight = rect.getBBox().height;
+	rectX = rect.getBBox().x;
+	rectY = rect.getBBox().y;
+	rectXcorr = 0;
+	rectYcorr = 0;
+
+	scaleX = WIDTH / rectWidth;
+	scaleY = HEIGHT / rectHeight;
+
+	if (scaleX &gt; scaleY)
+	{
+		scaleX = scaleY;
+		rectXcorr -= (WIDTH / scaleX - rectWidth) / 2;
+		rectWidth = WIDTH / scaleX;
+	}	
+	else
+	{
+		scaleY = scaleX;
+		rectYcorr -= (HEIGHT / scaleY - rectHeight) / 2;
+		rectHeight = HEIGHT / scaleY;
+	}
+
+	if (rect.transform.baseVal.numberOfItems &lt; 1)
+	{
+		mRectTrans = (new matrixSVG()).fromElements(1, 0, 0, 0, 1, 0, 0, 0, 1);
+	}
+	else
+	{
+		mRectTrans = (new matrixSVG()).fromSVGMatrix(rect.transform.baseVal.consolidate().matrix);
+	}
+
+	newBasePoints = (new matrixSVG()).fromElements(rectX, rectX, rectX, rectY, rectY, rectY, 1, 1, 1);
+	newVectors = (new matrixSVG()).fromElements(rectXcorr, rectXcorr + rectWidth, rectXcorr + rectWidth, rectYcorr, rectYcorr, rectYcorr + rectHeight, 0, 0, 0);
+
+	return mRectTrans.mult(newBasePoints.add(newVectors));
+}
+
+/** Function to handle JessyInk elements.
+ *
+ *	@param	node	Element node.
+ */
+function handleElement(node)
+{
+	if (node.getAttributeNS(NSS['jessyink'], 'element') == 'core.video')
+	{
+		var url;
+		var width;
+		var height;
+		var x;
+		var y;
+		var transform;
+
+		var tspans = node.getElementsByTagNameNS(&quot;http://www.w3.org/2000/svg&quot;, &quot;tspan&quot;);
+
+		for (var tspanCounter = 0; tspanCounter &lt; tspans.length; tspanCounter++)
+		{
+			if (tspans[tspanCounter].getAttributeNS(&quot;https://launchpad.net/jessyink&quot;, &quot;video&quot;) == &quot;url&quot;)
+			{
+				url = tspans[tspanCounter].firstChild.nodeValue;
+			}
+		}
+
+		var rects = node.getElementsByTagNameNS(&quot;http://www.w3.org/2000/svg&quot;, &quot;rect&quot;);
+
+		for (var rectCounter = 0; rectCounter &lt; rects.length; rectCounter++)
+		{
+			if (rects[rectCounter].getAttributeNS(&quot;https://launchpad.net/jessyink&quot;, &quot;video&quot;) == &quot;rect&quot;)
+			{
+				x = rects[rectCounter].getAttribute(&quot;x&quot;);
+				y = rects[rectCounter].getAttribute(&quot;y&quot;);
+				width = rects[rectCounter].getAttribute(&quot;width&quot;);
+				height = rects[rectCounter].getAttribute(&quot;height&quot;);
+				transform = rects[rectCounter].getAttribute(&quot;transform&quot;);
+			}
+		}
+
+		for (var childCounter = 0; childCounter &lt; node.childNodes.length; childCounter++)
+		{
+			if (node.childNodes[childCounter].nodeType == 1)
+			{
+				if (node.childNodes[childCounter].style)
+				{
+					node.childNodes[childCounter].style.display = 'none';
+				}
+				else
+				{
+					node.childNodes[childCounter].setAttribute(&quot;style&quot;, &quot;display: none;&quot;);
+				}
+			}
+		}
+
+		var foreignNode = document.createElementNS(&quot;http://www.w3.org/2000/svg&quot;, &quot;foreignObject&quot;);
+		foreignNode.setAttribute(&quot;x&quot;, x);
+		foreignNode.setAttribute(&quot;y&quot;, y);
+		foreignNode.setAttribute(&quot;width&quot;, width);
+		foreignNode.setAttribute(&quot;height&quot;, height);
+		foreignNode.setAttribute(&quot;transform&quot;, transform);
+
+		var videoNode = document.createElementNS(&quot;http://www.w3.org/1999/xhtml&quot;, &quot;video&quot;);
+		videoNode.setAttribute(&quot;src&quot;, url);
+
+		foreignNode.appendChild(videoNode);
+		node.appendChild(foreignNode);
+	}
+}
+
+/** Class processing the location hash.
+ *
+ *	@param str location hash
+ */
+function LocationHash(str)
+{
+	this.slideNumber = 0;
+	this.effectNumber = 0;
+
+	str = str.substr(1, str.length - 1);
+
+	var parts = str.split('_');
+
+	// Try to extract slide number.
+	if (parts.length &gt;= 1)
+	{
+		try
+		{
+			var slideNumber = parseInt(parts[0]);
+
+			if (!isNaN(slideNumber))
+			{
+				this.slideNumber = slideNumber - 1;
+			}
+		}
+		catch (e)
+		{
+		}
+	}
+	
+	// Try to extract effect number.
+	if (parts.length &gt;= 2)
+	{
+		try
+		{
+			var effectNumber = parseInt(parts[1]);
+
+			if (!isNaN(effectNumber))
+			{
+				this.effectNumber = effectNumber;
+			}
+		}
+		catch (e)
+		{
+		}
+	}
+}
+
+/** Class representing an svg matrix.
+*/
+function matrixSVG()
+{
+	this.e11 = 0; // a
+	this.e12 = 0; // c
+	this.e13 = 0; // e
+	this.e21 = 0; // b
+	this.e22 = 0; // d
+	this.e23 = 0; // f
+	this.e31 = 0;
+	this.e32 = 0;
+	this.e33 = 0;
+}
+
+/** Constructor function.
+ *
+ *	@param a element a (i.e. 1, 1) as described in the svg standard.
+ *	@param b element b (i.e. 2, 1) as described in the svg standard.
+ *	@param c element c (i.e. 1, 2) as described in the svg standard.
+ *	@param d element d (i.e. 2, 2) as described in the svg standard.
+ *	@param e element e (i.e. 1, 3) as described in the svg standard.
+ *	@param f element f (i.e. 2, 3) as described in the svg standard.
+ */
+matrixSVG.prototype.fromSVGElements = function(a, b, c, d, e, f)
+{
+	this.e11 = a;
+	this.e12 = c;
+	this.e13 = e;
+	this.e21 = b;
+	this.e22 = d;
+	this.e23 = f;
+	this.e31 = 0;
+	this.e32 = 0;
+	this.e33 = 1;
+
+	return this;
+}
+
+/** Constructor function.
+ *
+ *	@param matrix an svg matrix as described in the svg standard.
+ */
+matrixSVG.prototype.fromSVGMatrix = function(m)
+{
+	this.e11 = m.a;
+	this.e12 = m.c;
+	this.e13 = m.e;
+	this.e21 = m.b;
+	this.e22 = m.d;
+	this.e23 = m.f;
+	this.e31 = 0;
+	this.e32 = 0;
+	this.e33 = 1;
+
+	return this;
+}
+
+/** Constructor function.
+ *
+ *	@param e11 element 1, 1 of the matrix.
+ *	@param e12 element 1, 2 of the matrix.
+ *	@param e13 element 1, 3 of the matrix.
+ *	@param e21 element 2, 1 of the matrix.
+ *	@param e22 element 2, 2 of the matrix.
+ *	@param e23 element 2, 3 of the matrix.
+ *	@param e31 element 3, 1 of the matrix.
+ *	@param e32 element 3, 2 of the matrix.
+ *	@param e33 element 3, 3 of the matrix.
+ */
+matrixSVG.prototype.fromElements = function(e11, e12, e13, e21, e22, e23, e31, e32, e33)
+{
+	this.e11 = e11;
+	this.e12 = e12;
+	this.e13 = e13;
+	this.e21 = e21;
+	this.e22 = e22;
+	this.e23 = e23;
+	this.e31 = e31;
+	this.e32 = e32;
+	this.e33 = e33;
+
+	return this;
+}
+
+/** Constructor function.
+ *
+ *	@param attrString string value of the &quot;transform&quot; attribute (currently only &quot;matrix&quot; is accepted)
+ */
+matrixSVG.prototype.fromAttribute = function(attrString)
+{
+	str = attrString.substr(7, attrString.length - 8);
+
+	str = str.trim();
+
+	strArray = str.split(&quot;,&quot;);
+
+	// Opera does not use commas to separate the values of the matrix, only spaces.
+	if (strArray.length != 6)
+		strArray = str.split(&quot; &quot;);
+
+	this.e11 = parseFloat(strArray[0]);
+	this.e21 = parseFloat(strArray[1]);
+	this.e31 = 0;
+	this.e12 = parseFloat(strArray[2]);
+	this.e22 = parseFloat(strArray[3]);
+	this.e32 = 0;
+	this.e13 = parseFloat(strArray[4]);
+	this.e23 = parseFloat(strArray[5]);
+	this.e33 = 1;
+
+	return this;
+}
+
+/** Output function
+ *
+ *	@return a string that can be used as the &quot;transform&quot; attribute.
+ */
+matrixSVG.prototype.toAttribute = function()
+{
+	return &quot;matrix(&quot; + this.e11 + &quot;, &quot; + this.e21 + &quot;, &quot; + this.e12 + &quot;, &quot; + this.e22 + &quot;, &quot; + this.e13 + &quot;, &quot; + this.e23 + &quot;)&quot;;
+}
+
+/** Matrix nversion.
+ *
+ *	@return the inverse of the matrix
+ */
+matrixSVG.prototype.inv = function()
+{
+	out = new matrixSVG();
+
+	det = this.e11 * (this.e33 * this.e22 - this.e32 * this.e23) - this.e21 * (this.e33 * this.e12 - this.e32 * this.e13) + this.e31 * (this.e23 * this.e12 - this.e22 * this.e13);
+
+	out.e11 =  (this.e33 * this.e22 - this.e32 * this.e23) / det;
+	out.e12 = -(this.e33 * this.e12 - this.e32 * this.e13) / det;
+	out.e13 =  (this.e23 * this.e12 - this.e22 * this.e13) / det;
+	out.e21 = -(this.e33 * this.e21 - this.e31 * this.e23) / det;
+	out.e22 =  (this.e33 * this.e11 - this.e31 * this.e13) / det;
+	out.e23 = -(this.e23 * this.e11 - this.e21 * this.e13) / det;
+	out.e31 =  (this.e32 * this.e21 - this.e31 * this.e22) / det;
+	out.e32 = -(this.e32 * this.e11 - this.e31 * this.e12) / det;
+	out.e33 =  (this.e22 * this.e11 - this.e21 * this.e12) / det;
+
+	return out;
+}
+
+/** Matrix multiplication.
+ *
+ *	@param op another svg matrix
+ *	@return this * op
+ */
+matrixSVG.prototype.mult = function(op)
+{
+	out = new matrixSVG();
+
+	out.e11 = this.e11 * op.e11 + this.e12 * op.e21 + this.e13 * op.e31;
+	out.e12 = this.e11 * op.e12 + this.e12 * op.e22 + this.e13 * op.e32;
+	out.e13 = this.e11 * op.e13 + this.e12 * op.e23 + this.e13 * op.e33;
+	out.e21 = this.e21 * op.e11 + this.e22 * op.e21 + this.e23 * op.e31;
+	out.e22 = this.e21 * op.e12 + this.e22 * op.e22 + this.e23 * op.e32;
+	out.e23 = this.e21 * op.e13 + this.e22 * op.e23 + this.e23 * op.e33;
+	out.e31 = this.e31 * op.e11 + this.e32 * op.e21 + this.e33 * op.e31;
+	out.e32 = this.e31 * op.e12 + this.e32 * op.e22 + this.e33 * op.e32;
+	out.e33 = this.e31 * op.e13 + this.e32 * op.e23 + this.e33 * op.e33;
+
+	return out;
+}
+
+/** Matrix addition.
+ *
+ *	@param op another svg matrix
+ *	@return this + op
+ */
+matrixSVG.prototype.add = function(op)
+{
+	out = new matrixSVG();
+
+	out.e11 = this.e11 + op.e11;
+	out.e12 = this.e12 + op.e12;
+	out.e13 = this.e13 + op.e13;
+	out.e21 = this.e21 + op.e21;
+	out.e22 = this.e22 + op.e22;
+	out.e23 = this.e23 + op.e23;
+	out.e31 = this.e31 + op.e31;
+	out.e32 = this.e32 + op.e32;
+	out.e33 = this.e33 + op.e33;
+
+	return out;
+}
+
+/** Matrix mixing.
+ *
+ *	@param op another svg matrix
+ *	@parma contribOp contribution of the other matrix (0 &lt;= contribOp &lt;= 1)
+ *	@return (1 - contribOp) * this + contribOp * op
+ */
+matrixSVG.prototype.mix = function(op, contribOp)
+{
+	contribThis = 1.0 - contribOp;
+	out = new matrixSVG();
+
+	out.e11 = contribThis * this.e11 + contribOp * op.e11;
+	out.e12 = contribThis * this.e12 + contribOp * op.e12;
+	out.e13 = contribThis * this.e13 + contribOp * op.e13;
+	out.e21 = contribThis * this.e21 + contribOp * op.e21;
+	out.e22 = contribThis * this.e22 + contribOp * op.e22;
+	out.e23 = contribThis * this.e23 + contribOp * op.e23;
+	out.e31 = contribThis * this.e31 + contribOp * op.e31;
+	out.e32 = contribThis * this.e32 + contribOp * op.e32;
+	out.e33 = contribThis * this.e33 + contribOp * op.e33;
+
+	return out;
+}
+
+/** Trimming function for strings.
+*/
+String.prototype.trim = function()
+{
+	return this.replace(/^\s+|\s+$/g, '');
+}
+
+</script>
+  <ns1:mousehandler
+     ns1:subtype="jessyInk_core_mouseHandler_noclick">
+    <script
+       id="script4951">// Copyright 2008, 2009 Hannes Hochreiner
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program.  If not, see http://www.gnu.org/licenses/.
+
+// Add event listener for initialisation.
+document.addEventListener(&quot;DOMContentLoaded&quot;,  jessyInk_core_mouseHandler_noclick_init, false);
+
+/** Initialisation function.
+ *  
+ *  This function looks for the objects of the appropriate sub-type and hands them to another function that will add the required methods.
+ */
+function jessyInk_core_mouseHandler_noclick_init()
+{
+	var elems = document.getElementsByTagNameNS(&quot;https://launchpad.net/jessyink&quot;, &quot;mousehandler&quot;);
+
+	for (var counter = 0; counter &lt; elems.length; counter++)
+	{
+		if (elems[counter].getAttributeNS(&quot;https://launchpad.net/jessyink&quot;, &quot;subtype&quot;) == &quot;jessyInk_core_mouseHandler_noclick&quot;)
+			jessyInk_core_mouseHandler_noclick(elems[counter]);
+	}
+}
+
+/** Function to initialise an object.
+ *
+ *  @param obj Object to be initialised.
+ */
+function jessyInk_core_mouseHandler_noclick(obj)
+{
+	/** Function supplying a custom mouse handler.
+	 *
+	 *  @returns A dictionary containing the new mouse handler functions.
+	 */
+	obj.getMouseHandler = function ()
+	{
+		var handlerDictio = new Object();
+
+		handlerDictio[SLIDE_MODE] = new Object();
+		handlerDictio[SLIDE_MODE][MOUSE_DOWN] = null;
+
+		return handlerDictio;
+	}
+}
+
+</script>
+  </ns1:mousehandler>
+</svg>
diff --git a/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/xhtml.svg b/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/xhtml.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d383732fb012a2cb74612a3d961e2f91ba447920
--- /dev/null
+++ b/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/xhtml.svg
@@ -0,0 +1,3559 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:ns1="https://launchpad.net/jessyink"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   sodipodi:docname="xhtml.svg"
+   inkscape:version="0.48.4 r9939"
+   version="1.2"
+   id="svg2"
+   height="177.16534"
+   width="425.19684">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="3.5066112"
+     inkscape:cx="210.03184"
+     inkscape:cy="95.426887"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer6"
+     showgrid="true"
+     inkscape:window-width="1600"
+     inkscape:window-height="1176"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     inkscape:snap-global="true"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:snap-grids="true"
+     units="mm">
+    <inkscape:grid
+       units="mm"
+       snapvisiblegridlinesonly="true"
+       enabled="true"
+       visible="true"
+       empspacing="5"
+       id="grid5239"
+       type="xygrid" />
+    <sodipodi:guide
+       id="guide3149"
+       position="680,750"
+       orientation="0,1" />
+  </sodipodi:namedview>
+  <defs
+     id="defs4">
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Lend"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         id="path4332" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyTriangleOutL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyTriangleOutL"
+       style="overflow:visible">
+      <path
+         id="path6166"
+         d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.8,0,0,0.8,-4.8,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="DotM"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="DotM">
+      <path
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         id="path4359"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5023"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mstart"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5020"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Lend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5017"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Lstart"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lstart">
+      <path
+         transform="matrix(0.8,0,0,0.8,10,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5014"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mstart-8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5020-3"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-2"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5023-9"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mstart-4"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5020-1"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-22"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5023-1"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mstart-6"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mstart">
+      <path
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5020-8"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5023-5"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="DotMo"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="DotMo">
+      <path
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         style="fill:#d40000;fill-rule:evenodd;stroke:#d40000;stroke-width:1pt"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         id="path5187"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6o"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend-6o">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#d40000;fill-rule:evenodd;stroke:#d40000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5190"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="DotMo1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="DotMo1">
+      <path
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         id="path6031"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6n"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend-6n">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path6034"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="DotMoc"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="DotMoc">
+      <path
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         id="path6037"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6F"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend-6F">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path6040"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="DotMocK"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="DotMocK">
+      <path
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         id="path6279"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6Fa"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend-6Fa">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path6282"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="DotMo17"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="DotMo17">
+      <path
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         style="fill:#d40000;fill-rule:evenodd;stroke:#d40000;stroke-width:1pt"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         id="path6529"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6nl"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend-6nl">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#d40000;fill-rule:evenodd;stroke:#d40000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path6532"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="DotMocKE"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="DotMocKE">
+      <path
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         style="fill:#d40000;fill-rule:evenodd;stroke:#d40000;stroke-width:1pt"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         id="path6535"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6FaK"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend-6FaK">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#d40000;fill-rule:evenodd;stroke:#d40000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path6538"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend-6-8"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5023-5-4"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyTriangleOutL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyTriangleOutL-6"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6166-3"
+         d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.8,0,0,0.8,-4.8,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyTriangleOutL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyTriangleOutL-3"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6166-9"
+         d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.8,0,0,0.8,-4.8,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyTriangleOutL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyTriangleOutL-9"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6166-5"
+         d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.8,0,0,0.8,-4.8,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyTriangleOutL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyTriangleOutL-8"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6166-53"
+         d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+         transform="matrix(0.8,0,0,0.8,-4.8,0)" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Lends"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lends">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path4563"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1LendB"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1LendB">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#00ff00;fill-rule:evenodd;stroke:#00ff00;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path4992"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1LendU"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1LendU">
+      <path
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#ff00ff;fill-rule:evenodd;stroke:#ff00ff;stroke-width:1pt"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5429"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Lend2"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Lend2">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="stroke-linejoin:round;stroke:#ff00ff;stroke-width:0.62500000;fill:#ff00ff;fill-rule:evenodd"
+         id="path9787" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow2LendN"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2LendN">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="stroke-linejoin:round;stroke:#00ff00;stroke-width:0.62500000;fill:#00ff00;fill-rule:evenodd"
+         id="path10254" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow2LendL"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2LendL">
+      <path
+         transform="scale(1.1) rotate(180) translate(1,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="stroke-linejoin:round;stroke:#ff0000;stroke-width:0.62500000;fill:#ff0000;fill-rule:evenodd"
+         id="path10727" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <image
+     y="77.165352"
+     x="190"
+     id="image3621"
+     xlink:href="data:image/png;base64,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 3677NUBWeseOHVWtaHXf8g2nOXMekWTpheefZxN//PGnufPmfvLxx6ysP5OoXd9+8w19wbiaQi2t V6srd0uzENu4BoOhU8dOc+bMads2q8kM/6BO+GdKYX+PlqVdv/7aWFbNrmfwXvdnavJnks1mq6mp wwS3apXekPLeX0gFCLbwp6d933v33bCwMJpitVoFQaA/Q0LUR3b9PYF7JeQrFwDMZrP+eDIjvXm1 Gj582Lz58y9evJiQkKAmfv7FZ9dcc02LFi0AQJXVNP5NI1+7AnmggdUbKpcQWZYFQai/aEO4MY1b VVW1bt26ufPmfvjBB1fIsNk7oUYEIfRdmX+QlC8+/5x+ycvLe+zxx//94Qcmkxma1MGa3RvBe92f qcmfQHv37eM5rlOnTlarVRRF+iSmzWY7ceIExqR796u0xb12NWrhDzEx0XFxsfRjsZgP/n6wV+/e TDzv5fD++++PvX3s9f36jRg58pVXXpZl6QoCb43cuLhY+uR9ZVXlrNmzrrv++gkTJ5w6dUqVzmr1 4IMPAsBNAwb06t27V+/eTZDeu3evqKioL7/6Uk2prLz866+7hg0bqpMVyOqdO38ePGQIIRiA/P77 7716937jzTdo+ccee+yFF19sslsCpbBaffrZpyNHjerTt+/wEcPfefddWsCvWyRJ3Lhp44iRI6+7 /vrb77j9s88/Y7n98usv4++dcN311z/62KP33DOelTvmttveeeftK2zcNm0yx44dW1paKoru4PoE z1KdYLfbpk+fPnXaVJvNRk347bff7p1w7/X9+v190qTS0jOHDx+eMHHCdddff99995WWnqG1tm7d es8991zfr9/AQYOefPJJm63O1wPHjh31KyWQtxv1UTt5RGQEAERHR8fFxUZFRTbJFV5vXLli9fa6 QP2fLUY9+f3339865rYbbrxx+fLlkiRegTJ/4IfnOLPZdPbsWQBy1VU52dkdAMjZs2fNZhNH3y6u d4KHGrrwp7X0oTubyHzfsuW1b7/7dtas2ZkZGadPn17+jxWYkMmTJgfm3ki5AACwYsWK8vKKLa++ WlNbu3TpM341WbHiH48/PvfDD95XpvpGyxcEw+DBg7d+sfWeu++hKV9++XVYWFi/669voNVdunSt ra09ebIwKyvrwMGDUVGR+/cfuPuuuwkhvx86NHzE8KbM3L5u8dcW589fWLHi2alTH7yp/02VVVWX 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 "
+     height="92.5"
+     width="227"
+     style="fill:#ff0000" />
+  <g
+     style="display:inline"
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="Classification"
+     transform="translate(0,-566.98465)">
+    <path
+       sodipodi:type="arc"
+       style="color:#000000;fill:none;stroke:#ff0000;stroke-width:1.47704296;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path3632"
+       sodipodi:cx="70"
+       sodipodi:cy="203.24802"
+       sodipodi:rx="15"
+       sodipodi:ry="17.5"
+       d="m 85,203.24802 c 0,9.66498 -6.715729,17.5 -15,17.5 -8.284271,0 -15,-7.83502 -15,-17.5 0,-9.66499 6.715729,-17.5 15,-17.5 8.284271,0 15,7.83501 15,17.5 z"
+       transform="matrix(1.0451736,0,0,0.43855626,150.3645,561.38717)" />
+    <path
+       sodipodi:type="arc"
+       style="color:#000000;fill:none;stroke:#ff00ff;stroke-width:1.5672979;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path3075"
+       sodipodi:cx="145"
+       sodipodi:cy="150.74802"
+       sodipodi:rx="40"
+       sodipodi:ry="20"
+       d="m 185,150.74802 c 0,11.04569 -17.90861,20 -40,20 -22.09139,0 -40,-8.95431 -40,-20 0,-11.0457 17.90861,-20 40,-20 22.09139,0 40,8.9543 40,20 z"
+       transform="matrix(1,0,0,0.40709606,79.328948,666.75401)" />
+    <path
+       sodipodi:type="arc"
+       style="color:#000000;fill:none;stroke:#00ff00;stroke-width:1.50921479;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="path3077"
+       sodipodi:cx="272.5"
+       sodipodi:cy="215.74802"
+       sodipodi:rx="57.5"
+       sodipodi:ry="15"
+       d="m 330,215.74802 c 0,8.28427 -25.74363,15 -57.5,15 -31.75637,0 -57.5,-6.71573 -57.5,-15 0,-8.28427 25.74363,-15 57.5,-15 31.75637,0 57.5,6.71573 57.5,15 z"
+       transform="matrix(0.60227561,0,0,0.72895819,55.745365,546.74665)" />
+    <text
+       sodipodi:linespacing="125%"
+       id="text3164"
+       y="584.15002"
+       x="10"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:'Monospace, Normal'"
+       xml:space="preserve"><tspan
+         y="584.15002"
+         x="10"
+         id="tspan3166"
+         sodipodi:role="line">&lt;!DOCTYPE html&gt;</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3168"
+       y="599.15002"
+       x="20"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:'Monospace, Normal'"
+       xml:space="preserve"><tspan
+         y="599.15002"
+         x="20"
+         id="tspan3170"
+         sodipodi:role="line">&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3172"
+       y="614.15002"
+       x="20"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:'Monospace, Normal'"
+       xml:space="preserve"><tspan
+         y="614.15002"
+         x="20"
+         id="tspan3174"
+         sodipodi:role="line">&lt;head&gt;</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3176"
+       y="629.15002"
+       x="30"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:'Monospace, Normal'"
+       xml:space="preserve"><tspan
+         y="629.15002"
+         x="30"
+         id="tspan3178"
+         sodipodi:role="line">&lt;title&gt;<tspan
+   id="tspan3208"
+   style="fill:#ff0000">Intro</tspan>&lt;/title&gt;</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3180"
+       y="644.15002"
+       x="20"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:'Monospace, Normal'"
+       xml:space="preserve"><tspan
+         y="644.15002"
+         x="20"
+         id="tspan3182"
+         sodipodi:role="line">&lt;/head&gt;</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3184"
+       y="659.15002"
+       x="20"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:'Monospace, Normal'"
+       xml:space="preserve"><tspan
+         y="659.15002"
+         x="20"
+         id="tspan3186"
+         sodipodi:role="line">&lt;body&gt;</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3188"
+       y="674.15002"
+       x="30"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:'Monospace, Normal'"
+       xml:space="preserve"><tspan
+         y="674.15002"
+         x="30"
+         id="tspan3190"
+         sodipodi:role="line">&lt;h1&gt;<tspan
+   id="tspan3210"
+   style="fill:#00ff00">Start</tspan>&lt;/h1&gt;</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3192"
+       y="689.15002"
+       x="30"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:'Monospace, Normal'"
+       xml:space="preserve"><tspan
+         y="689.15002"
+         x="30"
+         id="tspan3194"
+         sodipodi:role="line">&lt;p&gt;<tspan
+   id="tspan7253"
+   style="fill:#ff00ff">Very simple!</tspan>&lt;/p&gt;</tspan></text>
+    <text
+       transform="translate(0,478.40198)"
+       sodipodi:linespacing="125%"
+       id="text3196"
+       y="148.25566"
+       x="37.07283"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:'Monospace, Normal'"
+       xml:space="preserve"><tspan
+         y="148.25566"
+         x="37.07283"
+         id="tspan3198"
+         sodipodi:role="line" /></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3200"
+       y="704.15002"
+       x="20"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:'Monospace, Normal'"
+       xml:space="preserve"><tspan
+         y="704.15002"
+         x="20"
+         id="tspan3202"
+         sodipodi:role="line">&lt;/body&gt;</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3204"
+       y="719.15002"
+       x="10"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:'Monospace, Normal'"
+       xml:space="preserve"><tspan
+         y="719.15002"
+         x="10"
+         id="tspan3206"
+         sodipodi:role="line">&lt;/html&gt;</tspan></text>
+    <path
+       sodipodi:nodetypes="cscc"
+       inkscape:connector-curvature="0"
+       id="path4061"
+       d="m 115.85553,630.15753 c 0,0 15.89571,7.72393 44.99999,15 20,5 45,5 45,5 l 0,0"
+       style="stroke-linejoin:miter;enable-background:accumulate;marker-end:url(#Arrow2LendL);stroke-opacity:1;color:#000000;stroke-dashoffset:0;visibility:visible;stroke:#ff0000;stroke-linecap:butt;stroke-miterlimit:4;marker:none;stroke-dasharray:none;overflow:visible;stroke-width:1;display:inline;fill:none" />
+    <path
+       sodipodi:nodetypes="cssc"
+       transform="translate(0,566.98465)"
+       inkscape:connector-curvature="0"
+       id="path5787"
+       d="m 90,97.165344 c 0,0 0,-5 20,-15 14.14214,-7.071068 45,5 60,19.999996 10,10 25,25 25,25"
+       style="color:#000000;fill:none;stroke:#00ff00;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-end:url(#Arrow2LendN);visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <path
+       sodipodi:nodetypes="csc"
+       transform="translate(0,566.98465)"
+       inkscape:connector-curvature="0"
+       id="path7255"
+       d="m 135,127.16534 c 0,0 10.85787,7.92893 25,15 10,5 25,15 25,15"
+       style="stroke-linejoin:miter;enable-background:accumulate;marker-end:url(#Arrow2Lend2);stroke-opacity:1;color:#000000;stroke-dashoffset:0;visibility:visible;stroke:#ff00ff;stroke-linecap:butt;stroke-miterlimit:4;marker:none;stroke-dasharray:none;overflow:visible;stroke-width:1;display:inline;fill:none" />
+  </g>
+  <script
+     ns1:version="1.5.5"
+     id="JessyInk">// Copyright 2008, 2009 Hannes Hochreiner
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program.  If not, see http://www.gnu.org/licenses/.
+
+// Set onload event handler.
+window.onload = jessyInkInit;
+
+// Creating a namespace dictionary. The standard Inkscape namespaces are taken from inkex.py.
+var NSS = new Object();
+NSS['sodipodi']='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd';
+NSS['cc']='http://web.resource.org/cc/';
+NSS['svg']='http://www.w3.org/2000/svg';
+NSS['dc']='http://purl.org/dc/elements/1.1/';
+NSS['rdf']='http://www.w3.org/1999/02/22-rdf-syntax-ns#';
+NSS['inkscape']='http://www.inkscape.org/namespaces/inkscape';
+NSS['xlink']='http://www.w3.org/1999/xlink';
+NSS['xml']='http://www.w3.org/XML/1998/namespace';
+NSS['jessyink']='https://launchpad.net/jessyink';
+
+// Keycodes.
+var LEFT_KEY = 37; // cursor left keycode
+var UP_KEY = 38; // cursor up keycode
+var RIGHT_KEY = 39; // cursor right keycode
+var DOWN_KEY = 40; // cursor down keycode
+var PAGE_UP_KEY = 33; // page up keycode
+var PAGE_DOWN_KEY = 34; // page down keycode
+var HOME_KEY = 36; // home keycode
+var END_KEY = 35; // end keycode
+var ENTER_KEY = 13; // next slide
+var SPACE_KEY = 32;
+var ESCAPE_KEY = 27;
+
+// Presentation modes.
+var SLIDE_MODE = 1;
+var INDEX_MODE = 2;
+var DRAWING_MODE = 3;
+
+// Mouse handler actions.
+var MOUSE_UP = 1;
+var MOUSE_DOWN = 2;
+var MOUSE_MOVE = 3;
+var MOUSE_WHEEL = 4;
+
+// Parameters.
+var ROOT_NODE = document.getElementsByTagNameNS(NSS[&quot;svg&quot;], &quot;svg&quot;)[0];
+var HEIGHT = 0;
+var WIDTH = 0;
+var INDEX_COLUMNS_DEFAULT = 4;
+var INDEX_COLUMNS = INDEX_COLUMNS_DEFAULT;
+var INDEX_OFFSET = 0;
+var STATE_START = -1;
+var STATE_END = -2;
+var BACKGROUND_COLOR = null;
+var slides = new Array();
+
+// Initialisation.
+var currentMode = SLIDE_MODE;
+var masterSlide = null;
+var activeSlide = 0;
+var activeEffect = 0;
+var timeStep = 30; // 40 ms equal 25 frames per second.
+var lastFrameTime = null;
+var processingEffect = false;
+var transCounter = 0;
+var effectArray = 0;
+var defaultTransitionInDict = new Object();
+defaultTransitionInDict[&quot;name&quot;] = &quot;appear&quot;;
+var defaultTransitionOutDict = new Object();
+defaultTransitionOutDict[&quot;name&quot;] = &quot;appear&quot;;
+var jessyInkInitialised = false;
+
+// Initialise char and key code dictionaries.
+var charCodeDictionary = getDefaultCharCodeDictionary();
+var keyCodeDictionary = getDefaultKeyCodeDictionary();
+
+// Initialise mouse handler dictionary.
+var mouseHandlerDictionary = getDefaultMouseHandlerDictionary();
+
+var progress_bar_visible = false;
+var timer_elapsed = 0;
+var timer_start = timer_elapsed;
+var timer_duration = 15; // 15 minutes
+
+var history_counter = 0;
+var history_original_elements = new Array();
+var history_presentation_elements = new Array();
+
+var mouse_original_path = null;
+var mouse_presentation_path = null;
+var mouse_last_x = -1;
+var mouse_last_y = -1;
+var mouse_min_dist_sqr = 3 * 3;
+var path_colour = &quot;red&quot;;
+var path_width_default = 3;
+var path_width = path_width_default;
+var path_paint_width = path_width;
+
+var number_of_added_slides = 0;
+
+/** Initialisation function.
+ *  The whole presentation is set-up in this function.
+ */
+function jessyInkInit()
+{
+	// Make sure we only execute this code once. Double execution can occur if the onload event handler is set
+	// in the main svg tag as well (as was recommended in earlier versions). Executing this function twice does
+	// not lead to any problems, but it takes more time.
+	if (jessyInkInitialised)
+		return;
+
+	// Making the presentation scaleable.
+	var VIEWBOX = ROOT_NODE.getAttribute(&quot;viewBox&quot;);
+
+	if (VIEWBOX)
+	{
+		WIDTH = ROOT_NODE.viewBox.animVal.width;
+		HEIGHT = ROOT_NODE.viewBox.animVal.height;
+	}
+	else
+	{
+		HEIGHT = parseFloat(ROOT_NODE.getAttribute(&quot;height&quot;));
+		WIDTH = parseFloat(ROOT_NODE.getAttribute(&quot;width&quot;));
+		ROOT_NODE.setAttribute(&quot;viewBox&quot;, &quot;0 0 &quot; + WIDTH + &quot; &quot; + HEIGHT);
+	}
+
+	ROOT_NODE.setAttribute(&quot;width&quot;, &quot;100%&quot;);
+	ROOT_NODE.setAttribute(&quot;height&quot;, &quot;100%&quot;);
+
+	// Setting the background color.
+	var namedViews = document.getElementsByTagNameNS(NSS[&quot;sodipodi&quot;], &quot;namedview&quot;);
+
+	for (var counter = 0; counter &lt; namedViews.length; counter++)
+	{
+		if (namedViews[counter].hasAttribute(&quot;id&quot;) &amp;&amp; namedViews[counter].hasAttribute(&quot;pagecolor&quot;))
+		{
+			if (namedViews[counter].getAttribute(&quot;id&quot;) == &quot;base&quot;)
+			{
+				BACKGROUND_COLOR = namedViews[counter].getAttribute(&quot;pagecolor&quot;);
+				var newAttribute = &quot;background-color:&quot; + BACKGROUND_COLOR + &quot;;&quot;;
+
+				if (ROOT_NODE.hasAttribute(&quot;style&quot;))
+					newAttribute += ROOT_NODE.getAttribute(&quot;style&quot;);
+
+				ROOT_NODE.setAttribute(&quot;style&quot;, newAttribute);
+			}
+		}
+	}
+
+	// Defining clip-path.
+	var defsNodes = document.getElementsByTagNameNS(NSS[&quot;svg&quot;], &quot;defs&quot;);
+
+	if (defsNodes.length &gt; 0)
+	{
+		var existingClipPath = document.getElementById(&quot;jessyInkSlideClipPath&quot;);
+
+		if (!existingClipPath)
+		{
+			var rectNode = document.createElementNS(NSS[&quot;svg&quot;], &quot;rect&quot;);
+			var clipPath = document.createElementNS(NSS[&quot;svg&quot;], &quot;clipPath&quot;);
+
+			rectNode.setAttribute(&quot;x&quot;, 0);
+			rectNode.setAttribute(&quot;y&quot;, 0);
+			rectNode.setAttribute(&quot;width&quot;, WIDTH);
+			rectNode.setAttribute(&quot;height&quot;, HEIGHT);
+
+			clipPath.setAttribute(&quot;id&quot;, &quot;jessyInkSlideClipPath&quot;);
+			clipPath.setAttribute(&quot;clipPathUnits&quot;, &quot;userSpaceOnUse&quot;);
+
+			clipPath.appendChild(rectNode);
+			defsNodes[0].appendChild(clipPath);
+		}
+	}
+
+	// Making a list of the slide and finding the master slide.
+	var nodes = document.getElementsByTagNameNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+	var tempSlides = new Array();
+	var existingJessyInkPresentationLayer = null;
+
+	for (var counter = 0; counter &lt; nodes.length; counter++)
+	{
+		if (nodes[counter].getAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;) &amp;&amp; (nodes[counter].getAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;) == &quot;layer&quot;))
+		{
+			if (nodes[counter].getAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;) &amp;&amp; nodes[counter].getAttributeNS(NSS[&quot;jessyink&quot;], &quot;masterSlide&quot;) == &quot;masterSlide&quot;)
+				masterSlide = nodes[counter];
+			else if (nodes[counter].getAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;) &amp;&amp; nodes[counter].getAttributeNS(NSS[&quot;jessyink&quot;], &quot;presentationLayer&quot;) == &quot;presentationLayer&quot;)
+				existingJessyInkPresentationLayer = nodes[counter];
+			else
+				tempSlides.push(nodes[counter].getAttribute(&quot;id&quot;));
+		}
+		else if (nodes[counter].getAttributeNS(NSS['jessyink'], 'element'))
+		{
+			handleElement(nodes[counter]);
+		}
+	}
+
+	// Hide master slide set default transitions.
+	if (masterSlide)
+	{
+		masterSlide.style.display = &quot;none&quot;;
+
+		if (masterSlide.hasAttributeNS(NSS[&quot;jessyink&quot;], &quot;transitionIn&quot;))
+			defaultTransitionInDict = propStrToDict(masterSlide.getAttributeNS(NSS[&quot;jessyink&quot;], &quot;transitionIn&quot;));
+
+		if (masterSlide.hasAttributeNS(NSS[&quot;jessyink&quot;], &quot;transitionOut&quot;))
+			defaultTransitionOutDict = propStrToDict(masterSlide.getAttributeNS(NSS[&quot;jessyink&quot;], &quot;transitionOut&quot;));
+	}
+
+	if (existingJessyInkPresentationLayer != null)
+	{
+		existingJessyInkPresentationLayer.parentNode.removeChild(existingJessyInkPresentationLayer);
+	}
+
+	// Set start slide.
+	var hashObj = new LocationHash(window.location.hash);
+
+	activeSlide = hashObj.slideNumber;
+	activeEffect = hashObj.effectNumber;
+
+	if (activeSlide &lt; 0)
+		activeSlide = 0;
+	else if (activeSlide &gt;= tempSlides.length)
+		activeSlide = tempSlides.length - 1;
+
+	var originalNode = document.getElementById(tempSlides[counter]);
+
+	var JessyInkPresentationLayer = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+	JessyInkPresentationLayer.setAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;, &quot;layer&quot;);
+	JessyInkPresentationLayer.setAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;, &quot;JessyInk Presentation Layer&quot;);
+	JessyInkPresentationLayer.setAttributeNS(NSS[&quot;jessyink&quot;], &quot;presentationLayer&quot;, &quot;presentationLayer&quot;);
+	JessyInkPresentationLayer.setAttribute(&quot;id&quot;, &quot;jessyink_presentation_layer&quot;);
+	JessyInkPresentationLayer.style.display = &quot;inherit&quot;;
+	ROOT_NODE.appendChild(JessyInkPresentationLayer);
+
+	// Gathering all the information about the transitions and effects of the slides, set the background
+	// from the master slide and substitute the auto-texts.
+	for (var counter = 0; counter &lt; tempSlides.length; counter++)
+	{
+		var originalNode = document.getElementById(tempSlides[counter]);
+		originalNode.style.display = &quot;none&quot;;
+		var node = suffixNodeIds(originalNode.cloneNode(true), &quot;_&quot; + counter);
+		JessyInkPresentationLayer.appendChild(node);
+		slides[counter] = new Object();
+		slides[counter][&quot;original_element&quot;] = originalNode;
+		slides[counter][&quot;element&quot;] = node;
+
+		// Set build in transition.
+		slides[counter][&quot;transitionIn&quot;] = new Object();
+
+		var dict;
+
+		if (node.hasAttributeNS(NSS[&quot;jessyink&quot;], &quot;transitionIn&quot;))
+			dict = propStrToDict(node.getAttributeNS(NSS[&quot;jessyink&quot;], &quot;transitionIn&quot;));
+		else
+			dict = defaultTransitionInDict;
+
+		slides[counter][&quot;transitionIn&quot;][&quot;name&quot;] = dict[&quot;name&quot;];
+		slides[counter][&quot;transitionIn&quot;][&quot;options&quot;] = new Object();
+
+		for (key in dict)
+			if (key != &quot;name&quot;)
+				slides[counter][&quot;transitionIn&quot;][&quot;options&quot;][key] = dict[key];
+
+		// Set build out transition.
+		slides[counter][&quot;transitionOut&quot;] = new Object();
+
+		if (node.hasAttributeNS(NSS[&quot;jessyink&quot;], &quot;transitionOut&quot;))
+			dict = propStrToDict(node.getAttributeNS(NSS[&quot;jessyink&quot;], &quot;transitionOut&quot;));
+		else
+			dict = defaultTransitionOutDict;
+
+		slides[counter][&quot;transitionOut&quot;][&quot;name&quot;] = dict[&quot;name&quot;];
+		slides[counter][&quot;transitionOut&quot;][&quot;options&quot;] = new Object();
+
+		for (key in dict)
+			if (key != &quot;name&quot;)
+				slides[counter][&quot;transitionOut&quot;][&quot;options&quot;][key] = dict[key];
+
+		// Copy master slide content.
+		if (masterSlide)
+		{
+			var clonedNode = suffixNodeIds(masterSlide.cloneNode(true), &quot;_&quot; + counter);
+			clonedNode.removeAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;);
+			clonedNode.removeAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;);
+			clonedNode.style.display = &quot;inherit&quot;;
+
+			node.insertBefore(clonedNode, node.firstChild);
+		}
+
+		// Setting clip path.
+		node.setAttribute(&quot;clip-path&quot;, &quot;url(#jessyInkSlideClipPath)&quot;);
+
+		// Substitute auto texts.
+		substituteAutoTexts(node, node.getAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;), counter + 1, tempSlides.length);
+
+		node.removeAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;);
+		node.removeAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;);
+
+		// Set effects.
+		var tempEffects = new Array();
+		var groups = new Object();
+
+		for (var IOCounter = 0; IOCounter &lt;= 1; IOCounter++)
+		{
+			var propName = &quot;&quot;;
+			var dir = 0;
+
+			if (IOCounter == 0)
+			{
+				propName = &quot;effectIn&quot;;
+				dir = 1;
+			}
+			else if (IOCounter == 1)
+			{
+				propName = &quot;effectOut&quot;;
+				dir = -1;
+			}
+
+			var effects = getElementsByPropertyNS(node, NSS[&quot;jessyink&quot;], propName);
+
+			for (var effectCounter = 0; effectCounter &lt; effects.length; effectCounter++)
+			{
+				var element = document.getElementById(effects[effectCounter]);
+				var dict = propStrToDict(element.getAttributeNS(NSS[&quot;jessyink&quot;], propName));
+
+				// Put every element that has an effect associated with it, into its own group.
+				// Unless of course, we already put it into its own group.
+				if (!(groups[element.id]))
+				{
+					var newGroup = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+
+					element.parentNode.insertBefore(newGroup, element);
+					newGroup.appendChild(element.parentNode.removeChild(element));
+					groups[element.id] = newGroup;
+				}
+
+				var effectDict = new Object();
+
+				effectDict[&quot;effect&quot;] = dict[&quot;name&quot;];
+				effectDict[&quot;dir&quot;] = dir;
+				effectDict[&quot;element&quot;] = groups[element.id];
+
+				for (var option in dict)
+				{
+					if ((option != &quot;name&quot;) &amp;&amp; (option != &quot;order&quot;))
+					{
+						if (!effectDict[&quot;options&quot;])
+							effectDict[&quot;options&quot;] = new Object();
+
+						effectDict[&quot;options&quot;][option] = dict[option];
+					}
+				}
+
+				if (!tempEffects[dict[&quot;order&quot;]])
+					tempEffects[dict[&quot;order&quot;]] = new Array();
+
+				tempEffects[dict[&quot;order&quot;]][tempEffects[dict[&quot;order&quot;]].length] = effectDict;
+			}
+		}
+
+		// Make invisible, but keep in rendering tree to ensure that bounding box can be calculated.
+		node.setAttribute(&quot;opacity&quot;,0);
+		node.style.display = &quot;inherit&quot;;
+
+		// Create a transform group.
+		var transformGroup = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+
+		// Add content to transform group.
+		while (node.firstChild)
+			transformGroup.appendChild(node.firstChild);
+
+		// Transfer the transform attribute from the node to the transform group.
+		if (node.getAttribute(&quot;transform&quot;))
+		{
+			transformGroup.setAttribute(&quot;transform&quot;, node.getAttribute(&quot;transform&quot;));
+			node.removeAttribute(&quot;transform&quot;);
+		}
+
+		// Create a view group.
+		var viewGroup = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+
+		viewGroup.appendChild(transformGroup);
+		slides[counter][&quot;viewGroup&quot;] = node.appendChild(viewGroup);
+
+		// Insert background.
+		if (BACKGROUND_COLOR != null)
+		{
+			var rectNode = document.createElementNS(NSS[&quot;svg&quot;], &quot;rect&quot;);
+
+			rectNode.setAttribute(&quot;x&quot;, 0);
+			rectNode.setAttribute(&quot;y&quot;, 0);
+			rectNode.setAttribute(&quot;width&quot;, WIDTH);
+			rectNode.setAttribute(&quot;height&quot;, HEIGHT);
+			rectNode.setAttribute(&quot;id&quot;, &quot;jessyInkBackground&quot; + counter);
+			rectNode.setAttribute(&quot;fill&quot;, BACKGROUND_COLOR);
+
+			slides[counter][&quot;viewGroup&quot;].insertBefore(rectNode, slides[counter][&quot;viewGroup&quot;].firstChild);
+		}
+
+		// Set views.
+		var tempViews = new Array();
+		var views = getElementsByPropertyNS(node, NSS[&quot;jessyink&quot;], &quot;view&quot;);
+		var matrixOld = (new matrixSVG()).fromElements(1, 0, 0, 0, 1, 0, 0, 0, 1);
+
+		// Set initial view even if there are no other views.
+		slides[counter][&quot;viewGroup&quot;].setAttribute(&quot;transform&quot;, matrixOld.toAttribute());
+		slides[counter].initialView = matrixOld.toAttribute();
+
+		for (var viewCounter = 0; viewCounter &lt; views.length; viewCounter++)
+		{
+			var element = document.getElementById(views[viewCounter]);
+			var dict = propStrToDict(element.getAttributeNS(NSS[&quot;jessyink&quot;], &quot;view&quot;));
+
+			if (dict[&quot;order&quot;] == 0)
+			{
+				matrixOld = pointMatrixToTransformation(rectToMatrix(element)).mult((new matrixSVG()).fromSVGMatrix(slides[counter].viewGroup.getScreenCTM()).inv().mult((new matrixSVG()).fromSVGMatrix(element.parentNode.getScreenCTM())).inv());
+				slides[counter].initialView = matrixOld.toAttribute();
+			}
+			else
+			{
+				var effectDict = new Object();
+
+				effectDict[&quot;effect&quot;] = dict[&quot;name&quot;];
+				effectDict[&quot;dir&quot;] = 1;
+				effectDict[&quot;element&quot;] = slides[counter][&quot;viewGroup&quot;];
+				effectDict[&quot;order&quot;] = dict[&quot;order&quot;];
+
+				for (var option in dict)
+				{
+					if ((option != &quot;name&quot;) &amp;&amp; (option != &quot;order&quot;))
+					{
+						if (!effectDict[&quot;options&quot;])
+							effectDict[&quot;options&quot;] = new Object();
+
+						effectDict[&quot;options&quot;][option] = dict[option];
+					}
+				}
+
+				effectDict[&quot;options&quot;][&quot;matrixNew&quot;] = pointMatrixToTransformation(rectToMatrix(element)).mult((new matrixSVG()).fromSVGMatrix(slides[counter].viewGroup.getScreenCTM()).inv().mult((new matrixSVG()).fromSVGMatrix(element.parentNode.getScreenCTM())).inv());
+
+				tempViews[dict[&quot;order&quot;]] = effectDict;
+			}
+
+			// Remove element.
+			element.parentNode.removeChild(element);
+		}
+
+		// Consolidate view array and append it to the effect array.
+		if (tempViews.length &gt; 0)
+		{
+			for (var viewCounter = 0; viewCounter &lt; tempViews.length; viewCounter++)
+			{
+				if (tempViews[viewCounter])
+				{
+					tempViews[viewCounter][&quot;options&quot;][&quot;matrixOld&quot;] = matrixOld;
+					matrixOld = tempViews[viewCounter][&quot;options&quot;][&quot;matrixNew&quot;];
+
+					if (!tempEffects[tempViews[viewCounter][&quot;order&quot;]])
+						tempEffects[tempViews[viewCounter][&quot;order&quot;]] = new Array();
+
+					tempEffects[tempViews[viewCounter][&quot;order&quot;]][tempEffects[tempViews[viewCounter][&quot;order&quot;]].length] = tempViews[viewCounter];
+				}
+			}
+		}
+
+		// Set consolidated effect array.
+		if (tempEffects.length &gt; 0)
+		{
+			slides[counter][&quot;effects&quot;] = new Array();
+
+			for (var effectCounter = 0; effectCounter &lt; tempEffects.length; effectCounter++)
+			{
+				if (tempEffects[effectCounter])
+					slides[counter][&quot;effects&quot;][slides[counter][&quot;effects&quot;].length] = tempEffects[effectCounter];
+			}
+		}
+
+		node.setAttribute(&quot;onmouseover&quot;, &quot;if ((currentMode == INDEX_MODE) &amp;&amp; ( activeSlide != &quot; + counter + &quot;)) { indexSetActiveSlide(&quot; + counter + &quot;); };&quot;);
+
+		// Set visibility for initial state.
+		if (counter == activeSlide)
+		{
+			node.style.display = &quot;inherit&quot;;
+			node.setAttribute(&quot;opacity&quot;,1);
+		}
+		else
+		{
+			node.style.display = &quot;none&quot;;
+			node.setAttribute(&quot;opacity&quot;,0);
+		}
+	}
+
+	// Set key handler.
+	var jessyInkObjects = document.getElementsByTagNameNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+
+	for (var counter = 0; counter &lt; jessyInkObjects.length; counter++)
+	{
+		var elem = jessyInkObjects[counter];
+
+		if (elem.getAttributeNS(NSS[&quot;jessyink&quot;], &quot;customKeyBindings&quot;))
+		{
+			if (elem.getCustomKeyBindings != undefined)
+				keyCodeDictionary = elem.getCustomKeyBindings();
+
+			if (elem.getCustomCharBindings != undefined)
+				charCodeDictionary = elem.getCustomCharBindings();
+		}
+	}
+
+	// Set mouse handler.
+	var jessyInkMouseHandler = document.getElementsByTagNameNS(NSS[&quot;jessyink&quot;], &quot;mousehandler&quot;);
+
+	for (var counter = 0; counter &lt; jessyInkMouseHandler.length; counter++)
+	{
+		var elem = jessyInkMouseHandler[counter];
+
+		if (elem.getMouseHandler != undefined)
+		{
+			var tempDict = elem.getMouseHandler();
+
+			for (mode in tempDict)
+			{
+				if (!mouseHandlerDictionary[mode])
+					mouseHandlerDictionary[mode] = new Object();
+
+				for (handler in tempDict[mode])
+					mouseHandlerDictionary[mode][handler] = tempDict[mode][handler];
+			}
+		}
+	}
+
+	// Check effect number.
+	if ((activeEffect &lt; 0) || (!slides[activeSlide].effects))
+	{
+		activeEffect = 0;
+	}
+	else if (activeEffect &gt; slides[activeSlide].effects.length)
+	{
+		activeEffect = slides[activeSlide].effects.length;
+	}
+
+	createProgressBar(JessyInkPresentationLayer);
+	hideProgressBar();
+	setProgressBarValue(activeSlide);
+	setTimeIndicatorValue(0);
+	setInterval(&quot;updateTimer()&quot;, 1000);
+	setSlideToState(activeSlide, activeEffect);
+	jessyInkInitialised = true;
+}
+
+/** Function to subtitute the auto-texts.
+ *
+ *  @param node the node
+ *  @param slideName name of the slide the node is on
+ *  @param slideNumber number of the slide the node is on
+ *  @param numberOfSlides number of slides in the presentation
+ */
+function substituteAutoTexts(node, slideName, slideNumber, numberOfSlides)
+{
+	var texts = node.getElementsByTagNameNS(NSS[&quot;svg&quot;], &quot;tspan&quot;);
+
+	for (var textCounter = 0; textCounter &lt; texts.length; textCounter++)
+	{
+		if (texts[textCounter].getAttributeNS(NSS[&quot;jessyink&quot;], &quot;autoText&quot;) == &quot;slideNumber&quot;)
+			texts[textCounter].firstChild.nodeValue = slideNumber;
+		else if (texts[textCounter].getAttributeNS(NSS[&quot;jessyink&quot;], &quot;autoText&quot;) == &quot;numberOfSlides&quot;)
+			texts[textCounter].firstChild.nodeValue = numberOfSlides;
+		else if (texts[textCounter].getAttributeNS(NSS[&quot;jessyink&quot;], &quot;autoText&quot;) == &quot;slideTitle&quot;)
+			texts[textCounter].firstChild.nodeValue = slideName;
+	}
+}
+
+/** Convenience function to get an element depending on whether it has a property with a particular name.
+ *	This function emulates some dearly missed XPath functionality.
+ *
+ *  @param node the node
+ *  @param namespace namespace of the attribute
+ *  @param name attribute name
+ */
+function getElementsByPropertyNS(node, namespace, name)
+{
+	var elems = new Array();
+
+	if (node.getAttributeNS(namespace, name))
+		elems.push(node.getAttribute(&quot;id&quot;));
+
+	for (var counter = 0; counter &lt; node.childNodes.length; counter++)
+	{
+		if (node.childNodes[counter].nodeType == 1)
+			elems = elems.concat(getElementsByPropertyNS(node.childNodes[counter], namespace, name));
+	}
+
+	return elems;
+}
+
+/** Function to dispatch the next effect, if there is none left, change the slide.
+ *
+ *  @param dir direction of the change (1 = forwards, -1 = backwards)
+ */
+function dispatchEffects(dir)
+{
+	if (slides[activeSlide][&quot;effects&quot;] &amp;&amp; (((dir == 1) &amp;&amp; (activeEffect &lt; slides[activeSlide][&quot;effects&quot;].length)) || ((dir == -1) &amp;&amp; (activeEffect &gt; 0))))
+	{
+		processingEffect = true;
+
+		if (dir == 1)
+		{
+			effectArray = slides[activeSlide][&quot;effects&quot;][activeEffect];
+			activeEffect += dir;
+		}
+		else if (dir == -1)
+		{
+			activeEffect += dir;
+			effectArray = slides[activeSlide][&quot;effects&quot;][activeEffect];
+		}
+
+		transCounter = 0;
+		startTime = (new Date()).getTime();
+		lastFrameTime = null;
+		effect(dir);
+	}
+	else if (((dir == 1) &amp;&amp; (activeSlide &lt; (slides.length - 1))) || (((dir == -1) &amp;&amp; (activeSlide &gt; 0))))
+	{
+		changeSlide(dir);
+	}
+}
+
+/** Function to skip effects and directly either put the slide into start or end state or change slides.
+ *
+ *  @param dir direction of the change (1 = forwards, -1 = backwards)
+ */
+function skipEffects(dir)
+{
+	if (slides[activeSlide][&quot;effects&quot;] &amp;&amp; (((dir == 1) &amp;&amp; (activeEffect &lt; slides[activeSlide][&quot;effects&quot;].length)) || ((dir == -1) &amp;&amp; (activeEffect &gt; 0))))
+	{
+		processingEffect = true;
+
+		if (slides[activeSlide][&quot;effects&quot;] &amp;&amp; (dir == 1))
+			activeEffect = slides[activeSlide][&quot;effects&quot;].length;
+		else
+			activeEffect = 0;
+
+		if (dir == 1)
+			setSlideToState(activeSlide, STATE_END);
+		else
+			setSlideToState(activeSlide, STATE_START);
+
+		processingEffect = false;
+	}
+	else if (((dir == 1) &amp;&amp; (activeSlide &lt; (slides.length - 1))) || (((dir == -1) &amp;&amp; (activeSlide &gt; 0))))
+	{
+		changeSlide(dir);
+	}
+}
+
+/** Function to change between slides.
+ *
+ *  @param dir direction (1 = forwards, -1 = backwards)
+ */
+function changeSlide(dir)
+{
+	processingEffect = true;
+	effectArray = new Array();
+
+	effectArray[0] = new Object();
+	if (dir == 1)
+	{
+		effectArray[0][&quot;effect&quot;] = slides[activeSlide][&quot;transitionOut&quot;][&quot;name&quot;];
+		effectArray[0][&quot;options&quot;] = slides[activeSlide][&quot;transitionOut&quot;][&quot;options&quot;];
+		effectArray[0][&quot;dir&quot;] = -1;
+	}
+	else if (dir == -1)
+	{
+		effectArray[0][&quot;effect&quot;] = slides[activeSlide][&quot;transitionIn&quot;][&quot;name&quot;];
+		effectArray[0][&quot;options&quot;] = slides[activeSlide][&quot;transitionIn&quot;][&quot;options&quot;];
+		effectArray[0][&quot;dir&quot;] = 1;
+	}
+	effectArray[0][&quot;element&quot;] = slides[activeSlide][&quot;element&quot;];
+
+	activeSlide += dir;
+	setProgressBarValue(activeSlide);
+
+	effectArray[1] = new Object();
+
+	if (dir == 1)
+	{
+		effectArray[1][&quot;effect&quot;] = slides[activeSlide][&quot;transitionIn&quot;][&quot;name&quot;];
+		effectArray[1][&quot;options&quot;] = slides[activeSlide][&quot;transitionIn&quot;][&quot;options&quot;];
+		effectArray[1][&quot;dir&quot;] = 1;
+	}
+	else if (dir == -1)
+	{
+		effectArray[1][&quot;effect&quot;] = slides[activeSlide][&quot;transitionOut&quot;][&quot;name&quot;];
+		effectArray[1][&quot;options&quot;] = slides[activeSlide][&quot;transitionOut&quot;][&quot;options&quot;];
+		effectArray[1][&quot;dir&quot;] = -1;
+	}
+
+	effectArray[1][&quot;element&quot;] = slides[activeSlide][&quot;element&quot;];
+
+	if (slides[activeSlide][&quot;effects&quot;] &amp;&amp; (dir == -1))
+		activeEffect = slides[activeSlide][&quot;effects&quot;].length;
+	else
+		activeEffect = 0;
+
+	if (dir == -1)
+		setSlideToState(activeSlide, STATE_END);
+	else
+		setSlideToState(activeSlide, STATE_START);
+
+	transCounter = 0;
+	startTime = (new Date()).getTime();
+	lastFrameTime = null;
+	effect(dir);
+}
+
+/** Function to toggle between index and slide mode.
+*/
+function toggleSlideIndex()
+{
+	var suspendHandle = ROOT_NODE.suspendRedraw(500);
+
+	if (currentMode == SLIDE_MODE)
+	{
+		hideProgressBar();		
+		INDEX_OFFSET = -1;
+		indexSetPageSlide(activeSlide);
+		currentMode = INDEX_MODE;
+	}
+	else if (currentMode == INDEX_MODE)
+	{
+		for (var counter = 0; counter &lt; slides.length; counter++)
+		{
+			slides[counter][&quot;element&quot;].setAttribute(&quot;transform&quot;,&quot;scale(1)&quot;);
+
+			if (counter == activeSlide)
+			{
+				slides[counter][&quot;element&quot;].style.display = &quot;inherit&quot;;
+				slides[counter][&quot;element&quot;].setAttribute(&quot;opacity&quot;,1);
+				activeEffect = 0;
+			}
+			else
+			{
+				slides[counter][&quot;element&quot;].setAttribute(&quot;opacity&quot;,0);
+				slides[counter][&quot;element&quot;].style.display = &quot;none&quot;;
+			}
+		}
+		currentMode = SLIDE_MODE;
+		setSlideToState(activeSlide, STATE_START);
+		setProgressBarValue(activeSlide);
+
+		if (progress_bar_visible)
+		{
+			showProgressBar();
+		}
+	}
+
+	ROOT_NODE.unsuspendRedraw(suspendHandle);
+	ROOT_NODE.forceRedraw();
+}
+
+/** Function to run an effect.
+ *
+ *  @param dir direction in which to play the effect (1 = forwards, -1 = backwards)
+ */
+function effect(dir)
+{
+	var done = true;
+
+	var suspendHandle = ROOT_NODE.suspendRedraw(200);
+
+	for (var counter = 0; counter &lt; effectArray.length; counter++)
+	{
+		if (effectArray[counter][&quot;effect&quot;] == &quot;fade&quot;)
+			done &amp;= fade(parseInt(effectArray[counter][&quot;dir&quot;]) * dir, effectArray[counter][&quot;element&quot;], transCounter, effectArray[counter][&quot;options&quot;]);
+		else if (effectArray[counter][&quot;effect&quot;] == &quot;appear&quot;)
+			done &amp;= appear(parseInt(effectArray[counter][&quot;dir&quot;]) * dir, effectArray[counter][&quot;element&quot;], transCounter, effectArray[counter][&quot;options&quot;]);
+		else if (effectArray[counter][&quot;effect&quot;] == &quot;pop&quot;)
+			done &amp;= pop(parseInt(effectArray[counter][&quot;dir&quot;]) * dir, effectArray[counter][&quot;element&quot;], transCounter, effectArray[counter][&quot;options&quot;]);
+		else if (effectArray[counter][&quot;effect&quot;] == &quot;view&quot;)
+			done &amp;= view(parseInt(effectArray[counter][&quot;dir&quot;]) * dir, effectArray[counter][&quot;element&quot;], transCounter, effectArray[counter][&quot;options&quot;]);
+	}
+
+	ROOT_NODE.unsuspendRedraw(suspendHandle);
+	ROOT_NODE.forceRedraw();
+
+	if (!done)
+	{
+		var currentTime = (new Date()).getTime();
+		var timeDiff = 1;
+
+		transCounter = currentTime - startTime;
+
+		if (lastFrameTime != null)
+		{
+			timeDiff = timeStep - (currentTime - lastFrameTime);
+
+			if (timeDiff &lt;= 0)
+				timeDiff = 1;
+		}
+
+		lastFrameTime = currentTime;
+
+		window.setTimeout(&quot;effect(&quot; + dir + &quot;)&quot;, timeDiff);
+	}
+	else
+	{
+		window.location.hash = (activeSlide + 1) + '_' + activeEffect;
+		processingEffect = false;
+	}
+}
+
+/** Function to display the index sheet.
+ *
+ *  @param offsetNumber offset number
+ */
+function displayIndex(offsetNumber)
+{
+	var offsetX = 0;
+	var offsetY = 0;
+
+	if (offsetNumber &lt; 0)
+		offsetNumber = 0;
+	else if (offsetNumber &gt;= slides.length)
+		offsetNumber = slides.length - 1;
+
+	for (var counter = 0; counter &lt; slides.length; counter++)
+	{
+		if ((counter &lt; offsetNumber) || (counter &gt; offsetNumber + INDEX_COLUMNS * INDEX_COLUMNS - 1))
+		{
+			slides[counter][&quot;element&quot;].setAttribute(&quot;opacity&quot;,0);
+			slides[counter][&quot;element&quot;].style.display = &quot;none&quot;;
+		}
+		else
+		{
+			offsetX = ((counter - offsetNumber) % INDEX_COLUMNS) * WIDTH;
+			offsetY = Math.floor((counter - offsetNumber) / INDEX_COLUMNS) * HEIGHT;
+
+			slides[counter][&quot;element&quot;].setAttribute(&quot;transform&quot;,&quot;scale(&quot;+1/INDEX_COLUMNS+&quot;) translate(&quot;+offsetX+&quot;,&quot;+offsetY+&quot;)&quot;);
+			slides[counter][&quot;element&quot;].style.display = &quot;inherit&quot;;
+			slides[counter][&quot;element&quot;].setAttribute(&quot;opacity&quot;,0.5);
+		}
+
+		setSlideToState(counter, STATE_END);
+	}
+
+	//do we need to save the current offset?
+	if (INDEX_OFFSET != offsetNumber)
+		INDEX_OFFSET = offsetNumber;
+}
+
+/** Function to set the active slide in the slide view.
+ *
+ *  @param nbr index of the active slide
+ */
+function slideSetActiveSlide(nbr)
+{
+	if (nbr &gt;= slides.length)
+		nbr = slides.length - 1;
+	else if (nbr &lt; 0)
+		nbr = 0;
+
+	slides[activeSlide][&quot;element&quot;].setAttribute(&quot;opacity&quot;,0);
+	slides[activeSlide][&quot;element&quot;].style.display = &quot;none&quot;;
+
+	activeSlide = parseInt(nbr);
+
+	setSlideToState(activeSlide, STATE_START);
+	slides[activeSlide][&quot;element&quot;].style.display = &quot;inherit&quot;;
+	slides[activeSlide][&quot;element&quot;].setAttribute(&quot;opacity&quot;,1);
+
+	activeEffect = 0;
+	setProgressBarValue(nbr);
+}
+
+/** Function to set the active slide in the index view.
+ *
+ *  @param nbr index of the active slide
+ */
+function indexSetActiveSlide(nbr)
+{
+	if (nbr &gt;= slides.length)
+		nbr = slides.length - 1;
+	else if (nbr &lt; 0)
+		nbr = 0;
+
+	slides[activeSlide][&quot;element&quot;].setAttribute(&quot;opacity&quot;,0.5);
+
+	activeSlide = parseInt(nbr);
+	window.location.hash = (activeSlide + 1) + '_0';
+
+	slides[activeSlide][&quot;element&quot;].setAttribute(&quot;opacity&quot;,1);
+}
+
+/** Function to set the page and active slide in index view. 
+ *
+ *  @param nbr index of the active slide
+ *
+ *  NOTE: To force a redraw,
+ *  set INDEX_OFFSET to -1 before calling indexSetPageSlide().
+ *
+ *  This is necessary for zooming (otherwise the index might not
+ *  get redrawn) and when switching to index mode.
+ *
+ *  INDEX_OFFSET = -1
+ *  indexSetPageSlide(activeSlide);
+ */
+function indexSetPageSlide(nbr)
+{
+	if (nbr &gt;= slides.length)
+		nbr = slides.length - 1;
+	else if (nbr &lt; 0)
+		nbr = 0;
+
+	//calculate the offset
+	var offset = nbr - nbr % (INDEX_COLUMNS * INDEX_COLUMNS);
+
+	if (offset &lt; 0)
+		offset = 0;
+
+	//if different from kept offset, then record and change the page
+	if (offset != INDEX_OFFSET)
+	{
+		INDEX_OFFSET = offset;
+		displayIndex(INDEX_OFFSET);
+	}
+
+	//set the active slide
+	indexSetActiveSlide(nbr);
+}
+
+/** Event handler for key press.
+ *
+ *  @param e the event
+ */
+function keydown(e)
+{
+	if (!e)
+		e = window.event;
+
+	code = e.keyCode || e.charCode;
+
+	if (!processingEffect &amp;&amp; keyCodeDictionary[currentMode] &amp;&amp; keyCodeDictionary[currentMode][code])
+		return keyCodeDictionary[currentMode][code]();
+	else
+		document.onkeypress = keypress;
+}
+// Set event handler for key down.
+document.onkeydown = keydown;
+
+/** Event handler for key press.
+ *
+ *  @param e the event
+ */
+function keypress(e)
+{
+	document.onkeypress = null;
+
+	if (!e)
+		e = window.event;
+
+	str = String.fromCharCode(e.keyCode || e.charCode);
+
+	if (!processingEffect &amp;&amp; charCodeDictionary[currentMode] &amp;&amp; charCodeDictionary[currentMode][str])
+		return charCodeDictionary[currentMode][str]();
+}
+
+/** Function to supply the default char code dictionary.
+ *
+ * @returns default char code dictionary
+ */
+function getDefaultCharCodeDictionary()
+{
+	var charCodeDict = new Object();
+
+	charCodeDict[SLIDE_MODE] = new Object();
+	charCodeDict[INDEX_MODE] = new Object();
+	charCodeDict[DRAWING_MODE] = new Object();
+
+	charCodeDict[SLIDE_MODE][&quot;i&quot;] = function () { return toggleSlideIndex(); };
+	charCodeDict[SLIDE_MODE][&quot;d&quot;] = function () { return slideSwitchToDrawingMode(); };
+	charCodeDict[SLIDE_MODE][&quot;D&quot;] = function () { return slideQueryDuration(); };
+	charCodeDict[SLIDE_MODE][&quot;n&quot;] = function () { return slideAddSlide(activeSlide); };
+	charCodeDict[SLIDE_MODE][&quot;p&quot;] = function () { return slideToggleProgressBarVisibility(); };
+	charCodeDict[SLIDE_MODE][&quot;t&quot;] = function () { return slideResetTimer(); };
+	charCodeDict[SLIDE_MODE][&quot;e&quot;] = function () { return slideUpdateExportLayer(); };
+
+	charCodeDict[DRAWING_MODE][&quot;d&quot;] = function () { return drawingSwitchToSlideMode(); };
+	charCodeDict[DRAWING_MODE][&quot;0&quot;] = function () { return drawingResetPathWidth(); };
+	charCodeDict[DRAWING_MODE][&quot;1&quot;] = function () { return drawingSetPathWidth(1.0); };
+	charCodeDict[DRAWING_MODE][&quot;3&quot;] = function () { return drawingSetPathWidth(3.0); };
+	charCodeDict[DRAWING_MODE][&quot;5&quot;] = function () { return drawingSetPathWidth(5.0); };
+	charCodeDict[DRAWING_MODE][&quot;7&quot;] = function () { return drawingSetPathWidth(7.0); };
+	charCodeDict[DRAWING_MODE][&quot;9&quot;] = function () { return drawingSetPathWidth(9.0); };
+	charCodeDict[DRAWING_MODE][&quot;b&quot;] = function () { return drawingSetPathColour(&quot;blue&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;c&quot;] = function () { return drawingSetPathColour(&quot;cyan&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;g&quot;] = function () { return drawingSetPathColour(&quot;green&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;k&quot;] = function () { return drawingSetPathColour(&quot;black&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;m&quot;] = function () { return drawingSetPathColour(&quot;magenta&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;o&quot;] = function () { return drawingSetPathColour(&quot;orange&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;r&quot;] = function () { return drawingSetPathColour(&quot;red&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;w&quot;] = function () { return drawingSetPathColour(&quot;white&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;y&quot;] = function () { return drawingSetPathColour(&quot;yellow&quot;); };
+	charCodeDict[DRAWING_MODE][&quot;z&quot;] = function () { return drawingUndo(); };
+
+	charCodeDict[INDEX_MODE][&quot;i&quot;] = function () { return toggleSlideIndex(); };
+	charCodeDict[INDEX_MODE][&quot;-&quot;] = function () { return indexDecreaseNumberOfColumns(); };
+	charCodeDict[INDEX_MODE][&quot;=&quot;] = function () { return indexIncreaseNumberOfColumns(); };
+	charCodeDict[INDEX_MODE][&quot;+&quot;] = function () { return indexIncreaseNumberOfColumns(); };
+	charCodeDict[INDEX_MODE][&quot;0&quot;] = function () { return indexResetNumberOfColumns(); };
+
+	return charCodeDict;
+}
+
+/** Function to supply the default key code dictionary.
+ *
+ * @returns default key code dictionary
+ */
+function getDefaultKeyCodeDictionary()
+{
+	var keyCodeDict = new Object();
+
+	keyCodeDict[SLIDE_MODE] = new Object();
+	keyCodeDict[INDEX_MODE] = new Object();
+	keyCodeDict[DRAWING_MODE] = new Object();
+
+	keyCodeDict[SLIDE_MODE][LEFT_KEY] = function() { return dispatchEffects(-1); };
+	keyCodeDict[SLIDE_MODE][RIGHT_KEY] = function() { return dispatchEffects(1); };
+	keyCodeDict[SLIDE_MODE][UP_KEY] = function() { return skipEffects(-1); };
+	keyCodeDict[SLIDE_MODE][DOWN_KEY] = function() { return skipEffects(1); };
+	keyCodeDict[SLIDE_MODE][PAGE_UP_KEY] = function() { return dispatchEffects(-1); };
+	keyCodeDict[SLIDE_MODE][PAGE_DOWN_KEY] = function() { return dispatchEffects(1); };
+	keyCodeDict[SLIDE_MODE][HOME_KEY] = function() { return slideSetActiveSlide(0); };
+	keyCodeDict[SLIDE_MODE][END_KEY] = function() { return slideSetActiveSlide(slides.length - 1); };
+	keyCodeDict[SLIDE_MODE][SPACE_KEY] = function() { return dispatchEffects(1); };
+
+	keyCodeDict[INDEX_MODE][LEFT_KEY] = function() { return indexSetPageSlide(activeSlide - 1); };
+	keyCodeDict[INDEX_MODE][RIGHT_KEY] = function() { return indexSetPageSlide(activeSlide + 1); };
+	keyCodeDict[INDEX_MODE][UP_KEY] = function() { return indexSetPageSlide(activeSlide - INDEX_COLUMNS); };
+	keyCodeDict[INDEX_MODE][DOWN_KEY] = function() { return indexSetPageSlide(activeSlide + INDEX_COLUMNS); };
+	keyCodeDict[INDEX_MODE][PAGE_UP_KEY] = function() { return indexSetPageSlide(activeSlide - INDEX_COLUMNS * INDEX_COLUMNS); };
+	keyCodeDict[INDEX_MODE][PAGE_DOWN_KEY] = function() { return indexSetPageSlide(activeSlide + INDEX_COLUMNS * INDEX_COLUMNS); };
+	keyCodeDict[INDEX_MODE][HOME_KEY] = function() { return indexSetPageSlide(0); };
+	keyCodeDict[INDEX_MODE][END_KEY] = function() { return indexSetPageSlide(slides.length - 1); };
+	keyCodeDict[INDEX_MODE][ENTER_KEY] = function() { return toggleSlideIndex(); };
+
+	keyCodeDict[DRAWING_MODE][ESCAPE_KEY] = function () { return drawingSwitchToSlideMode(); };
+
+	return keyCodeDict;
+}
+
+/** Function to handle all mouse events.
+ *
+ *	@param	evnt	event
+ *	@param	action	type of event (e.g. mouse up, mouse wheel)
+ */
+function mouseHandlerDispatch(evnt, action)
+{
+	if (!evnt)
+		evnt = window.event;
+
+	var retVal = true;
+
+	if (!processingEffect &amp;&amp; mouseHandlerDictionary[currentMode] &amp;&amp; mouseHandlerDictionary[currentMode][action])
+	{
+		var subRetVal = mouseHandlerDictionary[currentMode][action](evnt);
+
+		if (subRetVal != null &amp;&amp; subRetVal != undefined)
+			retVal = subRetVal;
+	}
+
+	if (evnt.preventDefault &amp;&amp; !retVal)
+		evnt.preventDefault();
+
+	evnt.returnValue = retVal;
+
+	return retVal;
+}
+
+// Set mouse event handler.
+document.onmousedown = function(e) { return mouseHandlerDispatch(e, MOUSE_DOWN); };
+document.onmouseup = function(e) { return mouseHandlerDispatch(e, MOUSE_UP); };
+document.onmousemove = function(e) { return mouseHandlerDispatch(e, MOUSE_MOVE); };
+
+// Moz
+if (window.addEventListener)
+{
+	window.addEventListener('DOMMouseScroll', function(e) { return mouseHandlerDispatch(e, MOUSE_WHEEL); }, false);
+}
+
+// Opera Safari OK - may not work in IE
+window.onmousewheel = function(e) { return mouseHandlerDispatch(e, MOUSE_WHEEL); };
+
+/** Function to supply the default mouse handler dictionary.
+ *
+ * @returns default mouse handler dictionary
+ */
+function getDefaultMouseHandlerDictionary()
+{
+	var mouseHandlerDict = new Object();
+
+	mouseHandlerDict[SLIDE_MODE] = new Object();
+	mouseHandlerDict[INDEX_MODE] = new Object();
+	mouseHandlerDict[DRAWING_MODE] = new Object();
+
+	mouseHandlerDict[SLIDE_MODE][MOUSE_DOWN] = function(evnt) { return dispatchEffects(1); };
+	mouseHandlerDict[SLIDE_MODE][MOUSE_WHEEL] = function(evnt) { return slideMousewheel(evnt); };
+
+	mouseHandlerDict[INDEX_MODE][MOUSE_DOWN] = function(evnt) { return toggleSlideIndex(); };
+
+	mouseHandlerDict[DRAWING_MODE][MOUSE_DOWN] = function(evnt) { return drawingMousedown(evnt); };
+	mouseHandlerDict[DRAWING_MODE][MOUSE_UP] = function(evnt) { return drawingMouseup(evnt); };
+	mouseHandlerDict[DRAWING_MODE][MOUSE_MOVE] = function(evnt) { return drawingMousemove(evnt); };
+
+	return mouseHandlerDict;
+}
+
+/** Function to switch from slide mode to drawing mode.
+*/
+function slideSwitchToDrawingMode()
+{
+	currentMode = DRAWING_MODE;
+
+	var tempDict;
+
+	if (ROOT_NODE.hasAttribute(&quot;style&quot;))
+		tempDict = propStrToDict(ROOT_NODE.getAttribute(&quot;style&quot;));
+	else
+		tempDict = new Object();
+
+	tempDict[&quot;cursor&quot;] = &quot;crosshair&quot;;
+	ROOT_NODE.setAttribute(&quot;style&quot;, dictToPropStr(tempDict));
+}
+
+/** Function to switch from drawing mode to slide mode.
+*/
+function drawingSwitchToSlideMode()
+{
+	currentMode = SLIDE_MODE;
+
+	var tempDict;
+
+	if (ROOT_NODE.hasAttribute(&quot;style&quot;))
+		tempDict = propStrToDict(ROOT_NODE.getAttribute(&quot;style&quot;));
+	else
+		tempDict = new Object();
+
+	tempDict[&quot;cursor&quot;] = &quot;auto&quot;;
+	ROOT_NODE.setAttribute(&quot;style&quot;, dictToPropStr(tempDict));
+}
+
+/** Function to decrease the number of columns in index mode.
+*/
+function indexDecreaseNumberOfColumns()
+{
+	if (INDEX_COLUMNS &gt;= 3)
+	{
+		INDEX_COLUMNS -= 1;
+		INDEX_OFFSET = -1
+			indexSetPageSlide(activeSlide);
+	}
+}
+
+/** Function to increase the number of columns in index mode.
+*/
+function indexIncreaseNumberOfColumns()
+{
+	if (INDEX_COLUMNS &lt; 7)
+	{
+		INDEX_COLUMNS += 1;
+		INDEX_OFFSET = -1
+			indexSetPageSlide(activeSlide);
+	}
+}
+
+/** Function to reset the number of columns in index mode.
+*/
+function indexResetNumberOfColumns()
+{
+	if (INDEX_COLUMNS != INDEX_COLUMNS_DEFAULT)
+	{
+		INDEX_COLUMNS = INDEX_COLUMNS_DEFAULT;
+		INDEX_OFFSET = -1
+			indexSetPageSlide(activeSlide);
+	}
+}
+
+/** Function to reset path width in drawing mode.
+*/
+function drawingResetPathWidth()
+{
+	path_width = path_width_default;
+	set_path_paint_width();
+}
+
+/** Function to set path width in drawing mode.
+ *
+ * @param width new path width
+ */
+function drawingSetPathWidth(width)
+{
+	path_width = width;
+	set_path_paint_width();
+}
+
+/** Function to set path colour in drawing mode.
+ *
+ * @param colour new path colour
+ */
+function drawingSetPathColour(colour)
+{
+	path_colour = colour;
+}
+
+/** Function to query the duration of the presentation from the user in slide mode.
+*/
+function slideQueryDuration()
+{
+	var new_duration = prompt(&quot;Length of presentation in minutes?&quot;, timer_duration);
+
+	if ((new_duration != null) &amp;&amp; (new_duration != ''))
+	{
+		timer_duration = new_duration;
+	}
+
+	updateTimer();
+}
+
+/** Function to add new slide in slide mode.
+ *
+ * @param afterSlide after which slide to insert the new one
+ */
+function slideAddSlide(afterSlide)
+{
+	addSlide(afterSlide);
+	slideSetActiveSlide(afterSlide + 1);
+	updateTimer();
+}
+
+/** Function to toggle the visibility of the progress bar in slide mode.
+*/
+function slideToggleProgressBarVisibility()
+{
+	if (progress_bar_visible)
+	{
+		progress_bar_visible = false;
+		hideProgressBar();
+	}
+	else
+	{
+		progress_bar_visible = true;
+		showProgressBar();
+	}
+}
+
+/** Function to reset the timer in slide mode.
+*/
+function slideResetTimer()
+{
+	timer_start = timer_elapsed;
+	updateTimer();
+}
+
+/** Convenience function to pad a string with zero in front up to a certain length.
+ */
+function padString(str, len)
+{
+	var outStr = str;
+
+	while (outStr.length &lt; len)
+	{
+		outStr = '0' + outStr;
+	}
+
+	return outStr;
+}
+
+/** Function to update the export layer.
+ */
+function slideUpdateExportLayer()
+{
+	// Suspend redraw since we are going to mess with the slides.
+	var suspendHandle = ROOT_NODE.suspendRedraw(2000);
+
+	var tmpActiveSlide = activeSlide;
+	var tmpActiveEffect = activeEffect;
+	var exportedLayers = new Array();
+
+	for (var counterSlides = 0; counterSlides &lt; slides.length; counterSlides++)
+	{
+		var exportNode;
+
+		setSlideToState(counterSlides, STATE_START);
+
+		var maxEffect = 0;
+
+		if (slides[counterSlides].effects)
+		{
+			maxEffect = slides[counterSlides].effects.length;
+		}
+
+		exportNode = slides[counterSlides].element.cloneNode(true);
+		exportNode.setAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;, &quot;layer&quot;);
+		exportNode.setAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;, &quot;slide_&quot; + padString((counterSlides + 1).toString(), slides.length.toString().length) + &quot;_effect_&quot; + padString(&quot;0&quot;, maxEffect.toString().length));
+
+		exportedLayers.push(exportNode);
+
+		if (slides[counterSlides][&quot;effects&quot;])
+		{	
+			for (var counter = 0; counter &lt; slides[counterSlides][&quot;effects&quot;].length; counter++)
+			{
+				for (var subCounter = 0; subCounter &lt; slides[counterSlides][&quot;effects&quot;][counter].length; subCounter++)
+				{
+					var effect = slides[counterSlides][&quot;effects&quot;][counter][subCounter];
+					if (effect[&quot;effect&quot;] == &quot;fade&quot;)
+						fade(parseInt(effect[&quot;dir&quot;]), effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;appear&quot;)
+						appear(parseInt(effect[&quot;dir&quot;]), effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;pop&quot;)
+						pop(parseInt(effect[&quot;dir&quot;]), effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;view&quot;)
+						view(parseInt(effect[&quot;dir&quot;]), effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+				}
+
+				var layerName = &quot;slide_&quot; + padString((counterSlides + 1).toString(), slides.length.toString().length) + &quot;_effect_&quot; + padString((counter + 1).toString(), maxEffect.toString().length);
+				exportNode = slides[counterSlides].element.cloneNode(true);
+				exportNode.setAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;, &quot;layer&quot;);
+				exportNode.setAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;, layerName);
+				exportNode.setAttribute(&quot;id&quot;, layerName);
+
+				exportedLayers.push(exportNode);
+			}
+		}
+	}
+
+	activeSlide = tmpActiveSlide;
+	activeEffect = tmpActiveEffect;
+	setSlideToState(activeSlide, activeEffect);
+
+	// Copy image.
+	var newDoc = document.documentElement.cloneNode(true);
+
+	// Delete viewbox form new imag and set width and height.
+	newDoc.removeAttribute('viewbox');
+	newDoc.setAttribute('width', WIDTH);
+	newDoc.setAttribute('height', HEIGHT);
+
+	// Delete all layers and script elements.
+	var nodesToBeRemoved = new Array();
+
+	for (var childCounter = 0; childCounter &lt;  newDoc.childNodes.length; childCounter++)
+	{
+		var child = newDoc.childNodes[childCounter];
+
+		if (child.nodeType == 1)
+		{
+			if ((child.nodeName.toUpperCase() == 'G') || (child.nodeName.toUpperCase() == 'SCRIPT'))
+			{
+				nodesToBeRemoved.push(child);
+			}
+		}
+	}
+
+	for (var ndCounter = 0; ndCounter &lt; nodesToBeRemoved.length; ndCounter++)
+	{
+		var nd = nodesToBeRemoved[ndCounter];
+
+		// Before removing the node, check whether it contains any definitions.
+		var defs = nd.getElementsByTagNameNS(NSS[&quot;svg&quot;], &quot;defs&quot;);
+
+		for (var defsCounter = 0; defsCounter &lt; defs.length; defsCounter++)
+		{
+			if (defs[defsCounter].id)
+			{
+				newDoc.appendChild(defs[defsCounter].cloneNode(true));
+			}
+		}
+
+		// Remove node.
+		nd.parentNode.removeChild(nd);
+	}
+
+	// Set current layer.
+	if (exportedLayers[0])
+	{
+		var namedView;
+
+		for (var nodeCounter = 0; nodeCounter &lt; newDoc.childNodes.length; nodeCounter++)
+		{
+			if ((newDoc.childNodes[nodeCounter].nodeType == 1) &amp;&amp; (newDoc.childNodes[nodeCounter].getAttribute('id') == 'base'))
+			{
+				namedView = newDoc.childNodes[nodeCounter];
+			}
+		}
+
+		if (namedView)
+		{
+			namedView.setAttributeNS(NSS['inkscape'], 'current-layer', exportedLayers[0].getAttributeNS(NSS['inkscape'], 'label'));
+		}
+	}
+
+	// Add exported layers.
+	while (exportedLayers.length &gt; 0)
+	{
+		var nd = exportedLayers.pop();
+
+		nd.setAttribute(&quot;opacity&quot;,1);
+		nd.style.display = &quot;inherit&quot;;
+
+		newDoc.appendChild(nd);
+	}
+
+	// Serialise the new document.
+	var serializer = new XMLSerializer();
+	var strm = 
+	{
+		content : &quot;&quot;,
+		close : function() {},  
+		flush : function() {},  
+		write : function(str, count) { this.content += str; }  
+	};
+
+	var xml = serializer.serializeToStream(newDoc, strm, 'UTF-8');
+
+	window.location = 'data:application/svg+xml;base64;charset=utf-8,' + window.btoa(strm.content);
+
+	// Unsuspend redraw.
+	ROOT_NODE.unsuspendRedraw(suspendHandle);
+	ROOT_NODE.forceRedraw();
+}
+
+/** Function to undo last drawing operation.
+*/
+function drawingUndo()
+{
+	mouse_presentation_path = null;
+	mouse_original_path = null;
+
+	if (history_presentation_elements.length &gt; 0)
+	{
+		var p = history_presentation_elements.pop();
+		var parent = p.parentNode.removeChild(p);
+
+		p = history_original_elements.pop();
+		parent = p.parentNode.removeChild(p);
+	}
+}
+
+/** Event handler for mouse down in drawing mode.
+ *
+ *  @param e the event
+ */
+function drawingMousedown(e)
+{
+	var value = 0;
+
+	if (e.button)
+		value = e.button;
+	else if (e.which)
+		value = e.which;
+
+	if (value == 1)
+	{
+		history_counter++;
+
+		var p = calcCoord(e);
+
+		mouse_last_x = e.clientX;
+		mouse_last_y = e.clientY;
+		mouse_original_path = document.createElementNS(NSS[&quot;svg&quot;], &quot;path&quot;);
+		mouse_original_path.setAttribute(&quot;stroke&quot;, path_colour);
+		mouse_original_path.setAttribute(&quot;stroke-width&quot;, path_paint_width);
+		mouse_original_path.setAttribute(&quot;fill&quot;, &quot;none&quot;);
+		mouse_original_path.setAttribute(&quot;id&quot;, &quot;path &quot; + Date());
+		mouse_original_path.setAttribute(&quot;d&quot;, &quot;M&quot; + p.x + &quot;,&quot; + p.y);
+		slides[activeSlide][&quot;original_element&quot;].appendChild(mouse_original_path);
+		history_original_elements.push(mouse_original_path);
+
+		mouse_presentation_path = document.createElementNS(NSS[&quot;svg&quot;], &quot;path&quot;);
+		mouse_presentation_path.setAttribute(&quot;stroke&quot;, path_colour);
+		mouse_presentation_path.setAttribute(&quot;stroke-width&quot;, path_paint_width);
+		mouse_presentation_path.setAttribute(&quot;fill&quot;, &quot;none&quot;);
+		mouse_presentation_path.setAttribute(&quot;id&quot;, &quot;path &quot; + Date() + &quot; presentation copy&quot;);
+		mouse_presentation_path.setAttribute(&quot;d&quot;, &quot;M&quot; + p.x + &quot;,&quot; + p.y);
+
+		if (slides[activeSlide][&quot;viewGroup&quot;])
+			slides[activeSlide][&quot;viewGroup&quot;].appendChild(mouse_presentation_path);
+		else
+			slides[activeSlide][&quot;element&quot;].appendChild(mouse_presentation_path);
+
+		history_presentation_elements.push(mouse_presentation_path);
+
+		return false;
+	}
+
+	return true;
+}
+
+/** Event handler for mouse up in drawing mode.
+ *
+ *  @param e the event
+ */
+function drawingMouseup(e)
+{
+	if(!e)
+		e = window.event;
+
+	if (mouse_presentation_path != null)
+	{
+		var p = calcCoord(e);
+		var d = mouse_presentation_path.getAttribute(&quot;d&quot;);
+		d += &quot; L&quot; + p.x + &quot;,&quot; + p.y;
+		mouse_presentation_path.setAttribute(&quot;d&quot;, d);
+		mouse_presentation_path = null;
+		mouse_original_path.setAttribute(&quot;d&quot;, d);
+		mouse_original_path = null;
+
+		return false;
+	}
+
+	return true;
+}
+
+/** Event handler for mouse move in drawing mode.
+ *
+ *  @param e the event
+ */
+function drawingMousemove(e)
+{
+	if(!e)
+		e = window.event;
+
+	var dist = (mouse_last_x - e.clientX) * (mouse_last_x - e.clientX) + (mouse_last_y - e.clientY) * (mouse_last_y - e.clientY);
+
+	if (mouse_presentation_path == null)
+	{
+		return true;
+	}
+
+	if (dist &gt;= mouse_min_dist_sqr)
+	{
+		var p = calcCoord(e);
+		var d = mouse_presentation_path.getAttribute(&quot;d&quot;);
+		d += &quot; L&quot; + p.x + &quot;,&quot; + p.y;
+		mouse_presentation_path.setAttribute(&quot;d&quot;, d);
+		mouse_original_path.setAttribute(&quot;d&quot;, d);
+		mouse_last_x = e.clientX;
+		mouse_last_y = e.clientY;
+	}
+
+	return false;
+}
+
+/** Event handler for mouse wheel events in slide mode.
+ *  based on http://adomas.org/javascript-mouse-wheel/
+ *
+ *  @param e the event
+ */
+function slideMousewheel(e)
+{
+	var delta = 0;
+
+	if (!e)
+		e = window.event;
+
+	if (e.wheelDelta)
+	{ // IE Opera
+		delta = e.wheelDelta/120;
+	}
+	else if (e.detail)
+	{ // MOZ
+		delta = -e.detail/3;
+	}
+
+	if (delta &gt; 0)
+		skipEffects(-1);
+	else if (delta &lt; 0)
+		skipEffects(1);
+
+	if (e.preventDefault)
+		e.preventDefault();
+
+	e.returnValue = false;
+}
+
+/** Event handler for mouse wheel events in index mode.
+ *  based on http://adomas.org/javascript-mouse-wheel/
+ *
+ *  @param e the event
+ */
+function indexMousewheel(e)
+{
+	var delta = 0;
+
+	if (!e)
+		e = window.event;
+
+	if (e.wheelDelta)
+	{ // IE Opera
+		delta = e.wheelDelta/120;
+	}
+	else if (e.detail)
+	{ // MOZ
+		delta = -e.detail/3;
+	}
+
+	if (delta &gt; 0)
+		indexSetPageSlide(activeSlide - INDEX_COLUMNS * INDEX_COLUMNS);
+	else if (delta &lt; 0)
+		indexSetPageSlide(activeSlide + INDEX_COLUMNS * INDEX_COLUMNS);
+
+	if (e.preventDefault)
+		e.preventDefault();
+
+	e.returnValue = false;
+}
+
+/** Function to set the path paint width.
+*/
+function set_path_paint_width()
+{
+	var svgPoint1 = document.documentElement.createSVGPoint();
+	var svgPoint2 = document.documentElement.createSVGPoint();
+
+	svgPoint1.x = 0.0;
+	svgPoint1.y = 0.0;
+	svgPoint2.x = 1.0;
+	svgPoint2.y = 0.0;
+
+	var matrix = slides[activeSlide][&quot;element&quot;].getTransformToElement(ROOT_NODE);
+
+	if (slides[activeSlide][&quot;viewGroup&quot;])
+		matrix = slides[activeSlide][&quot;viewGroup&quot;].getTransformToElement(ROOT_NODE);
+
+	svgPoint1 = svgPoint1.matrixTransform(matrix);
+	svgPoint2 = svgPoint2.matrixTransform(matrix);
+
+	path_paint_width = path_width / Math.sqrt((svgPoint2.x - svgPoint1.x) * (svgPoint2.x - svgPoint1.x) + (svgPoint2.y - svgPoint1.y) * (svgPoint2.y - svgPoint1.y));
+}
+
+/** The view effect.
+ *
+ *  @param dir direction the effect should be played (1 = forwards, -1 = backwards)
+ *  @param element the element the effect should be applied to
+ *  @param time the time that has elapsed since the beginning of the effect
+ *  @param options a dictionary with additional options (e.g. length of the effect); for the view effect the options need to contain the old and the new matrix.
+ */
+function view(dir, element, time, options)
+{
+	var length = 250;
+	var fraction;
+
+	if (!options[&quot;matrixInitial&quot;])
+	{
+		var tempString = slides[activeSlide][&quot;viewGroup&quot;].getAttribute(&quot;transform&quot;);
+
+		if (tempString)
+			options[&quot;matrixInitial&quot;] = (new matrixSVG()).fromAttribute(tempString);
+		else
+			options[&quot;matrixInitial&quot;] = (new matrixSVG()).fromSVGElements(1, 0, 0, 1, 0, 0);
+	}
+
+	if ((time == STATE_END) || (time == STATE_START))
+		fraction = 1;
+	else
+	{
+		if (options &amp;&amp; options[&quot;length&quot;])
+			length = options[&quot;length&quot;];
+
+		fraction = time / length;
+	}
+
+	if (dir == 1)
+	{
+		if (fraction &lt;= 0)
+		{
+			element.setAttribute(&quot;transform&quot;, options[&quot;matrixInitial&quot;].toAttribute());
+		}
+		else if (fraction &gt;= 1)
+		{
+			element.setAttribute(&quot;transform&quot;, options[&quot;matrixNew&quot;].toAttribute());
+
+			set_path_paint_width();
+
+			options[&quot;matrixInitial&quot;] = null;
+			return true;
+		}
+		else
+		{
+			element.setAttribute(&quot;transform&quot;, options[&quot;matrixInitial&quot;].mix(options[&quot;matrixNew&quot;], fraction).toAttribute());
+		}
+	}
+	else if (dir == -1)
+	{
+		if (fraction &lt;= 0)
+		{
+			element.setAttribute(&quot;transform&quot;, options[&quot;matrixInitial&quot;].toAttribute());
+		}
+		else if (fraction &gt;= 1)
+		{
+			element.setAttribute(&quot;transform&quot;, options[&quot;matrixOld&quot;].toAttribute());
+			set_path_paint_width();
+
+			options[&quot;matrixInitial&quot;] = null;
+			return true;
+		}
+		else
+		{
+			element.setAttribute(&quot;transform&quot;, options[&quot;matrixInitial&quot;].mix(options[&quot;matrixOld&quot;], fraction).toAttribute());
+		}
+	}
+
+	return false;
+}
+
+/** The fade effect.
+ *
+ *  @param dir direction the effect should be played (1 = forwards, -1 = backwards)
+ *  @param element the element the effect should be applied to
+ *  @param time the time that has elapsed since the beginning of the effect
+ *  @param options a dictionary with additional options (e.g. length of the effect)
+ */
+function fade(dir, element, time, options)
+{
+	var length = 250;
+	var fraction;
+
+	if ((time == STATE_END) || (time == STATE_START))
+		fraction = 1;
+	else
+	{
+		if (options &amp;&amp; options[&quot;length&quot;])
+			length = options[&quot;length&quot;];
+
+		fraction = time / length;
+	}
+
+	if (dir == 1)
+	{
+		if (fraction &lt;= 0)
+		{
+			element.style.display = &quot;none&quot;;
+			element.setAttribute(&quot;opacity&quot;, 0);
+		}
+		else if (fraction &gt;= 1)
+		{
+			element.style.display = &quot;inherit&quot;;
+			element.setAttribute(&quot;opacity&quot;, 1);
+			return true;
+		}
+		else
+		{
+			element.style.display = &quot;inherit&quot;;
+			element.setAttribute(&quot;opacity&quot;, fraction);
+		}
+	}
+	else if (dir == -1)
+	{
+		if (fraction &lt;= 0)
+		{
+			element.style.display = &quot;inherit&quot;;
+			element.setAttribute(&quot;opacity&quot;, 1);
+		}
+		else if (fraction &gt;= 1)
+		{
+			element.setAttribute(&quot;opacity&quot;, 0);
+			element.style.display = &quot;none&quot;;
+			return true;
+		}
+		else
+		{
+			element.style.display = &quot;inherit&quot;;
+			element.setAttribute(&quot;opacity&quot;, 1 - fraction);
+		}
+	}
+	return false;
+}
+
+/** The appear effect.
+ *
+ *  @param dir direction the effect should be played (1 = forwards, -1 = backwards)
+ *  @param element the element the effect should be applied to
+ *  @param time the time that has elapsed since the beginning of the effect
+ *  @param options a dictionary with additional options (e.g. length of the effect)
+ */
+function appear(dir, element, time, options)
+{
+	if (dir == 1)
+	{
+		element.style.display = &quot;inherit&quot;;
+		element.setAttribute(&quot;opacity&quot;,1);
+	}
+	else if (dir == -1)
+	{
+		element.style.display = &quot;none&quot;;
+		element.setAttribute(&quot;opacity&quot;,0);
+	}
+	return true;
+}
+
+/** The pop effect.
+ *
+ *  @param dir direction the effect should be played (1 = forwards, -1 = backwards)
+ *  @param element the element the effect should be applied to
+ *  @param time the time that has elapsed since the beginning of the effect
+ *  @param options a dictionary with additional options (e.g. length of the effect)
+ */
+function pop(dir, element, time, options)
+{
+	var length = 500;
+	var fraction;
+
+	if ((time == STATE_END) || (time == STATE_START))
+		fraction = 1;
+	else
+	{
+		if (options &amp;&amp; options[&quot;length&quot;])
+			length = options[&quot;length&quot;];
+
+		fraction = time / length;
+	}
+
+	if (dir == 1)
+	{
+		if (fraction &lt;= 0)
+		{
+			element.setAttribute(&quot;opacity&quot;, 0);
+			element.setAttribute(&quot;transform&quot;, &quot;scale(0)&quot;);
+			element.style.display = &quot;none&quot;;
+		}
+		else if (fraction &gt;= 1)
+		{
+			element.setAttribute(&quot;opacity&quot;, 1);
+			element.removeAttribute(&quot;transform&quot;);
+			element.style.display = &quot;inherit&quot;;
+			return true;
+		}
+		else
+		{
+			element.style.display = &quot;inherit&quot;;
+			var opacityFraction = fraction * 3;
+			if (opacityFraction &gt; 1)
+				opacityFraction = 1;
+			element.setAttribute(&quot;opacity&quot;, opacityFraction);
+			var offsetX = WIDTH * (1.0 - fraction) / 2.0;
+			var offsetY = HEIGHT * (1.0 - fraction) / 2.0;
+			element.setAttribute(&quot;transform&quot;, &quot;translate(&quot; + offsetX + &quot;,&quot; + offsetY + &quot;) scale(&quot; + fraction + &quot;)&quot;);
+		}
+	}
+	else if (dir == -1)
+	{
+		if (fraction &lt;= 0)
+		{
+			element.setAttribute(&quot;opacity&quot;, 1);
+			element.setAttribute(&quot;transform&quot;, &quot;scale(1)&quot;);
+			element.style.display = &quot;inherit&quot;;
+		}
+		else if (fraction &gt;= 1)
+		{
+			element.setAttribute(&quot;opacity&quot;, 0);
+			element.removeAttribute(&quot;transform&quot;);
+			element.style.display = &quot;none&quot;;
+			return true;
+		}
+		else
+		{
+			element.setAttribute(&quot;opacity&quot;, 1 - fraction);
+			element.setAttribute(&quot;transform&quot;, &quot;scale(&quot; + 1 - fraction + &quot;)&quot;);
+			element.style.display = &quot;inherit&quot;;
+		}
+	}
+	return false;
+}
+
+/** Function to set a slide either to the start or the end state.
+ *  
+ *  @param slide the slide to use
+ *  @param state the state into which the slide should be set
+ */
+function setSlideToState(slide, state)
+{
+	slides[slide][&quot;viewGroup&quot;].setAttribute(&quot;transform&quot;, slides[slide].initialView);
+
+	if (slides[slide][&quot;effects&quot;])
+	{	
+		if (state == STATE_END)
+		{
+			for (var counter = 0; counter &lt; slides[slide][&quot;effects&quot;].length; counter++)
+			{
+				for (var subCounter = 0; subCounter &lt; slides[slide][&quot;effects&quot;][counter].length; subCounter++)
+				{
+					var effect = slides[slide][&quot;effects&quot;][counter][subCounter];
+					if (effect[&quot;effect&quot;] == &quot;fade&quot;)
+						fade(effect[&quot;dir&quot;], effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;appear&quot;)
+						appear(effect[&quot;dir&quot;], effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;pop&quot;)
+						pop(effect[&quot;dir&quot;], effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;view&quot;)
+						view(effect[&quot;dir&quot;], effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+				}
+			}
+		}
+		else if (state == STATE_START)
+		{
+			for (var counter = slides[slide][&quot;effects&quot;].length - 1; counter &gt;= 0; counter--)
+			{
+				for (var subCounter = 0; subCounter &lt; slides[slide][&quot;effects&quot;][counter].length; subCounter++)
+				{
+					var effect = slides[slide][&quot;effects&quot;][counter][subCounter];
+					if (effect[&quot;effect&quot;] == &quot;fade&quot;)
+						fade(parseInt(effect[&quot;dir&quot;]) * -1, effect[&quot;element&quot;], STATE_START, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;appear&quot;)
+						appear(parseInt(effect[&quot;dir&quot;]) * -1, effect[&quot;element&quot;], STATE_START, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;pop&quot;)
+						pop(parseInt(effect[&quot;dir&quot;]) * -1, effect[&quot;element&quot;], STATE_START, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;view&quot;)
+						view(parseInt(effect[&quot;dir&quot;]) * -1, effect[&quot;element&quot;], STATE_START, effect[&quot;options&quot;]);	
+				}
+			}
+		}
+		else
+		{
+			setSlideToState(slide, STATE_START);
+
+			for (var counter = 0; counter &lt; slides[slide][&quot;effects&quot;].length &amp;&amp; counter &lt; state; counter++)
+			{
+				for (var subCounter = 0; subCounter &lt; slides[slide][&quot;effects&quot;][counter].length; subCounter++)
+				{
+					var effect = slides[slide][&quot;effects&quot;][counter][subCounter];
+					if (effect[&quot;effect&quot;] == &quot;fade&quot;)
+						fade(effect[&quot;dir&quot;], effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;appear&quot;)
+						appear(effect[&quot;dir&quot;], effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;pop&quot;)
+						pop(effect[&quot;dir&quot;], effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+					else if (effect[&quot;effect&quot;] == &quot;view&quot;)
+						view(effect[&quot;dir&quot;], effect[&quot;element&quot;], STATE_END, effect[&quot;options&quot;]);	
+				}
+			}
+		}
+	}
+
+	window.location.hash = (activeSlide + 1) + '_' + activeEffect;
+}
+
+/** Convenience function to translate a attribute string into a dictionary.
+ *
+ *	@param str the attribute string
+ *  @return a dictionary
+ *  @see dictToPropStr
+ */
+function propStrToDict(str)
+{
+	var list = str.split(&quot;;&quot;);
+	var obj = new Object();
+
+	for (var counter = 0; counter &lt; list.length; counter++)
+	{
+		var subStr = list[counter];
+		var subList = subStr.split(&quot;:&quot;);
+		if (subList.length == 2)
+		{
+			obj[subList[0]] = subList[1];
+		}	
+	}
+
+	return obj;
+}
+
+/** Convenience function to translate a dictionary into a string that can be used as an attribute.
+ *
+ *  @param dict the dictionary to convert
+ *  @return a string that can be used as an attribute
+ *  @see propStrToDict
+ */
+function dictToPropStr(dict)
+{
+	var str = &quot;&quot;;
+
+	for (var key in dict)
+	{
+		str += key + &quot;:&quot; + dict[key] + &quot;;&quot;;
+	}
+
+	return str;
+}
+
+/** Sub-function to add a suffix to the ids of the node and all its children.
+ *	
+ *	@param node the node to change
+ *	@param suffix the suffix to add
+ *	@param replace dictionary of replaced ids
+ *  @see suffixNodeIds
+ */
+function suffixNoneIds_sub(node, suffix, replace)
+{
+	if (node.nodeType == 1)
+	{
+		if (node.getAttribute(&quot;id&quot;))
+		{
+			var id = node.getAttribute(&quot;id&quot;)
+				replace[&quot;#&quot; + id] = id + suffix;
+			node.setAttribute(&quot;id&quot;, id + suffix);
+		}
+
+		if ((node.nodeName == &quot;use&quot;) &amp;&amp; (node.getAttributeNS(NSS[&quot;xlink&quot;], &quot;href&quot;)) &amp;&amp; (replace[node.getAttribute(NSS[&quot;xlink&quot;], &quot;href&quot;)]))
+			node.setAttribute(NSS[&quot;xlink&quot;], &quot;href&quot;, node.getAttribute(NSS[&quot;xlink&quot;], &quot;href&quot;) + suffix);
+
+		if (node.childNodes)
+		{
+			for (var counter = 0; counter &lt; node.childNodes.length; counter++)
+				suffixNoneIds_sub(node.childNodes[counter], suffix, replace);
+		}
+	}
+}
+
+/** Function to add a suffix to the ids of the node and all its children.
+ *	
+ *	@param node the node to change
+ *	@param suffix the suffix to add
+ *  @return the changed node
+ *  @see suffixNodeIds_sub
+ */
+function suffixNodeIds(node, suffix)
+{
+	var replace = new Object();
+
+	suffixNoneIds_sub(node, suffix, replace);
+
+	return node;
+}
+
+/** Function to build a progress bar.
+ *	
+ *  @param parent node to attach the progress bar to
+ */
+function createProgressBar(parent_node)
+{
+	var g = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+	g.setAttribute(&quot;clip-path&quot;, &quot;url(#jessyInkSlideClipPath)&quot;);
+	g.setAttribute(&quot;id&quot;, &quot;layer_progress_bar&quot;);
+	g.setAttribute(&quot;style&quot;, &quot;display: none;&quot;);
+
+	var rect_progress_bar = document.createElementNS(NSS[&quot;svg&quot;], &quot;rect&quot;);
+	rect_progress_bar.setAttribute(&quot;style&quot;, &quot;marker: none; fill: rgb(128, 128, 128); stroke: none;&quot;);
+	rect_progress_bar.setAttribute(&quot;id&quot;, &quot;rect_progress_bar&quot;);
+	rect_progress_bar.setAttribute(&quot;x&quot;, 0);
+	rect_progress_bar.setAttribute(&quot;y&quot;, 0.99 * HEIGHT);
+	rect_progress_bar.setAttribute(&quot;width&quot;, 0);
+	rect_progress_bar.setAttribute(&quot;height&quot;, 0.01 * HEIGHT);
+	g.appendChild(rect_progress_bar);
+
+	var circle_timer_indicator = document.createElementNS(NSS[&quot;svg&quot;], &quot;circle&quot;);
+	circle_timer_indicator.setAttribute(&quot;style&quot;, &quot;marker: none; fill: rgb(255, 0, 0); stroke: none;&quot;);
+	circle_timer_indicator.setAttribute(&quot;id&quot;, &quot;circle_timer_indicator&quot;);
+	circle_timer_indicator.setAttribute(&quot;cx&quot;, 0.005 * HEIGHT);
+	circle_timer_indicator.setAttribute(&quot;cy&quot;, 0.995 * HEIGHT);
+	circle_timer_indicator.setAttribute(&quot;r&quot;, 0.005 * HEIGHT);
+	g.appendChild(circle_timer_indicator);
+
+	parent_node.appendChild(g);
+}
+
+/** Function to hide the progress bar.
+ *	
+ */
+function hideProgressBar()
+{
+	var progress_bar = document.getElementById(&quot;layer_progress_bar&quot;);
+
+	if (!progress_bar)
+	{
+		return;
+	}
+
+	progress_bar.setAttribute(&quot;style&quot;, &quot;display: none;&quot;);
+}
+
+/** Function to show the progress bar.
+ *	
+ */
+function showProgressBar()
+{
+	var progress_bar = document.getElementById(&quot;layer_progress_bar&quot;);
+
+	if (!progress_bar)
+	{
+		return;
+	}
+
+	progress_bar.setAttribute(&quot;style&quot;, &quot;display: inherit;&quot;);
+}
+
+/** Set progress bar value.
+ *	
+ *	@param value the current slide number
+ *
+ */
+function setProgressBarValue(value)
+{
+	var rect_progress_bar = document.getElementById(&quot;rect_progress_bar&quot;);
+
+	if (!rect_progress_bar)
+	{
+		return;
+	}
+
+	if (value &lt; 1)
+	{
+		// First slide, assumed to be the title of the presentation
+		var x = 0;
+		var w = 0.01 * HEIGHT;
+	}
+	else if (value &gt;= slides.length - 1)
+	{
+		// Last slide, assumed to be the end of the presentation
+		var x = WIDTH - 0.01 * HEIGHT;
+		var w = 0.01 * HEIGHT;
+	}
+	else
+	{
+		value -= 1;
+		value /= (slides.length - 2);
+
+		var x = WIDTH * value;
+		var w = WIDTH / (slides.length - 2);
+	}
+
+	rect_progress_bar.setAttribute(&quot;x&quot;, x);
+	rect_progress_bar.setAttribute(&quot;width&quot;, w);
+}
+
+/** Set time indicator.
+ *	
+ *	@param value the percentage of time elapse so far between 0.0 and 1.0
+ *
+ */
+function setTimeIndicatorValue(value)
+{
+	var circle_timer_indicator = document.getElementById(&quot;circle_timer_indicator&quot;);
+
+	if (!circle_timer_indicator)
+	{
+		return;
+	}
+
+	if (value &lt; 0.0)
+	{
+		value = 0.0;
+	}
+
+	if (value &gt; 1.0)
+	{
+		value = 1.0;
+	}
+
+	var cx = (WIDTH - 0.01 * HEIGHT) * value + 0.005 * HEIGHT;
+	circle_timer_indicator.setAttribute(&quot;cx&quot;, cx);
+}
+
+/** Update timer.
+ *	
+ */
+function updateTimer()
+{
+	timer_elapsed += 1;
+	setTimeIndicatorValue((timer_elapsed - timer_start) / (60 * timer_duration));
+}
+
+/** Convert screen coordinates to document coordinates.
+ *
+ *  @param e event with screen coordinates
+ *
+ *  @return coordinates in SVG file coordinate system	
+ */
+function calcCoord(e)
+{
+	var svgPoint = document.documentElement.createSVGPoint();
+	svgPoint.x = e.clientX + window.pageXOffset;
+	svgPoint.y = e.clientY + window.pageYOffset;
+
+	var matrix = slides[activeSlide][&quot;element&quot;].getScreenCTM();
+
+	if (slides[activeSlide][&quot;viewGroup&quot;])
+		matrix = slides[activeSlide][&quot;viewGroup&quot;].getScreenCTM();
+
+	svgPoint = svgPoint.matrixTransform(matrix.inverse());
+	return svgPoint;
+}
+
+/** Add slide.
+ *
+ *	@param after_slide after which slide the new slide should be inserted into the presentation
+ */
+function addSlide(after_slide)
+{
+	number_of_added_slides++;
+
+	var g = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+	g.setAttribute(&quot;clip-path&quot;, &quot;url(#jessyInkSlideClipPath)&quot;);
+	g.setAttribute(&quot;id&quot;, &quot;Whiteboard &quot; + Date() + &quot; presentation copy&quot;);
+	g.setAttribute(&quot;style&quot;, &quot;display: none;&quot;);
+
+	var new_slide = new Object();
+	new_slide[&quot;element&quot;] = g;
+
+	// Set build in transition.
+	new_slide[&quot;transitionIn&quot;] = new Object();
+	var dict = defaultTransitionInDict;
+	new_slide[&quot;transitionIn&quot;][&quot;name&quot;] = dict[&quot;name&quot;];
+	new_slide[&quot;transitionIn&quot;][&quot;options&quot;] = new Object();
+
+	for (key in dict)
+		if (key != &quot;name&quot;)
+			new_slide[&quot;transitionIn&quot;][&quot;options&quot;][key] = dict[key];
+
+	// Set build out transition.
+	new_slide[&quot;transitionOut&quot;] = new Object();
+	dict = defaultTransitionOutDict;
+	new_slide[&quot;transitionOut&quot;][&quot;name&quot;] = dict[&quot;name&quot;];
+	new_slide[&quot;transitionOut&quot;][&quot;options&quot;] = new Object();
+
+	for (key in dict)
+		if (key != &quot;name&quot;)
+			new_slide[&quot;transitionOut&quot;][&quot;options&quot;][key] = dict[key];
+
+	// Copy master slide content.
+	if (masterSlide)
+	{
+		var clonedNode = suffixNodeIds(masterSlide.cloneNode(true), &quot;_&quot; + Date() + &quot; presentation_copy&quot;);
+		clonedNode.removeAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;);
+		clonedNode.removeAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;);
+		clonedNode.style.display = &quot;inherit&quot;;
+
+		g.appendChild(clonedNode);
+	}
+
+	// Substitute auto texts.
+	substituteAutoTexts(g, &quot;Whiteboard &quot; + number_of_added_slides, &quot;W&quot; + number_of_added_slides, slides.length);
+
+	g.setAttribute(&quot;onmouseover&quot;, &quot;if ((currentMode == INDEX_MODE) &amp;&amp; ( activeSlide != &quot; + (after_slide + 1) + &quot;)) { indexSetActiveSlide(&quot; + (after_slide + 1) + &quot;); };&quot;);
+
+	// Create a transform group.
+	var transformGroup = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+
+	// Add content to transform group.
+	while (g.firstChild)
+		transformGroup.appendChild(g.firstChild);
+
+	// Transfer the transform attribute from the node to the transform group.
+	if (g.getAttribute(&quot;transform&quot;))
+	{
+		transformGroup.setAttribute(&quot;transform&quot;, g.getAttribute(&quot;transform&quot;));
+		g.removeAttribute(&quot;transform&quot;);
+	}
+
+	// Create a view group.
+	var viewGroup = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+
+	viewGroup.appendChild(transformGroup);
+	new_slide[&quot;viewGroup&quot;] = g.appendChild(viewGroup);
+
+	// Insert background.
+	if (BACKGROUND_COLOR != null)
+	{
+		var rectNode = document.createElementNS(NSS[&quot;svg&quot;], &quot;rect&quot;);
+
+		rectNode.setAttribute(&quot;x&quot;, 0);
+		rectNode.setAttribute(&quot;y&quot;, 0);
+		rectNode.setAttribute(&quot;width&quot;, WIDTH);
+		rectNode.setAttribute(&quot;height&quot;, HEIGHT);
+		rectNode.setAttribute(&quot;id&quot;, &quot;jessyInkBackground&quot; + Date());
+		rectNode.setAttribute(&quot;fill&quot;, BACKGROUND_COLOR);
+
+		new_slide[&quot;viewGroup&quot;].insertBefore(rectNode, new_slide[&quot;viewGroup&quot;].firstChild);
+	}
+
+	// Set initial view even if there are no other views.
+	var matrixOld = (new matrixSVG()).fromElements(1, 0, 0, 0, 1, 0, 0, 0, 1);
+
+	new_slide[&quot;viewGroup&quot;].setAttribute(&quot;transform&quot;, matrixOld.toAttribute());
+	new_slide.initialView = matrixOld.toAttribute();
+
+	// Insert slide
+	var node = slides[after_slide][&quot;element&quot;];
+	var next_node = node.nextSibling;
+	var parent_node = node.parentNode;
+
+	if (next_node)
+	{
+		parent_node.insertBefore(g, next_node);
+	}
+	else
+	{
+		parent_node.appendChild(g);
+	}
+
+	g = document.createElementNS(NSS[&quot;svg&quot;], &quot;g&quot;);
+	g.setAttributeNS(NSS[&quot;inkscape&quot;], &quot;groupmode&quot;, &quot;layer&quot;);
+	g.setAttributeNS(NSS[&quot;inkscape&quot;], &quot;label&quot;, &quot;Whiteboard &quot; + number_of_added_slides);
+	g.setAttribute(&quot;clip-path&quot;, &quot;url(#jessyInkSlideClipPath)&quot;);
+	g.setAttribute(&quot;id&quot;, &quot;Whiteboard &quot; + Date());
+	g.setAttribute(&quot;style&quot;, &quot;display: none;&quot;);
+
+	new_slide[&quot;original_element&quot;] = g;
+
+	node = slides[after_slide][&quot;original_element&quot;];
+	next_node = node.nextSibling;
+	parent_node = node.parentNode;
+
+	if (next_node)
+	{
+		parent_node.insertBefore(g, next_node);
+	}
+	else
+	{
+		parent_node.appendChild(g);
+	}
+
+	before_new_slide = slides.slice(0, after_slide + 1);
+	after_new_slide = slides.slice(after_slide + 1);
+	slides = before_new_slide.concat(new_slide, after_new_slide);
+
+	//resetting the counter attributes on the slides that follow the new slide...
+	for (var counter = after_slide+2; counter &lt; slides.length; counter++)
+	{
+		slides[counter][&quot;element&quot;].setAttribute(&quot;onmouseover&quot;, &quot;if ((currentMode == INDEX_MODE) &amp;&amp; ( activeSlide != &quot; + counter + &quot;)) { indexSetActiveSlide(&quot; + counter + &quot;); };&quot;);
+	}
+}
+
+/** Convenience function to obtain a transformation matrix from a point matrix.
+ *
+ *	@param mPoints Point matrix.
+ *	@return A transformation matrix.
+ */
+function pointMatrixToTransformation(mPoints)
+{
+	mPointsOld = (new matrixSVG()).fromElements(0, WIDTH, WIDTH, 0, 0, HEIGHT, 1, 1, 1);
+
+	return mPointsOld.mult(mPoints.inv());
+}
+
+/** Convenience function to obtain a matrix with three corners of a rectangle.
+ *
+ *	@param rect an svg rectangle
+ *	@return a matrixSVG containing three corners of the rectangle
+ */
+function rectToMatrix(rect)
+{
+	rectWidth = rect.getBBox().width;
+	rectHeight = rect.getBBox().height;
+	rectX = rect.getBBox().x;
+	rectY = rect.getBBox().y;
+	rectXcorr = 0;
+	rectYcorr = 0;
+
+	scaleX = WIDTH / rectWidth;
+	scaleY = HEIGHT / rectHeight;
+
+	if (scaleX &gt; scaleY)
+	{
+		scaleX = scaleY;
+		rectXcorr -= (WIDTH / scaleX - rectWidth) / 2;
+		rectWidth = WIDTH / scaleX;
+	}	
+	else
+	{
+		scaleY = scaleX;
+		rectYcorr -= (HEIGHT / scaleY - rectHeight) / 2;
+		rectHeight = HEIGHT / scaleY;
+	}
+
+	if (rect.transform.baseVal.numberOfItems &lt; 1)
+	{
+		mRectTrans = (new matrixSVG()).fromElements(1, 0, 0, 0, 1, 0, 0, 0, 1);
+	}
+	else
+	{
+		mRectTrans = (new matrixSVG()).fromSVGMatrix(rect.transform.baseVal.consolidate().matrix);
+	}
+
+	newBasePoints = (new matrixSVG()).fromElements(rectX, rectX, rectX, rectY, rectY, rectY, 1, 1, 1);
+	newVectors = (new matrixSVG()).fromElements(rectXcorr, rectXcorr + rectWidth, rectXcorr + rectWidth, rectYcorr, rectYcorr, rectYcorr + rectHeight, 0, 0, 0);
+
+	return mRectTrans.mult(newBasePoints.add(newVectors));
+}
+
+/** Function to handle JessyInk elements.
+ *
+ *	@param	node	Element node.
+ */
+function handleElement(node)
+{
+	if (node.getAttributeNS(NSS['jessyink'], 'element') == 'core.video')
+	{
+		var url;
+		var width;
+		var height;
+		var x;
+		var y;
+		var transform;
+
+		var tspans = node.getElementsByTagNameNS(&quot;http://www.w3.org/2000/svg&quot;, &quot;tspan&quot;);
+
+		for (var tspanCounter = 0; tspanCounter &lt; tspans.length; tspanCounter++)
+		{
+			if (tspans[tspanCounter].getAttributeNS(&quot;https://launchpad.net/jessyink&quot;, &quot;video&quot;) == &quot;url&quot;)
+			{
+				url = tspans[tspanCounter].firstChild.nodeValue;
+			}
+		}
+
+		var rects = node.getElementsByTagNameNS(&quot;http://www.w3.org/2000/svg&quot;, &quot;rect&quot;);
+
+		for (var rectCounter = 0; rectCounter &lt; rects.length; rectCounter++)
+		{
+			if (rects[rectCounter].getAttributeNS(&quot;https://launchpad.net/jessyink&quot;, &quot;video&quot;) == &quot;rect&quot;)
+			{
+				x = rects[rectCounter].getAttribute(&quot;x&quot;);
+				y = rects[rectCounter].getAttribute(&quot;y&quot;);
+				width = rects[rectCounter].getAttribute(&quot;width&quot;);
+				height = rects[rectCounter].getAttribute(&quot;height&quot;);
+				transform = rects[rectCounter].getAttribute(&quot;transform&quot;);
+			}
+		}
+
+		for (var childCounter = 0; childCounter &lt; node.childNodes.length; childCounter++)
+		{
+			if (node.childNodes[childCounter].nodeType == 1)
+			{
+				if (node.childNodes[childCounter].style)
+				{
+					node.childNodes[childCounter].style.display = 'none';
+				}
+				else
+				{
+					node.childNodes[childCounter].setAttribute(&quot;style&quot;, &quot;display: none;&quot;);
+				}
+			}
+		}
+
+		var foreignNode = document.createElementNS(&quot;http://www.w3.org/2000/svg&quot;, &quot;foreignObject&quot;);
+		foreignNode.setAttribute(&quot;x&quot;, x);
+		foreignNode.setAttribute(&quot;y&quot;, y);
+		foreignNode.setAttribute(&quot;width&quot;, width);
+		foreignNode.setAttribute(&quot;height&quot;, height);
+		foreignNode.setAttribute(&quot;transform&quot;, transform);
+
+		var videoNode = document.createElementNS(&quot;http://www.w3.org/1999/xhtml&quot;, &quot;video&quot;);
+		videoNode.setAttribute(&quot;src&quot;, url);
+
+		foreignNode.appendChild(videoNode);
+		node.appendChild(foreignNode);
+	}
+}
+
+/** Class processing the location hash.
+ *
+ *	@param str location hash
+ */
+function LocationHash(str)
+{
+	this.slideNumber = 0;
+	this.effectNumber = 0;
+
+	str = str.substr(1, str.length - 1);
+
+	var parts = str.split('_');
+
+	// Try to extract slide number.
+	if (parts.length &gt;= 1)
+	{
+		try
+		{
+			var slideNumber = parseInt(parts[0]);
+
+			if (!isNaN(slideNumber))
+			{
+				this.slideNumber = slideNumber - 1;
+			}
+		}
+		catch (e)
+		{
+		}
+	}
+	
+	// Try to extract effect number.
+	if (parts.length &gt;= 2)
+	{
+		try
+		{
+			var effectNumber = parseInt(parts[1]);
+
+			if (!isNaN(effectNumber))
+			{
+				this.effectNumber = effectNumber;
+			}
+		}
+		catch (e)
+		{
+		}
+	}
+}
+
+/** Class representing an svg matrix.
+*/
+function matrixSVG()
+{
+	this.e11 = 0; // a
+	this.e12 = 0; // c
+	this.e13 = 0; // e
+	this.e21 = 0; // b
+	this.e22 = 0; // d
+	this.e23 = 0; // f
+	this.e31 = 0;
+	this.e32 = 0;
+	this.e33 = 0;
+}
+
+/** Constructor function.
+ *
+ *	@param a element a (i.e. 1, 1) as described in the svg standard.
+ *	@param b element b (i.e. 2, 1) as described in the svg standard.
+ *	@param c element c (i.e. 1, 2) as described in the svg standard.
+ *	@param d element d (i.e. 2, 2) as described in the svg standard.
+ *	@param e element e (i.e. 1, 3) as described in the svg standard.
+ *	@param f element f (i.e. 2, 3) as described in the svg standard.
+ */
+matrixSVG.prototype.fromSVGElements = function(a, b, c, d, e, f)
+{
+	this.e11 = a;
+	this.e12 = c;
+	this.e13 = e;
+	this.e21 = b;
+	this.e22 = d;
+	this.e23 = f;
+	this.e31 = 0;
+	this.e32 = 0;
+	this.e33 = 1;
+
+	return this;
+}
+
+/** Constructor function.
+ *
+ *	@param matrix an svg matrix as described in the svg standard.
+ */
+matrixSVG.prototype.fromSVGMatrix = function(m)
+{
+	this.e11 = m.a;
+	this.e12 = m.c;
+	this.e13 = m.e;
+	this.e21 = m.b;
+	this.e22 = m.d;
+	this.e23 = m.f;
+	this.e31 = 0;
+	this.e32 = 0;
+	this.e33 = 1;
+
+	return this;
+}
+
+/** Constructor function.
+ *
+ *	@param e11 element 1, 1 of the matrix.
+ *	@param e12 element 1, 2 of the matrix.
+ *	@param e13 element 1, 3 of the matrix.
+ *	@param e21 element 2, 1 of the matrix.
+ *	@param e22 element 2, 2 of the matrix.
+ *	@param e23 element 2, 3 of the matrix.
+ *	@param e31 element 3, 1 of the matrix.
+ *	@param e32 element 3, 2 of the matrix.
+ *	@param e33 element 3, 3 of the matrix.
+ */
+matrixSVG.prototype.fromElements = function(e11, e12, e13, e21, e22, e23, e31, e32, e33)
+{
+	this.e11 = e11;
+	this.e12 = e12;
+	this.e13 = e13;
+	this.e21 = e21;
+	this.e22 = e22;
+	this.e23 = e23;
+	this.e31 = e31;
+	this.e32 = e32;
+	this.e33 = e33;
+
+	return this;
+}
+
+/** Constructor function.
+ *
+ *	@param attrString string value of the &quot;transform&quot; attribute (currently only &quot;matrix&quot; is accepted)
+ */
+matrixSVG.prototype.fromAttribute = function(attrString)
+{
+	str = attrString.substr(7, attrString.length - 8);
+
+	str = str.trim();
+
+	strArray = str.split(&quot;,&quot;);
+
+	// Opera does not use commas to separate the values of the matrix, only spaces.
+	if (strArray.length != 6)
+		strArray = str.split(&quot; &quot;);
+
+	this.e11 = parseFloat(strArray[0]);
+	this.e21 = parseFloat(strArray[1]);
+	this.e31 = 0;
+	this.e12 = parseFloat(strArray[2]);
+	this.e22 = parseFloat(strArray[3]);
+	this.e32 = 0;
+	this.e13 = parseFloat(strArray[4]);
+	this.e23 = parseFloat(strArray[5]);
+	this.e33 = 1;
+
+	return this;
+}
+
+/** Output function
+ *
+ *	@return a string that can be used as the &quot;transform&quot; attribute.
+ */
+matrixSVG.prototype.toAttribute = function()
+{
+	return &quot;matrix(&quot; + this.e11 + &quot;, &quot; + this.e21 + &quot;, &quot; + this.e12 + &quot;, &quot; + this.e22 + &quot;, &quot; + this.e13 + &quot;, &quot; + this.e23 + &quot;)&quot;;
+}
+
+/** Matrix nversion.
+ *
+ *	@return the inverse of the matrix
+ */
+matrixSVG.prototype.inv = function()
+{
+	out = new matrixSVG();
+
+	det = this.e11 * (this.e33 * this.e22 - this.e32 * this.e23) - this.e21 * (this.e33 * this.e12 - this.e32 * this.e13) + this.e31 * (this.e23 * this.e12 - this.e22 * this.e13);
+
+	out.e11 =  (this.e33 * this.e22 - this.e32 * this.e23) / det;
+	out.e12 = -(this.e33 * this.e12 - this.e32 * this.e13) / det;
+	out.e13 =  (this.e23 * this.e12 - this.e22 * this.e13) / det;
+	out.e21 = -(this.e33 * this.e21 - this.e31 * this.e23) / det;
+	out.e22 =  (this.e33 * this.e11 - this.e31 * this.e13) / det;
+	out.e23 = -(this.e23 * this.e11 - this.e21 * this.e13) / det;
+	out.e31 =  (this.e32 * this.e21 - this.e31 * this.e22) / det;
+	out.e32 = -(this.e32 * this.e11 - this.e31 * this.e12) / det;
+	out.e33 =  (this.e22 * this.e11 - this.e21 * this.e12) / det;
+
+	return out;
+}
+
+/** Matrix multiplication.
+ *
+ *	@param op another svg matrix
+ *	@return this * op
+ */
+matrixSVG.prototype.mult = function(op)
+{
+	out = new matrixSVG();
+
+	out.e11 = this.e11 * op.e11 + this.e12 * op.e21 + this.e13 * op.e31;
+	out.e12 = this.e11 * op.e12 + this.e12 * op.e22 + this.e13 * op.e32;
+	out.e13 = this.e11 * op.e13 + this.e12 * op.e23 + this.e13 * op.e33;
+	out.e21 = this.e21 * op.e11 + this.e22 * op.e21 + this.e23 * op.e31;
+	out.e22 = this.e21 * op.e12 + this.e22 * op.e22 + this.e23 * op.e32;
+	out.e23 = this.e21 * op.e13 + this.e22 * op.e23 + this.e23 * op.e33;
+	out.e31 = this.e31 * op.e11 + this.e32 * op.e21 + this.e33 * op.e31;
+	out.e32 = this.e31 * op.e12 + this.e32 * op.e22 + this.e33 * op.e32;
+	out.e33 = this.e31 * op.e13 + this.e32 * op.e23 + this.e33 * op.e33;
+
+	return out;
+}
+
+/** Matrix addition.
+ *
+ *	@param op another svg matrix
+ *	@return this + op
+ */
+matrixSVG.prototype.add = function(op)
+{
+	out = new matrixSVG();
+
+	out.e11 = this.e11 + op.e11;
+	out.e12 = this.e12 + op.e12;
+	out.e13 = this.e13 + op.e13;
+	out.e21 = this.e21 + op.e21;
+	out.e22 = this.e22 + op.e22;
+	out.e23 = this.e23 + op.e23;
+	out.e31 = this.e31 + op.e31;
+	out.e32 = this.e32 + op.e32;
+	out.e33 = this.e33 + op.e33;
+
+	return out;
+}
+
+/** Matrix mixing.
+ *
+ *	@param op another svg matrix
+ *	@parma contribOp contribution of the other matrix (0 &lt;= contribOp &lt;= 1)
+ *	@return (1 - contribOp) * this + contribOp * op
+ */
+matrixSVG.prototype.mix = function(op, contribOp)
+{
+	contribThis = 1.0 - contribOp;
+	out = new matrixSVG();
+
+	out.e11 = contribThis * this.e11 + contribOp * op.e11;
+	out.e12 = contribThis * this.e12 + contribOp * op.e12;
+	out.e13 = contribThis * this.e13 + contribOp * op.e13;
+	out.e21 = contribThis * this.e21 + contribOp * op.e21;
+	out.e22 = contribThis * this.e22 + contribOp * op.e22;
+	out.e23 = contribThis * this.e23 + contribOp * op.e23;
+	out.e31 = contribThis * this.e31 + contribOp * op.e31;
+	out.e32 = contribThis * this.e32 + contribOp * op.e32;
+	out.e33 = contribThis * this.e33 + contribOp * op.e33;
+
+	return out;
+}
+
+/** Trimming function for strings.
+*/
+String.prototype.trim = function()
+{
+	return this.replace(/^\s+|\s+$/g, '');
+}
+
+</script>
+  <ns1:mousehandler
+     ns1:subtype="jessyInk_core_mouseHandler_noclick">
+    <script
+       id="script4951">// Copyright 2008, 2009 Hannes Hochreiner
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program.  If not, see http://www.gnu.org/licenses/.
+
+// Add event listener for initialisation.
+document.addEventListener(&quot;DOMContentLoaded&quot;,  jessyInk_core_mouseHandler_noclick_init, false);
+
+/** Initialisation function.
+ *  
+ *  This function looks for the objects of the appropriate sub-type and hands them to another function that will add the required methods.
+ */
+function jessyInk_core_mouseHandler_noclick_init()
+{
+	var elems = document.getElementsByTagNameNS(&quot;https://launchpad.net/jessyink&quot;, &quot;mousehandler&quot;);
+
+	for (var counter = 0; counter &lt; elems.length; counter++)
+	{
+		if (elems[counter].getAttributeNS(&quot;https://launchpad.net/jessyink&quot;, &quot;subtype&quot;) == &quot;jessyInk_core_mouseHandler_noclick&quot;)
+			jessyInk_core_mouseHandler_noclick(elems[counter]);
+	}
+}
+
+/** Function to initialise an object.
+ *
+ *  @param obj Object to be initialised.
+ */
+function jessyInk_core_mouseHandler_noclick(obj)
+{
+	/** Function supplying a custom mouse handler.
+	 *
+	 *  @returns A dictionary containing the new mouse handler functions.
+	 */
+	obj.getMouseHandler = function ()
+	{
+		var handlerDictio = new Object();
+
+		handlerDictio[SLIDE_MODE] = new Object();
+		handlerDictio[SLIDE_MODE][MOUSE_DOWN] = null;
+
+		return handlerDictio;
+	}
+}
+
+</script>
+  </ns1:mousehandler>
+</svg>
diff --git a/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/xpathaxisdefs.fig b/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/xpathaxisdefs.fig
new file mode 100644
index 0000000000000000000000000000000000000000..4205633f83d4a5bc37b5383bb9ba794616416ccb
--- /dev/null
+++ b/ws/Docbook/Extensions/Tdata/Components/Ref/Fig/xpathaxisdefs.fig
@@ -0,0 +1,82 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+Letter  
+100.00
+Single
+-2
+1200 2
+1 3 0 2 0 7 900 -1 20 0.000 1 0.0000 1980 180 135 135 1980 180 2115 180
+1 3 0 2 0 7 900 -1 20 0.000 1 0.0000 1980 990 135 135 1980 990 2115 990
+1 3 0 2 0 7 900 -1 20 0.000 1 0.0000 855 1845 135 135 855 1845 990 1845
+1 3 0 2 0 7 900 -1 20 0.000 1 0.0000 1530 1845 135 135 1530 1845 1665 1845
+1 3 0 2 0 7 900 -1 20 0.000 1 0.0000 2205 1845 135 135 2205 1845 2340 1845
+1 3 0 2 0 7 50 -1 0 0.000 1 0.0000 1530 1845 64 64 1530 1845 1575 1890
+1 3 0 2 0 7 900 -1 20 0.000 1 0.0000 947 2572 135 135 947 2572 1082 2572
+1 3 0 2 0 7 900 -1 20 0.000 1 0.0000 178 2610 135 135 178 2610 313 2610
+1 3 0 2 0 7 900 -1 20 0.000 1 0.0000 2963 1845 135 135 2963 1845 3098 1845
+1 3 0 2 0 7 900 -1 20 0.000 1 0.0000 1577 2572 135 135 1577 2572 1712 2572
+1 3 0 2 0 7 900 -1 20 0.000 1 0.0000 2251 2565 135 135 2251 2565 2386 2565
+1 3 0 2 0 7 900 -1 20 0.000 1 0.0000 2966 2571 135 135 2966 2571 3101 2571
+1 3 0 2 0 7 900 -1 20 0.000 1 0.0000 184 3278 135 135 184 3278 319 3278
+1 3 0 2 0 7 900 -1 20 0.000 1 0.0000 1575 3285 135 135 1575 3285 1710 3285
+2 1 0 2 0 7 901 -1 -1 0.000 0 0 -1 0 0 2
+	 1980 315 1980 855
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1935 1125 1620 1755
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2025 1125 2160 1710
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1890 1080 945 1755
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2115 1080 2880 1755
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1440 1980 1035 2475
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1530 1980 1575 2430
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1620 1935 2160 2475
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 765 1935 270 2520
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2295 1935 2880 2475
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 180 2745 180 3150
+2 1 0 2 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1575 2745 1575 3150
+2 1 0 2 0 7 4 -1 18 0.000 0 0 -1 1 0 2
+	1 1 2.00 120.00 240.00
+	 647 888 1350 1710
+3 3 0 0 0 7 999 -1 18 0.000 0 0 0 11
+	 1665 675 1710 1035 1800 1215 1980 1305 2160 1215 2295 945
+	 2340 450 2295 90 2160 0 1755 0 1665 360
+	 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
+	 -1.000 -1.000 -1.000
+3 3 0 0 0 7 999 -1 18 0.000 0 0 0 12
+	 1980 1800 2025 1980 2340 2205 2610 2430 2880 2835 3240 2700
+	 3375 2295 3330 1890 3240 1575 2970 1485 2430 1530 2115 1620
+	 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
+	 -1.000 -1.000 -1.000 -1.000
+3 3 0 0 0 7 999 -1 18 0.000 0 0 0 11
+	 1035 2025 810 2205 585 2790 675 3285 450 3555 45 3555
+	 0 3285 0 2340 495 1620 990 1485 1125 1710
+	 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
+	 -1.000 -1.000 -1.000
+3 3 0 0 0 7 999 -1 18 0.000 0 0 0 12
+	 2430 2745 2025 3330 1620 3600 1170 3420 765 2925 720 2520
+	 855 2385 1080 2340 1755 2340 2160 2340 2385 2385 2520 2610
+	 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
+	 -1.000 -1.000 -1.000 -1.000
+3 3 0 0 0 7 999 -1 18 0.000 0 0 0 10
+	 1440 1485 1665 1440 1980 1485 1890 1845 1935 2070 1755 2205
+	 1485 2205 1215 2160 1215 1890 1260 1665
+	 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
+	 -1.000 -1.000
+4 0 0 999 -1 0 12 0.0000 4 180 690 2655 2205 following\001
+4 0 0 999 -1 0 12 0.0000 4 135 870 1620 2970 descendant\001
+4 0 0 999 -1 0 12 0.7854 4 180 735 135 2295 preceding\001
+4 0 0 999 -1 0 12 0.0000 4 105 660 2025 585 ancestor\001
+4 0 0 999 -1 0 12 0.0000 4 135 600 360 630 Context\001
+4 0 0 999 -1 0 12 0.0000 4 135 360 360 855 node\001
+4 0 0 999 -1 0 12 0.4538 4 135 285 1440 1620 self\001
diff --git a/ws/Docbook/Extensions/Tdata/Components/intro.xml b/ws/Docbook/Extensions/Tdata/Components/intro.xml
index 097b5813b043dfb27a01701d6efcabc73cf88f06..dcec7fbb3ca3a55bbb134d8f4ea758e912f16570 100644
--- a/ws/Docbook/Extensions/Tdata/Components/intro.xml
+++ b/ws/Docbook/Extensions/Tdata/Components/intro.xml
@@ -107,7 +107,7 @@
 
     <db:mediaobject>
       <db:imageobject>
-        <db:imagedata fileref="../../../../../Doc/Sda1/Ref/Fig/preceding.fig"
+        <db:imagedata fileref="Ref/Fig/xpathaxisdefs.fig"
                       scale="60"/>
       </db:imageobject>
     </db:mediaobject>
@@ -117,11 +117,11 @@
   screenshot:</db:para>
 
   <db:figure xml:id="xhtmlRendering">
-    <db:title>XSL axis directions</db:title>
+    <db:title>Rendering Html</db:title>
 
     <db:mediaobject>
       <db:imageobject>
-        <db:imagedata fileref="../../../../../Doc/Sda1/Ref/Fig/xhtml.svg"
+        <db:imagedata fileref="Ref/Fig/xhtml.svg"
                       scale="60"/>
       </db:imageobject>
     </db:mediaobject>
diff --git a/ws/Docbook/Extensions/Tdata/Video/Ref/Video/jdbcDriverConfig.webm b/ws/Docbook/Extensions/Tdata/Video/Ref/Video/jdbcDriverConfig.webm
new file mode 100644
index 0000000000000000000000000000000000000000..7f4d075a8af6576bff314c965ecfab306d700902
Binary files /dev/null and b/ws/Docbook/Extensions/Tdata/Video/Ref/Video/jdbcDriverConfig.webm differ
diff --git a/ws/Docbook/Extensions/Tdata/Video/video.xml b/ws/Docbook/Extensions/Tdata/Video/video.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9b2cb8bae115fae17347347cd1e1babf21f20d15
--- /dev/null
+++ b/ws/Docbook/Extensions/Tdata/Video/video.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter version="5.0" xml:id="chapVideo"
+         xmlns="http://docbook.org/ns/docbook"
+         xmlns:xlink="http://www.w3.org/1999/xlink"
+         xmlns:xi="http://www.w3.org/2001/XInclude"
+         xmlns:svg="http://www.w3.org/2000/svg"
+         xmlns:m="http://www.w3.org/1998/Math/MathML"
+         xmlns:html="http://www.w3.org/1999/xhtml"
+         xmlns:db="http://docbook.org/ns/docbook">
+  <title>A sample video</title>
+
+  <figure xml:id="figExampleVideo">
+    <title>Configuring a JDBC Driver</title>
+
+    <mediaobject>
+      <videoobject>
+        <videodata fileref="Ref/Video/jdbcDriverConfig.webm"/>
+      </videoobject>
+    </mediaobject>
+  </figure>
+</chapter>
diff --git a/ws/Docbook/Extensions/Tdata/fig.xml b/ws/Docbook/Extensions/Tdata/fig.xml
index f8247b52d3f57af7060d4b3309beabf3f846b2b5..797e1077f3dcc6241304edd0f558d60746fa8cc3 100644
--- a/ws/Docbook/Extensions/Tdata/fig.xml
+++ b/ws/Docbook/Extensions/Tdata/fig.xml
@@ -1,7 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <book version="5.0" xmlns="http://docbook.org/ns/docbook"
       xmlns:xlink="http://www.w3.org/1999/xlink"
+      xmlns:xila="http://www.w3.org/2001/XInclude/local-attributes"
       xmlns:xi="http://www.w3.org/2001/XInclude"
+      xmlns:trans="http://docbook.org/ns/transclusion"
       xmlns:svg="http://www.w3.org/2000/svg"
       xmlns:m="http://www.w3.org/1998/Math/MathML"
       xmlns:html="http://www.w3.org/1999/xhtml"
@@ -59,4 +61,6 @@
   </chapter>
 
   <xi:include href="Components/exampleSlides.xml" xpointer="element(/1)"/>
+
+  <xi:include href="Video/video.xml" xpointer="element(/1)"/>
 </book>