diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..229128f70596cc58b10e8f4f5c24be8bca1198bf --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,8 @@ +%.png: %.svg + magick -background none -density 300 $< $@ + +doc.pdf: doc.tex diagram1.png + pdflatex $< + +clean: + rm -f doc.pdf *.png diff --git a/doc/diagram1.svg b/doc/diagram1.svg new file mode 100644 index 0000000000000000000000000000000000000000..68c998fb4590fad5209ddea718a26b1d42ab1cdb --- /dev/null +++ b/doc/diagram1.svg @@ -0,0 +1,1236 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="154mm" + height="72mm" + viewBox="0 0 154 72" + version="1.1" + id="svg1" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)" + sodipodi:docname="diagram1.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview1" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" + inkscape:zoom="1.1237919" + inkscape:cx="367.50577" + inkscape:cy="254.49552" + inkscape:window-width="1920" + inkscape:window-height="1056" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="layer1" /> + <defs + id="defs1"> + <marker + style="overflow:visible" + id="marker11" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path11" /> + </marker> + <marker + style="overflow:visible" + id="Triangle" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-4" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-7" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-4-7" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-7-8" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-3" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-1" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-6" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-8" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-4-9" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-7-2" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-4-7-6" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-7-8-6" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-3-4" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-1-9" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-6-7" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-8-1" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-4-9-1" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-7-2-5" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-4-7-6-9" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-7-8-6-7" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-3-4-7" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-1-9-6" /> + </marker> + <marker + style="overflow:visible" + id="marker11-8" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path11-1" /> + </marker> + <marker + style="overflow:visible" + id="marker11-4" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path11-4" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-4-1" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-7-7" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-4-7-5" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-7-8-9" /> + </marker> + <marker + style="overflow:visible" + id="marker11-4-0" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path11-4-4" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-6-7-2" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-8-1-5" /> + </marker> + <marker + style="overflow:visible" + id="Triangle-3-4-7-4" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path135-1-9-6-0" /> + </marker> + <marker + style="overflow:visible" + id="marker11-4-0-2" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="M 5.77,0 -2.88,5 V -5 Z" + id="path11-4-4-2" /> + </marker> + </defs> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="7.6379395" + y="25.892664" + id="text1"><tspan + sodipodi:role="line" + id="tspan1" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="7.6379395" + y="25.892664">0</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="7.5581608" + y="29.486082" + id="text2"><tspan + sodipodi:role="line" + id="tspan2" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="7.5581608" + y="29.486082">1</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="7.4689503" + y="33.743744" + id="text3"><tspan + sodipodi:role="line" + id="tspan3" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="7.4689503" + y="33.743744">2</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="7.3979034" + y="35.216717" + id="text4"><tspan + sodipodi:role="line" + id="tspan4" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="7.3979034" + y="35.216717">.</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="7.3203049" + y="37.374916" + id="text4-5"><tspan + sodipodi:role="line" + id="tspan4-3" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="7.3203049" + y="37.374916">.</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="7.2802982" + y="39.365395" + id="text4-9"><tspan + sodipodi:role="line" + id="tspan4-1" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="7.2802982" + y="39.365395">.</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="6.0922556" + y="46.311333" + id="text3-9"><tspan + sodipodi:role="line" + id="tspan3-3" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="6.0922556" + y="46.311333">15</tspan><tspan + sodipodi:role="line" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="6.0922556" + y="46.311333" + id="tspan5" /></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="6.3131962" + y="43.165623" + id="text3-9-2"><tspan + sodipodi:role="line" + id="tspan3-3-6" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="6.3131962" + y="43.165623">14</tspan><tspan + sodipodi:role="line" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="6.3131962" + y="43.165623" + id="tspan5-1" /></text> + <rect + style="fill:none;stroke:#008800;stroke-width:0.4;stroke-dasharray:none;stroke-opacity:1" + id="rect5" + width="8.0904236" + height="25.541344" + x="3.7644074" + y="22.436989" /> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke-width:0.264583" + x="3.4696991" + y="50.942677" + id="text6"><tspan + sodipodi:role="line" + id="tspan6" + style="stroke-width:0.264583" + x="3.4696991" + y="50.942677">Input</tspan></text> + <ellipse + style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1" + id="path6" + cx="29.734594" + cy="21.317329" + rx="2.8988307" + ry="3.0144806" /> + <path + style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 28.292785,22.559375 1.27661,0.0017 -0.0198,-2.281121 1.490514,-0.0083" + id="path7" + sodipodi:nodetypes="cccc" /> + <ellipse + style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1" + id="path6-2" + cx="29.763655" + cy="29.247892" + rx="2.8988307" + ry="3.0144806" /> + <path + style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 28.321844,30.48994 1.27661,0.0017 -0.0198,-2.281121 1.490514,-0.0083" + id="path7-0" + sodipodi:nodetypes="cccc" /> + <ellipse + style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1" + id="path6-5" + cx="29.82593" + cy="42.134018" + rx="2.8988307" + ry="3.0144806" /> + <path + style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 28.384121,43.376062 1.27661,0.0017 -0.0198,-2.281121 1.490514,-0.0083" + id="path7-9" + sodipodi:nodetypes="cccc" /> + <ellipse + style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1" + id="path6-2-2" + cx="29.85499" + cy="50.064579" + rx="2.8988307" + ry="3.0144806" /> + <path + style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 28.41318,51.306627 1.27661,0.0017 -0.0198,-2.281121 1.490514,-0.0083" + id="path7-0-2" + sodipodi:nodetypes="cccc" /> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="28.856073" + y="37.562904" + id="text4-9-3"><tspan + sodipodi:role="line" + id="tspan4-1-6" + style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="28.856073" + y="37.562904">.</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="28.880926" + y="36.093582" + id="text4-9-31"><tspan + sodipodi:role="line" + id="tspan4-1-9" + style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="28.880926" + y="36.093582">.</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="28.900709" + y="34.401184" + id="text4-9-4"><tspan + sodipodi:role="line" + id="tspan4-1-5" + style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="28.900709" + y="34.401184">.</tspan></text> + <rect + style="fill:none;stroke:#d20000;stroke-width:0.4;stroke-dasharray:none;stroke-opacity:1" + id="rect7" + width="8.9791813" + height="38.987495" + x="25.33943" + y="16.138758" /> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke-width:0.264583" + x="1.9428798" + y="54.100533" + id="text6-4"><tspan + sodipodi:role="line" + id="tspan6-5" + style="stroke-width:0.264583" + x="1.9428798" + y="54.100533"> Token</tspan></text> + <path + style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle)" + d="M 34.260688,34.686484 C 58.476399,-17.638655 -5.9893746,17.929624 26.079417,29.582728" + id="path9" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-4)" + d="M 34.386027,34.6001 C 52.088703,-6.5298165 5.9421701,13.436756 25.977472,20.999474" + id="path9-4" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-4-7)" + d="M 34.261376,34.453507 C 51.964052,77.925966 5.9544101,58.240532 25.989712,50.247082" + id="path9-4-8" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-3)" + d="M 34.497443,35.828631 C 58.713151,92.176744 -5.7526196,53.873827 26.316172,41.324785" + id="path9-9" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke-width:0.264583" + x="23.876474" + y="14.925323" + id="text9"><tspan + sodipodi:role="line" + id="tspan9" + style="stroke-width:0.264583" + x="23.876474" + y="14.925323">Encoder</tspan></text> + <path + style="fill:none;stroke:#006900;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11)" + d="m 13.571556,35.015351 7.95494,-0.09007" + id="path10" /> + <ellipse + style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1" + id="path6-0" + cx="63.779728" + cy="21.88702" + rx="2.8988307" + ry="3.0144806" /> + <path + style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 62.337923,23.129066 1.27661,0.0017 -0.0198,-2.281121 1.49051,-0.0083" + id="path7-4" + sodipodi:nodetypes="cccc" /> + <ellipse + style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1" + id="path6-2-8" + cx="63.808788" + cy="29.817583" + rx="2.8988307" + ry="3.0144806" /> + <path + style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 62.366983,31.059631 1.27661,0.0017 -0.0198,-2.281121 1.49051,-0.0083" + id="path7-0-7" + sodipodi:nodetypes="cccc" /> + <ellipse + style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1" + id="path6-5-1" + cx="63.871059" + cy="42.703709" + rx="2.8988307" + ry="3.0144806" /> + <path + style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 62.429253,43.945753 1.27661,0.0017 -0.0198,-2.281121 1.49052,-0.0083" + id="path7-9-7" + sodipodi:nodetypes="cccc" /> + <ellipse + style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1" + id="path6-2-2-2" + cx="63.90012" + cy="50.63427" + rx="2.8988307" + ry="3.0144806" /> + <path + style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 62.458313,51.876318 1.27661,0.0017 -0.0198,-2.281121 1.49052,-0.0083" + id="path7-0-2-7" + sodipodi:nodetypes="cccc" /> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="62.901203" + y="38.132595" + id="text4-9-3-2"><tspan + sodipodi:role="line" + id="tspan4-1-6-2" + style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="62.901203" + y="38.132595">.</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="62.92606" + y="36.663273" + id="text4-9-31-6"><tspan + sodipodi:role="line" + id="tspan4-1-9-1" + style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="62.92606" + y="36.663273">.</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="62.945843" + y="34.970875" + id="text4-9-4-0"><tspan + sodipodi:role="line" + id="tspan4-1-5-6" + style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="62.945843" + y="34.970875">.</tspan></text> + <rect + style="fill:none;stroke:#d20000;stroke-width:0.4;stroke-dasharray:none;stroke-opacity:1" + id="rect7-1" + width="8.9791813" + height="38.987495" + x="59.384563" + y="16.708448" /> + <path + style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-6)" + d="M 68.305823,35.256175 C 92.52147,-17.068965 28.05576,18.499315 60.124553,30.152419" + id="path9-5" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-4-9)" + d="M 68.431163,35.169791 C 86.133794,-5.9601259 39.987305,14.006447 60.022603,21.569165" + id="path9-4-9" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-4-7-6)" + d="M 68.306513,35.023198 C 86.009147,78.495657 39.999545,58.810223 60.034843,50.816773" + id="path9-4-8-4" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-3-4)" + d="M 68.542583,36.398322 C 92.75822,92.746434 28.292515,54.443518 60.361303,41.894476" + id="path9-9-9" + sodipodi:nodetypes="cc" /> + <ellipse + style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1" + id="path6-0-3" + cx="87.127365" + cy="22.22332" + rx="2.8988307" + ry="3.0144806" /> + <path + style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 85.685527,23.465366 1.276604,0.0017 -0.0198,-2.281121 1.490501,-0.0083" + id="path7-4-6" + sodipodi:nodetypes="cccc" /> + <ellipse + style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1" + id="path6-2-8-5" + cx="87.156448" + cy="30.153883" + rx="2.8988307" + ry="3.0144806" /> + <path + style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 85.714587,31.395931 1.276604,0.0017 -0.0198,-2.281121 1.490501,-0.0083" + id="path7-0-7-6" + sodipodi:nodetypes="cccc" /> + <ellipse + style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1" + id="path6-5-1-3" + cx="87.218704" + cy="43.040009" + rx="2.8988307" + ry="3.0144806" /> + <path + style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 85.776857,44.282053 1.276604,0.0017 -0.0198,-2.281121 1.490511,-0.0083" + id="path7-9-7-9" + sodipodi:nodetypes="cccc" /> + <ellipse + style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1" + id="path6-2-2-2-4" + cx="87.247795" + cy="50.97057" + rx="2.8988307" + ry="3.0144806" /> + <path + style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 85.805917,52.212618 1.276604,0.0017 -0.0198,-2.281121 1.490511,-0.0083" + id="path7-0-2-7-8" + sodipodi:nodetypes="cccc" /> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="86.248848" + y="38.468895" + id="text4-9-3-2-1"><tspan + sodipodi:role="line" + id="tspan4-1-6-2-2" + style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="86.248848" + y="38.468895">.</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="86.273743" + y="36.999573" + id="text4-9-31-6-9"><tspan + sodipodi:role="line" + id="tspan4-1-9-1-3" + style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="86.273743" + y="36.999573">.</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="86.293503" + y="35.307175" + id="text4-9-4-0-9"><tspan + sodipodi:role="line" + id="tspan4-1-5-6-0" + style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="86.293503" + y="35.307175">.</tspan></text> + <rect + style="fill:none;stroke:#d20000;stroke-width:0.4;stroke-dasharray:none;stroke-opacity:1" + id="rect7-1-8" + width="8.9791813" + height="38.987495" + x="82.732224" + y="17.044748" /> + <path + style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-6-7)" + d="m 91.6534,35.592475 c 24.21571,-52.32514 -40.249998,-16.75686 -8.181231,-5.103756" + id="path9-5-8" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-4-9-1)" + d="M 91.77874,35.506091 C 109.48141,-5.6238262 63.334947,14.342747 83.370222,21.905465" + id="path9-4-9-5" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-4-7-6-9)" + d="M 91.65409,35.359498 C 109.35676,78.831957 63.347187,59.146523 83.382462,51.153073" + id="path9-4-8-4-0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-3-4-7)" + d="m 91.89016,36.734622 c 24.2157,56.348112 -40.250003,18.045196 -8.181241,5.496154" + id="path9-9-9-9" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="-31.623243" + y="78.645279" + id="text4-9-3-2-1-5" + transform="rotate(-87.741654)"><tspan + sodipodi:role="line" + id="tspan4-1-6-2-2-6" + style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="-31.623243" + y="78.645279">.</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="-31.598387" + y="77.175957" + id="text4-9-31-6-9-1" + transform="rotate(-87.741654)"><tspan + sodipodi:role="line" + id="tspan4-1-9-1-3-1" + style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="-31.598387" + y="77.175957">.</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="-31.578604" + y="75.483559" + id="text4-9-4-0-9-5" + transform="rotate(-87.741654)"><tspan + sodipodi:role="line" + id="tspan4-1-5-6-0-9" + style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="-31.578604" + y="75.483559">.</tspan></text> + <path + style="fill:none;stroke:#006900;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11-8)" + d="m 70.394644,36.720472 7.95494,-0.09007" + id="path10-3" /> + <rect + style="fill:none;stroke:#e96900;stroke-width:0.765;stroke-dasharray:none;stroke-opacity:1" + id="rect11" + width="53.633163" + height="62.253052" + x="48.202412" + y="5.8771629" /> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke-width:0.264583" + x="48.102909" + y="4.0049152" + id="text11"><tspan + sodipodi:role="line" + id="tspan11" + style="stroke-width:0.264583" + x="48.102909" + y="4.0049152">Hidden Layers</tspan></text> + <path + style="fill:none;stroke:#006900;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11-4)" + d="m 35.276277,35.081711 7.95494,-0.09007" + id="path10-7" /> + <ellipse + style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1" + id="path6-21" + cx="119.69677" + cy="23.787954" + rx="2.8988307" + ry="3.0144806" /> + <path + style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 118.25497,25.030001 1.2766,0.0017 -0.0198,-2.281121 1.49052,-0.0083" + id="path7-7" + sodipodi:nodetypes="cccc" /> + <ellipse + style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1" + id="path6-2-85" + cx="119.72582" + cy="31.718519" + rx="2.8988307" + ry="3.0144806" /> + <path + style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 118.28402,32.960566 1.27661,0.0017 -0.0198,-2.281121 1.49052,-0.0083" + id="path7-0-74" + sodipodi:nodetypes="cccc" /> + <ellipse + style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1" + id="path6-5-18" + cx="119.78809" + cy="44.604645" + rx="2.8988307" + ry="3.0144806" /> + <path + style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 118.3463,45.846688 1.27661,0.0017 -0.0198,-2.281121 1.49051,-0.0083" + id="path7-9-5" + sodipodi:nodetypes="cccc" /> + <ellipse + style="fill:none;stroke:#7e0900;stroke-width:0.714375;stroke-opacity:1" + id="path6-2-2-9" + cx="119.81716" + cy="52.535206" + rx="2.8988307" + ry="3.0144806" /> + <path + style="fill:none;stroke:#7e0900;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 118.37536,53.777253 1.27661,0.0017 -0.0198,-2.281121 1.49051,-0.0083" + id="path7-0-2-75" + sodipodi:nodetypes="cccc" /> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="118.81824" + y="40.033531" + id="text4-9-3-3"><tspan + sodipodi:role="line" + id="tspan4-1-6-8" + style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="118.81824" + y="40.033531">.</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="118.8431" + y="38.564209" + id="text4-9-31-8"><tspan + sodipodi:role="line" + id="tspan4-1-9-3" + style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="118.8431" + y="38.564209">.</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="118.86288" + y="36.871811" + id="text4-9-4-1"><tspan + sodipodi:role="line" + id="tspan4-1-5-8" + style="stroke:#7e0900;stroke-width:0.264583;stroke-opacity:1" + x="118.86288" + y="36.871811">.</tspan></text> + <rect + style="fill:none;stroke:#d20000;stroke-width:0.4;stroke-dasharray:none;stroke-opacity:1" + id="rect7-9" + width="8.9791813" + height="38.987495" + x="115.3016" + y="18.609383" /> + <path + style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-4-1)" + d="M 124.34821,37.070726 C 142.05088,-4.0591904 95.90435,15.907382 115.93965,23.4701" + id="path9-4-6" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-4-7-5)" + d="m 124.22356,36.924133 c 17.70267,43.472459 -28.30697,23.787025 -8.27167,15.793575" + id="path9-4-8-43" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke-width:0.264583" + x="113.83865" + y="17.395948" + id="text9-3"><tspan + sodipodi:role="line" + id="tspan9-3" + style="stroke-width:0.264583" + x="113.83865" + y="17.395948">Deoder</tspan></text> + <path + style="fill:none;stroke:#006900;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11-4-0)" + d="m 103.46286,35.96432 7.95494,-0.09007" + id="path10-7-8" /> + <path + style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-6-7-2)" + d="m 123.90561,37.259309 c 24.21571,-52.325141 -40.249961,-16.75686 -8.18123,-5.103756" + id="path9-5-8-9" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#00e700;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Triangle-3-4-7-4)" + d="m 124.14237,38.401456 c 24.2157,56.348128 -40.249961,18.045196 -8.18124,5.496154" + id="path9-9-9-9-4" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-size:2.7078px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke-width:0.264583" + x="142.72398" + y="48.77063" + id="text12" + transform="scale(0.80470469,1.2426919)"><tspan + sodipodi:role="line" + id="tspan12" + style="stroke-width:0.264583" + x="142.72398" + y="48.77063">(16 neurons)</tspan></text> + <path + style="fill:none;stroke:#006900;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker11-4-0-2)" + d="m 125.80779,36.243908 7.95494,-0.09007" + id="path10-7-8-7" /> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="143.33527" + y="26.631407" + id="text1-8"><tspan + sodipodi:role="line" + id="tspan1-1" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="143.33527" + y="26.631407">0</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="143.25549" + y="30.224825" + id="text2-2"><tspan + sodipodi:role="line" + id="tspan2-8" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="143.25549" + y="30.224825">1</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="143.16628" + y="34.482487" + id="text3-93"><tspan + sodipodi:role="line" + id="tspan3-6" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="143.16628" + y="34.482487">2</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="143.09523" + y="35.95546" + id="text4-8"><tspan + sodipodi:role="line" + id="tspan4-0" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="143.09523" + y="35.95546">.</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="143.01762" + y="38.113659" + id="text4-5-2"><tspan + sodipodi:role="line" + id="tspan4-3-1" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="143.01762" + y="38.113659">.</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="142.97763" + y="40.104137" + id="text4-9-0"><tspan + sodipodi:role="line" + id="tspan4-1-51" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="142.97763" + y="40.104137">.</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="141.78958" + y="47.050076" + id="text3-9-1"><tspan + sodipodi:role="line" + id="tspan3-3-0" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="141.78958" + y="47.050076">15</tspan><tspan + sodipodi:role="line" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="141.78958" + y="47.050076" + id="tspan5-8" /></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="142.01053" + y="43.904366" + id="text3-9-2-5"><tspan + sodipodi:role="line" + id="tspan3-3-6-0" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="142.01053" + y="43.904366">14</tspan><tspan + sodipodi:role="line" + style="stroke:none;stroke-width:0.264583;stroke-opacity:1" + x="142.01053" + y="43.904366" + id="tspan5-1-6" /></text> + <rect + style="fill:none;stroke:#f02400;stroke-width:0.4;stroke-dasharray:none;stroke-opacity:1" + id="rect5-4" + width="8.0904236" + height="25.541344" + x="139.46173" + y="23.17573" /> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke-width:0.264583" + x="139.16702" + y="51.681419" + id="text6-6"><tspan + sodipodi:role="line" + id="tspan6-2" + style="stroke-width:0.264583" + x="139.16702" + y="51.681419">Output</tspan></text> + <text + xml:space="preserve" + style="font-size:4.23333px;line-height:0;font-family:'Classic Console';-inkscape-font-specification:'Classic Console';stroke-width:0.264583" + x="137.6402" + y="54.839275" + id="text6-4-5"><tspan + sodipodi:role="line" + id="tspan6-5-8" + style="stroke-width:0.264583" + x="137.6402" + y="54.839275"> Token</tspan></text> + </g> +</svg> diff --git a/doc/doc.tex b/doc/doc.tex new file mode 100644 index 0000000000000000000000000000000000000000..ac0266678aa3afad664ca376249c2208f68041fb --- /dev/null +++ b/doc/doc.tex @@ -0,0 +1,89 @@ +\documentclass{article} +\usepackage[a4paper, margin=2cm]{geometry} +\usepackage{graphicx} +\usepackage{lipsum} +\usepackage{graphicx} +\usepackage{hyperref} +\usepackage[most]{tcolorbox} + +\begin{document} + \setlength{\parindent}{0pt} + + % Title Page + \begin{titlepage} + \centering + + {\Huge \bfseries Personal GPT\par} + + \vspace{10pt} + + {\Large \bfseries A Recurrent Neural Network on chip\par} + + \vspace{10pt} + + \textbf{Authors:}\\ + David Lanzendörfer + %David Lanzendörfer, Hernani Marques + + \vspace{10pt} + + %\textbf{Contributors:}\\ + %Crow + + \vspace{10pt} + + \textbf{Date:}\\ + \today + + \vspace{10pt} + + %\includegraphics[width=300pt]{img/sydney1.jpeg} + + \vspace{10pt} + + \textbf{Institution or Organization:}\\ + Freedom Club + + \vspace{10pt} + + \textbf{Contact Information:}\\ + leviathan@libresilicon.com + + \end{titlepage} + + \begin{abstract} + \setlength{\parindent}{0pt} + In the past couple of years generative AI has received a lot of attention and is getting increased traction in various fields, being used for generating audio, video, image and text. + However, current day AI solutions are centrally hosted and the generation is being done by transformers running distributed on a huge array of GPUs. + This solution has many drawbacks, mainly the power consumption which comes from such a large set of GPUs, but it also is a problem when it comes to privacy. + All the inference requests have to be forwarded to those server farms and it's not certain what the operator will do with the logs of the inference requests. + Considering that OpenAI is an American company and as such subject to FISA, it makes it impossible for public administration offices like the European federal bureaucracies to use ChatGPT, despite its potential benefits and decrease in inefficiencies it would offer to government administration processes which are well known to be inherently inefficient by nature. + Personal GPT addresses those problems by packing a Large Language Model onto a chip which can be attached to a computer over USB and can generate text without the need of an internet connection. + All the data, confidential or not, stays within your own four walls. + \end{abstract} + + \section{Introduction} + The Personal GPT architecture consists of three types of layers: + \begin{enumerate} + \item The Input layer, also known as the encoder + \item The Hidden layers, where all the parameters for the knowledge are being stored + \item The Output layer, also known as the decoder, which maps the positional vector provided by the hidden network back to a token. + \end{enumerate} + + \begin{figure}[h] + \begin{tcolorbox} + \center + \includegraphics[width=400pt]{diagram1.png} + \caption{General diagram} + \end{tcolorbox} + \end{figure} + + \subsection{Encoder Layer} + The encoder layer is composed of a configurable amount of input perceptrons, which are wired in a recurrent neural network configuration. + In this RNN configuration, the neuron does not only contain input synapses for the 16 input token bits (the token space of the GPT2 tokenizer) but also an input bit array containing the last encoded positional vector. + This way, the positional encoding becomes a continuous time series. + + \subsection{Hidden Layer} + \subsection{Decoder Layer} + +\end{document} \ No newline at end of file