<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on Uint1</title>
    <link>https://uint.one/posts/</link>
    <description>Recent content in Posts on Uint1</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Thu, 07 Mar 2024 14:14:42 +0200</lastBuildDate><atom:link href="https://uint.one/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>All internet over Wireguard using systemd on NixOS</title>
      <link>https://uint.one/posts/all-internet-over-wireguard-using-systemd-networkd-on-nixos/</link>
      <pubDate>Thu, 07 Mar 2024 14:14:42 +0200</pubDate>
      
      <guid>https://uint.one/posts/all-internet-over-wireguard-using-systemd-networkd-on-nixos/</guid>
      <description>&lt;p&gt;To have all internet-bound traffic go out through a Wireguard tunnel&amp;mdash;and if
Wireguard goes down, to not not have any internet-bound traffic leak through
other interfaces&amp;mdash;the easiest option is to use a container with a private
network stack.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>To have all internet-bound traffic go out through a Wireguard tunnel&mdash;and if
Wireguard goes down, to not not have any internet-bound traffic leak through
other interfaces&mdash;the easiest option is to use a container with a private
network stack.</p>
<p>There are two options:</p>
<ol>
<li>You can move the Wireguard interface into the container. This takes some
work to set up and prevents the host from using the interface.</li>
<li>If the host needs connectivity over the same Wireguard tunnel, the host can
create virtual interfaces and perform network address translation (NAT) to
forward traffic to and from the child.</li>
</ol>
<p>I have most confidence in the first option, especially as the surrounding
configuration evolves. You&rsquo;re less likely to subtly break the configuration and
start leaking traffic in the future.</p>
<p>Both options are shown here. NixOS is my preferred system, so I&rsquo;ve specified
the configuration using NixOS here. Translation to a non-NixOS system should be
straightforward.</p>
<h1 id="option-1-move-the-wireguard-interface-into-the-container">Option 1: move the Wireguard interface into the container</h1>
<p>Here we set up Wireguard in a new network namespace and move that namespace
into the container. The Wireguard interface must be created in the main (host)
network namespace and subsequently moved into the new namespace: this allows
Wireguard to communicate with the endpoint over the main network interface.</p>
<p>The following sets up the Wireguard interface in the container as the default
route, and allows some traffic between the LAN and the container through a
virtual ethernet interface. This configuration assumes the host&rsquo;s main network
interface is called <code>enp3s0</code>.</p>
<p><em>systemd-networkd</em> does not yet provide the required tools to do this. Instead,
this configuration defines <em>systemd</em> units to perform the network setup.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-nix" data-lang="nix"><span class="line"><span class="cl"><span class="p">{</span> <span class="n">lib</span><span class="o">,</span> <span class="n">pkgs</span><span class="o">,</span> <span class="o">...</span> <span class="p">}:</span>
</span></span><span class="line"><span class="cl"><span class="k">let</span>
</span></span><span class="line"><span class="cl">  <span class="n">wgIpv4</span> <span class="o">=</span> <span class="s2">&#34;1.2.3.4&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">wgIpv6</span> <span class="o">=</span> <span class="s2">&#34;1:2:3:4::0&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="n">natIpv4Host</span> <span class="o">=</span> <span class="s2">&#34;192.168.10.10&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">natIpv4Ns</span> <span class="o">=</span> <span class="s2">&#34;192.168.10.11&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">in</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="n">networking</span><span class="o">.</span><span class="n">useDHCP</span> <span class="o">=</span> <span class="no">false</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">networking</span><span class="o">.</span><span class="n">interfaces</span><span class="o">.</span><span class="s2">&#34;enp3s0&#34;</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">useDHCP</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="n">environment</span><span class="o">.</span><span class="n">etc</span><span class="o">.</span><span class="s2">&#34;netns-wgns-wg-ips&#34;</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="s1">&#39;&#39;
</span></span></span><span class="line"><span class="cl"><span class="s1">    IPV4=</span><span class="si">${</span><span class="n">wgIpv4</span><span class="si">}</span><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">    IPV6=</span><span class="si">${</span><span class="n">wgIpv6</span><span class="si">}</span><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">  &#39;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">environment</span><span class="o">.</span><span class="n">etc</span><span class="o">.</span><span class="s2">&#34;netns-wgns-veth-ips&#34;</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="s1">&#39;&#39;
</span></span></span><span class="line"><span class="cl"><span class="s1">    IPV4_HOST=</span><span class="si">${</span><span class="n">natIpv4Host</span><span class="si">}</span><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">    IPV4_NS=</span><span class="si">${</span><span class="n">natIpv4Ns</span><span class="si">}</span><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">  &#39;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="n">systemd</span><span class="o">.</span><span class="n">services</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;netns@&#34;</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="n">description</span> <span class="o">=</span> <span class="s2">&#34;%i network namespace&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="n">serviceConfig</span> <span class="o">=</span> <span class="k">with</span> <span class="n">pkgs</span><span class="p">;</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="n">Type</span> <span class="o">=</span> <span class="s2">&#34;oneshot&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">RemainAfterExit</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">ExecStart</span> <span class="o">=</span> <span class="s2">&#34;</span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s2">/bin/ip netns add %i&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">ExecStop</span> <span class="o">=</span> <span class="s2">&#34;</span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s2">/bin/ip netns del %i&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;lo@&#34;</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="n">description</span> <span class="o">=</span> <span class="s2">&#34;loopback in %i network namespace&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="n">bindsTo</span> <span class="o">=</span> <span class="p">[</span> <span class="s2">&#34;netns@.service&#34;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">      <span class="n">after</span> <span class="o">=</span> <span class="p">[</span> <span class="s2">&#34;netns@.service&#34;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="n">serviceConfig</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="n">Type</span> <span class="o">=</span> <span class="s2">&#34;oneshot&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">RemainAfterExit</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">ExecStart</span> <span class="o">=</span>
</span></span><span class="line"><span class="cl">          <span class="k">let</span>
</span></span><span class="line"><span class="cl">            <span class="n">start</span> <span class="o">=</span> <span class="k">with</span> <span class="n">pkgs</span><span class="p">;</span> <span class="n">writeShellScript</span> <span class="s2">&#34;lo-up&#34;</span> <span class="s1">&#39;&#39;
</span></span></span><span class="line"><span class="cl"><span class="s1">              set -e
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip -n $1 addr add 127.0.0.1/8 dev lo
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip -n $1 link set lo up
</span></span></span><span class="line"><span class="cl"><span class="s1">            &#39;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="k">in</span>
</span></span><span class="line"><span class="cl">          <span class="s2">&#34;</span><span class="si">${</span><span class="n">start</span><span class="si">}</span><span class="s2"> %i&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">ExecStopPost</span> <span class="o">=</span> <span class="k">with</span> <span class="n">pkgs</span><span class="p">;</span> <span class="s2">&#34;</span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s2">/bin/ip -n %i link del lo&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># This unit assumes a file named /etc/netns-&lt;network namespace&gt;-veth-ips</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># exists to set IPV4_HOST and IPV4_NS environment variables to valid</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># IPv4 addresses to be used for the two sides of the veth interface.</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;veth@&#34;</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="n">description</span> <span class="o">=</span> <span class="s2">&#34;virtual ethernet network interface between the main and %i network namespaces&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="n">bindsTo</span> <span class="o">=</span> <span class="p">[</span> <span class="s2">&#34;netns@.service&#34;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">      <span class="n">after</span> <span class="o">=</span> <span class="p">[</span> <span class="s2">&#34;netns@.service&#34;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="n">serviceConfig</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="n">Type</span> <span class="o">=</span> <span class="s2">&#34;oneshot&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">RemainAfterExit</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">ExecStart</span> <span class="o">=</span>
</span></span><span class="line"><span class="cl">          <span class="k">let</span>
</span></span><span class="line"><span class="cl">            <span class="n">start</span> <span class="o">=</span> <span class="k">with</span> <span class="n">pkgs</span><span class="p">;</span> <span class="n">writeShellScript</span> <span class="s2">&#34;veth-up&#34;</span> <span class="s1">&#39;&#39;
</span></span></span><span class="line"><span class="cl"><span class="s1">              set -e
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">              . /etc/netns-$1-veth-ips
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">              # As this templated unit potentially has multiple units running
</span></span></span><span class="line"><span class="cl"><span class="s1">              # simultaneously, the interface is created with a unique name in
</span></span></span><span class="line"><span class="cl"><span class="s1">              # the main network namespace, then moved to the new network
</span></span></span><span class="line"><span class="cl"><span class="s1">              # namespace and renamed.
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip link add ve-$1 type veth peer name eth-lan-$1
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip link set eth-lan-$1 netns $1
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip -n $1 link set dev eth-lan-$1 name eth-lan
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip addr add $IPV4_HOST/32 dev ve-$1
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip -n $1 addr add $IPV4_NS/32 dev eth-lan
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip link set ve-$1 up
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip -n $1 link set eth-lan up
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip route add $IPV4_NS/32 dev ve-$1
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip -n $1 route add $IPV4_HOST/32 dev eth-lan
</span></span></span><span class="line"><span class="cl"><span class="s1">            &#39;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="k">in</span>
</span></span><span class="line"><span class="cl">          <span class="s2">&#34;</span><span class="si">${</span><span class="n">start</span><span class="si">}</span><span class="s2"> %i&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">ExecStopPost</span> <span class="o">=</span>
</span></span><span class="line"><span class="cl">          <span class="k">let</span>
</span></span><span class="line"><span class="cl">            <span class="n">stop</span> <span class="o">=</span> <span class="k">with</span> <span class="n">pkgs</span><span class="p">;</span> <span class="n">writeShellScript</span> <span class="s2">&#34;veth-down&#34;</span> <span class="s1">&#39;&#39;
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip -n $1 link del eth-lan
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip link del ve-$1
</span></span></span><span class="line"><span class="cl"><span class="s1">            &#39;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="k">in</span>
</span></span><span class="line"><span class="cl">          <span class="s2">&#34;</span><span class="si">${</span><span class="n">stop</span><span class="si">}</span><span class="s2"> %i&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1"># This unit assumes a Wireguard configuration file exists at</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># /etc/wg-&lt;network namespace&gt;.conf. Note this is a Wireguard configuration</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># file, not a wg-quick configuration file. See &#34;CONFIGURATION FILE FORMAT</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># EXAMPLE&#34; in wg(8).</span>
</span></span><span class="line"><span class="cl">    <span class="c1">#</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># This further assumes a file exists at /etc/netns-&lt;network</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># namespace&gt;-wg-ips to set IPV4 and IPV6 environment variables to valid IP</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># addresses to be used by the Wireguard interface.</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;wg@&#34;</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="n">description</span> <span class="o">=</span> <span class="s2">&#34;wg network interface in %i network namespace&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="n">bindsTo</span> <span class="o">=</span> <span class="p">[</span> <span class="s2">&#34;netns@.service&#34;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">      <span class="n">wants</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;network-online.target&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;nss-lookup.target&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">];</span>
</span></span><span class="line"><span class="cl">      <span class="n">after</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;netns@.service&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;network-online.target&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;nss-lookup.target&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="n">serviceConfig</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="n">Type</span> <span class="o">=</span> <span class="s2">&#34;oneshot&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">RemainAfterExit</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">Restart</span> <span class="o">=</span> <span class="s2">&#34;on-failure&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">RestartSec</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">ExecStart</span> <span class="o">=</span>
</span></span><span class="line"><span class="cl">          <span class="k">let</span>
</span></span><span class="line"><span class="cl">            <span class="n">start</span> <span class="o">=</span> <span class="k">with</span> <span class="n">pkgs</span><span class="p">;</span> <span class="n">writeShellScript</span> <span class="s2">&#34;wg-up&#34;</span> <span class="s1">&#39;&#39;
</span></span></span><span class="line"><span class="cl"><span class="s1">              set -e
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">              . /etc/netns-$1-wg-ips
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">              # As this templated unit potentially has multiple units running
</span></span></span><span class="line"><span class="cl"><span class="s1">              # simultaneously, the interface is created with a unique name in
</span></span></span><span class="line"><span class="cl"><span class="s1">              # the main network namespace, then moved to the new network
</span></span></span><span class="line"><span class="cl"><span class="s1">              # namespace and renamed.
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip link add wg-$1 type wireguard
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip link set wg-$1 netns $1
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip -n $1 link set dev wg-$1 name wg0
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip -n $1 addr add $IPV4 dev wg0
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip -n $1 -6 addr add $IPV6 dev wg0
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip netns exec $1 \
</span></span></span><span class="line"><span class="cl"><span class="s1">                </span><span class="si">${</span><span class="n">wireguard-tools</span><span class="si">}</span><span class="s1">/bin/wg setconf wg0 /etc/wg-$1.conf
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip -n $1 link set wg0 up
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip -n $1 route add default dev wg0
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip -n $1 -6 route add default dev wg0
</span></span></span><span class="line"><span class="cl"><span class="s1">            &#39;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="k">in</span>
</span></span><span class="line"><span class="cl">          <span class="s2">&#34;</span><span class="si">${</span><span class="n">start</span><span class="si">}</span><span class="s2"> %i&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">ExecStopPost</span> <span class="o">=</span>
</span></span><span class="line"><span class="cl">          <span class="k">let</span>
</span></span><span class="line"><span class="cl">            <span class="n">stop</span> <span class="o">=</span> <span class="k">with</span> <span class="n">pkgs</span><span class="p">;</span> <span class="n">writeShellScript</span> <span class="s2">&#34;wg-down&#34;</span> <span class="s1">&#39;&#39;
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip -n $1 route del default dev wg0
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip -n $1 -6 route del default dev wg0
</span></span></span><span class="line"><span class="cl"><span class="s1">              </span><span class="si">${</span><span class="n">iproute</span><span class="si">}</span><span class="s1">/bin/ip -n $1 link del wg0
</span></span></span><span class="line"><span class="cl"><span class="s1">            &#39;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="k">in</span>
</span></span><span class="line"><span class="cl">          <span class="s2">&#34;</span><span class="si">${</span><span class="n">stop</span><span class="si">}</span><span class="s2"> %i&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="p">};</span>
</span></span><span class="line"><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="n">boot</span><span class="o">.</span><span class="n">kernel</span><span class="o">.</span><span class="n">sysctl</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;net.ipv4.ip_forward&#34;</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="cl">  <span class="n">networking</span><span class="o">.</span><span class="n">nftables</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">enable</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">ruleset</span> <span class="o">=</span> <span class="s1">&#39;&#39;
</span></span></span><span class="line"><span class="cl"><span class="s1">      table inet nat {
</span></span></span><span class="line"><span class="cl"><span class="s1">        chain postrouting {
</span></span></span><span class="line"><span class="cl"><span class="s1">          type nat hook postrouting priority 100; policy accept;
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">          iifname &#34;enp3s0&#34; oifname &#34;ve-wgns&#34; masquerade
</span></span></span><span class="line"><span class="cl"><span class="s1">        }
</span></span></span><span class="line"><span class="cl"><span class="s1">        chain prerouting {
</span></span></span><span class="line"><span class="cl"><span class="s1">          type nat hook prerouting priority -100; policy accept;
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">          iifname &#34;enp3s0&#34; tcp dport { ssh, http } dnat ip to </span><span class="si">${</span><span class="n">natIpv4Ns</span><span class="si">}</span><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">        }
</span></span></span><span class="line"><span class="cl"><span class="s1">      }
</span></span></span><span class="line"><span class="cl"><span class="s1">    &#39;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="n">systemd</span><span class="o">.</span><span class="n">services</span><span class="o">.</span><span class="s2">&#34;container@wgcontainer&#34;</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">requires</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;lo@wgns.service&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;veth@wgns.service&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;wg@wgns.service&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="n">after</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;lo@wgns.service&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;veth@wgns.service&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;wg@wgns.service&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">];</span>
</span></span><span class="line"><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="cl">  <span class="n">containers</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">wgcontainer</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="n">specialArgs</span> <span class="o">=</span> <span class="p">{</span> <span class="k">inherit</span> <span class="n">inputs</span><span class="p">;</span> <span class="p">};</span>
</span></span><span class="line"><span class="cl">      <span class="n">autoStart</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="n">extraFlags</span> <span class="o">=</span> <span class="p">[</span> <span class="s2">&#34;--network-namespace-path=/run/netns/wgns&#34;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="n">config</span> <span class="o">=</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="n">networking</span><span class="o">.</span><span class="n">useHostResolvConf</span> <span class="o">=</span> <span class="n">lib</span><span class="o">.</span><span class="n">mkForce</span> <span class="no">false</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">networking</span><span class="o">.</span><span class="n">nameservers</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="c1"># Alternatively, use a DNS server provided by the VPN</span>
</span></span><span class="line"><span class="cl">          <span class="s2">&#34;1.1.1.1&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="s2">&#34;9.9.9.9&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="p">];</span>
</span></span><span class="line"><span class="cl">        <span class="n">networking</span><span class="o">.</span><span class="n">useDHCP</span> <span class="o">=</span> <span class="no">false</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">networking</span><span class="o">.</span><span class="n">useNetworkd</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="n">networking</span><span class="o">.</span><span class="n">firewall</span><span class="o">.</span><span class="n">enable</span> <span class="o">=</span> <span class="no">false</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">networking</span><span class="o">.</span><span class="n">nftables</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">enable</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">ruleset</span> <span class="o">=</span> <span class="s1">&#39;&#39;
</span></span></span><span class="line"><span class="cl"><span class="s1">            table inet filter {
</span></span></span><span class="line"><span class="cl"><span class="s1">              chain output {
</span></span></span><span class="line"><span class="cl"><span class="s1">                # Drop everything by default
</span></span></span><span class="line"><span class="cl"><span class="s1">                type filter hook output priority 100; policy drop;
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">                oif lo accept comment &#34;Accept all packets sent to loopback&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">                oifname &#34;wg0&#34; accept comment &#34;Accept all packets that go out over Wireguard&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">                ct state established,related accept comment &#34;Accept all packets of established traffic&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">              }
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">              chain input {
</span></span></span><span class="line"><span class="cl"><span class="s1">                # Drop everything by default
</span></span></span><span class="line"><span class="cl"><span class="s1">                type filter hook input priority filter; policy drop;
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">                iif lo accept
</span></span></span><span class="line"><span class="cl"><span class="s1">                iif != lo ip daddr 127.0.0.1/8 counter drop comment &#34;drop connections to loopback not coming from loopback&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">                iifname &#34;eth-lan&#34; accept comment &#34;Accept all packets coming from lan&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">                iifname &#34;wg0&#34; tcp dport { 1111, 2222 } accept comment &#34;Accept specific ports coming from Wireguard&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">                ct state established,related accept
</span></span></span><span class="line"><span class="cl"><span class="s1">              }
</span></span></span><span class="line"><span class="cl"><span class="s1">            }
</span></span></span><span class="line"><span class="cl"><span class="s1">          &#39;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="p">};</span>
</span></span><span class="line"><span class="cl">      <span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="p">};</span>
</span></span><span class="line"><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>This configuration defines systemd units to bring up and take down the network
parts required for the container&rsquo;s network. In this configuration the units are
templated (i.e., their name ends with the <code>@</code>-suffix) to allow multiple
Wireguard network namespaces to be created simultaneously. If you&rsquo;d start units
<code>wg@wgns1.service</code> and <code>wg@wgns2.service</code>, two network namespaces would be
created (<code>wgns1</code> and <code>wgns2</code>), each with their own Wireguard interfaces. This
aspect of the configuration might not be necessary for your use-case.</p>
<p>The important details here are:</p>
<ol>
<li>The container is started using
<code>--network-namespace-path=/run/netns/&lt;namespace name&gt;</code> to bind the network
namespace to the container. This makes the namespace unavailable to the host
and sets the namespace up as the main namespace in the container.</li>
<li>The <code>wg@.service</code> unit sets up the Wireguard interface in the main network
namespace and moves it to the namespace to be used by the container. The
interface is set up as the default route.</li>
<li>The <code>veth@.service</code> unit sets up a virtual ethernet interface pair between
the host&rsquo;s main network namespace and the namespace to be used by the
container. This allows communication between the host and the container.
IPv4 forwarding is enabled using sysctl and nftables rules are set up to
destination-NAT some incoming traffic from the host to the container.</li>
<li>The <code>lo@.service</code> unit creates a loopback device in the network namespace.
This is required to allow processes on the container to communicate locally
with other processes on the container using the network stack.</li>
<li>The <code>veth@.service</code> and <code>wg@.service</code> units read some configuration from
disk based on the network namespace name. The units are only passed the
network namespace name as systemd template argument, but need more
configuration information (such as IP addresses and Wireguard configuration
files). If you don&rsquo;t use templated units, the values can be hardcoded
instead.</li>
<li>For hardening, the container&rsquo;s firewall allows outbound traffic to go out of
only the Wireguard interface, except for traffic that is related to earlier
accepted traffic. Incoming LAN traffic is accepted (but only traffic
forwarded by the host can reach the container). The container cannot
initiate LAN connections. It also does not have routes set up to reach other
systems on the host&rsquo;s network.</li>
</ol>
<h1 id="option-2-nat-to-and-from-the-container">Option 2: NAT to and from the container</h1>
<p>This assumes the host&rsquo;s main network interface is called <code>enp3s0</code> and a
Wireguard interface is already set up named <code>wg0</code>. This further assumes the
<code>wg0</code> interface is set as the default route. This configuration ensures
container traffic to the internet only goes out through the Wireguard
interface; the traffic is dropped otherwise. See <a href="https://uint.one/posts/configuring-wireguard-using-systemd-networkd-on-nixos/">here</a> how you might
set up Wireguard on the host.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-nix" data-lang="nix"><span class="line"><span class="cl"><span class="p">{</span> <span class="o">...</span> <span class="p">}:</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="n">boot</span><span class="o">.</span><span class="n">kernel</span><span class="o">.</span><span class="n">sysctl</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;net.ipv4.ip_forward&#34;</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;net.ipv6.ip_forward&#34;</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="cl">  <span class="n">networking</span><span class="o">.</span><span class="n">nftables</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">enable</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">ruleset</span> <span class="o">=</span> <span class="s1">&#39;&#39;
</span></span></span><span class="line"><span class="cl"><span class="s1">      table inet wg-wg0 {
</span></span></span><span class="line"><span class="cl"><span class="s1">        chain forward {
</span></span></span><span class="line"><span class="cl"><span class="s1">          type filter hook forward priority filter; policy drop;
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">          # Dynamically rewrite the TCP max segment size to the MTU discovered on this path
</span></span></span><span class="line"><span class="cl"><span class="s1">          tcp flags syn tcp option maxseg size set rt mtu
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">          iifname &#34;ve-wgcontainer&#34; oifname &#34;wg0&#34; accept
</span></span></span><span class="line"><span class="cl"><span class="s1">          ct state established,related accept comment &#34;Accept all packets of established traffic&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">          ct status dnat accept
</span></span></span><span class="line"><span class="cl"><span class="s1">        }
</span></span></span><span class="line"><span class="cl"><span class="s1">        chain postrouting {
</span></span></span><span class="line"><span class="cl"><span class="s1">          type nat hook postrouting priority 100; policy accept;
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">          iifname &#34;ve-wgcontainer&#34; oifname &#34;wg0&#34; masquerade
</span></span></span><span class="line"><span class="cl"><span class="s1">          iifname &#34;enp3s0&#34; oifname &#34;eth-lan&#34; masquerade
</span></span></span><span class="line"><span class="cl"><span class="s1">        }
</span></span></span><span class="line"><span class="cl"><span class="s1">        chain prerouting {
</span></span></span><span class="line"><span class="cl"><span class="s1">          type nat hook prerouting priority -100; policy accept;
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">          iifname &#34;wg0&#34; meta nfproto ipv4 tcp dport { 1111, 2222 } dnat to 192.168.100.11
</span></span></span><span class="line"><span class="cl"><span class="s1">          iifname &#34;wg0&#34; meta nfproto ipv6 tcp dport { 1111, 2222 } dnat to fc00:100::2
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">          iifname &#34;enp3s0&#34; meta nfproto ipv4 tcp dport { http } dnat to 192.168.105.11
</span></span></span><span class="line"><span class="cl"><span class="s1">        }
</span></span></span><span class="line"><span class="cl"><span class="s1">      }
</span></span></span><span class="line"><span class="cl"><span class="s1">    &#39;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="n">containers</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">wgcontainer</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="n">autoStart</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="n">privateNetwork</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="n">hostAddress</span> <span class="o">=</span> <span class="s2">&#34;192.168.100.10&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="n">localAddress</span> <span class="o">=</span> <span class="s2">&#34;192.168.100.11&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="n">hostAddress6</span> <span class="o">=</span> <span class="s2">&#34;fc00:100::1&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="n">localAddress6</span> <span class="o">=</span> <span class="s2">&#34;fc00:100::2&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="n">extraVeths</span><span class="o">.</span><span class="s2">&#34;eth-lan&#34;</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="n">hostAddress</span> <span class="o">=</span> <span class="s2">&#34;192.168.105.10&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">localAddress</span> <span class="o">=</span> <span class="s2">&#34;192.168.105.11&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="n">config</span> <span class="o">=</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}:</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="n">networking</span><span class="o">.</span><span class="n">firewall</span><span class="o">.</span><span class="n">enable</span> <span class="o">=</span> <span class="no">false</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">networking</span><span class="o">.</span><span class="n">nftables</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">enable</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">tables</span><span class="o">.</span><span class="s2">&#34;nixos-fw&#34;</span><span class="o">.</span><span class="n">enable</span> <span class="o">=</span> <span class="no">false</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="n">ruleset</span> <span class="o">=</span> <span class="s1">&#39;&#39;
</span></span></span><span class="line"><span class="cl"><span class="s1">            table inet filter {
</span></span></span><span class="line"><span class="cl"><span class="s1">              chain output {
</span></span></span><span class="line"><span class="cl"><span class="s1">                # Drop everything by default
</span></span></span><span class="line"><span class="cl"><span class="s1">                type filter hook output priority 100; policy drop;
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">                oif lo accept comment &#34;Accept all packets sent to loopback&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">                oifname &#34;eth0&#34; accept comment &#34;Accept all packets that go out over Wireguard&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">                ct state established,related accept comment &#34;Accept all packets of established traffic&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">              }
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">              chain input {
</span></span></span><span class="line"><span class="cl"><span class="s1">                # Drop everything by default
</span></span></span><span class="line"><span class="cl"><span class="s1">                type filter hook input priority filter; policy drop;
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">                iif lo accept
</span></span></span><span class="line"><span class="cl"><span class="s1">                iif != lo ip daddr 127.0.0.1/8 counter drop comment &#34;drop connections to loopback not coming from loopback&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">                iifname &#34;eth-lan&#34; accept comment &#34;Accept all packets coming from lan&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">                iifname &#34;eth0&#34; tcp dport { 1111, 2222 } accept comment &#34;Accept specific ports coming from Wireguard&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">
</span></span></span><span class="line"><span class="cl"><span class="s1">                ct state established,related accept
</span></span></span><span class="line"><span class="cl"><span class="s1">              }
</span></span></span><span class="line"><span class="cl"><span class="s1">            }
</span></span></span><span class="line"><span class="cl"><span class="s1">          &#39;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="p">};</span>
</span></span><span class="line"><span class="cl">      <span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="p">};</span>
</span></span><span class="line"><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>An interface pair (named <code>eth0</code> on the container and <code>ve-wgcontainer</code> on the
host) is set up by the <code>containers.wgcontainer.{host,local}Address</code> rules. It
is automatically set up as the default route in the container and is used
exclusively to send traffic through the Wireguard tunnel (i.e., to reach the
internet and potentially to reach a network on the other side of the tunnel).
The configuration further sets up <code>eth-lan</code> (identically named on the container
and host) to forward some LAN traffic to the container. In this configuration
the container cannot initiate connections to the LAN; it can only respond to
them.</p>
<p>The important details on the host are:</p>
<ol>
<li>Allow IP forwarding using <code>sysctl</code>. This is required to perform
destination-NAT to the container.</li>
<li>For security, don&rsquo;t forward any traffic by default.</li>
<li>Accept forwarding all traffic coming from the container going out through
Wireguard.</li>
<li>Accept forwarding established/related traffic: this allows forwarding all
traffic necessary for flows that were initiated and accepted earlier.</li>
<li>Accept forwarding destination-NAT&rsquo;ed traffic. All traffic that is explicitly
&ldquo;port-forwarded&rdquo; by destination-NAT rules is accepted.</li>
<li>Masquerade traffic from the container interface <code>ve-wgcontainer</code> to the
Wireguard interface <code>wg0</code>&mdash;this rewrites the source IP address from
192.168.100.11 or fc00:100::2 to the IP on the <code>wg0</code> interface, so the other
side of the tunnel knows where to send responses (it is unaware of this
local network setup). The remote peer will most likely perform its own NAT
on this traffic if it is to reach the internet.</li>
<li>Masquerade traffic from the LAN interface <code>enp3s0</code> to the <code>eth-lan</code>
interface. This pretends all LAN traffic comes from the host, effectively
hiding the LAN from the container. The container has a route set up to the
other side of the <code>eth-lan</code> interface, but only for the host&rsquo;s IP
<code>192.168.105.10</code>.</li>
<li>As an example, forward some traffic from the Wireguard interface addressing
ports 1111 and 2222 to the container, and the HTTP port
(80) is forwarded from the LAN to the container. This enables some specific
traffic that is not initiated by the container itself.</li>
</ol>
<p>The container configuration is simpler. Some hardening is applied:</p>
<ol>
<li>All outgoing traffic is dropped by default. Traffic going to the loopback
interface is allowed, traffic that goes out to the interface that the host
NATs to Wireguard is allowed, and traffic that is established/related to
existing flows is allowed. This means the container cannot initiate any
network connection except for those that go out through Wireguard.</li>
<li>All incoming traffic from the LAN interface is allowed, and some traffic to
ports from the Wireguard interface is allowed. Again, established/related
traffic is allowed.</li>
</ol>]]></content:encoded>
    </item>
    
    <item>
      <title>Configuring Wireguard using systemd-networkd on NixOS</title>
      <link>https://uint.one/posts/configuring-wireguard-using-systemd-networkd-on-nixos/</link>
      <pubDate>Thu, 29 Feb 2024 15:14:01 +0200</pubDate>
      
      <guid>https://uint.one/posts/configuring-wireguard-using-systemd-networkd-on-nixos/</guid>
      <description>&lt;p&gt;Wireguard can be configured manually using &lt;em&gt;systemd-networkd&lt;/em&gt;. This setup
connects the Wireguard tunnel and sets up the necessary IP routes and firewall
rules to send and accept all traffic over the Wireguard interface.&lt;/p&gt;
&lt;p&gt;NixOS is my preferred system, so I&amp;rsquo;ve specified the configuration using NixOS
here. Translation to a non-NixOS system should be straightforward.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Wireguard can be configured manually using <em>systemd-networkd</em>. This setup
connects the Wireguard tunnel and sets up the necessary IP routes and firewall
rules to send and accept all traffic over the Wireguard interface.</p>
<p>NixOS is my preferred system, so I&rsquo;ve specified the configuration using NixOS
here. Translation to a non-NixOS system should be straightforward.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-nix" data-lang="nix"><span class="line"><span class="cl"><span class="p">{</span> <span class="o">...</span> <span class="p">}:</span>
</span></span><span class="line"><span class="cl"><span class="k">let</span>
</span></span><span class="line"><span class="cl">  <span class="c1"># This peer&#39;s IPv4 and IPv6 addresses</span>
</span></span><span class="line"><span class="cl">  <span class="n">wgIpv4</span> <span class="o">=</span> <span class="s2">&#34;1.2.3.4&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">wgIpv6</span> <span class="o">=</span> <span class="s2">&#34;1:2:3:4::&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1"># Variables controlling connection marks and routing tables IDs. You probably</span>
</span></span><span class="line"><span class="cl">  <span class="c1"># don&#39;t need to touch this.</span>
</span></span><span class="line"><span class="cl">  <span class="n">wgFwMark</span> <span class="o">=</span> <span class="mi">4242</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">wgTable</span> <span class="o">=</span> <span class="mi">4000</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">in</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="c1"># DNS is required if the Wireguard endpoint is a hostname.</span>
</span></span><span class="line"><span class="cl">  <span class="n">networking</span><span class="o">.</span><span class="n">nameservers</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;1.1.1.1&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;9.9.9.9&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">];</span>
</span></span><span class="line"><span class="cl">  <span class="n">services</span><span class="o">.</span><span class="n">resolved</span><span class="o">.</span><span class="n">enable</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="n">networking</span><span class="o">.</span><span class="n">useNetworkd</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">systemd</span><span class="o">.</span><span class="n">network</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">enable</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">netdevs</span><span class="o">.</span><span class="s2">&#34;15-wg0&#34;</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="n">netdevConfig</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="n">Kind</span> <span class="o">=</span> <span class="s2">&#34;wireguard&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">Name</span> <span class="o">=</span> <span class="s2">&#34;wg0&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">MTUBytes</span> <span class="o">=</span> <span class="s2">&#34;1420&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="p">};</span>
</span></span><span class="line"><span class="cl">      <span class="n">wireguardConfig</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="n">PrivateKeyFile</span> <span class="o">=</span> <span class="s2">&#34;/path/to/this-peer&#39;s-wg-key&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">FirewallMark</span> <span class="o">=</span> <span class="n">wgFwMark</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">RouteTable</span> <span class="o">=</span> <span class="s2">&#34;off&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="p">};</span>
</span></span><span class="line"><span class="cl">      <span class="n">wireguardPeers</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">wireguardPeerConfig</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="n">PublicKey</span> <span class="o">=</span> <span class="s2">&#34;&lt;The remote peer&#39;s public key here&gt;&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="c1"># Depending on the connection, add a pre-shared key file</span>
</span></span><span class="line"><span class="cl">            <span class="c1"># PresharedKeyFile = &#34;/path/to/preshared-key&#34;;</span>
</span></span><span class="line"><span class="cl">            <span class="n">Endpoint</span> <span class="o">=</span> <span class="s2">&#34;wg.example.com:51820&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="n">AllowedIPs</span> <span class="o">=</span> <span class="p">[</span> <span class="s2">&#34;0.0.0.0/0&#34;</span> <span class="s2">&#34;::/0&#34;</span> <span class="p">];</span>
</span></span><span class="line"><span class="cl">            <span class="n">PersistentKeepalive</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="n">RouteTable</span> <span class="o">=</span> <span class="s2">&#34;off&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="p">};</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">      <span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="n">networks</span><span class="o">.</span><span class="s2">&#34;15-wg0&#34;</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="n">matchConfig</span><span class="o">.</span><span class="n">Name</span> <span class="o">=</span> <span class="s2">&#34;wg0&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="c1"># Set to this peer&#39;s assigned Wireguard address</span>
</span></span><span class="line"><span class="cl">      <span class="n">address</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;</span><span class="si">${</span><span class="n">wgIpv4</span><span class="si">}</span><span class="s2">/32&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;</span><span class="si">${</span><span class="n">wgIpv6</span><span class="si">}</span><span class="s2">/128&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">];</span>
</span></span><span class="line"><span class="cl">      <span class="n">networkConfig</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="c1"># If DNS requests should go to a specific nameserver when the tunnel is</span>
</span></span><span class="line"><span class="cl">        <span class="c1"># established, uncomment this line and set it to the address of that</span>
</span></span><span class="line"><span class="cl">        <span class="c1"># nameserver. But see the note at the bottom of this page.</span>
</span></span><span class="line"><span class="cl">        <span class="c1"># DNS = &#34;1.1.1.1&#34;;</span>
</span></span><span class="line"><span class="cl">      <span class="p">};</span>
</span></span><span class="line"><span class="cl">      <span class="n">routingPolicyRules</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">routingPolicyRuleConfig</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="n">Family</span> <span class="o">=</span> <span class="s2">&#34;both&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="n">Table</span> <span class="o">=</span> <span class="s2">&#34;main&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="n">SuppressPrefixLength</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="n">Priority</span> <span class="o">=</span> <span class="mi">10</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="p">};</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">routingPolicyRuleConfig</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="n">Family</span> <span class="o">=</span> <span class="s2">&#34;both&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="n">InvertRule</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="n">FirewallMark</span> <span class="o">=</span> <span class="n">wgFwMark</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="n">Table</span> <span class="o">=</span> <span class="n">wgTable</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="n">Priority</span> <span class="o">=</span> <span class="mi">11</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="p">};</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">      <span class="p">];</span>
</span></span><span class="line"><span class="cl">      <span class="n">routes</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">routeConfig</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="n">Destination</span> <span class="o">=</span> <span class="s2">&#34;0.0.0.0/0&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="n">Table</span> <span class="o">=</span> <span class="n">wgTable</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="n">Scope</span> <span class="o">=</span> <span class="s2">&#34;link&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="p">};</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="n">routeConfig</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="n">Destination</span> <span class="o">=</span> <span class="s2">&#34;::/0&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="n">Table</span> <span class="o">=</span> <span class="n">wgTable</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">            <span class="n">Scope</span> <span class="o">=</span> <span class="s2">&#34;link&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">          <span class="p">};</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">      <span class="p">];</span>
</span></span><span class="line"><span class="cl">      <span class="n">linkConfig</span><span class="o">.</span><span class="n">RequiredForOnline</span> <span class="o">=</span> <span class="no">false</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">};</span>
</span></span><span class="line"><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="n">networking</span><span class="o">.</span><span class="n">nftables</span> <span class="o">=</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">enable</span> <span class="o">=</span> <span class="no">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">ruleset</span> <span class="o">=</span> <span class="s1">&#39;&#39;
</span></span></span><span class="line"><span class="cl"><span class="s1">      table inet wg-wg0 {
</span></span></span><span class="line"><span class="cl"><span class="s1">        chain preraw {
</span></span></span><span class="line"><span class="cl"><span class="s1">          type filter hook prerouting priority raw; policy accept;
</span></span></span><span class="line"><span class="cl"><span class="s1">          iifname != &#34;wg0&#34; ip daddr </span><span class="si">${</span><span class="n">wgIpv4</span><span class="si">}</span><span class="s1"> fib saddr type != local drop
</span></span></span><span class="line"><span class="cl"><span class="s1">          iifname != &#34;wg0&#34; ip6 daddr </span><span class="si">${</span><span class="n">wgIpv6</span><span class="si">}</span><span class="s1"> fib saddr type != local drop
</span></span></span><span class="line"><span class="cl"><span class="s1">        }
</span></span></span><span class="line"><span class="cl"><span class="s1">        chain premangle {
</span></span></span><span class="line"><span class="cl"><span class="s1">          type filter hook prerouting priority mangle; policy accept;
</span></span></span><span class="line"><span class="cl"><span class="s1">          meta l4proto udp meta mark set ct mark
</span></span></span><span class="line"><span class="cl"><span class="s1">        }
</span></span></span><span class="line"><span class="cl"><span class="s1">        chain postmangle {
</span></span></span><span class="line"><span class="cl"><span class="s1">          type filter hook postrouting priority mangle; policy accept;
</span></span></span><span class="line"><span class="cl"><span class="s1">          meta l4proto udp meta mark </span><span class="si">${</span><span class="nb">toString</span> <span class="n">wgFwMark</span><span class="si">}</span><span class="s1"> ct mark set meta mark
</span></span></span><span class="line"><span class="cl"><span class="s1">        }
</span></span></span><span class="line"><span class="cl"><span class="s1">      }
</span></span></span><span class="line"><span class="cl"><span class="s1">    &#39;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>This configuration is similar to one that the <code>wg-quick</code> utility sets up. There
are a number of important things going on.</p>
<ol>
<li>
<p><code>FirewallMark</code> on the Wireguard config inside the <code>netdev</code> block sets a mark
on packet metainformation outgoing from the Wireguard tunnel. This mark is
used in the routing policy rules: the configuration creates a routing table,
with an associated high-priority routing policy rule, to send all packets
<em>without</em> this mark to the Wireguard interface.</p>
<p>Packets outgoing from the Wireguard interface must be routed to the main
interface to make it to the Wireguard peer: if it were routed to the
Wireguard interface, it would loop forever. Instead, an outgoing Wireguard
packet traverses the routing chain again, and, this time with the mark set
in the metainformation, does not match the routing rule, skips the Wireguard
routing table, and goes out the main, non-tunnel interface.</p>
</li>
<li>
<p>The firewall contains three chains.</p>
<ol>
<li>The preraw chain is a security measure and drops traffic directed
towards the tunnel&rsquo;s IP not coming from either the tunnel or the local
machine.</li>
<li>The postmangle chain checks if the firewall mark Wireguard creates is
set, and if so, sets it on the conntrack flow.</li>
<li>The premangle chain checks if the packet is part of a conntrack flow
that has a mark set. If so, it sets that mark on the packet. Incoming
traffic related to earlier traffic that was marked will now also get
marked.</li>
</ol>
<p>The last two rules are necessary if <a href="https://www.kernel.org/doc/html/latest/networking/ip-sysctl.html?highlight=rp_filter">strict reverse path
forwarding</a>
is set and the <a href="https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation/networking/ip-sysctl.rst?h=v6.1&amp;id=830b3c68c1fb1e9176028d02ef86f3cf76aa2476#n1576">firewall mark is included in reverse path route
lookup</a>.
This corresponds to:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sysctl net.ipv4.conf.&lt;interface&gt;.rp_filter
</span></span><span class="line"><span class="cl">net.ipv4.conf.&lt;interface&gt;.rp_filter <span class="o">=</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ sysctl net.ipv4.conf.&lt;interface&gt;.src_valid_mark
</span></span><span class="line"><span class="cl">net.ipv4.conf.&lt;interface&gt;.src_valid_mark <span class="o">=</span> <span class="m">1</span>
</span></span></code></pre></div><p>If <code>rp_filter</code> is 0 (turned off) or 2 (loose), or if <code>src_valid_mark = 0</code>,
these firewall rules do not need to be set.</p>
</li>
<li>
<p>The MTU is set to 1420. This is the maximum possible MTU when the Wireguard
connection tunnels over IPv6 on an interface with an MTU of 1500.</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 304 89"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>U</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>W</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>6</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='128' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='200' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='256' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='264' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='272' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='52' fill='currentColor' style='font-size:1em'>)</text>
</g>

    </svg>
  
</div>
<p>In case of issues, the MTU can be safely lowered to, for example, 1320. When
tunneling over IPv4&mdash;which <a href="https://en.wikipedia.org/wiki/Internet_Protocol_version_4#Options">almost
always</a>
has a 20 bytes header instead of IPv6&rsquo;s 40 bytes&mdash;the MTU can be increased
to 1440.</p>
</li>
<li>
<p>The high-priority routing policy rule checking paths on the main table with
<code>SuppressPrefixLength = 0</code> is for convenience. It tests the destination IP
against paths in the main table that have a prefix length other than
0&mdash;i.e., any non-default route that matches is taken. This allows outbound
traffic to still reach the LAN.</p>
</li>
</ol>
<p>Notes:</p>
<ul>
<li>
<p>When uncommenting the DNS server, DNS requests can still go out over the
other interfaces. To prevent that, add</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 192 25"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>"</text>
</g>

    </svg>
  
</div>
<p>or</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 120 25"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>~</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>"</text>
</g>

    </svg>
  
</div>
<p>Be aware that in the current version of systemd-networkd (255.2) this causes
a problem if the endpoint is specified as a hostname: the hostname resolve
request for that hostname will go out over the offline Wireguard interface
and will not receive a response.</p>
<p>If you want to make sure all traffic headed to the internet <em>always</em> goes
through the Wireguard tunnel, see here for possible configurations. Routing
rules are not very reliable for that use-case.</p>
</li>
<li>
<p>You can forego explicit configuration of the Wireguard routes when you
remove <code>RouteTable=&quot;off&quot;</code>. You probably still want to add the convenience
routing policy rule matching against non-zero prefix routes in the main
table. I prefer this more explicit approach.</p>
</li>
</ul>
<p>If/when networkd supports specifying network namespaces, a different solution
is possible without routing hacks. See the &ldquo;The New Namespace Solution&rdquo; in
<a href="https://www.wireguard.com/netns/">this article on Wireguard website</a>. There is
a <a href="https://github.com/systemd/systemd/issues/11103">request on the systemd GitHub
repository</a> for the required
functionality.</p>]]></content:encoded>
    </item>
    
    <item>
      <title>xmonad Per-Layout Keybindings</title>
      <link>https://uint.one/posts/xmonad-per-layout-keybindings/</link>
      <pubDate>Mon, 17 Jun 2019 22:10:40 +0200</pubDate>
      
      <guid>https://uint.one/posts/xmonad-per-layout-keybindings/</guid>
      <description>&lt;p&gt;In xmonad it can be useful to have different keybindings for different layouts,
or respond to other events differently depending on the active layout. This can
be accomplished by looking up the active layout in the hook. For this we define
a utility function:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-haskell&#34; data-lang=&#34;haskell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;XMonad&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;qualified&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;XMonad.StackSet&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;S&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;-- Get the name of the active layout.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;getActiveLayoutDescription&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;::&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;X&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;String&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;getActiveLayoutDescription&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;workspaces&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gets&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;windowset&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;description&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;S&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;layout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;S&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;workspace&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;S&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;current&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;workspaces&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <content:encoded><![CDATA[<p>In xmonad it can be useful to have different keybindings for different layouts,
or respond to other events differently depending on the active layout. This can
be accomplished by looking up the active layout in the hook. For this we define
a utility function:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-haskell" data-lang="haskell"><span class="line"><span class="cl"><span class="kr">import</span> <span class="nn">XMonad</span>
</span></span><span class="line"><span class="cl"><span class="kr">import</span> <span class="k">qualified</span> <span class="nn">XMonad.StackSet</span> <span class="k">as</span> <span class="n">S</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">-- Get the name of the active layout.</span>
</span></span><span class="line"><span class="cl"><span class="nf">getActiveLayoutDescription</span> <span class="ow">::</span> <span class="kt">X</span> <span class="kt">String</span>
</span></span><span class="line"><span class="cl"><span class="nf">getActiveLayoutDescription</span> <span class="ow">=</span> <span class="kr">do</span>
</span></span><span class="line"><span class="cl">    <span class="n">workspaces</span> <span class="ow">&lt;-</span> <span class="n">gets</span> <span class="n">windowset</span>
</span></span><span class="line"><span class="cl">    <span class="n">return</span> <span class="o">$</span> <span class="n">description</span> <span class="o">.</span> <span class="kt">S</span><span class="o">.</span><span class="n">layout</span> <span class="o">.</span> <span class="kt">S</span><span class="o">.</span><span class="n">workspace</span> <span class="o">.</span> <span class="kt">S</span><span class="o">.</span><span class="n">current</span> <span class="o">$</span> <span class="n">workspaces</span></span></span></code></pre></div>
<p>We can use this function in keybindings as follows. Here I’m using the
<a href="https://hackage.haskell.org/package/xmonad-contrib-0.15/docs/XMonad-Layout-BinarySpacePartition.html">BinarySpacePartition</a>
layout, and my other layouts are based on
<a href="https://hackage.haskell.org/package/xmonad-0.15/docs/XMonad-Layout.html#t:Tall">Tall</a>.
Depending on whether I have BSP active or not, I send different messages.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-haskell" data-lang="haskell"><span class="line"><span class="cl"><span class="c1">-- ...</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kr">import</span> <span class="nn">XMonad.Layout.BinarySpacePartition</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nf">myKeys</span> <span class="ow">=</span> <span class="p">[</span> <span class="p">((</span><span class="n">mod4Mask</span> <span class="o">.|.</span> <span class="n">shiftMask</span><span class="p">,</span> <span class="n">xK_l</span><span class="p">),</span> <span class="kr">do</span>
</span></span><span class="line"><span class="cl">            <span class="n">layout</span> <span class="ow">&lt;-</span> <span class="n">getActiveLayoutDescription</span>
</span></span><span class="line"><span class="cl">            <span class="kr">case</span> <span class="n">layout</span> <span class="kr">of</span>
</span></span><span class="line"><span class="cl">                <span class="s">&#34;BSP&#34;</span> <span class="ow">-&gt;</span> <span class="n">sendMessage</span> <span class="o">$</span> <span class="kt">ExpandTowards</span> <span class="kt">R</span>
</span></span><span class="line"><span class="cl">                <span class="kr">_</span>     <span class="ow">-&gt;</span> <span class="n">sendMessage</span> <span class="kt">Expand</span>
</span></span><span class="line"><span class="cl">           <span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="p">,</span> <span class="p">((</span><span class="n">mod4Mask</span> <span class="o">.|.</span> <span class="n">shiftMask</span><span class="p">,</span> <span class="n">xK_h</span><span class="p">),</span> <span class="kr">do</span>
</span></span><span class="line"><span class="cl">            <span class="n">layout</span> <span class="ow">&lt;-</span> <span class="n">getActiveLayoutDescription</span>
</span></span><span class="line"><span class="cl">            <span class="kr">case</span> <span class="n">layout</span> <span class="kr">of</span>
</span></span><span class="line"><span class="cl">                <span class="s">&#34;BSP&#34;</span> <span class="ow">-&gt;</span> <span class="n">sendMessage</span> <span class="o">$</span> <span class="kt">ExpandTowards</span> <span class="kt">L</span>
</span></span><span class="line"><span class="cl">                <span class="kr">_</span>     <span class="ow">-&gt;</span> <span class="n">sendMessage</span> <span class="kt">Shrink</span>
</span></span><span class="line"><span class="cl">           <span class="p">)</span>
</span></span><span class="line"><span class="cl">         <span class="p">]</span></span></span></code></pre></div>
<p>Note that you can give your layouts custom names through
<a href="http://hackage.haskell.org/package/xmonad-contrib-0.15/docs/XMonad-Layout-Renamed.html">Renamed</a>.</p>]]></content:encoded>
    </item>
    
    <item>
      <title>Granting Capabilities Using capsh</title>
      <link>https://uint.one/posts/granting-capabilities-using-capsh/</link>
      <pubDate>Thu, 14 Mar 2019 19:30:00 +0200</pubDate>
      
      <guid>https://uint.one/posts/granting-capabilities-using-capsh/</guid>
      <description>&lt;p&gt;On Linux it sometimes is useful to grant privileged capabilities to binaries
without running them as root. Usually this is achieved by setting capabilities
on the file through setcap. However, this has some complications with
environment variables and capabilities inheritance of child processes. We can
use capsh instead of setcap to achieve what we want using ambient capabilities.&lt;/p&gt;
&lt;p&gt;Using setcap, we might add a capability to a file as follows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo setcap cap_net_raw+epi /path/to/wine &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <content:encoded><![CDATA[<p>On Linux it sometimes is useful to grant privileged capabilities to binaries
without running them as root. Usually this is achieved by setting capabilities
on the file through setcap. However, this has some complications with
environment variables and capabilities inheritance of child processes. We can
use capsh instead of setcap to achieve what we want using ambient capabilities.</p>
<p>Using setcap, we might add a capability to a file as follows:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo setcap cap_net_raw+epi /path/to/wine </span></span></code></pre></div>
<p>However, for security reasons, when a file has capabilities set, all insecure
environment variables are removed upon executing it. This includes variables
such as <code>LD_LIBRARY_PATH</code>. Binaries depending on this variable to find dynamic
libraries will fail to execute. This is often the case with OpenGL drivers. I
encountered this when attempting to play a game through Wine that used
ICMP—having set <code>cap_net_raw+epi</code> on the wine binary (or <code>wine-preloader</code>),
OpenGL could no longer be found, resulting in:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">0009:err:wgl:X11DRV_WineGL_InitOpenglInfo  couldn&#39;t initialize OpenGL, expect
</span></span><span class="line"><span class="cl">problems failed to initialise opengl
</span></span></code></pre></div><p>This can be fixed ad-hoc by patching the binary with patchelf and adding the
OpenGL library location, for example:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ patchelf --print-rpath /path/to/wine
</span></span><span class="line"><span class="cl">/some/lib:/some/other/lib
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ <span class="nb">echo</span> <span class="nv">$LD_LIBRARY_PATH</span>
</span></span><span class="line"><span class="cl">/run/opengl-driver/lib:/run/opengl-driver-32/lib
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ patchelf --set-rpath <span class="s2">&#34;/run/opengl-driver/lib:/run/opengl-driver-32/lib:/some/lib:/some/other/lib&#34;</span> /path/to/wine
</span></span></code></pre></div><p>However, it is a pain to do this for all binaries you might want to give
capabilities. The Linux kernel allows ambient capabilities where all child
processes inherit the capabilities implicitly, removing the need to set them on
binaries. Using capsh we can get a shell with ambient capabilities set:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ sudo capsh --caps<span class="o">=</span><span class="s2">&#34;cap_net_raw+eip cap_setpcap,cap_setuid,cap_setgid+ep&#34;</span> --keep<span class="o">=</span><span class="m">1</span> --user<span class="o">=</span>thomas --addamb<span class="o">=</span>cap_net_raw --
</span></span><span class="line"><span class="cl">bash: /root/.bashrc: Permission denied
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ capsh --print
</span></span><span class="line"><span class="cl">capsh --print
</span></span><span class="line"><span class="cl">Current: <span class="o">=</span> cap_net_raw+eip
</span></span><span class="line"><span class="cl">Bounding <span class="nb">set</span> <span class="o">=</span>...
</span></span><span class="line"><span class="cl">Ambient <span class="nb">set</span> <span class="o">=</span>cap_net_raw
</span></span><span class="line"><span class="cl">Securebits: 00/0x0/1<span class="err">&#39;</span>b0
</span></span><span class="line"><span class="cl"> secure-noroot: no <span class="o">(</span>unlocked<span class="o">)</span>
</span></span><span class="line"><span class="cl"> secure-no-suid-fixup: no <span class="o">(</span>unlocked<span class="o">)</span>
</span></span><span class="line"><span class="cl"> secure-keep-caps: no <span class="o">(</span>unlocked<span class="o">)</span>
</span></span><span class="line"><span class="cl"> secure-no-ambient-raise: no <span class="o">(</span>unlocked<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">uid</span><span class="o">=</span>1000<span class="o">(</span>thomas<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">gid</span><span class="o">=</span>100<span class="o">(</span>users<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">groups</span><span class="o">=</span>1<span class="o">(</span>wheel<span class="o">)</span>,57<span class="o">(</span>networkmanager<span class="o">)</span>,100<span class="o">(</span>users<span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ whoami
</span></span><span class="line"><span class="cl">thomas
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ <span class="nb">echo</span> <span class="nv">$USER</span>
</span></span><span class="line"><span class="cl">root</span></span></code></pre></div>
<p>We now have <code>cap_net_raw+eip</code> in our capabilities, and it is also in our
ambient set. Something unfortunate occurs here with environment variables,
though. We are user thomas, but we have inherited the environment variables of
root. This is easily solved. We can export our current environment variables
before performing capsh, and then source them back once in the privileged
shell:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ <span class="nb">export</span> -p &gt; ./savedenv
</span></span><span class="line"><span class="cl">$ sudo capsh --caps<span class="o">=</span><span class="s2">&#34;cap_net_raw+eip cap_setpcap,cap_setuid,cap_setgid+ep&#34;</span> --keep<span class="o">=</span><span class="m">1</span> --user<span class="o">=</span>thomas --addamb<span class="o">=</span>cap_net_raw -- -c <span class="s2">&#34;source ./savedenv; rm ./savedenv; /usr/bin/env bash&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ whoami
</span></span><span class="line"><span class="cl">thomas
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ <span class="nb">echo</span> <span class="nv">$USER</span>
</span></span><span class="line"><span class="cl">thomas</span></span></code></pre></div>
<p>This works, but admittedly the way the environment variables are restored is quite hacky. In any case, you can now launch processes from this shell, and they’ll inherit your capabilities.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ wine ping example.com
</span></span><span class="line"><span class="cl">Pinging example.com <span class="o">[</span>93.184.216.34<span class="o">]</span> with <span class="m">32</span> bytes of data:
</span></span><span class="line"><span class="cl">Reply from 93.184.216.34: <span class="nv">bytes</span><span class="o">=</span><span class="m">32</span> <span class="nv">time</span><span class="o">=</span>87ms <span class="nv">TTL</span><span class="o">=</span><span class="m">57</span>
</span></span><span class="line"><span class="cl">Reply from 93.184.216.34: <span class="nv">bytes</span><span class="o">=</span><span class="m">32</span> <span class="nv">time</span><span class="o">=</span>90ms <span class="nv">TTL</span><span class="o">=</span><span class="m">57</span>
</span></span><span class="line"><span class="cl">Reply from 93.184.216.34: <span class="nv">bytes</span><span class="o">=</span><span class="m">32</span> <span class="nv">time</span><span class="o">=</span>87ms <span class="nv">TTL</span><span class="o">=</span><span class="m">57</span>
</span></span><span class="line"><span class="cl">Reply from 93.184.216.34: <span class="nv">bytes</span><span class="o">=</span><span class="m">32</span> <span class="nv">time</span><span class="o">=</span>89ms <span class="nv">TTL</span><span class="o">=</span><span class="m">57</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Ping statistics <span class="k">for</span> 93.184.216.34
</span></span><span class="line"><span class="cl">	Packets: <span class="nv">Sent</span> <span class="o">=</span> 4, <span class="nv">Received</span> <span class="o">=</span> 4, <span class="nv">Lost</span> <span class="o">=</span> <span class="m">0</span> <span class="o">(</span>0% loss<span class="o">)</span>
</span></span><span class="line"><span class="cl">Approximate round trip <span class="nb">times</span> in milli-seconds:
</span></span><span class="line"><span class="cl">	<span class="nv">Minimum</span> <span class="o">=</span> 87ms, <span class="nv">Maximum</span> <span class="o">=</span> 90ms, <span class="nv">Average</span> <span class="o">=</span> 88ms</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>Using Nix to create R virtual environments</title>
      <link>https://uint.one/posts/using-nix-to-create-r-virtual-environments/</link>
      <pubDate>Sun, 10 Mar 2019 14:41:27 +0000</pubDate>
      
      <guid>https://uint.one/posts/using-nix-to-create-r-virtual-environments/</guid>
      <description>&lt;p&gt;Previously we saw &lt;a href=&#34;https://uint.one/posts/using-nix-to-create-python-virtual-environments/&#34;&gt;how to use Nix to create virtual environments for
Python&lt;/a&gt;. We
can do the same for R. This means we can have different simultaneous R
installations for different projects and keep the installed packages for each
project separated. An important benefit of this is the ability to have
different (incompatible) versions of the same packages for different projects.&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&#34;https://uint.one/posts/using-nix-to-create-r-virtual-environments/nr.png&#34; target=&#34;_blank&#34;&gt;
      &lt;img 
          srcset=&#34;https://uint.one/posts/using-nix-to-create-r-virtual-environments/nr_hu_e4ec93baa8ded711.png 400w,/posts/using-nix-to-create-r-virtual-environments/nr_hu_5c65a1fb3aa36522.png 800w,/posts/using-nix-to-create-r-virtual-environments/nr_hu_af31d17879961ece.png 1200w,/posts/using-nix-to-create-r-virtual-environments/nr.png 1680w &#34;
          loading=&#34;lazy&#34;
          sizes=&#34;auto&#34;
          style=&#34;max-width: calc(min(100%, 1680px))&#34;
          src=&#34;https://uint.one/posts/using-nix-to-create-r-virtual-environments/nr.png&#34; alt=&#34;The logos of Nix and R with a plus symbol&#34;
              width=&#34;350&#34;/&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;p&gt;&lt;/p&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;&lt;p&gt;The straightforward approach is to let Nix handle all R package management.
However, sometimes it is useful to manage packages through the various R tools
such as the built-in install.packages or install utilities provided by the
devtools package.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Previously we saw <a href="https://uint.one/posts/using-nix-to-create-python-virtual-environments/">how to use Nix to create virtual environments for
Python</a>. We
can do the same for R. This means we can have different simultaneous R
installations for different projects and keep the installed packages for each
project separated. An important benefit of this is the ability to have
different (incompatible) versions of the same packages for different projects.</p>
<figure>
    <a href="/posts/using-nix-to-create-r-virtual-environments/nr.png" target="_blank">
      <img 
          srcset="/posts/using-nix-to-create-r-virtual-environments/nr_hu_e4ec93baa8ded711.png 400w,/posts/using-nix-to-create-r-virtual-environments/nr_hu_5c65a1fb3aa36522.png 800w,/posts/using-nix-to-create-r-virtual-environments/nr_hu_af31d17879961ece.png 1200w,/posts/using-nix-to-create-r-virtual-environments/nr.png 1680w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 1680px))"
          src="/posts/using-nix-to-create-r-virtual-environments/nr.png" alt="The logos of Nix and R with a plus symbol"
              width="350"/></a>
    <figcaption><p></p></figcaption>
  </figure><p>The straightforward approach is to let Nix handle all R package management.
However, sometimes it is useful to manage packages through the various R tools
such as the built-in install.packages or install utilities provided by the
devtools package.</p>
<p>R looks for installed packages in the R library directories, of which there are
two types: the system library and the user library. By default these package
management tools install packages in the first-specified user library
directory. The user library directories can be specified through the
R_LIBS_USER environment variable. We can use Nix to specify a unique library
directory per project.</p>
<p>For example, create a <code>nix.shell</code> in your project root as follows:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-nix" data-lang="nix"><span class="line"><span class="cl"><span class="k">with</span> <span class="kn">import</span> <span class="sr">&lt;nixpkgs&gt;</span> <span class="p">{};</span>
</span></span><span class="line"><span class="cl"><span class="k">let</span>
</span></span><span class="line"><span class="cl">  <span class="n">my-r</span> <span class="o">=</span> <span class="n">rWrapper</span><span class="o">.</span><span class="n">override</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">packages</span> <span class="o">=</span> <span class="k">with</span> <span class="n">rPackages</span><span class="p">;</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="n">ggplot2</span>
</span></span><span class="line"><span class="cl">      <span class="n">plyr</span>
</span></span><span class="line"><span class="cl">      <span class="n">tidyr</span>
</span></span><span class="line"><span class="cl">      <span class="n">devtools</span>
</span></span><span class="line"><span class="cl">    <span class="p">];</span>
</span></span><span class="line"><span class="cl">  <span class="p">};</span>
</span></span><span class="line"><span class="cl"><span class="k">in</span>
</span></span><span class="line"><span class="cl">  <span class="n">pkgs</span><span class="o">.</span><span class="n">mkShell</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">buildInputs</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="n">bashInteractive</span>
</span></span><span class="line"><span class="cl">      <span class="n">my-r</span>
</span></span><span class="line"><span class="cl">    <span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="n">shellHook</span> <span class="o">=</span> <span class="s1">&#39;&#39;
</span></span></span><span class="line"><span class="cl"><span class="s1">      mkdir -p &#34;$(pwd)/_libs&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">      export R_LIBS_USER=&#34;$(pwd)/_libs&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">    &#39;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span></code></pre></div><p>Activate it in your shell by running <code>$ nix-shell</code>.</p>
<p>This makes available R with <code>ggplot</code>, <code>plyr</code>, <code>tidyr</code> and <code>devtools</code>. It
creates a subdirectory in your project root, <code>_libs</code>, where the project&rsquo;s R
user library is located.</p>]]></content:encoded>
    </item>
    
    <item>
      <title>Using Nix to create Python virtual environments</title>
      <link>https://uint.one/posts/using-nix-to-create-python-virtual-environments/</link>
      <pubDate>Tue, 22 Jan 2019 14:25:55 +0000</pubDate>
      
      <guid>https://uint.one/posts/using-nix-to-create-python-virtual-environments/</guid>
      <description>&lt;p&gt;Nix is a great tool to set up development environments. It allows us to have
simultaneous installations of various versions of tools&amp;mdash;such as
Python&amp;mdash;required for our projects. This means Nix makes it easy to have Python
2.7 installed for one project, and Python 3.6 for another. Projects using the
same Python version can have different Python packages.&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&#34;https://uint.one/posts/using-nix-to-create-python-virtual-environments/np.png&#34; target=&#34;_blank&#34;&gt;
      &lt;img 
          srcset=&#34;https://uint.one/posts/using-nix-to-create-python-virtual-environments/np_hu_db791f4d5dad4c78.png 400w,/posts/using-nix-to-create-python-virtual-environments/np_hu_d1da4fad5c47c9ad.png 800w,/posts/using-nix-to-create-python-virtual-environments/np_hu_11f595c6220b7013.png 1200w,/posts/using-nix-to-create-python-virtual-environments/np.png 1580w &#34;
          loading=&#34;lazy&#34;
          sizes=&#34;auto&#34;
          style=&#34;max-width: calc(min(100%, 1580px))&#34;
          src=&#34;https://uint.one/posts/using-nix-to-create-python-virtual-environments/np.png&#34; alt=&#34;The logos of Nix and Python with a plus symbol&#34;
              width=&#34;350&#34;/&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;p&gt;&lt;/p&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;&lt;p&gt;Of course, Python&amp;rsquo;s VirtualEnv also enables us to do this. Nix, however, is
more powerful. It can handle all our system&amp;rsquo;s packages; not just Python&amp;rsquo;s. This
means it enables us to hold different versions of any dependency. For example,
if one project requires a specific version of OpenCL and another project
requires an incompatible version, VirtualEnv won&amp;rsquo;t help us. Nix will.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Nix is a great tool to set up development environments. It allows us to have
simultaneous installations of various versions of tools&mdash;such as
Python&mdash;required for our projects. This means Nix makes it easy to have Python
2.7 installed for one project, and Python 3.6 for another. Projects using the
same Python version can have different Python packages.</p>
<figure>
    <a href="/posts/using-nix-to-create-python-virtual-environments/np.png" target="_blank">
      <img 
          srcset="/posts/using-nix-to-create-python-virtual-environments/np_hu_db791f4d5dad4c78.png 400w,/posts/using-nix-to-create-python-virtual-environments/np_hu_d1da4fad5c47c9ad.png 800w,/posts/using-nix-to-create-python-virtual-environments/np_hu_11f595c6220b7013.png 1200w,/posts/using-nix-to-create-python-virtual-environments/np.png 1580w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 1580px))"
          src="/posts/using-nix-to-create-python-virtual-environments/np.png" alt="The logos of Nix and Python with a plus symbol"
              width="350"/></a>
    <figcaption><p></p></figcaption>
  </figure><p>Of course, Python&rsquo;s VirtualEnv also enables us to do this. Nix, however, is
more powerful. It can handle all our system&rsquo;s packages; not just Python&rsquo;s. This
means it enables us to hold different versions of any dependency. For example,
if one project requires a specific version of OpenCL and another project
requires an incompatible version, VirtualEnv won&rsquo;t help us. Nix will.</p>
<p>There are many Python packages, and to install one such package through Nix
requires it to be available in the Nix package repository. Understandably, not
all Python packages are packaged for Nix&mdash;and those that are, often are not
the newest version, nor at some other specific version we require.</p>
<p>We can use Nix to provision a Python environment for our project that works
similarly to VirtualEnv&rsquo;s. We can then use pip to handle such per-project
Python dependencies, allowing us to grab Python packages directly from the
regular Python package repositories without going through Nix. This also
allows us to quickly get to work with others&rsquo; Python projects that are not
set up to work with Nix.</p>
<p>We do this by managing Python and pip as Nix dependencies (as well as any any
other Python packages we wish to have managed through Nix, for example those
with system dependencies such as NumPy).</p>
<p>For example, create a nix.shell in your project root as follows:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-nix" data-lang="nix"><span class="line"><span class="cl"><span class="k">with</span> <span class="kn">import</span> <span class="sr">&lt;nixpkgs&gt;</span> <span class="p">{};</span>
</span></span><span class="line"><span class="cl"><span class="k">let</span>
</span></span><span class="line"><span class="cl">  <span class="n">my-python-packages</span> <span class="o">=</span> <span class="n">python-packages</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="n">python-packages</span><span class="o">.</span><span class="n">pip</span>
</span></span><span class="line"><span class="cl">    <span class="n">python-packages</span><span class="o">.</span><span class="n">numpy</span>
</span></span><span class="line"><span class="cl">  <span class="p">];</span>
</span></span><span class="line"><span class="cl">  <span class="n">my-python</span> <span class="o">=</span> <span class="n">python36</span><span class="o">.</span><span class="n">withPackages</span> <span class="n">my-python-packages</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">in</span>
</span></span><span class="line"><span class="cl">  <span class="n">pkgs</span><span class="o">.</span><span class="n">mkShell</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">buildInputs</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="n">bashInteractive</span>
</span></span><span class="line"><span class="cl">      <span class="n">my-python</span>
</span></span><span class="line"><span class="cl">    <span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="n">shellHook</span> <span class="o">=</span> <span class="s1">&#39;&#39;
</span></span></span><span class="line"><span class="cl"><span class="s1">      export PIP_PREFIX=&#34;$(pwd)/_build/pip_packages&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">      export PYTHONPATH=&#34;$(pwd)/_build/pip_packages/lib/python3.6/site-packages:$PYTHONPATH&#34; 
</span></span></span><span class="line"><span class="cl"><span class="s1">      unset SOURCE_DATE_EPOCH
</span></span></span><span class="line"><span class="cl"><span class="s1">    &#39;&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span></code></pre></div><p>Activate it in your shell by running <code>$ nix-shell</code>.</p>
<p>This makes available Python 3.6, pip and NumPy. Environment variable
<code>PIP_PREFIX</code> tells pip to install its packages in subdirectory _build in your
project root&rsquo;s folder. <code>PYTHONPATH</code> is extended with the directory where this
project&rsquo;s pip will now install packages. These environment changes are
necessary because this Python installation lives inside the read-only Nix
store, and pip would not be able to install packages there.</p>
<p>Note that we unset <code>SOURCE_DATE_EPOCH</code>. Nix sets it to a value of 1 for
reproducible builds, causing Python&rsquo;s <code>bdist_wheel</code> to fail as it requires
<code>SOURCE_DATE_EPOCH</code> to correspond to 1980 or later.</p>
<p>You can now use pip as you normally would, such as</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ pip install -r requirements.txt
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>Rust Debug with Breakpoint Support in Visual Studio Code on Windows</title>
      <link>https://uint.one/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/</link>
      <pubDate>Tue, 04 Dec 2018 21:47:23 +0000</pubDate>
      
      <guid>https://uint.one/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/</guid>
      <description>&lt;p&gt;You can debug Rust programs in Visual Studio Code on Windows using LLDB.&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&#34;https://uint.one/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/rust-vscode-debug.gif&#34; target=&#34;_blank&#34;&gt;
      &lt;img 
          srcset=&#34;https://uint.one/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/rust-vscode-debug_hu_8b672c872dae0d44.gif 400w,/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/rust-vscode-debug_hu_72d57adaf17fa987.gif 800w,/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/rust-vscode-debug_hu_8ac4454af9ffd36.gif 1200w,/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/rust-vscode-debug.gif 1210w &#34;
          loading=&#34;lazy&#34;
          sizes=&#34;auto&#34;
          style=&#34;max-width: calc(min(100%, 1210px))&#34;
          src=&#34;https://uint.one/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/rust-vscode-debug.gif&#34; alt=&#34;Debugging Rust in VSCode&#34;/&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;p&gt;&lt;/p&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;&lt;p&gt;On Windows, LLDB only works reliably with 32-bit binaries. As such, this guide will outline how to get debugging working for 32-bit targets.&lt;/p&gt;
&lt;p&gt;To get this working:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install LLDB. You can get it by installing the LLVM tools, but the current official LLVM installer for Windows does not include LLDB. You can get an installer including 32-bit LLDB &lt;a href=&#34;https://github.com/vadimcn/llvm/releases/tag/r313613&#34;&gt;here&lt;/a&gt;. You do not have to add LLDB to your system environment path.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>You can debug Rust programs in Visual Studio Code on Windows using LLDB.</p>
<figure>
    <a href="/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/rust-vscode-debug.gif" target="_blank">
      <img 
          srcset="/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/rust-vscode-debug_hu_8b672c872dae0d44.gif 400w,/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/rust-vscode-debug_hu_72d57adaf17fa987.gif 800w,/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/rust-vscode-debug_hu_8ac4454af9ffd36.gif 1200w,/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/rust-vscode-debug.gif 1210w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 1210px))"
          src="/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/rust-vscode-debug.gif" alt="Debugging Rust in VSCode"/></a>
    <figcaption><p></p></figcaption>
  </figure><p>On Windows, LLDB only works reliably with 32-bit binaries. As such, this guide will outline how to get debugging working for 32-bit targets.</p>
<p>To get this working:</p>
<ol>
<li>
<p>Install LLDB. You can get it by installing the LLVM tools, but the current official LLVM installer for Windows does not include LLDB. You can get an installer including 32-bit LLDB <a href="https://github.com/vadimcn/llvm/releases/tag/r313613">here</a>. You do not have to add LLDB to your system environment path.</p>
</li>
<li>
<p>LLDB requires python35.dll, which which can be downloaded <a href="https://www.python.org/downloads/windows/">here</a>. As we are using a 32-bit version of LLDB, make sure to install the 32-bit version of Python 3.5 as well.You also do not have to add this version of Python to your system environment path.</p>
</li>
<li>
<p>If you do not have it already, install a 32-bit toolchain for Rust. You do not have to make it the default toolchain. In command prompt, execute:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">rustup install stable-i686-pc-windows-gnu
</span></span></code></pre></div><p>To list your currently installed toolchains, excute:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">rustup show
</span></span></code></pre></div></li>
<li>
<p>Install the <a href="https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb">CodeLLDB</a> extension for Visual Studio Code. Restart Visual Studio Code. This enables support for LLDB.</p>
</li>
<li>
<p>If you did not add LLDB or Python 3.5 to your environment path, configure Visual Studio Code so the extension knows where to find them.You should set the LLDB executable to lldb.exe inside the bin folder where you installed LLVM.Set the Path executable environment variable to the folder where you installed 32-bits Python 3.5, followed by ;{$env:Path}. This tells LLDB where to find Python.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;lldb.executable&#34;</span><span class="p">:</span> <span class="s2">&#34;C:\\Path\\To\llvm-6.0.0-r313613\\bin\\lldb.exe&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;lldb.executable_env&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;Path&#34;</span><span class="p">:</span> <span class="s2">&#34;C:\\Path\\To\\Python35;${env:Path}&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><figure>
    <a href="/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/settings-lldb.png" target="_blank">
      <img 
          srcset="/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/settings-lldb_hu_f29ae9be221afb1c.png 400w,/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/settings-lldb.png 639w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 639px))"
          src="/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/settings-lldb.png" alt="Visual Studio Code LLDB user settings"/></a>
    <figcaption><p></p></figcaption>
  </figure></li>
<li>
<p>Add a debug launch configuration for your project. To open the Debug panel, hit Ctrl+Shift+D. Click on the dropdown, and choose “Add configuration…” Choose the LLDB Cargo Launch configuration. The settings depend on our project structure, but the following probably works:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;lldb&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;request&#34;</span><span class="p">:</span> <span class="s2">&#34;launch&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;Debug Cargo LLDB&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;sourceLanguages&#34;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&#34;rust&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;cargo&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;args&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">            <span class="s2">&#34;+stable-i686-pc-windows-gnu&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="s2">&#34;build&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;program&#34;</span><span class="p">:</span> <span class="s2">&#34;${cargo:program}&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;args&#34;</span><span class="p">:</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><figure>
    <a href="/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/launch-settings-lldb-config.png" target="_blank">
      <img 
          srcset="/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/launch-settings-lldb-config_hu_3490d0ea5ffe98d1.png 400w,/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/launch-settings-lldb-config.png 744w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 744px))"
          src="/posts/rust-debug-with-breakpoint-support-in-visual-studio-code-on-windows/launch-settings-lldb-config.png" alt="Visual Studio Code LLDB launch configuration"/></a>
    <figcaption><p></p></figcaption>
  </figure><p>The argument <code>+stable-i686-pc-windows-gnu</code> tells cargo to use this specific 32-bit toolchain to compile your code with, regardless of your current default toolchain. This means you can debug with the 32-bit toolchain without setting it as your default.</p>
<p>If you need to target a specific binary, add <code>&quot;--bin=binary_name&quot;</code> at the end of the cargo.args list.</p>
</li>
<li>
<p>If you want to, you can additionally add <code>&quot;debug.inlineValues&quot;: true</code> to your user or workspace settings to show values inside the editor.</p>
</li>
<li>
<p>Place some breakpoints, then press Debug or hit F5!</p>
</li>
</ol>
]]></content:encoded>
    </item>
    
    <item>
      <title>Closed-Form Rocket Fuel Requirements</title>
      <link>https://uint.one/posts/closed-form-rocket-fuel-requirements/</link>
      <pubDate>Wed, 28 Nov 2018 13:24:02 +0000</pubDate>
      
      <guid>https://uint.one/posts/closed-form-rocket-fuel-requirements/</guid>
      <description>&lt;p&gt;Previously we calculated
&lt;a href=&#34;https://uint.one/posts/escape-velocity-and-how-much-fuel-do-rockets-need/&#34;&gt;the fuel requirements of rockets to reach escape velocity&lt;/a&gt;.
In that calculation, we did not take into account the effect of gravity
during the fuel burn and underestimated the fuel requirements. We improved on
this through a
&lt;a href=&#34;https://uint.one/posts/rocket-fuel-requirements-revisited/&#34;&gt;simulation better approximating reality&lt;/a&gt;.
This simulation takes into
account the force of gravity during the burn, as well as that force weakening
as the rocket increases its distance from Earth, and takes into account the
necessary escape velocity decreasing as the rocket&amp;rsquo;s distance to Earth grows.
A closed-form solution can be found when the burn time is sufficiently small,
allowing the rocket&amp;rsquo;s distance to Earth to be considered constant during the
burn. In effect, this enables us to ignore both the diminishing force of
gravity and decreasing escape velocity. Let&amp;rsquo;s find this closed-form.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Previously we calculated
<a href="https://uint.one/posts/escape-velocity-and-how-much-fuel-do-rockets-need/">the fuel requirements of rockets to reach escape velocity</a>.
In that calculation, we did not take into account the effect of gravity
during the fuel burn and underestimated the fuel requirements. We improved on
this through a
<a href="https://uint.one/posts/rocket-fuel-requirements-revisited/">simulation better approximating reality</a>.
This simulation takes into
account the force of gravity during the burn, as well as that force weakening
as the rocket increases its distance from Earth, and takes into account the
necessary escape velocity decreasing as the rocket&rsquo;s distance to Earth grows.
A closed-form solution can be found when the burn time is sufficiently small,
allowing the rocket&rsquo;s distance to Earth to be considered constant during the
burn. In effect, this enables us to ignore both the diminishing force of
gravity and decreasing escape velocity. Let&rsquo;s find this closed-form.</p>
<p>In the rocket simulation post, we arrived at the following formula:</p>
<div class="katex-eq">
\frac{dv}{dt} = \frac{-v_e dM / dt}{M} - G\frac{M_\oplus}{r^2}
</div>

<p>with <span class="katex-eq">v</span> the rocket velocity, <span class="katex-eq">t</span> the time, <span class="katex-eq">v_e</span> the fuel exhaust velocity, <span class="katex-eq">M</span> the rocket mass, <span class="katex-eq">G</span> the gravitational constant, <span class="katex-eq">M_\oplus</span> the mass of Earth, and <span class="katex-eq">r</span> the distance of the rocket to the center of Earth. Rewriting, we find the instantaneous change in velocity:</p>
<div class="katex-eq">
dv = \frac{-v_e}{M} dM - G\frac{M_\oplus}{r^2} dt
</div>

<p>As in <a href="https://uint.one/posts/the-rocket-equation/">our original derivation of the rocket equation</a>, we take the definite integral of all change terms from the initial to the final situations: <span class="katex-eq">dv</span> is taken from the initial to the final velocity, <span class="katex-eq">dM</span> from the initial to the final mass, and <span class="katex-eq">dt</span> from the initial to the final time:</p>
<div class="katex-eq">
\begin{aligned}
\int_{v_i}^{v_f} dv &= \int_{M_i}^{M_f} \frac{-v_e}{M} dM - \int_{t_i}^{t_f} G\frac{M_\oplus}{r^2} dt \\
\int_{v_i}^{v_f} 1 dv &= -v_e \int_{M_i}^{M_f} \frac{1}{M} dM - G\frac{M_\oplus}{r^2} \int_{t_i}^{t_f} 1 dt \\
v \Bigr\rvert_{v_i}^{v_f} &= -v_e \left( \ln{M} \Bigr\rvert_{M_i}^{M_f} \right) - G\frac{M_\oplus}{r^2} \left( t \Bigr\rvert_{t_i}^{t_f} \right) \\
v_f - v_i &= -v_e \left( \ln{M_f} - \ln{M_i} \right) - G\frac{M_\oplus}{r^2} \left( t_f - t_i \right) \\
\Delta v &= v_e \left( \ln{M_i} - \ln{M_f} \right) - G\frac{M_\oplus}{r^2} \left( t_f - t_i \right) \\
\Delta v &= v_e \ln{\left(\frac{M_i}{M_f}\right)} - G\frac{M_\oplus}{r^2} t_\text{burn}
\end{aligned}
</div>

<p>here <span class="katex-eq">t_\text{burn} = t_f - t_i</span> is the total burn time. To find the fuel requirement, we want the formula for <span class="katex-eq">M_i</span> as a function of <span class="katex-eq">\Delta v</span>. Symbolic equation solvers happily rewrite the formula for us:</p>
<div class="katex-eq">
M_i = -v_e b \cdot
\left.
\text{W}{
\left( - \frac{\exp{\left( \Delta v/v_e - (G\frac{M_\oplus}{r^2} M_f)/(v_e b) \right)} G\frac{M_\oplus}{r^2} M_f }{v_e b} \right)
}
\middle/
\left(G\frac{M_\oplus}{r^2}\right)
\right.
</div>

<p>with <span class="katex-eq">\text{W}{\left(\cdot\right)}</span> the Lambert W function, and <span class="katex-eq">b = -dM/dt</span> such that <span class="katex-eq">t_\text{burn} = \left( M_i - M_f \right) / b</span>.</p>
<p>We use the same values as before: the dry mass of the rocket is <span class="katex-eq">M_f = 2\,000 \text{ kg}</span>, required escape velocity <span class="katex-eq">\Delta v = 1.118 \cdot 10^4 \text{ m/s}</span>, and fuel exhaust <span class="katex-eq">v_e = 5\,000 \text{ m/s}</span>. Plugging this into the equation, We find that the initial mass is <span class="katex-eq">37\,667 \text{ kg}</span>, and so the fuel required is <span class="katex-eq">35\,667 \text{ kg}</span>.</p>
<p>This number is considerably higher than the <span class="katex-eq">24\,500 \text{ kg}</span> found through simulation. And this makes sense: at the end of the simulated burn, the rocket has achieved a height of <span class="katex-eq">600 \text{ km}</span> over sea level. This is 10% of the radius of the Earth. Deceleration due to gravity at that point is <span class="katex-eq">8.2 \text{ m}/\text{s}^2</span>, rather than <span class="katex-eq">9.8 \text{ m}/\text{s}^2</span> at sea level. Furthermore, the necessary escape velocity will have decreased to <span class="katex-eq">10.69 \text{ km/s}</span> from <span class="katex-eq">11.18 \text{ km/s}</span> at sea level. As such, this closed-form approximation is overestimating the fuel requirements by taking those values as constant from sea level at Earth.</p>
<p>This approximation gets more accurate as the rocket&rsquo;s acceleration increases (e.g. through higher burn rates), resulting in lower burn times, thereby making the assumption of constant gravity and escape velocity more valid. Once the burn rate is taken as instantaneous, this approximation yields the same result as the naive rocket equation.</p>
<p>You can try out the equation interactively here. Note that not all parameter combinations make escape velocity achievable.</p>

<script async="" src="//jsfiddle.net/Beskhue/16La80nf/embed/result/"></script>


]]></content:encoded>
    </item>
    
    <item>
      <title>&amp;SPL – Creating a simple imperative programming language</title>
      <link>https://uint.one/posts/spl-creating-a-simple-imperative-programming-language/</link>
      <pubDate>Fri, 18 May 2018 21:11:35 +0000</pubDate>
      
      <guid>https://uint.one/posts/spl-creating-a-simple-imperative-programming-language/</guid>
      <description>&lt;p&gt;&amp;amp;SPL is an acronym for &lt;em&gt;Simple Programming Language&lt;/em&gt;, and is a &lt;em&gt;C&lt;/em&gt;-like imperative programming language, with classes, lists, and tuples. For example, the following code produces the Fibonacci sequence.&lt;/p&gt;



&lt;div class=&#34;goat svg-container &#34;&gt;
  
    &lt;svg
      xmlns=&#34;http://www.w3.org/2000/svg&#34;
      font-family=&#34;Menlo,Lucida Console,monospace&#34;
      
        viewBox=&#34;0 0 264 249&#34;
      &gt;
      &lt;g transform=&#39;translate(8,16)&#39;&gt;
&lt;path d=&#39;M -4,40 L 4,24&#39; fill=&#39;none&#39; stroke=&#39;currentColor&#39;&gt;&lt;/path&gt;
&lt;path d=&#39;M 4,40 L 12,24&#39; fill=&#39;none&#39; stroke=&#39;currentColor&#39;&gt;&lt;/path&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;0&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;#&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;0&#39; y=&#39;52&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;m&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;0&#39; y=&#39;68&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;{&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;0&#39; y=&#39;228&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;}&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;8&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;i&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;8&#39; y=&#39;52&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;a&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;16&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;n&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;16&#39; y=&#39;52&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;i&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;24&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;c&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;24&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;O&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;24&#39; y=&#39;52&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;n&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;32&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;l&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;32&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;u&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;32&#39; y=&#39;84&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;v&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;32&#39; y=&#39;100&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;v&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;32&#39; y=&#39;132&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;w&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;32&#39; y=&#39;212&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;}&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;40&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;u&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;40&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;t&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;40&#39; y=&#39;84&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;a&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;40&#39; y=&#39;100&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;a&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;40&#39; y=&#39;132&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;h&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;48&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;d&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;48&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;p&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;48&#39; y=&#39;84&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;r&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;48&#39; y=&#39;100&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;r&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;48&#39; y=&#39;132&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;i&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;56&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;e&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;56&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;u&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;56&#39; y=&#39;132&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;l&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;64&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;t&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;64&#39; y=&#39;84&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;t&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;64&#39; y=&#39;100&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;t&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;64&#39; y=&#39;132&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;e&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;64&#39; y=&#39;148&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;p&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;64&#39; y=&#39;164&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;v&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;64&#39; y=&#39;180&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;t&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;64&#39; y=&#39;196&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;t&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;72&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;&#34;&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;72&#39; y=&#39;84&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;1&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;72&#39; y=&#39;100&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;2&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;72&#39; y=&#39;132&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;(&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;72&#39; y=&#39;148&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;r&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;72&#39; y=&#39;164&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;a&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;72&#39; y=&#39;180&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;1&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;72&#39; y=&#39;196&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;2&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;80&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;s&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;80&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;t&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;80&#39; y=&#39;132&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;T&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;80&#39; y=&#39;148&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;i&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;80&#39; y=&#39;164&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;r&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;88&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;t&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;88&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;h&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;88&#39; y=&#39;84&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;=&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;88&#39; y=&#39;100&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;=&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;88&#39; y=&#39;132&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;r&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;88&#39; y=&#39;148&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;n&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;88&#39; y=&#39;180&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;=&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;88&#39; y=&#39;196&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;=&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;96&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;d&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;96&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;e&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;96&#39; y=&#39;132&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;u&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;96&#39; y=&#39;148&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;t&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;96&#39; y=&#39;164&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;h&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;104&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;l&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;104&#39; y=&#39;84&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;0&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;104&#39; y=&#39;100&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;1&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;104&#39; y=&#39;132&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;e&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;104&#39; y=&#39;148&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;l&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;104&#39; y=&#39;180&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;t&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;104&#39; y=&#39;196&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;h&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;112&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;i&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;112&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;F&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;112&#39; y=&#39;84&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;;&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;112&#39; y=&#39;100&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;;&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;112&#39; y=&#39;132&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;)&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;112&#39; y=&#39;148&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;n&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;112&#39; y=&#39;164&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;=&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;112&#39; y=&#39;180&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;2&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;112&#39; y=&#39;196&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;;&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;120&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;b&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;120&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;i&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;120&#39; y=&#39;148&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;(&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;120&#39; y=&#39;180&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;;&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;128&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;/&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;128&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;b&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;128&#39; y=&#39;132&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;{&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;128&#39; y=&#39;148&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;t&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;128&#39; y=&#39;164&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;t&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;136&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;s&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;136&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;o&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;136&#39; y=&#39;148&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;2&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;136&#39; y=&#39;164&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;1&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;144&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;t&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;144&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;n&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;144&#39; y=&#39;148&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;)&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;152&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;d&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;152&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;a&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;152&#39; y=&#39;148&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;;&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;152&#39; y=&#39;164&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;+&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;160&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;.&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;160&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;c&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;168&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;s&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;168&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;c&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;168&#39; y=&#39;164&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;t&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;176&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;p&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;176&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;i&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;176&#39; y=&#39;164&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;2&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;184&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;l&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;184&#39; y=&#39;164&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;;&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;192&#39; y=&#39;4&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;&#34;&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;192&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;s&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;200&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;e&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;208&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;q&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;216&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;u&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;224&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;e&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;232&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;n&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;240&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;c&lt;/text&gt;
&lt;text text-anchor=&#39;middle&#39; x=&#39;248&#39; y=&#39;36&#39; fill=&#39;currentColor&#39; style=&#39;font-size:1em&#39;&gt;e&lt;/text&gt;
&lt;/g&gt;

    &lt;/svg&gt;
  
&lt;/div&gt;
&lt;p&gt;The language is formally defined with a context-free grammar and typing rules. In this post an implementation of an &amp;amp;SPL source code compiler implemented in Haskell will be discussed. The compiler compiles the source code into assembly for a Simple Stack Machine [SSM] (&lt;a href=&#34;https://web.archive.org/web/20180511225414/http://www.staff.science.uu.nl/~dijks106/SSM/&#34;&gt;http://www.staff.science.uu.nl/~dijks106/SSM/&lt;/a&gt;) in a four-part process of lexing, parsing, typing and code generation. The source code is available on GitHub.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>&amp;SPL is an acronym for <em>Simple Programming Language</em>, and is a <em>C</em>-like imperative programming language, with classes, lists, and tuples. For example, the following code produces the Fibonacci sequence.</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 264 249"
      >
      <g transform='translate(8,16)'>
<path d='M -4,40 L 4,24' fill='none' stroke='currentColor'></path>
<path d='M 4,40 L 12,24' fill='none' stroke='currentColor'></path>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>#</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='0' y='228' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='32' y='132' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='32' y='212' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='132' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='132' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='56' y='132' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='148' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='64' y='164' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='64' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='72' y='84' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='72' y='100' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='72' y='132' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='180' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='72' y='196' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='132' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='80' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='88' y='100' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='88' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='88' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='180' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='88' y='196' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='132' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='96' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='164' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='104' y='100' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='104' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='104' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='104' y='196' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='112' y='100' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='112' y='132' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='112' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='164' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='112' y='180' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='112' y='196' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='120' y='148' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='120' y='180' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='128' y='132' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='128' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='128' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='148' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='136' y='164' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='148' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='148' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='152' y='164' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='168' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='164' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='184' y='164' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>e</text>
</g>

    </svg>
  
</div>
<p>The language is formally defined with a context-free grammar and typing rules. In this post an implementation of an &amp;SPL source code compiler implemented in Haskell will be discussed. The compiler compiles the source code into assembly for a Simple Stack Machine [SSM] (<a href="https://web.archive.org/web/20180511225414/http://www.staff.science.uu.nl/~dijks106/SSM/">http://www.staff.science.uu.nl/~dijks106/SSM/</a>) in a four-part process of lexing, parsing, typing and code generation. The source code is available on GitHub.</p>
<h1 id="grammar">Grammar</h1>
<p>The &amp;SPL grammar defines the legal syntax of the language. The semantics are only partially defined through the grammar, and are more fully defined through the language typing rules defined in the Typing section.</p>
<p>The context-free grammar is as follows:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 496 873"
      >
      <g transform='translate(8,16)'>
<path d='M 176,160 L 192,160' fill='none' stroke='currentColor'></path>
<path d='M 240,752 L 248,752' fill='none' stroke='currentColor'></path>
<path d='M 168,768 L 184,768' fill='none' stroke='currentColor'></path>
<path d='M 168,800 L 176,800' fill='none' stroke='currentColor'></path>
<path d='M 248,816 L 256,816' fill='none' stroke='currentColor'></path>
<path d='M 176,840 L 192,840' fill='none' stroke='currentColor'></path>
<path d='M 176,856 L 192,856' fill='none' stroke='currentColor'></path>
<path d='M 96,32 L 96,48' fill='none' stroke='currentColor'></path>
<path d='M 96,192 L 96,240' fill='none' stroke='currentColor'></path>
<path d='M 96,272 L 96,304' fill='none' stroke='currentColor'></path>
<path d='M 96,352 L 96,432' fill='none' stroke='currentColor'></path>
<path d='M 96,480 L 96,656' fill='none' stroke='currentColor'></path>
<path d='M 96,736 L 96,784' fill='none' stroke='currentColor'></path>
<path d='M 120,712 L 120,728' fill='none' stroke='currentColor'></path>
<path d='M 120,768 L 120,784' fill='none' stroke='currentColor'></path>
<path d='M 128,712 L 128,728' fill='none' stroke='currentColor'></path>
<path d='M 152,720 L 152,784' fill='none' stroke='currentColor'></path>
<path d='M 168,64 L 168,80' fill='none' stroke='currentColor'></path>
<path d='M 168,768 L 168,784' fill='none' stroke='currentColor'></path>
<path d='M 176,712 L 176,728' fill='none' stroke='currentColor'></path>
<path d='M 176,832 L 176,848' fill='none' stroke='currentColor'></path>
<path d='M 184,768 L 184,784' fill='none' stroke='currentColor'></path>
<path d='M 192,800 L 192,816' fill='none' stroke='currentColor'></path>
<path d='M 192,816 L 192,832' fill='none' stroke='currentColor'></path>
<path d='M 192,832 L 192,848' fill='none' stroke='currentColor'></path>
<path d='M 200,664 L 200,680' fill='none' stroke='currentColor'></path>
<path d='M 208,720 L 208,752' fill='none' stroke='currentColor'></path>
<path d='M 208,832 L 208,848' fill='none' stroke='currentColor'></path>
<path d='M 256,440 L 256,456' fill='none' stroke='currentColor'></path>
<path d='M 264,720 L 264,752' fill='none' stroke='currentColor'></path>
<path d='M 312,672 L 312,688' fill='none' stroke='currentColor'></path>
<path d='M 328,736 L 328,752' fill='none' stroke='currentColor'></path>
<path d='M 328,792 L 328,808' fill='none' stroke='currentColor'></path>
<path d='M 344,736 L 344,752' fill='none' stroke='currentColor'></path>
<path d='M 376,792 L 376,808' fill='none' stroke='currentColor'></path>
<path d='M 384,664 L 384,680' fill='none' stroke='currentColor'></path>
<path d='M 384,736 L 384,752' fill='none' stroke='currentColor'></path>
<path d='M 400,736 L 400,752' fill='none' stroke='currentColor'></path>
<path d='M 176,784 L 184,768' fill='none' stroke='currentColor'></path>
<path d='M 116,504 L 124,520' fill='none' stroke='currentColor'></path>
<path d='M 212,504 L 220,520' fill='none' stroke='currentColor'></path>
<polygon points='200.000000,160.000000 188.000000,154.399994 188.000000,165.600006' fill='currentColor' transform='rotate(0.000000, 192.000000, 160.000000)'></polygon>
<polygon points='240.000000,736.000000 228.000000,730.400024 228.000000,741.599976' fill='currentColor' transform='rotate(180.000000, 232.000000, 736.000000)'></polygon>
<polygon points='296.000000,736.000000 284.000000,730.400024 284.000000,741.599976' fill='currentColor' transform='rotate(0.000000, 288.000000, 736.000000)'></polygon>
<polygon points='360.000000,752.000000 348.000000,746.400024 348.000000,757.599976' fill='currentColor' transform='rotate(180.000000, 352.000000, 752.000000)'></polygon>
<polygon points='368.000000,752.000000 356.000000,746.400024 356.000000,757.599976' fill='currentColor' transform='rotate(180.000000, 360.000000, 752.000000)'></polygon>
<polygon points='416.000000,752.000000 404.000000,746.400024 404.000000,757.599976' fill='currentColor' transform='rotate(0.000000, 408.000000, 752.000000)'></polygon>
<polygon points='424.000000,752.000000 412.000000,746.400024 412.000000,757.599976' fill='currentColor' transform='rotate(0.000000, 416.000000, 752.000000)'></polygon>
<path d='M 152,784 A 16,16 0 0,0 168,800' fill='none' stroke='currentColor'></path>
<path d='M 144,800 A 16,16 0 0,1 128,816' fill='none' stroke='currentColor'></path>
<circle cx='128' cy='784' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='400' cy='800' r='6' stroke='currentColor' fill='currentColor'></circle>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='84' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='132' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='164' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='180' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='260' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='324' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='340' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='452' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='468' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='676' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='692' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='708' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='724' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='804' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='820' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='836' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='852' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='8' y='68' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='8' y='84' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='8' y='132' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='8' y='164' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='8' y='180' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='8' y='260' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='8' y='324' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='8' y='340' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='8' y='452' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='8' y='468' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='8' y='676' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='8' y='692' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='8' y='708' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='8' y='724' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='8' y='804' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='8' y='820' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='8' y='836' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='8' y='852' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='84' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='16' y='132' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='164' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='16' y='180' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='16' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='324' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='16' y='340' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='452' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='16' y='468' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='16' y='676' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='16' y='692' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='16' y='708' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='724' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='804' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='820' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='836' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='852' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='24' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='24' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='24' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='260' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='24' y='324' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='24' y='340' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='24' y='452' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='468' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='676' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='692' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='24' y='708' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='24' y='724' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='24' y='804' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='24' y='820' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='24' y='836' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='852' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='32' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='32' y='164' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='32' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='32' y='324' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='32' y='340' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='32' y='452' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='32' y='468' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='32' y='676' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='32' y='692' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='32' y='708' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='32' y='724' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='32' y='804' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='32' y='820' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='32' y='836' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='164' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='40' y='180' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='40' y='260' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='40' y='324' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='340' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='40' y='468' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='40' y='676' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='40' y='692' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='708' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='40' y='836' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='48' y='132' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='48' y='164' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='48' y='260' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='48' y='324' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='48' y='468' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='676' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='48' y='692' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='48' y='708' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='48' y='836' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='56' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='260' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='56' y='468' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='56' y='692' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='56' y='708' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='56' y='836' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='64' y='84' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='64' y='132' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='64' y='164' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='64' y='260' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='64' y='468' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='692' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='64' y='708' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='64' y='836' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='72' y='132' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='72' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='468' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='80' y='132' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='80' y='260' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='132' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='164' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='180' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='260' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='324' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='340' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='468' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='676' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='692' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='708' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='724' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='804' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='820' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='836' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='852' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='104' y='148' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='100' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='112' y='116' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='132' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='112' y='148' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='112' y='164' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='180' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='212' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='228' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='244' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='260' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='276' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='292' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='308' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='324' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='340' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='356' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='372' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='388' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='404' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='420' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='436' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='452' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='468' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='484' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='500' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='532' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='548' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='580' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='596' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='628' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='644' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='660' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='112' y='676' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='112' y='692' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='708' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='740' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='756' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='804' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='820' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='112' y='836' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='112' y='852' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='120' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='120' y='132' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='120' y='148' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='120' y='164' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='120' y='180' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='120' y='212' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='120' y='228' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='120' y='244' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='120' y='260' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='120' y='276' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='120' y='292' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='120' y='308' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='120' y='324' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='120' y='340' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='120' y='356' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='120' y='372' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='120' y='388' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='120' y='404' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='120' y='420' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='436' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='120' y='452' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='120' y='468' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='120' y='484' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='120' y='500' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='120' y='532' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='120' y='548' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='120' y='580' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='120' y='596' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='120' y='628' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='120' y='644' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='660' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='692' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='120' y='708' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='120' y='740' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='120' y='756' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='120' y='804' fill='currentColor' style='font-size:1em'>!</text>
<text text-anchor='middle' x='120' y='820' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='120' y='836' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='120' y='852' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='128' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='128' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='128' y='100' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='128' y='116' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='128' y='132' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='128' y='164' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='128' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='212' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='128' y='228' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='244' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='128' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='276' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='128' y='292' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='128' y='308' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='128' y='324' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='128' y='340' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='356' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='128' y='372' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='128' y='388' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='128' y='404' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='128' y='420' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='436' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='128' y='452' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='128' y='468' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='128' y='484' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='128' y='500' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='532' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='548' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='128' y='580' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='128' y='596' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='128' y='628' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='644' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='128' y='660' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='692' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='128' y='708' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='128' y='740' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='128' y='756' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='128' y='804' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='128' y='836' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='128' y='852' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='84' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='136' y='100' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='136' y='132' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='136' y='148' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='136' y='164' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='136' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='136' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='244' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='136' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='136' y='276' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='292' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='308' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='324' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='136' y='340' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='136' y='356' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='136' y='372' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='388' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='136' y='404' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='420' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='136' y='452' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='136' y='468' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='136' y='484' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='136' y='500' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='136' y='532' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='136' y='548' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='136' y='580' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='596' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='136' y='628' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='660' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='692' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='136' y='708' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='136' y='740' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='136' y='836' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='136' y='852' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='144' y='100' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='144' y='116' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='144' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='148' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='144' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='144' y='196' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='144' y='212' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='144' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='144' y='260' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='144' y='276' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='144' y='292' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='144' y='308' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='340' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='144' y='372' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='144' y='388' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='144' y='404' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='144' y='420' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='144' y='436' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='144' y='452' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='144' y='484' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='144' y='500' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='144' y='532' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='144' y='548' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='564' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='144' y='580' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='144' y='612' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='144' y='628' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='144' y='644' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='144' y='660' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='708' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='144' y='836' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='852' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='152' y='68' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='152' y='100' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='152' y='116' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='152' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='152' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='164' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='152' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='152' y='196' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='152' y='212' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='152' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='152' y='276' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='152' y='292' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='152' y='308' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='152' y='324' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='152' y='340' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='372' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='404' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='420' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='152' y='436' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='152' y='468' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='152' y='516' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='152' y='532' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='548' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='152' y='564' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='152' y='580' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='612' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='152' y='628' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='152' y='644' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='152' y='660' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='820' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='160' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='164' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='160' y='180' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='160' y='196' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='160' y='212' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='160' y='228' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='160' y='324' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='160' y='340' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='160' y='372' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='160' y='388' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='160' y='404' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='160' y='420' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='436' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='452' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='160' y='468' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='160' y='484' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='160' y='516' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='160' y='532' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='160' y='564' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='160' y='580' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='160' y='612' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='160' y='628' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='160' y='644' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='160' y='676' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='160' y='708' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='160' y='820' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='160' y='836' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='160' y='852' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='100' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='168' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='168' y='132' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='168' y='148' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='168' y='180' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='168' y='196' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='168' y='212' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='168' y='228' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='168' y='324' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='168' y='340' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='168' y='388' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='168' y='404' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='168' y='420' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='168' y='436' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='168' y='452' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='168' y='468' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='168' y='484' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='168' y='516' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='168' y='564' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='168' y='580' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='168' y='612' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='168' y='628' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='168' y='644' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='660' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='168' y='676' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='168' y='740' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='168' y='756' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='168' y='820' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='176' y='100' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='176' y='116' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='176' y='132' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='176' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='176' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='228' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='176' y='324' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='176' y='340' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='176' y='388' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='176' y='404' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='176' y='436' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='452' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='176' y='468' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='484' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='176' y='516' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='176' y='564' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='176' y='580' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='176' y='612' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='176' y='628' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='176' y='644' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='176' y='660' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='176' y='676' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='176' y='708' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='176' y='740' fill='currentColor' style='font-size:1em'>!</text>
<text text-anchor='middle' x='176' y='756' fill='currentColor' style='font-size:1em'>&amp;</text>
<text text-anchor='middle' x='176' y='820' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='184' y='84' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='184' y='100' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='184' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='148' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='184' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='196' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='184' y='212' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='184' y='356' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='184' y='420' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='184' y='436' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='184' y='452' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='184' y='468' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='484' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='184' y='516' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='628' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='184' y='644' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='184' y='660' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='184' y='676' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='184' y='692' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='184' y='708' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='184' y='740' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='184' y='756' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='184' y='820' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='192' y='68' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='192' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='192' y='116' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='192' y='132' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='192' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='192' y='180' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='192' y='324' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='192' y='356' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='192' y='388' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='192' y='404' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='192' y='420' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='192' y='436' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='192' y='452' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='192' y='468' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='192' y='484' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='192' y='516' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='192' y='612' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='192' y='628' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='192' y='644' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='192' y='660' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='192' y='708' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='192' y='740' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='192' y='756' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='200' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='200' y='84' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='200' y='100' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='200' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='200' y='132' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='200' y='148' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='200' y='196' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='200' y='212' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='200' y='324' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='200' y='356' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='200' y='388' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='200' y='404' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='200' y='420' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='200' y='468' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='200' y='612' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='200' y='628' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='200' y='644' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='200' y='660' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='200' y='692' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='200' y='820' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='208' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='208' y='84' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='208' y='100' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='208' y='116' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='208' y='132' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='208' y='148' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='208' y='196' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='208' y='212' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='208' y='324' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='208' y='356' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='208' y='372' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='208' y='388' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='208' y='404' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='208' y='420' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='208' y='436' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='208' y='452' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='208' y='468' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='208' y='612' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='208' y='644' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='208' y='692' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='208' y='708' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='84' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='216' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='216' y='116' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='216' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='164' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='216' y='196' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='216' y='212' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='216' y='324' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='216' y='356' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='216' y='372' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='216' y='388' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='216' y='420' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='216' y='436' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='216' y='452' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='216' y='468' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='216' y='628' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='216' y='644' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='216' y='692' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='216' y='708' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='216' y='788' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='216' y='820' fill='currentColor' style='font-size:1em'>|</text>
<text text-anchor='middle' x='224' y='68' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='224' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='148' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='224' y='164' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='224' y='324' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='224' y='372' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='224' y='388' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='224' y='420' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='224' y='436' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='224' y='452' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='224' y='612' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='224' y='628' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='224' y='644' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='224' y='692' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='224' y='708' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='224' y='724' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='224' y='756' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='224' y='788' fill='currentColor' style='font-size:1em'>%</text>
<text text-anchor='middle' x='224' y='836' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='224' y='852' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='232' y='84' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='232' y='100' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='232' y='116' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='232' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='232' y='148' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='232' y='164' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='232' y='196' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='232' y='324' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='232' y='372' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='232' y='420' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='232' y='452' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='232' y='612' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='232' y='628' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='232' y='644' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='232' y='692' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='232' y='708' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='232' y='724' fill='currentColor' style='font-size:1em'>&amp;</text>
<text text-anchor='middle' x='232' y='756' fill='currentColor' style='font-size:1em'>&amp;</text>
<text text-anchor='middle' x='232' y='788' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='232' y='820' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='232' y='836' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='232' y='852' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='240' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='240' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='240' y='132' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='240' y='148' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='240' y='164' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='240' y='196' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='240' y='324' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='240' y='372' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='240' y='388' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='240' y='452' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='240' y='612' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='240' y='628' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='692' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='708' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='240' y='724' fill='currentColor' style='font-size:1em'>&amp;</text>
<text text-anchor='middle' x='240' y='804' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='240' y='820' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='240' y='836' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='240' y='852' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='248' y='84' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='248' y='100' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='248' y='116' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='248' y='132' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='248' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='196' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='248' y='324' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='248' y='388' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='248' y='420' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='248' y='612' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='248' y='628' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='248' y='644' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='248' y='676' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='248' y='692' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='248' y='708' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='248' y='724' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='248' y='804' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='248' y='836' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='248' y='852' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='256' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='256' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='256' y='132' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='256' y='148' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='256' y='164' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='256' y='196' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='256' y='388' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='256' y='420' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='256' y='612' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='256' y='628' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='256' y='644' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='256' y='676' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='256' y='692' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='256' y='708' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='256' y='804' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='256' y='836' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='256' y='852' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='264' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='264' y='84' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='264' y='116' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='264' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='356' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='264' y='420' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='264' y='628' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='264' y='644' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='264' y='676' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='264' y='692' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='264' y='708' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='264' y='804' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='264' y='836' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='264' y='852' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='272' y='68' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='272' y='148' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='272' y='196' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='272' y='356' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='272' y='452' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='272' y='644' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='272' y='676' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='272' y='708' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='272' y='804' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='820' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='272' y='836' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='272' y='852' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='280' y='116' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='280' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='280' y='356' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='280' y='452' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='280' y='644' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='280' y='692' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='280' y='724' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='280' y='756' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='280' y='804' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='280' y='820' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='280' y='836' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='280' y='852' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='288' y='68' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='288' y='116' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='288' y='148' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='288' y='356' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='288' y='372' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='288' y='452' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='288' y='644' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='288' y='708' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='288' y='724' fill='currentColor' style='font-size:1em'>&amp;</text>
<text text-anchor='middle' x='288' y='756' fill='currentColor' style='font-size:1em'>&amp;</text>
<text text-anchor='middle' x='288' y='820' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='288' y='836' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='288' y='852' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='296' y='68' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='296' y='116' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='296' y='148' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='296' y='356' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='296' y='372' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='296' y='452' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='296' y='644' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='296' y='724' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='296' y='756' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='296' y='820' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='296' y='836' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='296' y='852' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='304' y='68' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='304' y='356' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='304' y='372' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='304' y='452' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='304' y='756' fill='currentColor' style='font-size:1em'>&amp;</text>
<text text-anchor='middle' x='312' y='148' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='312' y='372' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='312' y='452' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='312' y='756' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='312' y='820' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='320' y='68' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='320' y='148' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='320' y='356' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='320' y='372' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='320' y='452' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='320' y='820' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='328' y='68' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='328' y='148' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='328' y='372' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='328' y='452' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='328' y='820' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='336' y='68' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='336' y='356' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='336' y='452' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='336' y='676' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='336' y='820' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='344' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='344' y='356' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='344' y='452' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='344' y='676' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='344' y='804' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='344' y='820' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='352' y='68' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='352' y='356' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='352' y='676' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='352' y='740' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='352' y='804' fill='currentColor' style='font-size:1em'>&amp;</text>
<text text-anchor='middle' x='352' y='820' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='360' y='356' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='360' y='676' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='360' y='740' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='360' y='804' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='360' y='820' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='368' y='68' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='368' y='356' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='368' y='676' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='368' y='740' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='376' y='68' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='376' y='356' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='384' y='68' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='392' y='356' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='400' y='356' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='408' y='356' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='408' y='740' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='416' y='356' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='416' y='740' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='424' y='356' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='424' y='740' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='432' y='356' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='432' y='676' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='440' y='676' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='448' y='356' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='448' y='676' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='456' y='676' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='464' y='676' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='472' y='676' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='480' y='676' fill='currentColor' style='font-size:1em'>+</text>
</g>

    </svg>
  
</div>
<p>Here <code>alpha</code> and <code>alphaNum</code> refer to alphabetical and alphabetical or numerical characters respectively.</p>
<h2 id="operator-precedence-associativity-and-semantics">Operator precedence, associativity and semantics</h2>
<p>The operator precedence, associativity and semantics of the binary operators are as follows:</p>
<table>
  <thead>
      <tr>
          <th>Operator</th>
          <th>Precedence</th>
          <th>Associativity</th>
          <th>Semantics</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>||</td>
          <td>1</td>
          <td>Left</td>
          <td>Boolean or</td>
      </tr>
      <tr>
          <td>|</td>
          <td>1</td>
          <td>Left</td>
          <td>Bitwise or</td>
      </tr>
      <tr>
          <td>&amp;&amp;</td>
          <td>2</td>
          <td>Left</td>
          <td>Boolean and</td>
      </tr>
      <tr>
          <td>&amp;</td>
          <td>2</td>
          <td>Left</td>
          <td>Bitwise and</td>
      </tr>
      <tr>
          <td> </td>
          <td></td>
          <td></td>
          <td></td>
      </tr>
      <tr>
          <td>==</td>
          <td>3</td>
          <td>Left</td>
          <td>Equals</td>
      </tr>
      <tr>
          <td>!=</td>
          <td>3</td>
          <td>Left</td>
          <td>Not equals</td>
      </tr>
      <tr>
          <td>&lt;</td>
          <td>4</td>
          <td>Left</td>
          <td>Less than</td>
      </tr>
      <tr>
          <td>&gt;</td>
          <td>4</td>
          <td>Left</td>
          <td>Greater than</td>
      </tr>
      <tr>
          <td>&lt;=</td>
          <td>4</td>
          <td>Left</td>
          <td>Less than or equals</td>
      </tr>
      <tr>
          <td>&gt;=</td>
          <td>4</td>
          <td>Left</td>
          <td>Greater than or equals</td>
      </tr>
      <tr>
          <td> </td>
          <td></td>
          <td></td>
          <td></td>
      </tr>
      <tr>
          <td>:</td>
          <td>5</td>
          <td>Right</td>
          <td>List concatenation</td>
      </tr>
      <tr>
          <td> </td>
          <td></td>
          <td></td>
          <td></td>
      </tr>
      <tr>
          <td>&amp;+</td>
          <td>5</td>
          <td>Left</td>
          <td>Reference integer addition</td>
      </tr>
      <tr>
          <td>&amp;-</td>
          <td>5</td>
          <td>Left</td>
          <td>Reference integer subtraction</td>
      </tr>
      <tr>
          <td>&amp;-&amp;</td>
          <td>5</td>
          <td>Left</td>
          <td>Reference reference subtraction</td>
      </tr>
      <tr>
          <td> </td>
          <td></td>
          <td></td>
          <td></td>
      </tr>
      <tr>
          <td>&laquo;</td>
          <td>5</td>
          <td>Left</td>
          <td>Bit-shift left</td>
      </tr>
      <tr>
          <td>&raquo;</td>
          <td>5</td>
          <td>Left</td>
          <td>Bit-shift right</td>
      </tr>
      <tr>
          <td>+</td>
          <td>6</td>
          <td>Left</td>
          <td>Integer addition</td>
      </tr>
      <tr>
          <td>-</td>
          <td>6</td>
          <td>Left</td>
          <td>Integer subtraction</td>
      </tr>
      <tr>
          <td>*</td>
          <td>7</td>
          <td>Left</td>
          <td>Integer multiplication</td>
      </tr>
      <tr>
          <td>/</td>
          <td>7</td>
          <td>Left</td>
          <td>Integer division</td>
      </tr>
      <tr>
          <td>%</td>
          <td>7</td>
          <td>Left</td>
          <td>Modulo</td>
      </tr>
  </tbody>
</table>
<p>The unary operators are defined as follows:</p>
<table>
  <thead>
      <tr>
          <th>Operator</th>
          <th>Semantics</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>!</td>
          <td>Boolean negation</td>
      </tr>
      <tr>
          <td>-</td>
          <td>Integer negation</td>
      </tr>
      <tr>
          <td>(&lt;Type&gt;)</td>
          <td>Type casting</td>
      </tr>
      <tr>
          <td>&amp;</td>
          <td>Referencing</td>
      </tr>
      <tr>
          <td>*</td>
          <td>Dereferencing</td>
      </tr>
  </tbody>
</table>
<h1 id="lexing">Lexing</h1>
<p>The lexing process is the initial phase of &amp;SPL compilation. Through lexing raw
source code is turned into a list of tokens. Some such tokens represent single
characters in the source code, but other tokens represent more complex
structures. For example, the source code string <code>49020</code> is represented as a
single token <code>TConstant (CInt 49020)</code>.</p>
<p>The lexer is implemented as a set of recognizers. Each recognizer takes as
input the remaining source code, and either fails or outputs the recognized
initial string and the corresponding token. If multiple recognizers produce
output, the output of the recognizer matching the largest part of the input
string is used. Tie-breaking is performed by a priority assigned to each
recognizer. For example, the source code string if will be lexed as TKeyword
KIf as opposed to TIdentifier &ldquo;if&rdquo;, as the keyword recognizer has a greater
priority.</p>
<p>The recognizer data types are as follows:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 464 57"
      >
      <g transform='translate(8,16)'>
<path d='M 200,0 L 208,0' fill='none' stroke='currentColor'></path>
<polygon points='216.000000,0.000000 204.000000,-5.600000 204.000000,5.600000' fill='currentColor' transform='rotate(0.000000, 208.000000, 0.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='272' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='296' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='304' y='20' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='312' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='320' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='328' y='36' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='336' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='344' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='344' y='36' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='352' y='4' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='352' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='360' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='360' y='20' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='360' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='368' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='368' y='36' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='376' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='376' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='384' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='384' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='392' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='392' y='20' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='400' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='408' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='416' y='20' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='424' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='432' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='448' y='20' fill='currentColor' style='font-size:1em'>,</text>
</g>

    </svg>
  
</div>
<p>and a single recognize step takes a list of such RecognizerPriority, the source code string, and either fails or outputs the recognized initial string and corresponding token:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 312 57"
      >
      <g transform='translate(8,16)'>
<path d='M 104,16 L 112,16' fill='none' stroke='currentColor'></path>
<path d='M 104,32 L 112,32' fill='none' stroke='currentColor'></path>
<polygon points='120.000000,16.000000 108.000000,10.400000 108.000000,21.600000' fill='currentColor' transform='rotate(0.000000, 112.000000, 16.000000)'></polygon>
<polygon points='120.000000,32.000000 108.000000,26.400000 108.000000,37.599998' fill='currentColor' transform='rotate(0.000000, 112.000000, 32.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>)</text>
</g>

    </svg>
  
</div>
<h2 id="regular-expression-engine">Regular expression engine</h2>
<p>Internally, the recognizers make use of regular expressions to match strings. The regular expression engine implementation is based on Thompson&rsquo;s construction [thompson1968programming,xing2004minimized]. In this construction, the regular expression engine compiles a regular expression to a non-deterministic finite automaton (NFA). Here, the compilation is implemented similarly to the main compiler as separate processes of lexing, parsing, and &ldquo;code&rdquo; generation in the form of building the NFA. The compiled NFA can subsequently be simulated on an input string, returning all matching strings.</p>
<p>The NFAs are implemented as machines taking string input, and have a set of states, a set of transitions between states, an initial state, and a set of accepting states. Four transition types are implemented: transitions from one state to another predicated on an input character, a conditional transition with an arbitrary predicate on characters, an empty transition, and a transition if the end of the input string has been reached.</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 336 137"
      >
      <g transform='translate(8,16)'>
<path d='M 208,64 L 216,64' fill='none' stroke='currentColor'></path>
<path d='M 144,96 L 144,112' fill='none' stroke='currentColor'></path>
<polygon points='224.000000,64.000000 212.000000,58.400002 212.000000,69.599998' fill='currentColor' transform='rotate(0.000000, 216.000000, 64.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>|</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='160' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='100' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='168' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='168' y='116' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='176' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='176' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='176' y='116' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='184' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='184' y='116' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='192' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='192' y='100' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='192' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='200' y='100' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='200' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='208' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='216' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='232' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='232' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='240' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='240' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='248' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='248' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='256' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='256' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='256' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='264' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='264' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='272' y='20' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='288' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='288' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='304' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='304' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='312' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'>n</text>
</g>

    </svg>
  
</div>
<p>The regular expression engine supports the following regular expression constructs:</p>
<ul>
<li>the basics: union <code>|</code>, concatenation, literals , and the Kleene closure;</li>
<li>the option operator (&ldquo;0 or 1 times&rdquo;) <code>?</code>;</li>
<li>characters sets (&ldquo;one of &hellip;&rdquo;) <code>[a-zA-Z0-9_!]</code>;</li>
<li>negative character sets (&ldquo;none of &hellip;&rdquo;) <code>[^a-z]</code>;</li>
<li>escaping of control characters (&ldquo;literal &lsquo;?&rsquo;&rdquo;) <code>\?</code>; and</li>
<li>the end-of-string marker <code>$</code>.</li>
</ul>
<p>Many contemporary regular expression engines are implemented using some form of
complex recursion, e.g. through parser combinators [cox2007regular]. As such, they are built using a construct able to
recognize more expressive types of languages, such as the context-free grammar,
as opposed to pure regular expressions. In contrast, NFAs and regular
expressions are equivalent regarding the types of languages they can recognize.
Thus, Thompson&rsquo;s construction generally results in a better-performing
implementation of regular expressions. For example, compiling the following
regular expression</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 368 41"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='272' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='296' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='304' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='312' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='320' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='328' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='336' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='344' y='4' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='344' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='352' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='352' y='20' fill='currentColor' style='font-size:1em'>a</text>
</g>

    </svg>
  
</div>
<p>and matching it with</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 248 25"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>a</text>
</g>

    </svg>
  
</div>
<p>takes 58 seconds using Python&rsquo;s regular expression implementation on my
machine, and only 0.7 seconds using the implementation created for this
compiler.</p>
<h2 id="constructing-recognizers">Constructing recognizers</h2>
<p>The following illustrates some of the recognizers used and how to construct them:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 464 809"
      >
      <g transform='translate(8,16)'>
<path d='M 16,16 L 24,16' fill='none' stroke='currentColor'></path>
<path d='M 80,48 L 88,48' fill='none' stroke='currentColor'></path>
<path d='M 336,64 L 344,64' fill='none' stroke='currentColor'></path>
<path d='M 16,80 L 24,80' fill='none' stroke='currentColor'></path>
<path d='M 80,112 L 88,112' fill='none' stroke='currentColor'></path>
<path d='M 16,128 L 24,128' fill='none' stroke='currentColor'></path>
<path d='M 80,160 L 88,160' fill='none' stroke='currentColor'></path>
<path d='M 16,176 L 24,176' fill='none' stroke='currentColor'></path>
<path d='M 80,208 L 88,208' fill='none' stroke='currentColor'></path>
<path d='M 80,240 L 88,240' fill='none' stroke='currentColor'></path>
<path d='M 80,272 L 88,272' fill='none' stroke='currentColor'></path>
<path d='M 16,304 L 24,304' fill='none' stroke='currentColor'></path>
<path d='M 280,320 L 288,320' fill='none' stroke='currentColor'></path>
<path d='M 272,336 L 280,336' fill='none' stroke='currentColor'></path>
<path d='M 288,352 L 296,352' fill='none' stroke='currentColor'></path>
<path d='M 16,384 L 24,384' fill='none' stroke='currentColor'></path>
<path d='M 272,400 L 280,400' fill='none' stroke='currentColor'></path>
<path d='M 280,416 L 288,416' fill='none' stroke='currentColor'></path>
<path d='M 280,432 L 288,432' fill='none' stroke='currentColor'></path>
<path d='M 280,448 L 288,448' fill='none' stroke='currentColor'></path>
<path d='M 16,464 L 24,464' fill='none' stroke='currentColor'></path>
<path d='M 272,480 L 280,480' fill='none' stroke='currentColor'></path>
<path d='M 16,512 L 24,512' fill='none' stroke='currentColor'></path>
<path d='M 288,528 L 296,528' fill='none' stroke='currentColor'></path>
<path d='M 288,544 L 296,544' fill='none' stroke='currentColor'></path>
<path d='M 16,576 L 24,576' fill='none' stroke='currentColor'></path>
<path d='M 80,608 L 88,608' fill='none' stroke='currentColor'></path>
<path d='M 80,640 L 88,640' fill='none' stroke='currentColor'></path>
<path d='M 80,672 L 88,672' fill='none' stroke='currentColor'></path>
<path d='M 16,704 L 24,704' fill='none' stroke='currentColor'></path>
<path d='M 80,736 L 88,736' fill='none' stroke='currentColor'></path>
<path d='M 200,528 L 208,544' fill='none' stroke='currentColor'></path>
<path d='M 204,520 L 212,536' fill='none' stroke='currentColor'></path>
<path d='M 248,400 L 256,416' fill='none' stroke='currentColor'></path>
<polygon points='96.000000,48.000000 84.000000,42.400002 84.000000,53.599998' fill='currentColor' transform='rotate(0.000000, 88.000000, 48.000000)'></polygon>
<polygon points='96.000000,112.000000 84.000000,106.400002 84.000000,117.599998' fill='currentColor' transform='rotate(0.000000, 88.000000, 112.000000)'></polygon>
<polygon points='96.000000,160.000000 84.000000,154.399994 84.000000,165.600006' fill='currentColor' transform='rotate(0.000000, 88.000000, 160.000000)'></polygon>
<polygon points='96.000000,208.000000 84.000000,202.399994 84.000000,213.600006' fill='currentColor' transform='rotate(0.000000, 88.000000, 208.000000)'></polygon>
<polygon points='96.000000,240.000000 84.000000,234.399994 84.000000,245.600006' fill='currentColor' transform='rotate(0.000000, 88.000000, 240.000000)'></polygon>
<polygon points='96.000000,272.000000 84.000000,266.399994 84.000000,277.600006' fill='currentColor' transform='rotate(0.000000, 88.000000, 272.000000)'></polygon>
<polygon points='96.000000,608.000000 84.000000,602.400024 84.000000,613.599976' fill='currentColor' transform='rotate(0.000000, 88.000000, 608.000000)'></polygon>
<polygon points='96.000000,640.000000 84.000000,634.400024 84.000000,645.599976' fill='currentColor' transform='rotate(0.000000, 88.000000, 640.000000)'></polygon>
<polygon points='96.000000,672.000000 84.000000,666.400024 84.000000,677.599976' fill='currentColor' transform='rotate(0.000000, 88.000000, 672.000000)'></polygon>
<polygon points='96.000000,736.000000 84.000000,730.400024 84.000000,741.599976' fill='currentColor' transform='rotate(0.000000, 88.000000, 736.000000)'></polygon>
<polygon points='288.000000,336.000000 276.000000,330.399994 276.000000,341.600006' fill='currentColor' transform='rotate(0.000000, 280.000000, 336.000000)'></polygon>
<polygon points='288.000000,400.000000 276.000000,394.399994 276.000000,405.600006' fill='currentColor' transform='rotate(0.000000, 280.000000, 400.000000)'></polygon>
<polygon points='288.000000,480.000000 276.000000,474.399994 276.000000,485.600006' fill='currentColor' transform='rotate(0.000000, 280.000000, 480.000000)'></polygon>
<polygon points='296.000000,320.000000 284.000000,314.399994 284.000000,325.600006' fill='currentColor' transform='rotate(0.000000, 288.000000, 320.000000)'></polygon>
<polygon points='296.000000,416.000000 284.000000,410.399994 284.000000,421.600006' fill='currentColor' transform='rotate(0.000000, 288.000000, 416.000000)'></polygon>
<polygon points='296.000000,432.000000 284.000000,426.399994 284.000000,437.600006' fill='currentColor' transform='rotate(0.000000, 288.000000, 432.000000)'></polygon>
<polygon points='296.000000,448.000000 284.000000,442.399994 284.000000,453.600006' fill='currentColor' transform='rotate(0.000000, 288.000000, 448.000000)'></polygon>
<polygon points='304.000000,352.000000 292.000000,346.399994 292.000000,357.600006' fill='currentColor' transform='rotate(0.000000, 296.000000, 352.000000)'></polygon>
<polygon points='304.000000,528.000000 292.000000,522.400024 292.000000,533.599976' fill='currentColor' transform='rotate(0.000000, 296.000000, 528.000000)'></polygon>
<polygon points='304.000000,544.000000 292.000000,538.400024 292.000000,549.599976' fill='currentColor' transform='rotate(0.000000, 296.000000, 544.000000)'></polygon>
<polygon points='352.000000,64.000000 340.000000,58.400002 340.000000,69.599998' fill='currentColor' transform='rotate(0.000000, 344.000000, 64.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='0' y='788' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='148' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='196' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='260' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='324' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='340' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='356' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='404' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='420' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='436' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='452' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='484' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='532' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='548' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='596' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='628' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='660' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='724' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='196' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='324' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='340' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='356' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='404' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='420' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='436' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='452' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='484' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='532' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='548' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='596' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='628' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='660' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='724' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='324' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='340' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='356' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='404' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='420' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='436' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='452' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='484' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='532' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='548' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='596' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='628' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='660' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='724' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='40' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='132' fill='currentColor' style='font-size:1em'>W</text>
<text text-anchor='middle' x='40' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='180' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='40' y='196' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='260' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='308' fill='currentColor' style='font-size:1em'>K</text>
<text text-anchor='middle' x='40' y='324' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='340' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='356' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='388' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='40' y='404' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='420' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='436' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='452' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='468' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='40' y='484' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='516' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='40' y='532' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='548' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='580' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='40' y='596' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='628' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='660' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='708' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='40' y='724' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='48' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='132' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='48' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='180' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='48' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='308' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='324' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='340' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='356' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='388' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='48' y='404' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='420' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='436' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='452' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='468' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='48' y='484' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='516' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='48' y='532' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='548' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='580' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='48' y='596' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='628' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='660' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='708' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='48' y='724' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='116' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='56' y='132' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='164' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='56' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='212' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='56' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='244' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='56' y='260' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='276' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='56' y='308' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='56' y='324' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='340' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='356' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='388' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='404' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='420' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='436' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='452' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='468' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='484' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='516' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='532' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='548' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='580' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='596' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='612' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='56' y='628' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='644' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='56' y='660' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='676' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='56' y='708' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='724' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='740' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='100' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='148' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='164' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='64' y='196' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='212' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='228' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='244' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='260' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='276' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='308' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='64' y='324' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='340' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='356' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='388' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='404' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='420' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='436' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='452' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='468' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='484' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='516' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='532' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='548' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='580' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='596' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='612' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='628' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='644' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='660' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='676' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='708' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='64' y='724' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='740' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='148' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='72' y='196' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='260' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='308' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='324' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='340' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='356' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='388' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='72' y='404' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='420' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='436' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='452' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='468' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='484' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='516' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='72' y='532' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='548' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='580' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='72' y='596' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='628' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='660' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='708' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='72' y='724' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='80' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='180' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='80' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='308' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='324' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='340' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='356' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='404' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='420' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='436' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='452' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='468' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='484' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='516' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='80' y='532' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='548' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='580' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='596' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='628' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='660' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='708' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='724' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='756' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='772' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='100' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='132' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='88' y='148' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='88' y='196' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='228' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='260' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='308' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='88' y='324' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='340' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='356' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='404' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='420' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='436' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='452' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='468' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='88' y='484' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='532' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='548' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='580' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='596' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='628' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='660' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='708' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='88' y='724' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='88' y='756' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='88' y='772' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='96' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='96' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='308' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='96' y='324' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='340' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='356' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='404' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='420' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='436' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='452' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='468' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='96' y='484' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='532' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='548' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='580' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='596' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='628' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='660' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='708' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='724' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='756' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='772' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='104' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='116' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='104' y='132' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='148' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='164' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='104' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='196' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='212' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='104' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='244' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='104' y='260' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='276' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='104' y='324' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='340' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='356' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='404' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='420' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='436' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='452' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='468' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='104' y='484' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='532' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='548' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='580' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='104' y='596' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='612' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='104' y='628' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='644' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='104' y='660' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='676' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='104' y='708' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='724' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='740' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='104' y='756' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='772' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='116' fill='currentColor' style='font-size:1em'>W</text>
<text text-anchor='middle' x='112' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='164' fill='currentColor' style='font-size:1em'>W</text>
<text text-anchor='middle' x='112' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='196' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='212' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='112' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='244' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='112' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='276' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='112' y='324' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='340' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='356' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='404' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='420' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='436' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='452' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='484' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='532' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='548' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='596' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='612' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='112' y='628' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='644' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='112' y='660' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='676' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='112' y='708' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='724' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='740' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='100' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='120' y='148' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='164' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='120' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='196' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='212' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='120' y='228' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='244' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='120' y='260' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='276' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='120' y='324' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='340' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='356' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='404' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='420' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='436' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='452' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='484' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='532' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='548' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='596' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='612' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='120' y='628' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='644' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='120' y='660' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='676' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='120' y='708' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='724' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='756' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='120' y='772' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='128' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='128' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='212' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='276' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='324' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='340' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='356' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='404' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='420' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='436' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='452' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='484' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='532' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='548' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='596' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='612' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='628' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='644' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='660' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='676' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='724' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='740' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='128' y='756' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='128' y='772' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='136' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='136' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='212' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='244' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='276' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='324' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='340' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='356' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='404' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='420' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='436' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='452' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='484' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='532' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='548' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='596' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='612' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='136' y='628' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='644' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='136' y='660' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='676' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='136' y='724' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='740' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='136' y='756' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='136' y='772' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='100' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='148' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='196' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='228' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='244' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='260' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='276' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='324' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='340' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='356' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='404' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='420' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='436' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='452' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='484' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='532' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='548' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='596' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='612' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='628' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='644' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='660' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='676' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='724' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='144' y='740' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='756' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='772' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='152' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='152' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='164' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='152' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='212' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='152' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='244' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='152' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='276' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='152' y='324' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='340' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='356' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='404' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='420' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='436' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='452' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='484' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='532' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='548' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='596' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='612' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='628' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='644' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='660' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='676' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='724' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='740' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='152' y='756' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='152' y='772' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='160' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='164' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='160' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='244' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='260' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='324' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='340' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='356' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='404' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='420' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='436' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='452' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='484' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='532' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='548' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='596' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='612' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='628' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='644' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='660' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='676' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='724' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='740' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='160' y='756' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='160' y='772' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='168' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='244' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='276' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='612' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='644' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='676' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='740' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='168' y='756' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='168' y='772' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>$</text>
<text text-anchor='middle' x='176' y='68' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='176' y='100' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='176' y='116' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='176' y='148' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='176' y='164' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='176' y='196' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='176' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='228' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='176' y='244' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='260' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='176' y='276' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='324' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='176' y='340' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='176' y='356' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='176' y='404' fill='currentColor' style='font-size:1em'>9</text>
<text text-anchor='middle' x='176' y='420' fill='currentColor' style='font-size:1em'>9</text>
<text text-anchor='middle' x='176' y='436' fill='currentColor' style='font-size:1em'>9</text>
<text text-anchor='middle' x='176' y='452' fill='currentColor' style='font-size:1em'>9</text>
<text text-anchor='middle' x='176' y='484' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='176' y='532' fill='currentColor' style='font-size:1em'>7</text>
<text text-anchor='middle' x='176' y='548' fill='currentColor' style='font-size:1em'>7</text>
<text text-anchor='middle' x='176' y='596' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='176' y='628' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='176' y='660' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='176' y='724' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='176' y='740' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='176' y='756' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='176' y='772' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='184' y='100' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='184' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='148' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='184' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='196' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='184' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='228' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='184' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='260' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='184' y='276' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='324' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='184' y='340' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='184' y='356' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='184' y='612' fill='currentColor' style='font-size:1em'>$</text>
<text text-anchor='middle' x='184' y='644' fill='currentColor' style='font-size:1em'>$</text>
<text text-anchor='middle' x='184' y='676' fill='currentColor' style='font-size:1em'>$</text>
<text text-anchor='middle' x='184' y='740' fill='currentColor' style='font-size:1em'>U</text>
<text text-anchor='middle' x='184' y='756' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='772' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='192' y='404' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='192' y='420' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='192' y='436' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='192' y='452' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='192' y='484' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='192' y='532' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='192' y='548' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='192' y='596' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='192' y='628' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='192' y='660' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='192' y='724' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='192' y='740' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='192' y='756' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='192' y='772' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='200' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='68' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='200' y='100' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='200' y='116' fill='currentColor' style='font-size:1em'>W</text>
<text text-anchor='middle' x='200' y='148' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='200' y='164' fill='currentColor' style='font-size:1em'>W</text>
<text text-anchor='middle' x='200' y='196' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='200' y='212' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='200' y='228' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='200' y='244' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='200' y='260' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='200' y='276' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='200' y='324' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='200' y='340' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='200' y='356' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='200' y='404' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='200' y='420' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='200' y='436' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='200' y='452' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='200' y='484' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='200' y='548' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='200' y='596' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='200' y='612' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='200' y='628' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='200' y='644' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='200' y='660' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='200' y='676' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='200' y='724' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='200' y='740' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='200' y='756' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='200' y='772' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='208' y='68' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='208' y='100' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='208' y='116' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='208' y='148' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='208' y='164' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='208' y='196' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='208' y='212' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='208' y='228' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='208' y='244' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='208' y='260' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='208' y='276' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='208' y='324' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='208' y='340' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='208' y='356' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='404' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='208' y='420' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='208' y='436' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='208' y='452' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='208' y='484' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='208' y='596' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='612' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='208' y='628' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='208' y='644' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='208' y='660' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='208' y='676' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='208' y='724' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='208' y='740' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='756' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='216' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='216' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='216' y='196' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='216' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='228' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='216' y='244' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='260' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='216' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='324' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='340' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='216' y='356' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='216' y='404' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='216' y='420' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='216' y='436' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='452' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='484' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='216' y='532' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='216' y='548' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='216' y='596' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='216' y='612' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='216' y='628' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='216' y='644' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='216' y='660' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='216' y='676' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='216' y='724' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='216' y='740' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='216' y='756' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='216' y='772' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='224' y='68' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='224' y='100' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='224' y='116' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='224' y='148' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='224' y='164' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='224' y='212' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='224' y='228' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='224' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='260' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='224' y='276' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='324' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='340' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='224' y='356' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='404' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='224' y='420' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='224' y='436' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='452' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='224' y='484' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='224' y='532' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='224' y='548' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='224' y='596' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='612' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='224' y='628' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='644' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='224' y='660' fill='currentColor' style='font-size:1em'>9</text>
<text text-anchor='middle' x='224' y='676' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='224' y='724' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='224' y='756' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='224' y='772' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>^</text>
<text text-anchor='middle' x='232' y='100' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='232' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='232' y='148' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='232' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='232' y='228' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='232' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='260' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='232' y='276' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='324' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='232' y='356' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='420' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='232' y='436' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='232' y='452' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='232' y='532' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='232' y='548' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='232' y='596' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='232' y='612' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='232' y='628' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='644' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='232' y='660' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='232' y='724' fill='currentColor' style='font-size:1em'>|</text>
<text text-anchor='middle' x='232' y='740' fill='currentColor' style='font-size:1em'>$</text>
<text text-anchor='middle' x='232' y='756' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='240' y='68' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='240' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='148' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='240' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='276' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='356' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='240' y='532' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='240' y='548' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='240' y='628' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='240' y='660' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='240' y='676' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='240' y='724' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='240' y='756' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>$</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='248' y='100' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='248' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='248' y='164' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='248' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='248' y='244' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='248' y='276' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='248' y='340' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='248' y='484' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='248' y='612' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='248' y='644' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='248' y='660' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='248' y='676' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='248' y='724' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='248' y='740' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='256' y='68' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='256' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='256' y='148' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='256' y='164' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='256' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='256' y='244' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='256' y='276' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='256' y='324' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='256' y='340' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='256' y='404' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='256' y='436' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='256' y='452' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='256' y='484' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='256' y='612' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='256' y='644' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='256' y='676' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='256' y='724' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='256' y='740' fill='currentColor' style='font-size:1em'>!</text>
<text text-anchor='middle' x='256' y='756' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='264' y='52' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='264' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='264' y='116' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='264' y='148' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='264' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='276' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='324' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='264' y='356' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='264' y='420' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='264' y='436' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='264' y='452' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='264' y='532' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='264' y='548' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='264' y='612' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='264' y='644' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='264' y='676' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='264' y='724' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='264' y='740' fill='currentColor' style='font-size:1em'>!</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='272' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='272' y='68' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='272' y='116' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='272' y='148' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='272' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='272' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='276' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='272' y='356' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='272' y='532' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='272' y='548' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='272' y='612' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='644' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='272' y='676' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='272' y='724' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='272' y='740' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='280' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='280' y='68' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='280' y='148' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='280' y='212' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='280' y='244' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='280' y='276' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='612' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='280' y='644' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='724' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='288' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='288' y='68' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='288' y='148' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='288' y='212' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='288' y='244' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='288' y='276' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='288' y='612' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='288' y='644' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='288' y='676' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='288' y='724' fill='currentColor' style='font-size:1em'>|</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='296' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='276' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='296' y='340' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='296' y='404' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='296' y='484' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='296' y='644' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='296' y='724' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='304' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='304' y='324' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='304' y='340' fill='currentColor' style='font-size:1em'>K</text>
<text text-anchor='middle' x='304' y='404' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='304' y='420' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='304' y='436' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='304' y='452' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='304' y='484' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='304' y='676' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='304' y='724' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='312' y='36' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='312' y='68' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='312' y='324' fill='currentColor' style='font-size:1em'>K</text>
<text text-anchor='middle' x='312' y='340' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='312' y='356' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='312' y='404' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='312' y='420' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='312' y='436' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='312' y='452' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='312' y='484' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='312' y='532' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='312' y='548' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='312' y='676' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='312' y='724' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='320' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='320' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='320' y='324' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='320' y='340' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='320' y='356' fill='currentColor' style='font-size:1em'>K</text>
<text text-anchor='middle' x='320' y='404' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='320' y='420' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='320' y='436' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='320' y='452' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='320' y='484' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='320' y='532' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='320' y='548' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='320' y='724' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='328' y='36' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='328' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='328' y='324' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='328' y='340' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='328' y='356' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='328' y='404' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='328' y='420' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='328' y='436' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='328' y='452' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='328' y='484' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='328' y='532' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='328' y='548' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='328' y='676' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='328' y='724' fill='currentColor' style='font-size:1em'>9</text>
<text text-anchor='middle' x='336' y='36' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='336' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='336' y='324' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='336' y='340' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='336' y='356' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='336' y='420' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='336' y='436' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='336' y='452' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='336' y='484' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='336' y='532' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='336' y='548' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='336' y='676' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='336' y='724' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='344' y='36' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='344' y='324' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='344' y='340' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='344' y='356' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='344' y='404' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='344' y='484' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='344' y='532' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='344' y='548' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='344' y='676' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='344' y='724' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='352' y='36' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='352' y='324' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='352' y='340' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='352' y='356' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='352' y='404' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='352' y='420' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='352' y='436' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='352' y='452' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='352' y='484' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='352' y='532' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='352' y='548' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='352' y='676' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='352' y='724' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='360' y='52' fill='currentColor' style='font-size:1em'>\</text>
<text text-anchor='middle' x='360' y='68' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='360' y='324' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='360' y='356' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='360' y='404' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='360' y='420' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='360' y='436' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='360' y='452' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='360' y='484' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='360' y='676' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='360' y='724' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='368' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='368' y='68' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='368' y='340' fill='currentColor' style='font-size:1em'>K</text>
<text text-anchor='middle' x='368' y='356' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='368' y='404' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='368' y='420' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='368' y='436' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='368' y='452' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='368' y='532' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='368' y='548' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='368' y='676' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='376' y='52' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='376' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='376' y='324' fill='currentColor' style='font-size:1em'>K</text>
<text text-anchor='middle' x='376' y='340' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='376' y='404' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='376' y='420' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='376' y='436' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='376' y='452' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='376' y='484' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='376' y='532' fill='currentColor' style='font-size:1em'>H</text>
<text text-anchor='middle' x='376' y='548' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='384' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='384' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='384' y='324' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='384' y='340' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='384' y='356' fill='currentColor' style='font-size:1em'>K</text>
<text text-anchor='middle' x='384' y='404' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='384' y='420' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='384' y='436' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='384' y='452' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='384' y='484' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='384' y='532' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='384' y='548' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='392' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='392' y='324' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='392' y='340' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='392' y='356' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='392' y='404' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='392' y='420' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='392' y='436' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='392' y='452' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='392' y='484' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='392' y='532' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='392' y='548' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='400' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='400' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='400' y='324' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='400' y='340' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='400' y='356' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='400' y='404' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='400' y='420' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='400' y='436' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='400' y='452' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='400' y='484' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='400' y='532' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='400' y='548' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='408' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='408' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='408' y='324' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='408' y='356' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='408' y='404' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='408' y='420' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='408' y='436' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='408' y='452' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='408' y='484' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='416' y='52' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='416' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='416' y='324' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='416' y='356' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='416' y='420' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='416' y='436' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='416' y='452' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='416' y='484' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='424' y='356' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='424' y='420' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='424' y='436' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='424' y='452' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='424' y='484' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='432' y='68' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='432' y='356' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='440' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='448' y='68' fill='currentColor' style='font-size:1em'>,</text>
</g>

    </svg>
  
</div>
<h1 id="parsing">Parsing</h1>
<p>Parsing &amp;SPL proceeds after the lexing phase. The input to the parser is a list
of tokens. The parsing phase is aimed at transforming tokens into a more direct
representation of the program structure. For example, an expression using a
binary operator will have associated with it the specific operator and two
sub-expressions, where each sub-expression can be arbitrarily large, resembling
a tree structure. As such, the parser transforms the tokens into an abstract
syntax tree, and is implemented using a recursive top-down implementation with
parser combinators, provided by the Haskell library <a href="https://hackage.haskell.org/package/parsec">Parsec</a>.</p>
<h2 id="abstract-syntax-tree">Abstract syntax tree</h2>
<p>At a high level, the &amp;SPL abstract syntax tree consists of declarations
(auxiliary source code includes, class declarations, variable declarations and
function declarations), statements (such as control structures), expressions
(actual calculations) and constants. The &amp;SPL abstract syntax tree is
represented naturally as an algebraic data type in Haskell, e.g.:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 440 521"
      >
      <g transform='translate(8,16)'>
<path d='M 168,48 L 168,80' fill='none' stroke='currentColor'></path>
<path d='M 168,400 L 168,416' fill='none' stroke='currentColor'></path>
<path d='M 168,464 L 168,496' fill='none' stroke='currentColor'></path>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='0' y='132' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='0' y='196' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='0' y='276' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='0' y='292' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='0' y='388' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='8' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='276' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='8' y='292' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='388' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='16' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='276' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='292' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='388' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='24' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='276' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='292' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='388' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='32' y='116' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='40' y='132' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='40' y='196' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='40' y='276' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='40' y='292' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='40' y='388' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='132' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='48' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='292' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='48' y='388' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='56' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='56' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='276' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='292' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='388' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='64' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='196' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='64' y='276' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='64' y='292' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='64' y='388' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='72' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='276' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='292' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='388' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='116' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='80' y='132' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='80' y='196' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='80' y='276' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='80' y='292' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='80' y='388' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='88' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='196' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='276' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='292' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='388' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='96' y='116' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='96' y='132' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='96' y='196' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='96' y='292' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='96' y='388' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='104' y='116' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='104' y='132' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='104' y='388' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='132' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='112' y='388' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='120' y='388' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='128' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='116' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='144' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='152' y='116' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='168' y='116' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='168' y='132' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='168' y='196' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='168' y='276' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='168' y='292' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='168' y='388' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='184' y='84' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='184' y='116' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='184' y='132' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='184' y='196' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='184' y='276' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='184' y='292' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='184' y='388' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='184' y='404' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='184' y='420' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='184' y='468' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='184' y='484' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='192' y='132' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='192' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='192' y='276' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='192' y='292' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='192' y='388' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='192' y='404' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='192' y='420' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='192' y='468' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='192' y='484' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='200' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='200' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='200' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='200' y='116' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='200' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='148' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='200' y='164' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='200' y='180' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='200' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='200' y='212' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='200' y='228' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='200' y='244' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='200' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='292' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='200' y='388' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='200' y='404' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='200' y='420' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='200' y='436' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='200' y='452' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='200' y='468' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='200' y='484' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='208' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='208' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='208' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='208' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='208' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='208' y='164' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='208' y='180' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='208' y='196' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='208' y='212' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='208' y='228' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='208' y='244' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='208' y='276' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='292' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='208' y='388' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='404' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='420' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='436' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='208' y='452' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='208' y='468' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='484' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='216' y='84' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='216' y='116' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='216' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='216' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='180' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='216' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='212' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='216' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='244' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='216' y='276' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='216' y='292' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='308' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='216' y='324' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='216' y='340' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='216' y='356' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='216' y='388' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='216' y='404' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='216' y='420' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='216' y='436' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='216' y='452' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='216' y='468' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='216' y='484' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='224' y='116' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='224' y='132' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='224' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='196' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='224' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='276' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='292' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='224' y='308' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='224' y='324' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='224' y='340' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='224' y='356' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='224' y='388' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='224' y='404' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='224' y='420' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='224' y='436' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='452' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='224' y='468' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='224' y='484' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='232' y='84' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='232' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='232' y='164' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='232' y='180' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='232' y='196' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='232' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='232' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='276' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='232' y='292' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='232' y='308' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='324' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='232' y='340' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='232' y='356' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='232' y='388' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='404' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='420' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='232' y='436' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='452' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='232' y='468' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='232' y='484' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='240' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='240' y='84' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='240' y='116' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='240' y='132' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='240' y='148' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='240' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='240' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='240' y='196' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='240' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='244' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='240' y='276' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='240' y='292' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='240' y='308' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='324' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='240' y='340' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='240' y='356' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='240' y='388' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='404' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='240' y='420' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='240' y='436' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='240' y='452' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='240' y='468' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='240' y='484' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='248' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='132' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='248' y='148' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='248' y='164' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='248' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='248' y='196' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='248' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='248' y='244' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='248' y='276' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='248' y='292' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='248' y='308' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='248' y='324' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='356' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='248' y='388' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='248' y='404' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='248' y='420' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='248' y='436' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='248' y='452' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='248' y='468' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='248' y='484' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='256' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='256' y='68' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='256' y='84' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='256' y='116' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='256' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='256' y='164' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='256' y='180' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='256' y='196' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='256' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='256' y='244' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='256' y='276' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='256' y='292' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='256' y='308' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='256' y='324' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='256' y='356' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='256' y='388' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='256' y='420' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='256' y='436' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='256' y='452' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='256' y='468' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='264' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='264' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='264' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='264' y='164' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='264' y='180' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='264' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='244' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='292' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='308' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='264' y='324' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='264' y='356' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='264' y='388' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='264' y='404' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='264' y='420' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='264' y='436' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='452' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='264' y='468' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='264' y='484' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='272' y='52' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='272' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='272' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='272' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='272' y='196' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='272' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='272' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='276' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='272' y='292' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='272' y='308' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='272' y='324' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='272' y='356' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='388' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='272' y='404' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='272' y='436' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='452' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='272' y='468' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='272' y='484' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='280' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='280' y='116' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='280' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='280' y='276' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='308' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='324' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='280' y='356' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='280' y='388' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='404' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='280' y='452' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='280' y='484' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='288' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='288' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='288' y='148' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='288' y='276' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='288' y='308' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='324' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='288' y='356' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='288' y='388' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='404' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='452' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='288' y='468' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='288' y='484' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='296' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='296' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='296' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='296' y='324' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='296' y='356' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='296' y='404' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='468' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='296' y='484' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='304' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='304' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='304' y='276' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='304' y='324' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='304' y='388' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='304' y='404' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='304' y='468' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='304' y='484' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='312' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='312' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='312' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='312' y='388' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='312' y='404' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='312' y='468' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='312' y='484' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='320' y='116' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='320' y='388' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='320' y='404' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='320' y='468' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='320' y='484' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='328' y='388' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='328' y='404' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='328' y='468' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='328' y='484' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='336' y='388' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='336' y='404' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='336' y='468' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='336' y='484' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='344' y='388' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='344' y='468' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='352' y='388' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='352' y='404' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='352' y='484' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='360' y='388' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='360' y='404' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='360' y='484' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='368' y='388' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='368' y='404' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='368' y='484' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='376' y='388' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='376' y='404' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='376' y='484' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='384' y='404' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='384' y='484' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='392' y='404' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='392' y='484' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='400' y='404' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='400' y='484' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='408' y='484' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='416' y='484' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='424' y='484' fill='currentColor' style='font-size:1em'>n</text>
</g>

    </svg>
  
</div>
<p>The types are implemented to keep track of AST meta-information; namely the
original source code position for error messages, and the resulting data type
of the underlying tree:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 392 153"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='8' y='52' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='8' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='8' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='48' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='80' y='116' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='116' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='116' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='152' y='116' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='152' y='132' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='168' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='176' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='184' y='116' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='184' y='132' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='192' y='68' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='192' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='192' y='132' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='52' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='200' y='68' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='200' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='200' y='132' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='208' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='208' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='216' y='116' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='116' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='224' y='132' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='232' y='132' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='240' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='240' y='116' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='248' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='248' y='132' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='256' y='52' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='256' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='256' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='256' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='264' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='264' y='116' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='264' y='132' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='272' y='20' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='272' y='52' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='272' y='68' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='272' y='132' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='68' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='280' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='288' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='296' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='296' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='296' y='68' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='296' y='132' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='304' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='304' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='304' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='304' y='132' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='312' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='312' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='312' y='132' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='320' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='320' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='320' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='328' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='328' y='132' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='336' y='132' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='344' y='132' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='352' y='132' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='360' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='376' y='132' fill='currentColor' style='font-size:1em'>}</text>
</g>

    </svg>
  
</div>
<h2 id="parser-implementation">Parser implementation</h2>
<p>Using parser combinators, the parser closely mimics the defined grammar. For
example, <code>'while' '(' ')' ''</code> is implemented as follows:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 568 281"
      >
      <g transform='translate(8,16)'>
<path d='M 120,48 L 128,48' fill='none' stroke='currentColor'></path>
<path d='M 144,64 L 152,64' fill='none' stroke='currentColor'></path>
<path d='M 152,80 L 160,80' fill='none' stroke='currentColor'></path>
<path d='M 144,208 L 152,208' fill='none' stroke='currentColor'></path>
<polygon points='128.000000,48.000000 116.000000,42.400002 116.000000,53.599998' fill='currentColor' transform='rotate(180.000000, 120.000000, 48.000000)'></polygon>
<polygon points='152.000000,64.000000 140.000000,58.400002 140.000000,69.599998' fill='currentColor' transform='rotate(180.000000, 144.000000, 64.000000)'></polygon>
<polygon points='152.000000,208.000000 140.000000,202.399994 140.000000,213.600006' fill='currentColor' transform='rotate(180.000000, 144.000000, 208.000000)'></polygon>
<polygon points='160.000000,80.000000 148.000000,74.400002 148.000000,85.599998' fill='currentColor' transform='rotate(180.000000, 152.000000, 80.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='0' y='148' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='0' y='164' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='8' y='148' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='8' y='164' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='16' y='164' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='24' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='32' y='148' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='32' y='164' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='32' y='180' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='40' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='40' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='40' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='48' y='116' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='48' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='48' y='260' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='116' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='56' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='260' fill='currentColor' style='font-size:1em'>?</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='64' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='64' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='64' y='164' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='64' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='212' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='64' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='260' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='72' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='196' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>W</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>W</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='116' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='80' y='196' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='80' y='212' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='228' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='80' y='244' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='260' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='100' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='88' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='88' y='148' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='88' y='164' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='88' y='212' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='88' y='244' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='88' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='96' y='148' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='96' y='196' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='96' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='228' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='96' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='104' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='116' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='104' y='196' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='104' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='104' y='228' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='104' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='260' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='116' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='112' y='148' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='112' y='196' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='112' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='112' y='228' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='112' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='120' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='100' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='120' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='196' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='120' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='120' y='228' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='120' y='244' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='120' y='260' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='128' y='100' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='128' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='128' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='212' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='244' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='128' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='136' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='136' y='100' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='136' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='136' y='196' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='100' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='144' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='244' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='152' y='100' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='152' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='152' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='152' y='196' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='152' y='228' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='152' y='244' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='152' y='260' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='160' y='100' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='244' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='168' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='148' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='168' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='212' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='168' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='244' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='168' y='260' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='176' y='68' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='176' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='176' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='176' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='148' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='176' y='196' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='212' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='176' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='244' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='184' y='84' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='184' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='184' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='148' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='184' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='212' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='184' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='184' y='260' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>K</text>
<text text-anchor='middle' x='192' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='192' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='192' y='100' fill='currentColor' style='font-size:1em'>W</text>
<text text-anchor='middle' x='192' y='116' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='192' y='148' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='192' y='212' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='192' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='200' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='100' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='200' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='148' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='200' y='196' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='200' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='200' y='228' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='200' y='260' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='208' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='208' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='208' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='208' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='208' y='148' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='208' y='196' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='208' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='228' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='216' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='216' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='216' y='148' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='216' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='212' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='216' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='260' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='224' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='224' y='84' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='224' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='116' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='224' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='212' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='232' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='232' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='240' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='240' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='240' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='240' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='260' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='248' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='248' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='248' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='248' y='196' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='248' y='212' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='228' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='248' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='256' y='52' fill='currentColor' style='font-size:1em'>K</text>
<text text-anchor='middle' x='256' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='256' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='256' y='196' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='256' y='228' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='256' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='264' y='52' fill='currentColor' style='font-size:1em'>W</text>
<text text-anchor='middle' x='264' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='264' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='52' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='272' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='272' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='272' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='280' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='280' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='280' y='196' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='280' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='288' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='288' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='288' y='228' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='288' y='260' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='296' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='304' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='304' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='320' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='328' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='336' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='344' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='352' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='360' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='368' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='376' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='384' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='392' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='400' y='100' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='416' y='100' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='424' y='100' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='432' y='100' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='440' y='100' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='448' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='456' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='464' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='472' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='480' y='100' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='488' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='496' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='504' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='512' y='100' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='520' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='528' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='544' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='552' y='100' fill='currentColor' style='font-size:1em'>)</text>
</g>

    </svg>
  
</div>
<p>However, not all elements of the original grammar are translated so readily.
The defined grammar is ambiguous; e.g. it does not inherently make explicit
whether <code>1 + 2 * 4</code> should be parsed as <code>(1 + 2) * 4</code> or as <code>1 + (2 * 4)</code>. As
such, on top of the the AST data structure we further define operator
precedence and associativity rules:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 520 249"
      >
      <g transform='translate(8,16)'>
<path d='M 360,0 L 368,0' fill='none' stroke='currentColor'></path>
<path d='M 384,128 L 392,128' fill='none' stroke='currentColor'></path>
<polygon points='376.000000,0.000000 364.000000,-5.600000 364.000000,5.600000' fill='currentColor' transform='rotate(0.000000, 368.000000, 0.000000)'></polygon>
<polygon points='400.000000,128.000000 388.000000,122.400002 388.000000,133.600006' fill='currentColor' transform='rotate(0.000000, 392.000000, 128.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='84' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='132' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='148' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='164' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='180' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='196' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='212' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='132' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='132' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='212' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='40' y='132' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='40' y='148' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='40' y='164' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='40' y='180' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='40' y='196' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='40' y='212' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='48' y='132' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='48' y='148' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='48' y='164' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='48' y='180' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='48' y='196' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='48' y='212' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='132' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='148' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='164' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='196' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='212' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='132' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='164' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='196' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='104' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='104' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='104' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='104' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='104' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='104' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='112' y='132' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='112' y='148' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='112' y='164' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='112' y='180' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='112' y='196' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='112' y='212' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='164' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='196' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='212' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='128' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='128' y='164' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='128' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='128' y='196' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='128' y='212' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='132' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='164' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='196' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='132' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='144' y='148' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='144' y='164' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='144' y='180' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='144' y='196' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='144' y='212' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='132' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='152' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='152' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='152' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='152' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='152' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='168' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='168' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='176' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='176' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='176' y='132' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='132' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='184' y='148' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='184' y='164' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='184' y='180' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='184' y='196' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='184' y='212' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='192' y='68' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='192' y='84' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='192' y='132' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='192' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='192' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='192' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='192' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='192' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='200' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='200' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='200' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='200' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='200' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='200' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='208' y='68' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='208' y='84' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='208' y='132' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='208' y='148' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='208' y='164' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='208' y='180' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='208' y='196' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='208' y='212' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='132' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='216' y='148' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='216' y='164' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='216' y='180' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='216' y='196' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='216' y='212' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='232' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='232' y='132' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='232' y='148' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='232' y='164' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='232' y='180' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='232' y='196' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='232' y='212' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='132' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='240' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='248' y='84' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='248' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='212' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='256' y='52' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='256' y='68' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='256' y='84' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='256' y='132' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='256' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='256' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='256' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='256' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='256' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='264' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='264' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='264' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='264' y='132' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='264' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='264' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='264' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='264' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='264' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='272' y='20' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='272' y='52' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='272' y='68' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='272' y='84' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='272' y='132' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='148' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='272' y='164' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='272' y='180' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='272' y='196' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='272' y='212' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='280' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='280' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='280' y='84' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='280' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='280' y='148' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='280' y='164' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='280' y='180' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='280' y='196' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='280' y='212' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='288' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='288' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='288' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='148' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='288' y='164' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='288' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='288' y='196' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='288' y='212' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='296' y='68' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='296' y='84' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='296' y='132' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='296' y='148' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='296' y='164' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='296' y='180' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='296' y='196' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='296' y='212' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='304' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='304' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='304' y='132' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='304' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='304' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='304' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='304' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='304' y='212' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='312' y='20' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='312' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='312' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='312' y='84' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='312' y='132' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='312' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='312' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='312' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='320' y='52' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='320' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='320' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='320' y='148' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='320' y='164' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='320' y='196' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='320' y='212' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='328' y='36' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='328' y='68' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='328' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='328' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='328' y='180' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='328' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='336' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='336' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='336' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='336' y='148' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='336' y='164' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='336' y='196' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='336' y='212' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='344' y='4' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='344' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='344' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='344' y='148' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='344' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='344' y='180' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='344' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='344' y='212' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='352' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='352' y='132' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='352' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='352' y='164' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='352' y='180' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='352' y='196' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='352' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='360' y='68' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='360' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='360' y='148' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='360' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='360' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='360' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='360' y='212' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='368' y='36' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='368' y='132' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='368' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='368' y='180' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='368' y='196' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='368' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='376' y='68' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='376' y='164' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='376' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='384' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='384' y='196' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='392' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='392' y='164' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='400' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='400' y='164' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='400' y='196' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='408' y='132' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='408' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='408' y='196' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='416' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='416' y='164' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='416' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='424' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='424' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='424' y='196' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='432' y='132' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='432' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='440' y='132' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='448' y='132' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='456' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='464' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='472' y='132' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='480' y='132' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='488' y='132' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='496' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='504' y='132' fill='currentColor' style='font-size:1em'>y</text>
</g>

    </svg>
  
</div>
<p>for which we can implement an expression parser as:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 440 265"
      >
      <g transform='translate(8,16)'>
<path d='M 160,0 L 168,0' fill='none' stroke='currentColor'></path>
<path d='M 216,16 L 224,16' fill='none' stroke='currentColor'></path>
<path d='M 112,48 L 120,48' fill='none' stroke='currentColor'></path>
<path d='M 64,64 L 72,64' fill='none' stroke='currentColor'></path>
<path d='M 224,112 L 232,112' fill='none' stroke='currentColor'></path>
<path d='M 144,128 L 152,128' fill='none' stroke='currentColor'></path>
<polygon points='72.000000,64.000000 60.000000,58.400002 60.000000,69.599998' fill='currentColor' transform='rotate(180.000000, 64.000000, 64.000000)'></polygon>
<polygon points='120.000000,48.000000 108.000000,42.400002 108.000000,53.599998' fill='currentColor' transform='rotate(180.000000, 112.000000, 48.000000)'></polygon>
<polygon points='152.000000,128.000000 140.000000,122.400002 140.000000,133.600006' fill='currentColor' transform='rotate(180.000000, 144.000000, 128.000000)'></polygon>
<polygon points='176.000000,0.000000 164.000000,-5.600000 164.000000,5.600000' fill='currentColor' transform='rotate(0.000000, 168.000000, 0.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='84' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='64' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='72' y='84' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='72' y='100' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='72' y='244' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='80' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='244' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='88' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='96' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='104' y='116' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='104' y='132' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='104' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='112' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='112' y='132' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='112' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='112' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='120' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='148' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='120' y='244' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='84' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='128' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='132' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='128' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='128' y='164' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='128' y='228' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='128' y='244' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='84' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='136' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='136' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='164' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='136' y='228' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='144' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='144' y='116' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='144' y='164' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='144' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='144' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='152' y='68' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='152' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='116' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='152' y='148' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='152' y='164' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='152' y='228' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='160' y='68' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='160' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='160' y='164' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='160' y='180' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='160' y='196' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='160' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='244' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='168' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='132' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='168' y='164' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='168' y='180' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='168' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='212' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='168' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='176' y='132' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='176' y='164' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='176' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='176' y='196' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='176' y='212' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='176' y='244' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='184' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='184' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='184' y='132' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='184' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='196' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='184' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='244' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='192' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='192' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='192' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='192' y='132' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='192' y='164' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='192' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='192' y='212' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='192' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='200' y='84' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='200' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='200' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='200' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='200' y='196' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='200' y='212' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='200' y='244' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='208' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='208' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='216' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='216' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='196' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='216' y='244' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='224' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='224' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='224' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='196' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='224' y='244' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='232' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='132' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='232' y='164' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='240' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='240' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='240' y='132' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='240' y='164' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='248' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='116' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='248' y='132' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='164' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='256' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='256' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='256' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='256' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='256' y='132' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='68' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='264' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='264' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='272' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='272' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='272' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='272' y='132' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='280' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='116' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='280' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='288' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='288' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='84' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='288' y='116' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='288' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='296' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='296' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='296' y='84' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='296' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='132' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='304' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='304' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='304' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='304' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='304' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='312' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='312' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='312' y='116' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='312' y='132' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='320' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='320' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='320' y='84' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='320' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='320' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='328' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='328' y='84' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='328' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='328' y='132' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='336' y='52' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='336' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='336' y='132' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='344' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='344' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='344' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='344' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='352' y='52' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='352' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='352' y='116' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='360' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='360' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='368' y='52' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='368' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='368' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='376' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='376' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='384' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='384' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='392' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='392' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='400' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='400' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='408' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='408' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='416' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='416' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='424' y='116' fill='currentColor' style='font-size:1em'>r</text>
</g>

    </svg>
  
</div>
<h2 id="pretty-printing">Pretty printing</h2>
<p>Based on the abstract syntax tree, &amp;SPL source code can automatically be pretty printed. For example,</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 664 25"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='344' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='352' y='4' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='360' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='376' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='384' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='392' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='400' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='416' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='424' y='4' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='432' y='4' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='440' y='4' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='448' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='456' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='464' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='472' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='480' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='488' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='496' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='504' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='512' y='4' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='520' y='4' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='528' y='4' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='536' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='544' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='552' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='560' y='4' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='568' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='576' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='584' y='4' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='592' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='600' y='4' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='608' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='616' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='624' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='632' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='640' y='4' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='648' y='4' fill='currentColor' style='font-size:1em'>}</text>
</g>

    </svg>
  
</div>
<p>becomes</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 224 201"
      >
      <g transform='translate(8,16)'>
<path d='M 168,0 L 176,0' fill='none' stroke='currentColor'></path>
<path d='M 88,128 L 96,128' fill='none' stroke='currentColor'></path>
<polygon points='104.000000,128.000000 92.000000,122.400002 92.000000,133.600006' fill='currentColor' transform='rotate(0.000000, 96.000000, 128.000000)'></polygon>
<polygon points='184.000000,0.000000 172.000000,-5.600000 172.000000,5.600000' fill='currentColor' transform='rotate(0.000000, 176.000000, 0.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='0' y='132' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='0' y='148' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='0' y='180' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='8' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='16' y='132' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='24' y='132' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='32' y='164' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='40' y='164' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='164' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='56' y='164' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='132' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='132' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='72' y='164' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='88' y='164' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='96' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='164' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='112' y='132' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='112' y='164' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='132' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='128' y='84' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='128' y='132' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='136' y='132' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>t</text>
</g>

    </svg>
  
</div>
<p>Additionally, unnecessary parentheses are ignored:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 272 73"
      >
      <g transform='translate(8,16)'>
<circle cx='88' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='104' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='176' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='184' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='8' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='200' y='52' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='256' y='52' fill='currentColor' style='font-size:1em'>;</text>
</g>

    </svg>
  
</div>
<p>becomes</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 272 73"
      >
      <g transform='translate(8,16)'>
<circle cx='88' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='88' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='152' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='176' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='8' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='200' y='52' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='256' y='52' fill='currentColor' style='font-size:1em'>;</text>
</g>

    </svg>
  
</div>
<h1 id="typing">Typing</h1>
<p>&amp;SPL is a strongly typed-language. However, unlike strongly-typed languages
such as C++, the programmer is not required to annotate the source code with
variable and function type definitions in &amp;SPL. The &amp;SPL compiler has a
powerful type inference system based on type unification. In many cases a
programmer does not need to supply any type annotations in a &amp;SPL program at
all.</p>
<h2 id="type-system">Type system</h2>
<p>&amp;SPL has well-defined typing rules. The type system is based on the
Hindley-Milner system [bicite key=milner1978theory], allowing for polymorphism
and inference to find the most general type. The rules state what the resulting
type is given the input types of an expression, statement, etc. Any expression,
statement, etc., without a corresponding typing rule is illegal.</p>
<p>For example, given an element a of type A, the expression [a] will be of type
[A]. Typing &amp;SPL source code entails proving the types of statements,
expression, etc., are consistent using these rules. The rules can be formalized
in a natural deduction style:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 344 857"
      >
      <g transform='translate(8,16)'>
<path d='M 0,0 L 56,0' fill='none' stroke='currentColor'></path>
<path d='M 0,48 L 64,48' fill='none' stroke='currentColor'></path>
<path d='M 0,96 L 64,96' fill='none' stroke='currentColor'></path>
<path d='M 0,144 L 64,144' fill='none' stroke='currentColor'></path>
<path d='M 0,208 L 56,208' fill='none' stroke='currentColor'></path>
<path d='M 0,272 L 112,272' fill='none' stroke='currentColor'></path>
<path d='M 0,336 L 48,336' fill='none' stroke='currentColor'></path>
<path d='M 0,400 L 208,400' fill='none' stroke='currentColor'></path>
<path d='M 224,400 L 240,400' fill='none' stroke='currentColor'></path>
<path d='M 112,416 L 120,416' fill='none' stroke='currentColor'></path>
<path d='M 0,496 L 136,496' fill='none' stroke='currentColor'></path>
<path d='M 40,512 L 48,512' fill='none' stroke='currentColor'></path>
<path d='M 0,560 L 192,560' fill='none' stroke='currentColor'></path>
<path d='M 80,576 L 88,576' fill='none' stroke='currentColor'></path>
<path d='M 24,640 L 32,640' fill='none' stroke='currentColor'></path>
<path d='M 152,640 L 160,640' fill='none' stroke='currentColor'></path>
<path d='M 0,656 L 224,656' fill='none' stroke='currentColor'></path>
<path d='M 56,672 L 64,672' fill='none' stroke='currentColor'></path>
<path d='M 32,704 L 40,704' fill='none' stroke='currentColor'></path>
<path d='M 0,720 L 88,720' fill='none' stroke='currentColor'></path>
<path d='M 24,736 L 32,736' fill='none' stroke='currentColor'></path>
<path d='M 24,768 L 32,768' fill='none' stroke='currentColor'></path>
<path d='M 0,784 L 80,784' fill='none' stroke='currentColor'></path>
<path d='M 24,800 L 32,800' fill='none' stroke='currentColor'></path>
<path d='M 16,632 L 16,648' fill='none' stroke='currentColor'></path>
<path d='M 16,728 L 16,744' fill='none' stroke='currentColor'></path>
<path d='M 16,760 L 16,776' fill='none' stroke='currentColor'></path>
<path d='M 16,792 L 16,808' fill='none' stroke='currentColor'></path>
<path d='M 24,696 L 24,712' fill='none' stroke='currentColor'></path>
<path d='M 32,504 L 32,520' fill='none' stroke='currentColor'></path>
<path d='M 48,664 L 48,680' fill='none' stroke='currentColor'></path>
<path d='M 72,568 L 72,584' fill='none' stroke='currentColor'></path>
<path d='M 144,632 L 144,648' fill='none' stroke='currentColor'></path>
<path d='M 16,640 L 16,648' fill='none' stroke='currentColor'></path>
<path d='M 16,728 L 16,736' fill='none' stroke='currentColor'></path>
<path d='M 16,768 L 16,776' fill='none' stroke='currentColor'></path>
<path d='M 16,792 L 16,800' fill='none' stroke='currentColor'></path>
<path d='M 24,704 L 24,712' fill='none' stroke='currentColor'></path>
<path d='M 32,504 L 32,512' fill='none' stroke='currentColor'></path>
<path d='M 48,664 L 48,672' fill='none' stroke='currentColor'></path>
<path d='M 72,568 L 72,576' fill='none' stroke='currentColor'></path>
<path d='M 144,640 L 144,648' fill='none' stroke='currentColor'></path>
<polygon points='8.000000,160.000000 -4.000000,154.399994 -4.000000,165.600006' fill='currentColor' transform='rotate(90.000000, 0.000000, 160.000000)'></polygon>
<polygon points='88.000000,144.000000 76.000000,138.399994 76.000000,149.600006' fill='currentColor' transform='rotate(90.000000, 80.000000, 144.000000)'></polygon>
<polygon points='128.000000,416.000000 116.000000,410.399994 116.000000,421.600006' fill='currentColor' transform='rotate(0.000000, 120.000000, 416.000000)'></polygon>
<polygon points='248.000000,400.000000 236.000000,394.399994 236.000000,405.600006' fill='currentColor' transform='rotate(0.000000, 240.000000, 400.000000)'></polygon>
<circle cx='72' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='96' cy='784' r='6' stroke='currentColor' fill='currentColor'></circle>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='0' y='228' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='0' y='260' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='0' y='324' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='0' y='356' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='0' y='388' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='0' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='484' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='548' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='0' y='644' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='0' y='740' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='0' y='772' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='0' y='804' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='8' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='8' y='116' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='8' y='164' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='8' y='196' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='8' y='228' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='8' y='356' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='8' y='388' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='8' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='8' y='708' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='16' y='228' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='16' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='292' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='16' y='324' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='16' y='484' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='16' y='516' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='16' y='548' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='24' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='24' y='164' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='24' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='24' y='260' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='24' y='292' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='24' y='324' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='24' y='356' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='24' y='388' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='24' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='24' y='484' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='24' y='548' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='32' y='196' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='32' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='32' y='260' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='292' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='32' y='324' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='356' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='32' y='388' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='32' y='420' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='32' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='32' y='676' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='40' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='40' y='196' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='40' y='228' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='40' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='324' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='356' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='40' y='388' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='40' y='420' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='40' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='40' y='484' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='40' y='548' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='40' y='644' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='740' fill='currentColor' style='font-size:1em'>&amp;</text>
<text text-anchor='middle' x='40' y='772' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='804' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='48' y='116' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='48' y='164' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='48' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='228' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='48' y='292' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='48' y='356' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='388' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='48' y='484' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='48' y='548' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='48' y='644' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='48' y='708' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='740' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='804' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='164' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='292' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='56' y='420' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='56' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='56' y='484' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='516' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='56' y='548' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='56' y='580' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='56' y='772' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='420' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='64' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='64' y='484' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='548' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='64' y='644' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='64' y='708' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='64' y='740' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='64' y='804' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='72' y='212' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='72' y='260' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='72' y='292' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='72' y='388' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='72' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='72' y='484' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='516' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='72' y='548' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='72' y='676' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='772' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='80' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='80' y='212' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='80' y='292' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='80' y='388' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='80' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='80' y='484' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='80' y='644' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='676' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='80' y='708' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='80' y='740' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='80' y='772' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='80' y='804' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='88' y='100' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='88' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='88' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='292' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='88' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='88' y='516' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='88' y='548' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='88' y='644' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='740' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='96' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='212' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='96' y='260' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='96' y='292' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='340' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='96' y='388' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='484' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='96' y='516' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='548' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='96' y='580' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='644' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='676' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='104' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='104' y='148' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='104' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='260' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='104' y='340' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='388' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='104' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='104' y='484' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='516' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='548' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='104' y='676' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='104' y='724' fill='currentColor' style='font-size:1em'>&amp;</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='340' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='388' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='112' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='112' y='484' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='112' y='516' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='112' y='580' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='120' y='100' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='120' y='148' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='120' y='212' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='120' y='340' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='120' y='388' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='120' y='484' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='548' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='120' y='676' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='128' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='128' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='128' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='128' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='276' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='128' y='340' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='128' y='484' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='548' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='128' y='580' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='128' y='644' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='128' y='676' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='136' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='136' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='136' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='136' y='276' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='136' y='340' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='136' y='420' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='136' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='136' y='484' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='136' y='580' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='144' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='144' y='148' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='144' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='144' y='276' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='144' y='340' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='144' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='144' y='548' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='144' y='580' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='676' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='152' y='340' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='152' y='420' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='152' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='152' y='500' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='152' y='548' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='212' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='276' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='160' y='340' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='420' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='160' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='160' y='500' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='160' y='676' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='168' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='168' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='168' y='276' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='168' y='388' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='168' y='420' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='168' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='168' y='500' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='168' y='644' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='676' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='276' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='176' y='420' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='176' y='500' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='176' y='644' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='176' y='676' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='184' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='184' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='184' y='276' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='184' y='388' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='184' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='184' y='548' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='184' y='676' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='192' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='192' y='388' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='192' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='192' y='548' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='192' y='644' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='200' y='276' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='200' y='388' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='200' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='208' y='276' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='208' y='388' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='452' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='208' y='564' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='208' y='644' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='276' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='216' y='564' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='216' y='644' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='276' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='564' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='224' y='644' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='240' y='660' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='248' y='660' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='264' y='404' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='272' y='404' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='280' y='404' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='404' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='296' y='404' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='304' y='404' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='312' y='404' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='320' y='404' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='328' y='404' fill='currentColor' style='font-size:1em'>n</text>
</g>

    </svg>
  
</div>
<h2 id="type-inference">Type inference</h2>
<p>The type system used allows for automatic inference to the most general type.
Type inference is implemented using Algorithm M, which is a top-down algorithm
using unification to solve type constraints. The type constraints come from the
AST in combination with the defined type rules (see the Type system section
above).</p>
<p>For example, the reference and dereference rules shown above are implemented as
follows:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 392 233"
      >
      <g transform='translate(8,16)'>
<path d='M 192,96 L 200,96' fill='none' stroke='currentColor'></path>
<path d='M 120,112 L 128,112' fill='none' stroke='currentColor'></path>
<path d='M 80,160 L 88,160' fill='none' stroke='currentColor'></path>
<path d='M 64,168 L 72,168' fill='none' stroke='currentColor'></path>
<polygon points='96.000000,160.000000 84.000000,154.399994 84.000000,165.600006' fill='currentColor' transform='rotate(0.000000, 88.000000, 160.000000)'></polygon>
<polygon points='104.000000,144.000000 92.000000,138.399994 92.000000,149.600006' fill='currentColor' transform='rotate(90.000000, 96.000000, 144.000000)'></polygon>
<polygon points='128.000000,112.000000 116.000000,106.400002 116.000000,117.599998' fill='currentColor' transform='rotate(180.000000, 120.000000, 112.000000)'></polygon>
<polygon points='208.000000,96.000000 196.000000,90.400002 196.000000,101.599998' fill='currentColor' transform='rotate(0.000000, 200.000000, 96.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='8' y='68' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>U</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>U</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='64' y='100' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>G</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='72' y='84' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='72' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>U</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='96' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='104' y='116' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='104' y='132' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='104' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='112' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='112' y='132' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='112' y='164' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='120' y='84' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='120' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='132' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='120' y='148' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='180' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='120' y='196' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='120' y='212' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='128' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='128' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='128' y='132' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='128' y='164' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='128' y='180' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='128' y='196' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='128' y='212' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='136' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='136' y='132' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='136' y='148' fill='currentColor' style='font-size:1em'>$</text>
<text text-anchor='middle' x='136' y='164' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='136' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='212' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='144' y='100' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='144' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='132' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='144' y='164' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='144' y='180' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='144' y='196' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='144' y='212' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>U</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='152' y='68' fill='currentColor' style='font-size:1em'>U</text>
<text text-anchor='middle' x='152' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='152' y='148' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='152' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='152' y='180' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='152' y='196' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='152' y='212' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='160' y='148' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='160' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='212' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='168' y='100' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='168' y='116' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='168' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='148' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='168' y='164' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='168' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='168' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='168' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='176' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='176' y='84' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='176' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='116' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='176' y='132' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='176' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='176' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='196' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='184' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='184' y='148' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='184' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='192' y='68' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='192' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='164' fill='currentColor' style='font-size:1em'>$</text>
<text text-anchor='middle' x='192' y='196' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='192' y='212' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='200' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='200' y='116' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='200' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='200' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='68' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='208' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='208' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='212' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='216' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='216' y='148' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='216' y='196' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='224' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='224' y='148' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='224' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='224' y='212' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='116' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='232' y='148' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='232' y='196' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='232' y='212' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='240' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='240' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='248' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='256' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='256' y='116' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='256' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='256' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='264' y='116' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='264' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='264' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='196' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='280' y='68' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='280' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='280' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='288' y='196' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='296' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='296' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='296' y='196' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='304' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='304' y='148' fill='currentColor' style='font-size:1em'>`</text>
<text text-anchor='middle' x='304' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='312' y='148' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='312' y='196' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='320' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='320' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='328' y='196' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='336' y='68' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='336' y='196' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='344' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='352' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='352' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='360' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='368' y='196' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='376' y='4' fill='currentColor' style='font-size:1em'>o</text>
</g>

    </svg>
  
</div>
<p>Here, the metaMGU statements are used to enable annotating the AST with type
information. They are not actually part of the type inference itself. We see
that the type inference for the unary reference operator is based on an
additional &ldquo;meta type&rdquo; of the expression, namely its value type. This is
expanded upon in the next section.</p>
<h2 id="value-types">Value types</h2>
<p>&amp;SPL provides pointers, with referencing and dereferencing, and assignment to
expressions. These constructs make use of the address of a value in memory. The
address of a value only makes semantic sense if the value exists for longer
than the expression it is used in; i.e., it should be persistent over multiple
statements. As such, each expression has an associated value type that is
either persistent or temporary.</p>
<p>Intuitively, an expression has a persistent value type if it is derived from a
named entity, and has a temporary value type otherwise. Value types are, with
some abuse of notation, inductively defined as follows:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 208 361"
      >
      <g transform='translate(8,16)'>
<path d='M 0,0 L 192,0' fill='none' stroke='currentColor'></path>
<path d='M 0,64 L 80,64' fill='none' stroke='currentColor'></path>
<path d='M 0,128 L 80,128' fill='none' stroke='currentColor'></path>
<path d='M 0,192 L 144,192' fill='none' stroke='currentColor'></path>
<path d='M 0,256 L 176,256' fill='none' stroke='currentColor'></path>
<path d='M 0,320 L 136,320' fill='none' stroke='currentColor'></path>
<circle cx='0' cy='80' r='6' stroke='currentColor' fill='currentColor'></circle>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='148' fill='currentColor' style='font-size:1em'>&amp;</text>
<text text-anchor='middle' x='0' y='276' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='0' y='308' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='0' y='340' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='8' y='84' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='8' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='8' y='148' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='8' y='212' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='8' y='276' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='8' y='308' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='8' y='340' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='16' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='16' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='16' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='276' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='16' y='308' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='16' y='340' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='84' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='24' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='148' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='24' y='212' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='24' y='276' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='308' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='340' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='148' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='212' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='276' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='308' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='340' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='40' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='40' y='180' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='40' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='276' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='40' y='308' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='40' y='340' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='48' y='148' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='48' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='212' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='48' y='276' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='48' y='308' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='56' y='116' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='56' y='180' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='56' y='212' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='56' y='244' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='56' y='276' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='56' y='308' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='56' y='340' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='64' y='84' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='64' y='148' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='64' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='64' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='276' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='64' y='308' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='72' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='212' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='72' y='244' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='72' y='276' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='72' y='308' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='72' y='340' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='80' y='148' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='80' y='180' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='80' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='244' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='80' y='276' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='340' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='88' y='212' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='88' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='88' y='276' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='340' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='96' y='180' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='96' y='212' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='96' y='244' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='96' y='276' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='340' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='104' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='104' y='276' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='104' y='340' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='180' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='112' y='212' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='112' y='244' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='112' y='276' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='112' y='340' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='120' y='276' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='120' y='340' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='212' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='128' y='244' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='128' y='276' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='340' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='136' y='276' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='136' y='340' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='144' y='212' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='144' y='276' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='160' y='276' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='276' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>t</text>
</g>

    </svg>
  
</div>
<h2 id="dependency-analysis">Dependency analysis</h2>
<p>The type system used allows for polymorphism, but this entails AST types should
be inferred to their most general type. As such, it is undesirable to solve the
entire program in a single set of constraints, as this would destroy the
ability to have polymorphism.</p>
<p>Instead, type constraint unification is performed in blocks of mutually
dependent declarations, after which the found types in those blocks are
generalized. Generalization transforms the free type variables in the found
most general types into bound type schemes, or &ldquo;forall types.&rdquo;</p>
<p>The dependencies of a declaration are found by traversing the AST and noting
all other declarations it uses, thereby building a graph of dependencies. The
strongly connected components are identified in this graph, thus finding all
declarations that are mutually dependent. Then, the groups of mutually
dependent declarations are toplogically ordered such that groups containing
declarations are processed and generalized before groups that depend on those
declarations.</p>
<h2 id="ast-notation">AST notation</h2>
<p>The AST is annotated with the found types, such that the code generator has
access to type information of any AST element.</p>
<h3 id="example">Example</h3>
<p>The following unannotated code</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 280 377"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='0' y='84' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='0' y='132' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='0' y='164' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='0' y='196' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='0' y='212' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='0' y='244' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='0' y='276' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='0' y='292' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='0' y='356' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='8' y='116' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='8' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='8' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='16' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='276' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='24' y='196' fill='currentColor' style='font-size:1em'>X</text>
<text text-anchor='middle' x='24' y='276' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='116' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='32' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='276' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='32' y='308' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='32' y='324' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='32' y='340' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='40' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='276' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='40' y='308' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='324' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='340' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='116' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='48' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='308' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='324' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='340' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='56' y='148' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='56' y='228' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='64' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='308' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='64' y='324' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='64' y='340' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='72' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='308' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='80' y='324' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='80' y='340' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='88' y='148' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='88' y='228' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='96' y='228' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='96' y='308' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='324' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='340' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='104' y='148' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='104' y='308' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='104' y='324' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='104' y='340' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='112' y='308' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='112' y='324' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='112' y='340' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='120' y='148' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='120' y='308' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='120' y='324' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='120' y='340' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='128' y='148' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='128' y='308' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='128' y='324' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='128' y='340' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='136' y='324' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='136' y='340' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='144' y='308' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='144' y='324' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='144' y='340' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='308' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='160' y='308' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='160' y='324' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='160' y='340' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='168' y='324' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='176' y='324' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='176' y='340' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='184' y='324' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='184' y='340' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='192' y='324' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='192' y='340' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='208' y='340' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='224' y='340' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='240' y='340' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='248' y='340' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='256' y='340' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='264' y='340' fill='currentColor' style='font-size:1em'>;</text>
</g>

    </svg>
  
</div>
<p>is automatically typed as follows</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 288 377"
      >
      <g transform='translate(8,16)'>
<path d='M 136,32 L 144,32' fill='none' stroke='currentColor'></path>
<path d='M 176,112 L 184,112' fill='none' stroke='currentColor'></path>
<path d='M 88,192 L 96,192' fill='none' stroke='currentColor'></path>
<path d='M 80,272 L 88,272' fill='none' stroke='currentColor'></path>
<polygon points='96.000000,272.000000 84.000000,266.399994 84.000000,277.600006' fill='currentColor' transform='rotate(0.000000, 88.000000, 272.000000)'></polygon>
<polygon points='104.000000,192.000000 92.000000,186.399994 92.000000,197.600006' fill='currentColor' transform='rotate(0.000000, 96.000000, 192.000000)'></polygon>
<polygon points='152.000000,32.000000 140.000000,26.400000 140.000000,37.599998' fill='currentColor' transform='rotate(0.000000, 144.000000, 32.000000)'></polygon>
<polygon points='192.000000,112.000000 180.000000,106.400002 180.000000,117.599998' fill='currentColor' transform='rotate(0.000000, 184.000000, 112.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='0' y='84' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='0' y='132' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='0' y='164' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='0' y='196' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='0' y='212' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='0' y='244' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='0' y='276' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='0' y='292' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='0' y='356' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='8' y='116' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='8' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='8' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='16' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='276' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='24' y='196' fill='currentColor' style='font-size:1em'>X</text>
<text text-anchor='middle' x='24' y='276' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='116' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='32' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='276' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='32' y='308' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='32' y='324' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='32' y='340' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='40' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='276' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='40' y='308' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='40' y='324' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='40' y='340' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='116' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='48' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='308' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='48' y='324' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='48' y='340' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='56' y='148' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='56' y='228' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='56' y='276' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='56' y='308' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='56' y='324' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='56' y='340' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='64' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='196' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='64' y='228' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='276' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='72' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='196' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='72' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='308' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='324' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='72' y='340' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='88' y='116' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='88' y='148' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='88' y='228' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='88' y='308' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='88' y='324' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='88' y='340' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='116' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='96' y='228' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='104' y='148' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='104' y='276' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='104' y='308' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='324' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='340' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='112' y='116' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='112' y='196' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='112' y='276' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='308' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='112' y='324' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='112' y='340' fill='currentColor' style='font-size:1em'>q</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='148' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='120' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='276' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='120' y='308' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='120' y='324' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='120' y='340' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='128' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='128' y='148' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='128' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='128' y='276' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='128' y='308' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='128' y='324' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='128' y='340' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='136' y='308' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='136' y='324' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='136' y='340' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='144' y='116' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='144' y='324' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='144' y='340' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='152' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='152' y='308' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='152' y='324' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='152' y='340' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='308' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='168' y='308' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='168' y='324' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='168' y='340' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='324' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='184' y='324' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='184' y='340' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='192' y='324' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='192' y='340' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='200' y='116' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='200' y='324' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='200' y='340' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='208' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='216' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='216' y='340' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='232' y='340' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='248' y='340' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='256' y='340' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='264' y='340' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='272' y='340' fill='currentColor' style='font-size:1em'>;</text>
</g>

    </svg>
  
</div>
<h1 id="code-generation">Code generation</h1>
<p>After typing has been completed successfully, the resulting AST makes semantic
sense within the rules of the language, and can be transformed into machine
code. Here, the AST is transformed into SSM assembly. Each line of SSM assembly
contains an instruction and optionally a label and a comment. The comments are
for annotation purposes only and otherwise ignored. The labels are resolved to
numeric constants by the SSM assembler.</p>
<h2 id="intermediate-ssm-representation">Intermediate SSM representation</h2>
<p>It would be possible to output the code generated from the AST directly in the
plaintext assembly format. However, this is prone to mistakes and makes
post-processing difficult. Instead, the AST is first compiled to an
intermediate SSM representation, which is then compiled to plaintext. The SSM
code is represented as a list of SSM lines. Lines are defined as:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 336 73"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='256' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='264' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='272' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='280' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='288' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='312' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'>)</text>
</g>

    </svg>
  
</div>
<p>with:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 560 377"
      >
      <g transform='translate(8,16)'>
<path d='M 104,160 L 104,208' fill='none' stroke='currentColor'></path>
<path d='M 136,288 L 136,352' fill='none' stroke='currentColor'></path>
<path d='M 160,64 L 160,112' fill='none' stroke='currentColor'></path>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='0' y='148' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='0' y='276' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='8' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='276' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='40' y='148' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='40' y='276' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='48' y='148' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='48' y='276' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='56' y='148' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='56' y='276' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='64' y='148' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='64' y='276' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='276' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='80' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='276' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='148' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='88' y='276' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='96' y='276' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='104' y='148' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='104' y='276' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='112' y='276' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='120' y='148' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='120' y='164' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='120' y='180' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='120' y='196' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='120' y='276' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='128' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='128' y='148' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='128' y='164' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='128' y='180' fill='currentColor' style='font-size:1em'>H</text>
<text text-anchor='middle' x='128' y='196' fill='currentColor' style='font-size:1em'>H</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='136' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='276' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='152' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='152' y='164' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='152' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='152' y='196' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='152' y='276' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='152' y='292' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='152' y='308' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='152' y='324' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='152' y='340' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='152' y='356' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='160' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='164' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='160' y='196' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='160' y='276' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='160' y='292' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='160' y='308' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='160' y='324' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='160' y='340' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='160' y='356' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='168' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='180' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='168' y='196' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='168' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='292' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='308' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='168' y='324' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='168' y='340' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='356' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='176' y='68' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='176' y='84' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='176' y='100' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='176' y='116' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='176' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='176' y='164' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='176' y='180' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='176' y='196' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='176' y='276' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='176' y='292' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='176' y='308' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='176' y='324' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='176' y='340' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='176' y='356' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='184' y='84' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='184' y='100' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='184' y='116' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='184' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='184' y='164' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='184' y='180' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='184' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='184' y='276' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='292' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='184' y='308' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='184' y='324' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='340' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='184' y='356' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='192' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='192' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='192' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='192' y='116' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='192' y='164' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='192' y='180' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='192' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='192' y='276' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='192' y='292' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='192' y='308' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='356' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='200' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='200' y='84' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='200' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='200' y='148' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='200' y='164' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='200' y='180' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='200' y='196' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='200' y='292' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='200' y='308' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='200' y='324' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='200' y='340' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='208' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='208' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='208' y='116' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='208' y='148' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='208' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='180' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='208' y='196' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='208' y='276' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='208' y='292' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='324' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='208' y='340' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='208' y='356' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='84' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='216' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='216' y='116' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='216' y='148' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='216' y='164' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='216' y='180' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='216' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='276' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='216' y='292' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='216' y='308' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='216' y='324' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='340' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='216' y='356' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='224' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='224' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='224' y='116' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='224' y='148' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='224' y='164' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='224' y='180' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='224' y='276' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='224' y='308' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='324' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='340' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='224' y='356' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='232' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='232' y='116' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='232' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='232' y='164' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='232' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='196' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='232' y='276' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='232' y='292' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='232' y='308' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='232' y='340' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='232' y='356' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='240' y='68' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='240' y='116' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='240' y='148' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='240' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='240' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='196' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='240' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='240' y='292' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='240' y='340' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='240' y='356' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='248' y='84' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='248' y='100' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='248' y='148' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='248' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='248' y='196' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='248' y='276' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='248' y='292' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='248' y='356' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='256' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='256' y='68' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='256' y='84' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='256' y='100' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='256' y='148' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='256' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='256' y='196' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='256' y='276' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='256' y='292' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='264' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='264' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='264' y='84' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='264' y='100' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='264' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='264' y='276' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='264' y='292' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='272' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='272' y='84' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='272' y='100' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='272' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='196' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='272' y='292' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='280' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='280' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='280' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='280' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='280' y='196' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='280' y='292' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='288' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='288' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='288' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='288' y='196' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='288' y='292' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='296' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='296' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='296' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='292' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='304' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='304' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='304' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='304' y='292' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='312' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='312' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='312' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='312' y='292' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='320' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='320' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='328' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='328' y='196' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='336' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='336' y='196' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='344' y='196' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='352' y='196' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='360' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='368' y='196' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='376' y='196' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='384' y='196' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='392' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='400' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='408' y='196' fill='currentColor' style='font-size:1em'>t</text>
</g>

    </svg>
  
</div>
<h2 id="stack-based">Stack-based</h2>
<p>The SSM is, as its name suggests, stack-based, and as such code generation
proceeds in a simple stack-based manner; i.e., evaluation of expressions is
implemented akin to reverse Polish notation.</p>
<p>For example, evaluating a binary operation expression is performed by
evaluating the first expression, evaluating the second expression, and then
executing the operator instruction.</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 528 137"
      >
      <g transform='translate(8,16)'>
<path d='M 128,32 L 136,32' fill='none' stroke='currentColor'></path>
<path d='M 192,64 L 200,64' fill='none' stroke='currentColor'></path>
<path d='M 464,8 L 472,8' fill='none' stroke='currentColor'></path>
<polygon points='144.000000,32.000000 132.000000,26.400000 132.000000,37.599998' fill='currentColor' transform='rotate(0.000000, 136.000000, 32.000000)'></polygon>
<polygon points='208.000000,64.000000 196.000000,58.400002 196.000000,69.599998' fill='currentColor' transform='rotate(0.000000, 200.000000, 64.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>J</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>J</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='152' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='160' y='84' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='160' y='100' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='68' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='176' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='176' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='176' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='184' y='84' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='184' y='100' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='184' y='116' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='192' y='84' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='192' y='100' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='192' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='200' y='52' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='200' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='200' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='200' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='208' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='216' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='224' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='116' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='232' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='232' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='232' y='116' fill='currentColor' style='font-size:1em'>O</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='240' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='248' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='248' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='256' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='256' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='256' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='264' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='272' y='52' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='272' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='84' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='280' y='100' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='280' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='288' y='116' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>@</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='304' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='312' y='116' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='344' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='352' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='376' y='4' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='384' y='4' fill='currentColor' style='font-size:1em'>@</text>
<text text-anchor='middle' x='392' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='400' y='4' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='408' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='424' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='432' y='4' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='440' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='448' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='488' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='504' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='512' y='4' fill='currentColor' style='font-size:1em'>o</text>
</g>

    </svg>
  
</div>
<p>However, the SSM also provides a heap and multiple registers. The registers are
largely ignored in generated code, though some are used implicitly by
instructions to control the flow through the program code and stack. The only
exception is the return register, which is used explicitly to set and retrieve
function results. The heap is used in dynamic memory allocation.</p>
<h2 id="caller--callee-convention">Caller / callee convention</h2>
<p>It is important to clearly define the program flow when generating code.
Perhaps most apparent is the need to set up a clear function caller / callee
convention. When calling a function, the function frame has to be set up, and
the frame should be cleared upon leaving the function. However, there are
multiple ways this can be achieved. For example, either the calling or the
called code could reserve stack space for the function locals, and either the
calling or the called code could subsequently clear the stack space.</p>
<p>Here, the convention is taken that the calling code evaluates the argument
expressions in reverse order, places the return address on the stack, and
finally branches to the called code. Upon returning, the calling code cleans
the evaluated argument expressions from the stack. Upon entering the called
code, stack space is allocated for any additional locals. Prior to leaving the
called code, any objects with a class type (including objects passed as
arguments) are destructed, the reserved space for locals is cleared, and the
return address is popped from the stack.</p>
<p>Inspecting the stack for the following program right before returning from <code>f</code>,
we see:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 280 249"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='0' y='164' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='0' y='180' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='0' y='196' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='0' y='228' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='16' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='32' y='148' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='32' y='212' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='212' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='212' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='56' y='212' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='64' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='64' y='132' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='64' y='212' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='212' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='80' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='212' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='88' y='212' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='96' y='116' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='96' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='96' y='212' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='104' y='116' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='104' y='212' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='112' y='132' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='112' y='212' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='120' y='84' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='120' y='212' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='128' y='84' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='128' y='132' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='128' y='212' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='136' y='84' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='136' y='116' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='136' y='132' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='144' y='84' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='144' y='116' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='144' y='132' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='144' y='212' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='152' y='84' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='152' y='116' fill='currentColor' style='font-size:1em'>9</text>
<text text-anchor='middle' x='152' y='132' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='152' y='212' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='160' y='84' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>9</text>
<text text-anchor='middle' x='160' y='132' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='160' y='212' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='168' y='84' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='168' y='116' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='168' y='132' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='176' y='84' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='176' y='116' fill='currentColor' style='font-size:1em'>8</text>
<text text-anchor='middle' x='176' y='132' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='176' y='212' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='184' y='116' fill='currentColor' style='font-size:1em'>7</text>
<text text-anchor='middle' x='184' y='132' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='184' y='212' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='192' y='116' fill='currentColor' style='font-size:1em'>7</text>
<text text-anchor='middle' x='192' y='132' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='192' y='212' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='200' y='116' fill='currentColor' style='font-size:1em'>6</text>
<text text-anchor='middle' x='200' y='132' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='200' y='212' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='208' y='116' fill='currentColor' style='font-size:1em'>6</text>
<text text-anchor='middle' x='208' y='132' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='208' y='212' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='216' y='116' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='216' y='212' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='224' y='212' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='232' y='212' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='240' y='212' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='248' y='212' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='256' y='212' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='264' y='212' fill='currentColor' style='font-size:1em'>;</text>
</g>

    </svg>
  
</div>
<table>
  <thead>
      <tr>
          <th>Address</th>
          <th>Value</th>
          <th>RegPtr</th>
          <th> </th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>00000079</td>
          <td>ffffffff</td>
          <td></td>
          <td>Global g2</td>
      </tr>
      <tr>
          <td>0000007a</td>
          <td>baaaaaad</td>
          <td></td>
          <td>Global g1</td>
      </tr>
      <tr>
          <td> </td>
          <td></td>
          <td></td>
          <td></td>
      </tr>
      <tr>
          <td>0000007b</td>
          <td>00000006</td>
          <td></td>
          <td>Ret. addr. from main (to halt)</td>
      </tr>
      <tr>
          <td>0000007c</td>
          <td>00000078</td>
          <td></td>
          <td>Prev. frame pointer</td>
      </tr>
      <tr>
          <td> </td>
          <td></td>
          <td></td>
          <td></td>
      </tr>
      <tr>
          <td>0000007d</td>
          <td>cafebabe</td>
          <td></td>
          <td>Arg. c</td>
      </tr>
      <tr>
          <td>0000007e</td>
          <td>000007d1</td>
          <td></td>
          <td>Arg. b</td>
      </tr>
      <tr>
          <td>0000007f</td>
          <td>deadbeef</td>
          <td></td>
          <td>Arg. a</td>
      </tr>
      <tr>
          <td> </td>
          <td></td>
          <td></td>
          <td></td>
      </tr>
      <tr>
          <td>00000080</td>
          <td>0000005f</td>
          <td></td>
          <td>Ret. addr. from f (to main)</td>
      </tr>
      <tr>
          <td>00000081</td>
          <td>0000007c</td>
          <td>FP</td>
          <td>Prev. frame pointer</td>
      </tr>
      <tr>
          <td> </td>
          <td></td>
          <td></td>
          <td></td>
      </tr>
      <tr>
          <td>00000082</td>
          <td>cafed00d</td>
          <td></td>
          <td>Local 1, d</td>
      </tr>
      <tr>
          <td>00000083</td>
          <td>99887766</td>
          <td></td>
          <td>Local 2, g2</td>
      </tr>
      <tr>
          <td>00000084</td>
          <td>11223344</td>
          <td>SP</td>
          <td>Local 3, a</td>
      </tr>
  </tbody>
</table>
<h2 id="global-variables">Global variables</h2>
<p>Global variables are evaluated at the start of the program. Their results are then stored sequentially at the top of the stack. As they are evaluated first, their values will subsequently remain at the bottom of the stack throughout the program. To access these variables, a label __end_pc is added to the end of the program code. This label is a constant offset 0x12 lower than the bottom of the stack. As such, a global can be loaded by first putting the label value on the stack, and then loading from the address pointed to with a static offset based on which global should be accessed (0 for the first global variable, 1 for the second, etc.). In pseudo-SSM assmembly:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 216 41"
      >
      <g transform='translate(8,16)'>
<path d='M 32,8 L 40,8' fill='none' stroke='currentColor'></path>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'>)</text>
</g>

    </svg>
  
</div>
<h2 id="order-of-global-variables">Order of global variables</h2>
<p>As global variables can depend on other global variables (but mutual dependence between global variables is not supported), the code generator uses the reverse topologically ordered AST. This guarantees that all global variables are declared and initialized before the global variables depending on them.</p>
<h2 id="tuple">Tuple</h2>
<p>When evaluating a tuple, the tuple contents are placed in the heap, and the tuple address is placed on the stack. The tuple data looks as follows in the heap:</p>
<table>
  <thead>
      <tr>
          <th>Address offset</th>
          <th>Value</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>0</td>
          <td>Tuple element 2</td>
      </tr>
      <tr>
          <td>1</td>
          <td>Tuple element 1</td>
      </tr>
  </tbody>
</table>
<h2 id="lists">Lists</h2>
<p>Lists are implemented as linked lists. Similar to tuples, a linked list takes its values on the heap:</p>
<table>
  <thead>
      <tr>
          <th>Address offset</th>
          <th>Value</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>0</td>
          <td>List element value</td>
      </tr>
      <tr>
          <td>1</td>
          <td>Address of list tail</td>
      </tr>
  </tbody>
</table>
<p>An empty list has the next address set to <code>-1</code>.</p>
<h2 id="value-copying">Value copying</h2>
<p>Values of expressions can be copied on the stack, which means a new value is created from the value of the expression. For expressions of all types except a class type, copying entails simply evaluating the expression, thereby placing the value on the stack. For expressions of a class type, however, the &ldquo;value&rdquo; of the object does not make semantic sense. Should it be its first member&rsquo;s value, or something else? Instead, a full copy of the object is placed on the stack. Expression values are copied in three cases:</p>
<ol>
<li>The value is assigned to an expression.</li>
<li>The value is passed to a function.</li>
<li>The value is returned from a function.</li>
</ol>
<p>Though, note that this last case is not yet supported in the code generation, as the return register used for returning values can only pass values of a single word.</p>
<h2 id="memory">Memory</h2>
<p>&amp;SPL provides refined control over memory usage. The heap can be managed explicitly using memory allocation functions.</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 176 41"
      >
      <g transform='translate(8,16)'>
<path d='M 112,0 L 120,0' fill='none' stroke='currentColor'></path>
<path d='M 112,16 L 120,16' fill='none' stroke='currentColor'></path>
<polygon points='128.000000,0.000000 116.000000,-5.600000 116.000000,5.600000' fill='currentColor' transform='rotate(0.000000, 120.000000, 0.000000)'></polygon>
<polygon points='128.000000,16.000000 116.000000,10.400000 116.000000,21.600000' fill='currentColor' transform='rotate(0.000000, 120.000000, 16.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>d</text>
</g>

    </svg>
  
</div>
<p>Function malloc allocates a block of consecutive memory of at least the amount
of words requested (or a null pointer if no memory is available). Conversely,
free frees the pointed-to memory that was previously allocated.</p>
<p>This allows for efficient implementation of arrays, without the overhead
incurred by lists.</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 224 137"
      >
      <g transform='translate(8,16)'>
<path d='M -4,40 L 4,24' fill='none' stroke='currentColor'></path>
<path d='M 0,48 L 8,32' fill='none' stroke='currentColor'></path>
<polygon points='12.000000,48.000000 0.000000,42.400002 0.000000,53.599998' fill='currentColor' transform='rotate(120.000000, 0.000000, 48.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='0' y='100' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='8' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='24' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='116' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='48' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='64' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='72' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='128' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='144' y='84' fill='currentColor' style='font-size:1em'>&amp;</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='152' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='152' y='84' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='168' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='176' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='184' y='84' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='192' y='84' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='200' y='84' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='208' y='84' fill='currentColor' style='font-size:1em'>;</text>
</g>

    </svg>
  
</div>
<p>As this will likely be a common use-case, subscript notation is provided. The
previous code can be written more succinctly as:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 208 137"
      >
      <g transform='translate(8,16)'>
<path d='M -4,40 L 4,24' fill='none' stroke='currentColor'></path>
<path d='M 0,48 L 8,32' fill='none' stroke='currentColor'></path>
<polygon points='12.000000,48.000000 0.000000,42.400002 0.000000,53.599998' fill='currentColor' transform='rotate(120.000000, 0.000000, 48.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='0' y='100' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='8' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='24' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='116' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='48' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='64' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='72' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='84' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='128' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='136' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='144' y='84' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='152' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='152' y='84' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='160' y='84' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='168' y='84' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>;</text>
</g>

    </svg>
  
</div>
<h2 id="buddy-block-system">Buddy block system</h2>
<p>The memory allocator is based on the binary buddy block system (see e.g.
[peterson1977buddy]). Here, a block of consecutive memory is
divided into equal-sized fragments. Each fragment has a buddy, with which it
forms a larger block of memory. The larger blocks of memory similarly have a
buddy, recursively, until the root is reached. Each memory allocation request
receives a block of memory that is at least as large as the requested memory,
but will likely be larger, as it must be a power of two. Thus, if the smallest
fragment size is, e.g., 2^5 words, and the total memory size is 2^20 words, a
maximum of 2^15 objects can be held in memory.</p>
<p>For example, for 64 words of memory with fragments of 8 words, the memory tree
would look as follows, where the header represents the memory offset, and the
cells the block size.</p>
<h2 id="implementation">Implementation</h2>
<p>The buddy block system keeps track of buddy block allocations, or splits.</p>
<p>When allocating memory, the algorithm checks whether a large enough consecutive block is available. If not, it returns a null pointer. Otherwise, it starts from the root node. If the node is larger than needed for the requested memory and is not yet split, the node is split. The algorithm travels to the child with the least consecutive memory left that still fits. Once the smallest fitting block is found, the system updates the block allocations and returns a pointer to the start of the block.</p>
<p>When freeing memory, the system first frees the block pointed to, and subsequently recursively travels up the tree, re-merging two child blocks if they are now both free.</p>
<p>The algorithm is implemented in the SPL standard library.</p>
<h1 id="classes">Classes</h1>
<p>A class in &amp;SPL is a collection of variable members and methods. An object can be instantiated from a class by using the class constructor. An object can either be instantiated dynamically on the heap, or in-place on the stack. An object instantiated on the stack is automatically destructed using its class destructor when the object falls out of scope. When a class object is copied, the new object is instantiated through the class copy constructor.</p>
<h2 id="new-and-delete">New and delete</h2>
<p>A class can be created dynamically on the stack by using the new keyword in front of the regular constructor expression. Note that, unlike languages such as C++, the new keyword does not require some &ldquo;default&rdquo; constructor. The defined class constructor can be used with dynamic parameters.</p>
<p>A class object created dynamically through the new keyword, must be manually destructed using the delete keyword. Note that delete is currently defined for any pointer, but using delete on a non-object pointer results in undefined behavior. An effective solution is already available in the type checker and code generator, where an object can be determined to be of a variable class type; e.g. Class (TVar &ldquo;a&rdquo;) instead of Class (TClassIdentifier &ldquo;Car&rdquo;). However, no &amp;SPL syntax has been implemented for this yet.</p>
<h2 id="members-and-methods">Members and methods</h2>
<p>Members of class objects are stored in the object space (either on the heap or in the stack). Currently object members cannot have default values; they must be initialized using the copy constructor. Methods of class objects are shared by all objects of that class, and are located statically in the program code. When a class method is called, the called code receives an argument self which is a pointer to the specific object.</p>
<h2 id="type-inference-1">Type inference</h2>
<p>Type inference for classes poses a problem. The methods and members of a class can depend on each other, and further other functions or methods and members of other classes can depend on the class as well. However, without typing the AST it is not immediately clear on which methods and members a piece of code is dependent. For example, to know the code obj-&gt;get() is dependent on a method SomeClass.get as opposed to SomeOtherClass.get would require knowing obj is of type SomeClass. This could be solved by typing the AST in two passes, where in the second pass enough information should be available for full dependency analysis.</p>
<p>However, instead, we opted for a simpler approach: in dependency analysis, once a class identifier was named explicitly, the code was deemed dependent on all methods and members of that class. Note that by nature of class method and member aliasing, or &ldquo;namespacing,&rdquo; any code using a member or method specific to a class must have prior named that class explicitly.</p>
<h2 id="type-frames">Type frames</h2>
<p>To ensure class copy constructors and destructors can be called without knowing the specific class in the code generator, each class object contains a pointer to a location in the program code. This pointer can be seen as the object&rsquo;s class type frame. The program code location contains specific instructions to load basic information of the object to the stack, such as the object&rsquo;s size, and the addresses of the copy constructor and destructor.</p>
<p>As such, when the code generator is required to generate code for deleting an object, but that specific area of code does not know the class type of the object, the type frame can be used to load the destructor address.</p>
<table>
  <thead>
      <tr>
          <th>Address offset</th>
          <th>Value</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>0</td>
          <td>Instruction to load object&rsquo;s size to stack</td>
      </tr>
      <tr>
          <td>3</td>
          <td>Instruction to load address of object&rsquo;s copy constructor to stack</td>
      </tr>
      <tr>
          <td>6</td>
          <td>Instruction to load address of object&rsquo;s destructor to stack</td>
      </tr>
  </tbody>
</table>
<h1 id="standard-library">Standard library</h1>
<p>To make &amp;SPL more useful, a standard library is provided. The library contains
functionality such as the buddy block memory management system, smart pointers,
and some utility functions. The current library is distributed over four files:</p>
<ul>
<li>std.spl</li>
<li>stdbuddyallocator.spl</li>
<li>stdsmartpointers.spl</li>
<li>stdmath.spl</li>
</ul>
<h2 id="linking">Linking</h2>
<p>To facilitate a standard library, some rudimentary form of code linking must be
available. In the current version of &amp;SPL and its compiler this is solved
straightforwardly. The grammar is extended to allow for include statements,
e.g. <code>std.spl</code> contains:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 320 73"
      >
      <g transform='translate(8,16)'>
<path d='M -4,56 L 4,40' fill='none' stroke='currentColor'></path>
<path d='M 4,56 L 12,40' fill='none' stroke='currentColor'></path>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>#</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>#</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>#</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>/</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='272' y='20' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='296' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>"</text>
<text text-anchor='middle' x='304' y='20' fill='currentColor' style='font-size:1em'>"</text>
</g>

    </svg>
  
</div>
<p>On compilation, the separate source files are parsed and type-checked independently. Code including another source receives the type-inferred type schemes of that source. On code generation, the generated ASTs are concatenated.</p>
<h2 id="smart-pointers">Smart pointers</h2>
<p>For more automatic memory management and to prevent programmer mistakes resulting in memory leaks or dangling references, a reference counting smart pointer class is implemented in the standard library. This class wraps around a dynamically allocated object and leverages the copy constructor and the automatic destructor called when objects fall out of scope to keep track of the references to the wrapped object.</p>
<p>On constructing a smart pointer object it creates a dynamically allocated Count object. On copying a smart pointer object, the references to the count and wrapped object are shared, and the count is incremented. On destructing a smart pointer object, the shared count is decremented. Once the count reaches 0, the count and wrapped object are destructed. As a result, the programmer is no longer required to manually call delete on their objects.</p>
<p>For example, the following code will keep track of the references to the Vehicle object, even after the code returns from fun. Only once the last smart pointer wrapping the Vehicle object falls out of scope, will the object be destructed.</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 320 121"
      >
      <g transform='translate(8,16)'>
<path d='M 28,88 L 36,72' fill='none' stroke='currentColor'></path>
<path d='M 36,88 L 44,72' fill='none' stroke='currentColor'></path>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='0' y='100' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>*</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>V</text>
<text text-anchor='middle' x='152' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='68' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>&gt;</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='192' y='68' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='208' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='224' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>6</text>
<text text-anchor='middle' x='240' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='256' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='264' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='272' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='280' y='68' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>;</text>
</g>

    </svg>
  
</div>
<h1 id="higher-order-functions">Higher-order functions</h1>
<p>&amp;SPL has rudimentary support for higher-order functions. Global functions can
be assigned to variables and passed around as expressions. The support for
higher-order functions was a natural precursor to implementing classes, due to
the need for value assigning to persistent value typed expressions&rsquo; addresses
and later the need for dynamically calling functions based on expression
results (i.e., calling an object method). However, no anonymous or nested
functions are supported.</p>
<p>The following program outputs <code>1, 2, 3, 4, ..., 19, 20</code>.</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 288 409"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='0' y='84' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='0' y='212' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='0' y='244' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='0' y='388' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='244' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='244' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='24' y='116' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='24' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='132' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='32' y='148' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='32' y='196' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='32' y='244' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='32' y='260' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='32' y='276' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='32' y='292' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='32' y='308' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='32' y='324' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='32' y='372' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='40' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='148' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='40' y='244' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='40' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='292' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='308' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='324' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='48' y='260' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='276' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='292' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='48' y='308' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='324' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='56' y='116' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='56' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='56' y='244' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='56' y='292' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='56' y='324' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='64' y='132' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='64' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='64' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='64' y='260' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='64' y='292' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='308' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='64' y='324' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='340' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='64' y='356' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='72' y='132' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='72' y='148' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='72' y='260' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='276' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='292' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='308' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='72' y='324' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='340' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='356' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='80' y='116' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='80' y='132' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='80' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='180' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='80' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='276' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='292' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='308' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='80' y='324' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='340' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='356' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='148' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='88' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='88' y='260' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='88' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='88' y='292' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='88' y='324' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='88' y='340' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='96' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='96' y='132' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='148' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='96' y='164' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='96' y='180' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='276' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='96' y='292' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='96' y='308' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='324' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='96' y='340' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='356' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='104' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='104' y='164' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='104' y='260' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='104' y='292' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='340' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='112' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='132' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='112' y='148' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='112' y='180' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='112' y='276' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='112' y='292' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='112' y='308' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='112' y='324' fill='currentColor' style='font-size:1em'>&lt;</text>
<text text-anchor='middle' x='112' y='340' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='356' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='132' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='120' y='164' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='260' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='120' y='292' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='308' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='120' y='340' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='120' y='356' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='128' y='116' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='128' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='164' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='128' y='180' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='128' y='276' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='128' y='292' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='128' y='324' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='340' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='356' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='136' y='116' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='136' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='164' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='136' y='260' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='136' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='324' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='340' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='144' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='180' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='144' y='260' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='144' y='276' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='144' y='292' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='324' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='340' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='144' y='356' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='152' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='152' y='148' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='152' y='164' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='152' y='260' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='152' y='276' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='152' y='292' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='152' y='324' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='152' y='340' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='180' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='160' y='276' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='160' y='292' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='324' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='340' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='160' y='356' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='168' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='168' y='148' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='168' y='164' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='168' y='180' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='168' y='276' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='168' y='292' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='324' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='168' y='340' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='168' y='356' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='176' y='116' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='176' y='148' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='176' y='164' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='176' y='276' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='176' y='292' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='176' y='324' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='176' y='340' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='184' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='184' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='184' y='276' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='184' y='292' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='184' y='340' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='192' y='116' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='192' y='148' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='192' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='192' y='276' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='324' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='192' y='340' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='200' y='116' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='200' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='200' y='276' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='200' y='292' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='200' y='340' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='208' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='208' y='276' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='208' y='292' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='340' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='216' y='116' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='216' y='164' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='216' y='276' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='216' y='292' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='216' y='340' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='224' y='164' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='224' y='276' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='224' y='292' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='232' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='232' y='276' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='232' y='292' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='240' y='164' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='240' y='276' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='240' y='292' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='248' y='164' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='248' y='292' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='256' y='164' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='256' y='292' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='264' y='164' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='272' y='164' fill='currentColor' style='font-size:1em'>;</text>
</g>

    </svg>
  
</div>
<h1 id="ssm-assembly-post-processing">SSM assembly post-processing</h1>
<p>The SSM assembly resulting from the code generation can contain unnecessary
inefficiencies. Some of these inefficiencies stem from the recursive, and
separated, nature of the code generation. For example, in the code generation
of an if-else statement, a label is generated in the SSM pointing to the end of
the else code. We can not simply print a raw label without an operation, as it
is possible the statement that is to be generated after the if-else statement
will generate a label at the start. This would result in illegal SSM assembly:
lbl1: lbl2: &hellip;. Instead, the if-else statement generates a label to a nop &ndash;
no-operation instruction &ndash; resulting in wasted cycles:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 80 41"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>p</text>
</g>

    </svg>
  
</div>
<p>In post-processing of the SSM assembly some of these inefficiencies can be optimized out while maintaining semantics of the original program. The following optimizations are carried out in the given order:</p>
<ol>
<li>adjacent stack pointer adjustments, where the second adjustment does not contain a label, are merged;</li>
<li>stack pointer adjustments set to adjust the stack by 0 are changed into a nop operation; and</li>
<li>nop operations are removed; if a nop is labeled and the next operation is not, the label is moved to the next operation. If the next operation is also labeled, the label clash is resolved by renaming the nop label to the label of the second operation throughout the program code.</li>
</ol>
<p>For example,</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 176 361"
      >
      <g transform='translate(8,16)'>
<path d='M 0,8 L 8,8' fill='none' stroke='currentColor'></path>
<path d='M 32,72 L 40,72' fill='none' stroke='currentColor'></path>
<path d='M 32,152 L 40,152' fill='none' stroke='currentColor'></path>
<path d='M 0,168 L 8,168' fill='none' stroke='currentColor'></path>
<path d='M 0,184 L 8,184' fill='none' stroke='currentColor'></path>
<path d='M 32,248 L 40,248' fill='none' stroke='currentColor'></path>
<path d='M 32,328 L 40,328' fill='none' stroke='currentColor'></path>
<path d='M 0,344 L 8,344' fill='none' stroke='currentColor'></path>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='0' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='0' y='148' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='196' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='212' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='228' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='244' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='260' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='276' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='292' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='0' y='308' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='0' y='324' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='8' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='8' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='116' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='8' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='8' y='164' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='8' y='180' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='8' y='196' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='212' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='228' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='8' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='8' y='260' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='276' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='292' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='308' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='8' y='324' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='8' y='340' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='16' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='16' y='132' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='164' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='180' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='196' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='212' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='244' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='16' y='260' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='276' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='292' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='16' y='308' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='324' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='340' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='24' y='164' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='24' y='180' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='24' y='340' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='32' y='132' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='32' y='164' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='32' y='180' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='32' y='196' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='32' y='212' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='32' y='260' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='32' y='276' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='32' y='308' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='32' y='340' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='40' y='132' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='40' y='148' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='40' y='164' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='40' y='180' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='40' y='196' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='40' y='244' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='40' y='260' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='40' y='308' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='40' y='324' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='40' y='340' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='48' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='48' y='164' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='48' y='180' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='48' y='244' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='48' y='324' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='48' y='340' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='56' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='56' y='148' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='56' y='164' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='56' y='180' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='56' y='196' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='56' y='244' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='56' y='260' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='56' y='308' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='56' y='324' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='56' y='340' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='64' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='196' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='64' y='244' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='64' y='308' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='324' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='72' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='72' y='148' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='72' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='180' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='244' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='72' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='308' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='72' y='324' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='72' y='340' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='80' y='132' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='148' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='80' y='164' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='80' y='180' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='80' y='196' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='80' y='244' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='80' y='260' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='80' y='308' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='324' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='80' y='340' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='88' y='132' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='88' y='164' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='88' y='180' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='88' y='308' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='88' y='340' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='96' y='132' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='196' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='96' y='260' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='96' y='308' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='196' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='112' y='132' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='112' y='196' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='112' y='260' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='112' y='308' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='132' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='120' y='196' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='308' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='132' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='128' y='196' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='260' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='308' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='308' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='132' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='144' y='196' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='144' y='260' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='144' y='308' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='160' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='308' fill='currentColor' style='font-size:1em'>b</text>
</g>

    </svg>
  
</div>
<p>would become</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 232 313"
      >
      <g transform='translate(8,16)'>
<path d='M 0,8 L 8,8' fill='none' stroke='currentColor'></path>
<path d='M 32,56 L 40,56' fill='none' stroke='currentColor'></path>
<path d='M 32,136 L 40,136' fill='none' stroke='currentColor'></path>
<path d='M 0,152 L 8,152' fill='none' stroke='currentColor'></path>
<path d='M 32,200 L 40,200' fill='none' stroke='currentColor'></path>
<path d='M 32,280 L 40,280' fill='none' stroke='currentColor'></path>
<path d='M 0,296 L 8,296' fill='none' stroke='currentColor'></path>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='0' y='132' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='164' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='180' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='196' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='0' y='212' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='228' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='244' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='0' y='260' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='0' y='276' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='8' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='8' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='8' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='8' y='148' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='8' y='164' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='8' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='8' y='212' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='228' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='244' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='8' y='276' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='8' y='292' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='164' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='196' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='16' y='212' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='244' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='16' y='260' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='292' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='24' y='148' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='24' y='292' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='32' y='116' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='32' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='32' y='164' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='32' y='212' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='32' y='228' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='32' y='260' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='32' y='292' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='40' y='132' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='40' y='148' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='40' y='196' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='40' y='212' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='40' y='260' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='40' y='276' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='40' y='292' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='48' y='132' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='48' y='148' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='48' y='196' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='48' y='276' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='48' y='292' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='56' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='56' y='132' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='56' y='148' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='56' y='196' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='56' y='212' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='56' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='56' y='276' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='56' y='292' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='132' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='196' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='64' y='260' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='276' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='72' y='132' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='72' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='72' y='196' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='72' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='260' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='72' y='276' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='80' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='132' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='80' y='148' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='80' y='196' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='80' y='212' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='80' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='276' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='116' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='88' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='260' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='96' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='212' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='96' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='148' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='104' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='112' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='112' y='148' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='112' y='212' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='112' y='260' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='120' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='116' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='128' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='212' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='260' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='260' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='144' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='212' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='144' y='260' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='148' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='260' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='168' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='184' y='148' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='192' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='200' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='148' fill='currentColor' style='font-size:1em'>b</text>
</g>

    </svg>
  
</div>
<h1 id="known-issues">Known issues</h1>
<p>Currently type inference with programmer-given annotations is bugged. If a
programmer uses a type variable annotation, such as a, twice at different
locations, the type inference process will attempt to unify those types.
Additionally, tuples and lists are not yet implemented as classes. As such,
they do not use dynamic memory management yet, and can not be garbage
collected.</p>
<h1 id="source-code-and-statistics">Source code and statistics</h1>
<p>The source code is available on <a href="https://github.com/tomcur/spl-compiler">https://github.com/tomcur/spl-compiler</a>. Lines
of code:</p>
<ul>
<li>Data structures: 961</li>
<li>Regex: 515</li>
<li>Lexer: 248</li>
<li>Parser: 551</li>
<li>Type checker: 1573</li>
<li>Code generator: 1154</li>
</ul>
<ol>
<li>[cox2007regular]: Cox, R. (2007). Regular expression matching can be simple and fast (but is slow in Java, Perl, PHP, Python, Ruby,&hellip;).</li>
<li>[SSM]: Dijkstra, A. (n.d.). Simple stack machine [Computer software manual]. Retrieved from <a href="http://www.staff.science.uu.nl/">http://www.staff.science.uu.nl/</a>∼dijks106/SSM/</li>
<li>[milner1978theory]: Milner, R. (1978). A theory of type polymorphism in programming. Journal of computer and system sciences, 17(3), 348–375.</li>
<li>[peterson1977buddy]: Peterson, J. L., &amp; Norman, T. A. (1977). Buddy systems. Communications of the ACM , 20(6), 421–431.</li>
<li>[thompson1968programming]: Thompson, K. (1968). Programming techniques: Regular expression search algorithm. Communications of the ACM , 11(6), 419–422.</li>
<li>[xing2004minimized]: Xing, G. (2004). Minimized Thompson NFA. International Journal of Computer Mathematics, 81(9), 1097–1106.</li>
</ol>
]]></content:encoded>
    </item>
    
    <item>
      <title>Creating Multiple Custom User Types Through Inheritance in Django</title>
      <link>https://uint.one/posts/creating-multiple-custom-user-types-through-inheritance-in-django/</link>
      <pubDate>Thu, 28 Sep 2017 14:57:49 +0000</pubDate>
      
      <guid>https://uint.one/posts/creating-multiple-custom-user-types-through-inheritance-in-django/</guid>
      <description>&lt;p&gt;When developing applications in Django, the need might arise to customize the
user model. Specifically, you might want to create different types of users. In
my case, I’m interested in creating a person user and a kit user. A person user
can own multiple kit users, and both need to be able to authenticate to access
an API. Luckily, Django’s authentication system is very flexible, and there are
multiple ways to achieve this goal.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>When developing applications in Django, the need might arise to customize the
user model. Specifically, you might want to create different types of users. In
my case, I’m interested in creating a person user and a kit user. A person user
can own multiple kit users, and both need to be able to authenticate to access
an API. Luckily, Django’s authentication system is very flexible, and there are
multiple ways to achieve this goal.</p>
<p>The standard way to implement this is to stick with the default user model,
django.contrib.auth.models.User, and create a complex user profile. The profile
adds the desired fields and behaviors for the various user types in a new
model, and links to the model through a field reference. This can get fairly
complex quickly. It is especially difficult to express ownership of kits by
users, without allowing ownership of users by users. Here, we will see how we
can implement this using inheritance. The code samples are for Django 1.11.</p>
<p>Using Django’s support for model inheritance to create multiple first class
user types, modeling complex user relations becomes easier. There is only one
caveat to this: there must be a fully functional “base user” type that Django
can use. The easiest way is to start by creating your base user inheriting from
<code>django.contrib.auth.models.AbstractUser</code>, which provides all functionality
necessary for authentication and permissions, but there’s nothing stopping you
inheriting from <code>django.contrib.auth.models.AbstractBaseUser</code> if you require
more customization (or even to write the entire user model from scratch). Note
that customizing the user model in such a way is best done at the start of a
project, but it can be done mid-project.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># myapp/models.py</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">django.contrib.auth.models</span> <span class="kn">import</span> <span class="n">AbstractUser</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">User</span><span class="p">(</span><span class="n">AbstractUser</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">pass</span>
</span></span></code></pre></div><p>As <code>django.contrib.auth.models.AbstractUser</code> provides us everything we need for
now, we can simply leave the class as-is.</p>
<p>Next, we can create our custom user types. In my case, I’ll create the person
and kit users.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># myapp/models.py</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">django.contrib.auth.models</span> <span class="kn">import</span> <span class="n">AbstractUser</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">django.db</span> <span class="kn">import</span> <span class="n">models</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#...</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">PersonUser</span><span class="p">(</span><span class="n">User</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">verbose_name</span> <span class="o">=</span> <span class="s1">&#39;Person&#39;</span>
</span></span><span class="line"><span class="cl">        <span class="n">verbose_name_plural</span> <span class="o">=</span> <span class="s1">&#39;People&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">KitUser</span><span class="p">(</span><span class="n">User</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="nb">type</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span> <span class="o">=</span> <span class="mi">10</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">users</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="n">PersonUser</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">verbose_name</span> <span class="o">=</span> <span class="s1">&#39;Kit&#39;</span>
</span></span><span class="line"><span class="cl">        <span class="n">verbose_name_plural</span> <span class="o">=</span> <span class="s1">&#39;Kits&#39;</span>
</span></span></code></pre></div><p>We have now created two user models, both of which are first class users, and
can be customized and related to each other as any other model can.</p>
<p>We now need to tell Django how it can find our users by creating a new
authentication back-end. Luckily this is relatively straightforward: we can
re-use the default back-end and downcast the retrieved base user to either a
person or a kit as appropriate.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># myapp/auth.py</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">django.contrib.auth.backends</span> <span class="kn">import</span> <span class="n">ModelBackend</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">backend.models</span> <span class="kn">import</span> <span class="n">KitUser</span><span class="p">,</span> <span class="n">PersonUser</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">PersonOrKitBackend</span><span class="p">(</span><span class="n">ModelBackend</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    Backend using ModelBackend, but attempts to &#34;downcast&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    the user into a PersonUser or KitUser.
</span></span></span><span class="line"><span class="cl"><span class="s2">    &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">authenticate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">downcast_user_type</span><span class="p">(</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">authenticate</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">get_user</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">downcast_user_type</span><span class="p">(</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_user</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">downcast_user_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">kit_user</span> <span class="o">=</span> <span class="n">KitUser</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">pk</span><span class="o">=</span><span class="n">user</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">return</span> <span class="n">kit_user</span>
</span></span><span class="line"><span class="cl">        <span class="k">except</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">pass</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">person_user</span> <span class="o">=</span> <span class="n">PersonUser</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">pk</span><span class="o">=</span><span class="n">user</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">return</span> <span class="n">person_user</span>
</span></span><span class="line"><span class="cl">        <span class="k">except</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">pass</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">user</span>
</span></span></code></pre></div><p>Finally, we configure settings.py to tell Django we want to use our custom user model, and to include the new authentication back-end.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># settings.py</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Authentication</span>
</span></span><span class="line"><span class="cl"><span class="n">AUTHENTICATION_BACKENDS</span> <span class="o">=</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s1">&#39;myapp.auth.PersonOrKitBackend&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">AUTH_USER_MODEL</span> <span class="o">=</span> <span class="s1">&#39;myapp.User&#39;</span>
</span></span></code></pre></div><p>That’s all there is to it!</p>]]></content:encoded>
    </item>
    
    <item>
      <title>ASUS PCE-AC68 Blue Screen of Death</title>
      <link>https://uint.one/posts/asus-pce-ac68-blue-screen-of-death/</link>
      <pubDate>Fri, 08 Sep 2017 08:50:16 +0000</pubDate>
      
      <guid>https://uint.one/posts/asus-pce-ac68-blue-screen-of-death/</guid>
      <description>&lt;p&gt;Since building a new computer, my Windows 10 installation would sometimes
crash. The error reported on the blue screen of death would always be &lt;em&gt;page
fault in nonpaged area&lt;/em&gt;. Interestingly, the system would be fine for months and
then suddenly crash a few times per day — always when using &lt;em&gt;Deluge&lt;/em&gt;, a torrent
client. After some testing, it turned out that downloading a torrent with
Deluge would reliably crash the system within an hour.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Since building a new computer, my Windows 10 installation would sometimes
crash. The error reported on the blue screen of death would always be <em>page
fault in nonpaged area</em>. Interestingly, the system would be fine for months and
then suddenly crash a few times per day — always when using <em>Deluge</em>, a torrent
client. After some testing, it turned out that downloading a torrent with
Deluge would reliably crash the system within an hour.</p>
<p>Debugging the crash minidump with Windows Debugger (WinDBG), it turned out the
driver <em>bcmwl63a</em> was likely at fault. This driver is developed by Broadcom for
802.11 wireless network adapters. The driver was being used for my ASUS
PCE-AC68 network adapter.</p>
<p>I was using version 7.35.338.0 of the Broadcom drivers for the adapter,
supplied through the ASUS product utility version 2.1.1.5 that is available on
the ASUS support website. The issue can be fixed by upgrading to version
7.35.351.0 of the Broadcom drivers, which ASUS supplies in version 2.1.4.3 of
their utility. The issue can likely also be fixed by <em>downgrading</em> to version
6.30.223.228 (utility version 2.0.8.8), but I have not tested this. See <a href="https://www.tenforums.com/bsod-crashes-debugging/45642-bsod-only-while-torrenting.html#post621965">this
thread</a>
for more information.</p>
<p>First uninstall the old driver through Windows Device Manger (and uninstall the
utility through the Control Panel, if installed). Then, instead of installing
the new utility, I would recommend installing only the new driver (supplied in
the same zip-file as the utility). This can be done manually in Device Manager
by updating driver software for the PCE-AC68. Note that after uninstalling the
old drivers, the adapter might show up as an unrecognized device, so be sure to
check that if the PCE-AC68 is no longer present in the device list.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Hibernation and Hybrid Sleep on Ubuntu 17.04, Gnome 3.24</title>
      <link>https://uint.one/posts/hibernation-and-hybrid-sleep-on-ubuntu-17-04-gnome-3-24/</link>
      <pubDate>Sat, 27 May 2017 17:55:07 +0000</pubDate>
      
      <guid>https://uint.one/posts/hibernation-and-hybrid-sleep-on-ubuntu-17-04-gnome-3-24/</guid>
      <description>&lt;p&gt;I was having trouble using suspend, hibernate and hybrid sleep functionality on
Ubuntu 17.04 using Gnome 3.24. The troubles started immediately after
installing the uswsusp package:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ apt-get install uswsusp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I was hopeful and typed &lt;code&gt;systemctl hibernate&lt;/code&gt;, but the system got stuck on
&amp;ldquo;Snapshotting system&amp;rdquo;.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I was having trouble using suspend, hibernate and hybrid sleep functionality on
Ubuntu 17.04 using Gnome 3.24. The troubles started immediately after
installing the uswsusp package:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ apt-get install uswsusp
</span></span></code></pre></div><p>I was hopeful and typed <code>systemctl hibernate</code>, but the system got stuck on
&ldquo;Snapshotting system&rdquo;.</p>
<p>After a hard shutdown, the system was no longer bootable. It would only boot in
recovery after waiting for 5 minutes on <code>/scripts/local-premount</code>.</p>
<p>These issues were caused by having an encrypted swap file, but soon other
issues surfaced, rooted in shaky support for hibernation in both Ubuntu and
Gnome.</p>
<p>So, here’s a guide to how I set up hibernation.</p>
<h1 id="set-up-a-non-encrypted-swap">Set up a non-encrypted swap</h1>
<p>First, set up a non-encrypted swap file dedicated to system hibernation.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ fallocate -l 8g /swapfile
</span></span><span class="line"><span class="cl">$ chmod <span class="m">0600</span> /swapfile
</span></span><span class="line"><span class="cl">$ mkswap /swapfile
</span></span></code></pre></div><p>This creates a swap file of 8 gigabytes. Create a swap file that has enough
size to hold the hibernated system snapshot (the safest bet is to create a swap
file with the same size as the amount of available memory). We will only enable
the swap when we want to hibernate.</p>
<p>Note that this wastes some hard drive space when not hibernating; an
alternative is to give the encrypted swap a passphrase — but that would require
you to enter the passphrase each boot.</p>
<h1 id="install-uswsusp">Install uswsusp</h1>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ apt-get install uswsusp
</span></span></code></pre></div><p>After installing, the package configuration should start. If it doesn’t, type:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ dpkg-reconfigure -pmedium uswsusp
</span></span></code></pre></div><p>Select the swap file we just created as the location it should store the system
snapshot. The configuration will ask you whether you want to encrypt the system
snapshot; I recommend you do.</p>
<p>At this point the following should hibernate your system and turn it off. Once
you turn it back on, it should restore the state from the system snapshot:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ swapon /swapfile
</span></span><span class="line"><span class="cl">$ s2disk
</span></span></code></pre></div><p>If it works, great! What remains is the integration of this with your system
and Gnome.</p>
<h1 id="create-wrapper-scripts">Create wrapper scripts</h1>
<p>We only want to enable the swap for hibernation and hybrid sleep, and disable
the swap afterwards. We create scripts that enable the swap, hibernate/suspend
the system, and disable the swap when we resume.</p>
<p>Create the following two scripts in a new directory <code>/opt/sleepscripts</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># /opt/sleepscripts/s2disk.sh:</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ swapon /swapfile
</span></span><span class="line"><span class="cl">$ s2disk
</span></span><span class="line"><span class="cl">$ swapoff /swapfile
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># /opt/sleepscripts/s2both.sh:</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ swapon /swapfile
</span></span><span class="line"><span class="cl">$ s2both
</span></span><span class="line"><span class="cl">$ swapoff /swapfile
</span></span></code></pre></div><p>Note that <code>s2disk</code> will create a snapshot and hibernate the system, whereas
<code>s2both</code> will create a snapshot and suspend the system — only if the system
powers off (e.g. because the battery runs out) will the snapshot be used to
resume, i.e. it’s a hybrid sleep.</p>
<h1 id="configure-systemd">Configure systemd</h1>
<p>Copy the default systemd hibernate and hybrid sleep service configurations:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ cp /lib/systemd/system/systemd-hibernate.service /etc/systemd/system/
</span></span><span class="line"><span class="cl">$ cp /lib/systemd/system/systemd-hybrid-sleep.service /etc/systemd/system/
</span></span></code></pre></div><p>Edit <code>/etc/systemd/system/systemd-hibernate.service</code>, change the service section to:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-systemd" data-lang="systemd"><span class="line"><span class="cl"><span class="k">[Service]</span>
</span></span><span class="line"><span class="cl"><span class="na">Type</span><span class="o">=</span><span class="s">oneshot</span>
</span></span><span class="line"><span class="cl"><span class="na">ExecStart</span><span class="o">=</span><span class="s">/bin/bash /opt/sleepscripts/s2disk.sh</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">Similarly,</span> <span class="err">edit</span> <span class="err">/etc/systemd/system/systemd-hybrid-sleep.service:</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">[Service]</span>
</span></span><span class="line"><span class="cl"><span class="na">Type</span><span class="o">=</span><span class="s">oneshot</span>
</span></span><span class="line"><span class="cl"><span class="na">ExecStart</span><span class="o">=</span><span class="s">/bin/bash /opt/sleepscripts/s2both.sh</span>
</span></span></code></pre></div><p>Reload <code>systemd</code>. Hibernating through systemd should now work:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">systemctl daemon-reload
</span></span><span class="line"><span class="cl">systemctl hibernate
</span></span></code></pre></div><h1 id="support-laptop-lid-events">Support laptop lid events</h1>
<p>Open the Gnome tweak tool. Go to the power setting, and set the laptop to
suspend when the laptop lid is closed. For some reason, this automatically
performs a hybrid sleep. The other options (hibernate, shutdown, etc.) don’t
work at all for me.</p>
<h1 id="add-a-hibernate-icon-to-the-gnome-status-menu">Add a hibernate icon to the Gnome status menu</h1>
<p>Install the <a href="https://extensions.gnome.org/extension/755/hibernate-status-button/">Hibernate Status Button Gnome
extension</a>.
Enable it in the Gnome tweak tool. Next, create the following file:</p>
<p><code>/var/lib/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla</code></p>
<p>and save the following in it:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ini" data-lang="ini"><span class="line"><span class="cl"><span class="k">[Re-enable hibernate by default in upower]</span>
</span></span><span class="line"><span class="cl"><span class="na">Identity</span><span class="o">=</span><span class="s">unix-user:*</span>
</span></span><span class="line"><span class="cl"><span class="na">Action</span><span class="o">=</span><span class="s">org.freedesktop.upower.hibernate</span>
</span></span><span class="line"><span class="cl"><span class="na">ResultActive</span><span class="o">=</span><span class="s">yes</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">[Re-enable hibernate by default in logind]</span>
</span></span><span class="line"><span class="cl"><span class="na">Identity</span><span class="o">=</span><span class="s">unix-user:*</span>
</span></span><span class="line"><span class="cl"><span class="na">Action</span><span class="o">=</span><span class="s">org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit</span>
</span></span><span class="line"><span class="cl"><span class="na">ResultActive</span><span class="o">=</span><span class="s">yes</span>
</span></span></code></pre></div><p>After rebooting, your status menu should look as in the image. Clicking on the
hibernate button will now hibernate your system.</p>

"posts/2017-hibernation-and-hybrid-sleep-on-ubuntu-17-04-gnome-3-24/image.png"]]></content:encoded>
    </item>
    
    <item>
      <title>mIRC Smart Join/Part Filtering</title>
      <link>https://uint.one/posts/mirc-smart-joinpart-filtering/</link>
      <pubDate>Tue, 28 Mar 2017 11:31:46 +0000</pubDate>
      
      <guid>https://uint.one/posts/mirc-smart-joinpart-filtering/</guid>
      <description>&lt;p&gt;Though internet relay chat (IRC) is old technology, many people still use it
daily. One of the most popular IRC clients for Windows is
&lt;a href=&#34;http://www.mirc.com/&#34;&gt;mIRC&lt;/a&gt;. This client is impressively feature-complete.
However, it does not offer a way to satisfyingly solve one of the grievances of
many IRC users: the flood of join and part messages in big channels, caused by
the constant stream of people coming in and leaving. mIRC only offers the
option to either show or hide all join and part messages completely; but does
not allow for any fine-tuning.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Though internet relay chat (IRC) is old technology, many people still use it
daily. One of the most popular IRC clients for Windows is
<a href="http://www.mirc.com/">mIRC</a>. This client is impressively feature-complete.
However, it does not offer a way to satisfyingly solve one of the grievances of
many IRC users: the flood of join and part messages in big channels, caused by
the constant stream of people coming in and leaving. mIRC only offers the
option to either show or hide all join and part messages completely; but does
not allow for any fine-tuning.</p>
<p>What I was looking for was a way to show or hide join and part messages based
on the size of the channel. If a channel has only few people, I’d like to see
all joins and parts. If, however, a channel has many users (e.g., more than
25), this quickly becomes a nuisance. In addition, even in big channels, I’d
like to see all joins and parts of people who were recently active in the
channel, so as not to accidentally reply to someone who has left in the
meantime.</p>
<p>With this specific need, I created a solution, which I have made available on
<a href="https://github.com/tomcur/mirc-plugins/blob/master/smartfilter.mrc">github</a>. It can be added to mIRC by loading it as a script (Tools -&gt; Scripts
Editor -&gt; File -&gt; Load). Configure it by right clicking in a chat window, and
select Join/Part Filter -&gt; Settings.</p>
<figure>
    <a href="/posts/mirc-smart-joinpart-filtering/smart-join-part-filter.png" target="_blank">
      <img 
          srcset="/posts/mirc-smart-joinpart-filtering/smart-join-part-filter.png 262w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 262px))"
          src="/posts/mirc-smart-joinpart-filtering/smart-join-part-filter.png" alt="The smart join/part filter setting screen"/></a>
    <figcaption><p> The smart join/part filter setting screen </p></figcaption>
  </figure><p>Programming this solution using mIRC’s scripting language was definitely a fun
project: the scripting language is quite basic with little documentation, and
as mIRC’s interpreter offers hardly any assistance when things go wrong, it
quickly turns into a puzzle. However, it’s also quite powerful and allows you
to access and modify many things within mIRC.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Inductively Defined Lists and Proofs</title>
      <link>https://uint.one/posts/inductively-defined-lists-and-proofs/</link>
      <pubDate>Tue, 15 Mar 2016 20:43:08 +0000</pubDate>
      
      <guid>https://uint.one/posts/inductively-defined-lists-and-proofs/</guid>
      <description>&lt;p&gt;In this post, we will explore an inductive data structure as a type for lists
of elements. We define two recursive functions that can be applied to lists of
this type; namely, an operation to append two lists and an operation to reverse
a list. With these definitions, we set out to mathematically prove a number of
properties that should hold for these functions by means of induction.&lt;/p&gt;
&lt;p&gt;A list is a data structure of a collection of elements in a certain order. A
list can be defined in multiple ways. One way is to define a list as being an
element (the &amp;ldquo;head&amp;rdquo; of the list) followed by another list (the &amp;ldquo;tail&amp;rdquo; of the
list). Inductively, this could be formalized as follows:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>In this post, we will explore an inductive data structure as a type for lists
of elements. We define two recursive functions that can be applied to lists of
this type; namely, an operation to append two lists and an operation to reverse
a list. With these definitions, we set out to mathematically prove a number of
properties that should hold for these functions by means of induction.</p>
<p>A list is a data structure of a collection of elements in a certain order. A
list can be defined in multiple ways. One way is to define a list as being an
element (the &ldquo;head&rdquo; of the list) followed by another list (the &ldquo;tail&rdquo; of the
list). Inductively, this could be formalized as follows:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 312 25"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>|</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>.</text>
</g>

    </svg>
  
</div>
<p>This means that a list <code>l</code> with elements of type <code>a</code> is either <code>cons x tail</code>, with <code>x</code> of type <code>a</code> and with <code>tail</code> of type <code>list a</code>, or <code>l</code> is the empty list <code>nil</code>. Let&rsquo;s look at some example lists with elements of the whole numbers.</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 320 233"
      >
      <g transform='translate(8,16)'>
<path d='M -4,8 L -4,24' fill='none' stroke='currentColor'></path>
<path d='M 4,8 L -4,40' fill='none' stroke='currentColor'></path>
<path d='M -4,56 L 4,40' fill='none' stroke='currentColor'></path>
<path d='M 4,56 L 12,40' fill='none' stroke='currentColor'></path>
<path d='M -4,104 L 4,88' fill='none' stroke='currentColor'></path>
<path d='M 4,104 L 12,88' fill='none' stroke='currentColor'></path>
<path d='M -4,152 L 4,136' fill='none' stroke='currentColor'></path>
<path d='M 4,152 L 12,136' fill='none' stroke='currentColor'></path>
<path d='M -4,200 L 4,184' fill='none' stroke='currentColor'></path>
<path d='M 4,200 L 12,184' fill='none' stroke='currentColor'></path>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='164' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='0' y='212' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='16' y='164' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='16' y='212' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='24' y='100' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='24' y='148' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='24' y='196' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='32' y='116' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='32' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='32' y='164' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='32' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='32' y='212' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='40' y='100' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='40' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='164' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='40' y='196' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='100' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='48' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='212' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='56' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='56' y='164' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='56' y='212' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='64' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='148' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='64' y='196' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='72' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='72' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='72' y='164' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='72' y='196' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='72' y='212' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='80' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='148' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='88' y='164' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='88' y='196' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='88' y='212' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='164' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='96' y='212' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='104' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='104' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='104' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='104' y='164' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='104' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='112' y='148' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='112' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='196' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='112' y='212' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='120' y='164' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='196' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='212' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='128' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='128' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='164' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='136' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='212' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='144' y='100' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='144' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='152' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='152' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='212' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='160' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='148' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='160' y='164' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='160' y='196' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='160' y='212' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='100' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='168' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='164' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='168' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='176' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='176' y='164' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='176' y='196' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='176' y='212' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='184' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='184' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='184' y='196' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='212' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='192' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='192' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='192' y='196' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='200' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='148' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='200' y='196' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='200' y='212' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='208' y='196' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='216' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='148' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='216' y='196' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='216' y='212' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='224' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='224' y='148' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='224' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='232' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='148' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='232' y='196' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='232' y='212' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='240' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='240' y='148' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='240' y='196' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='240' y='212' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='248' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='148' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='248' y='196' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='248' y='212' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='256' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='256' y='196' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='264' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='264' y='196' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='272' y='100' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='272' y='196' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='280' y='196' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='288' y='100' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='296' y='100' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='304' y='100' fill='currentColor' style='font-size:1em'>]</text>
</g>

    </svg>
  
</div>
<p>Note that because we have lists of integers, following our definition the list
<code>l</code> is of type <code>list integer</code>.</p>
<p>Multiple list operations can be defined, such as append and reverse. We defined
our list inductively, and so it would make sense to define these operations
inductively (also known as recursively) as well. Because of our neat data
structure and operations, we should then be able to prove that certain
properties of the operations hold.</p>
<p>Let&rsquo;s first define append. By appending two lists, we create a new list where
the elements in the first list are followed by the elements in the second. This
can easily be defined as follows:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 456 57"
      >
      <g transform='translate(8,16)'>
<path d='M 288,0 L 296,0' fill='none' stroke='currentColor'></path>
<polygon points='304.000000,0.000000 292.000000,-5.600000 292.000000,5.600000' fill='currentColor' transform='rotate(0.000000, 296.000000, 0.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='328' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='336' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='344' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='344' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='352' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='360' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='360' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='368' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='384' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='392' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='400' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='408' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='424' y='36' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='432' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='440' y='36' fill='currentColor' style='font-size:1em'>.</text>
</g>

    </svg>
  
</div>
<p>Thus, our function append is a function that takes two parameters of type list
a and returns something of type list a. We defined it in two steps: if the
first list is empty (<code>nil</code>), we return the second list. If the first list is
not empty, we create a new list with the same head as the first, and with as
tail the second list appended to the tail of the first list. Note that the
parentheses around <code>nil</code>, <code>k</code>, and <code>cons head tail</code> in the above definition are
optional; I added them for clarity. Let&rsquo;s append the lists <code>[1,2,3]</code> and
<code>[4,5]</code>:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 512 89"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='152' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='200' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='200' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='208' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='224' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='264' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='264' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='272' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='272' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='280' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='280' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='288' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='288' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='296' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='296' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='296' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='312' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='312' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='312' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='312' y='68' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='320' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='320' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='328' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='328' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='328' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='328' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='336' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='336' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='336' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='336' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='344' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='344' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='344' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='352' y='4' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='352' y='36' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='352' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='360' y='20' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='360' y='52' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='360' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='368' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='368' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='376' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='376' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='376' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='376' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='376' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='384' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='384' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='384' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='384' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='384' y='68' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='392' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='392' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='392' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='392' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='400' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='400' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='400' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='400' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='408' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='408' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='416' y='4' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='416' y='36' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='424' y='20' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='424' y='52' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='432' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='432' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='440' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='440' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='440' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='440' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='448' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='448' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='448' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='448' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='456' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='456' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='456' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='456' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='464' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='464' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='464' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='464' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='472' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='472' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='472' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='480' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='480' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='480' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='488' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='496' y='52' fill='currentColor' style='font-size:1em'>)</text>
</g>

    </svg>
  
</div>
<p>We want to prove that the following properties of this function hold:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 576 57"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='272' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='304' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='312' y='20' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='328' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='336' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='344' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='344' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='344' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='352' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='360' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='360' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='360' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='368' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='376' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='376' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='376' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='384' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='392' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='392' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='400' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='400' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='408' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='408' y='20' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='408' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='416' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='416' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='424' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='424' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='424' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='432' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='440' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='440' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='448' y='36' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='456' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='456' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='464' y='4' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='464' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='464' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='472' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='472' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='480' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='480' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='488' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='496' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='496' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='504' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='504' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='512' y='20' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='512' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='528' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='544' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='552' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='560' y='36' fill='currentColor' style='font-size:1em'>.</text>
</g>

    </svg>
  
</div>
<p>With the first lemma we state that the result of appending a list and an empty
list is equal to the first list. With the second lemma we state that first
appending lists <code>k</code> and <code>l</code>, and then appending m to the result is equal to
appending the result of appending <code>l</code> and <code>m</code> to <code>k</code>.</p>
<h1 id="proof-of-the-first-lemma">Proof of the First Lemma</h1>
<p>Let&rsquo;s prove the first lemma. We will prove that the lemma is true with
induction on <code>l</code>.</p>
<p>First, consider <code>l = nil</code>. Thus,</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 336 73"
      >
      <g transform='translate(8,16)'>
<path d='M 132,24 L 140,8' fill='none' stroke='currentColor'></path>
<path d='M 140,24 L 148,8' fill='none' stroke='currentColor'></path>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='272' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='296' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='304' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='312' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='320' y='20' fill='currentColor' style='font-size:1em'>:</text>
</g>

    </svg>
  
</div>
<p>Thus, for <code>l = nil</code> we have <code>append l nil = l</code>, and so the property holds.</p>
<p>Now, we assume that the property holds for the list <code>tail</code>. Thus, <code>append tail nil = tail</code>. Consider <code>l = cons head tail</code>.</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 448 89"
      >
      <g transform='translate(8,16)'>
<path d='M 236,24 L 244,8' fill='none' stroke='currentColor'></path>
<path d='M 240,32 L 248,16' fill='none' stroke='currentColor'></path>
<path d='M 244,40 L 252,24' fill='none' stroke='currentColor'></path>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='272' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='296' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='304' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='312' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='320' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='328' y='20' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='328' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='336' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='344' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='344' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='352' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='360' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='360' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='368' y='20' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='368' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='376' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='384' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='384' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='392' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='392' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='400' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='400' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='408' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='408' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='416' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='416' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='424' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='424' y='36' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='432' y='20' fill='currentColor' style='font-size:1em'>:</text>
</g>

    </svg>
  
</div>
<p>As such, if the property holds for <code>tail</code> we have <code>append (cons head tail) nil = cons head tail</code> for any arbitrary <code>head</code>. Thus, with structural induction on
<code>l</code>, we have shown that the first lemma holds for all finite lists.</p>
<h1 id="proof-of-the-second-lemma">Proof of the Second Lemma</h1>
<p>Now, we will prove the second lemma. We will again prove this by induction.</p>
<p>First, consider arbitrary <code>l</code> and <code>m</code>, with <code>k = nil</code>.</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 496 89"
      >
      <g transform='translate(8,16)'>
<path d='M 204,24 L 212,8' fill='none' stroke='currentColor'></path>
<path d='M 208,32 L 216,16' fill='none' stroke='currentColor'></path>
<path d='M 212,40 L 220,24' fill='none' stroke='currentColor'></path>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='176' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='296' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='304' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='320' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='328' y='20' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='328' y='36' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='344' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='344' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='352' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='352' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='360' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='360' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='368' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='368' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='376' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='376' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='384' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='384' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='392' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='400' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='408' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='416' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='424' y='36' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='432' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='440' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='448' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='456' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='464' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='472' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='480' y='36' fill='currentColor' style='font-size:1em'>:</text>
</g>

    </svg>
  
</div>
<p>Thus, with <code>k = nil</code> the property holds. Now, we assume the property holds for
some list <code>tail</code>. Thus, <code>append (append tail l) m = append tail (append l m)</code>.
Consider <code>k = cons head tail</code>.</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 608 121"
      >
      <g transform='translate(8,16)'>
<path d='M 308,24 L 316,8' fill='none' stroke='currentColor'></path>
<path d='M 312,32 L 320,16' fill='none' stroke='currentColor'></path>
<path d='M 312,48 L 320,32' fill='none' stroke='currentColor'></path>
<path d='M 312,64 L 320,48' fill='none' stroke='currentColor'></path>
<path d='M 316,72 L 324,56' fill='none' stroke='currentColor'></path>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='84' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='100' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='16' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='24' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='84' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='100' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='88' y='100' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='104' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='112' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='120' y='84' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='120' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='144' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='152' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='160' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='176' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='100' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='184' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='184' y='100' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='84' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='200' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='200' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='208' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='208' y='84' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='216' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='224' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='224' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='248' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='256' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='264' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='264' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='272' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='272' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='272' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='280' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='288' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='288' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='288' y='84' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='296' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='296' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='296' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='296' y='84' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='336' y='20' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='336' y='36' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='336' y='52' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='336' y='68' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='344' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='344' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='344' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='344' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='352' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='352' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='352' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='352' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='360' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='360' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='360' y='52' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='360' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='368' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='368' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='368' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='368' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='376' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='376' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='376' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='376' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='384' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='392' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='392' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='392' y='52' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='392' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='400' y='20' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='400' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='400' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='400' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='408' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='408' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='408' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='416' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='416' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='416' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='416' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='424' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='432' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='432' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='432' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='432' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='440' y='20' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='440' y='36' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='440' y='52' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='440' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='448' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='456' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='456' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='456' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='456' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='464' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='464' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='464' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='464' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='472' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='472' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='472' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='472' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='480' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='480' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='480' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='480' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='488' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='488' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='488' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='488' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='496' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='496' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='496' y='52' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='496' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='504' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='504' y='36' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='512' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='520' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='528' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='536' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='544' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='552' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='560' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='568' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='576' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='584' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='592' y='68' fill='currentColor' style='font-size:1em'>:</text>
</g>

    </svg>
  
</div>
<p>As such, if the property holds for <code>tail</code> we have <code>append ((cons head tail) l) m = append (cons head tail) (append l m)</code> for any arbitrary <code>head</code>. So, the
property holds for <code>cons head tail</code> as well. We have shown, with structural
induction on <code>k</code>, that the second lemma holds for all lists.</p>
<h1 id="reversing-lists">Reversing Lists</h1>
<p>Now, we define a new operation; <code>reverse</code>.</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 520 57"
      >
      <g transform='translate(8,16)'>
<path d='M 224,0 L 232,0' fill='none' stroke='currentColor'></path>
<polygon points='240.000000,0.000000 228.000000,-5.600000 228.000000,5.600000' fill='currentColor' transform='rotate(0.000000, 232.000000, 0.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='312' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='328' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='344' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='352' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='360' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='368' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='376' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='392' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='400' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='408' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='416' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='424' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='440' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='448' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='456' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='464' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='480' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='488' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='496' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='504' y='36' fill='currentColor' style='font-size:1em'>)</text>
</g>

    </svg>
  
</div>
<p>Let&rsquo;s take the reverse of the list <code>[1,2,3]</code>:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 640 137"
      >
      <g transform='translate(8,16)'>
<path d='M 256,112 L 264,96' fill='none' stroke='currentColor'></path>
<path d='M 260,120 L 268,104' fill='none' stroke='currentColor'></path>
<circle cx='264' cy='96' r='6' stroke='currentColor' fill='#fff'></circle>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='84' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='100' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='116' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='84' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='100' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='80' y='116' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='88' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='88' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='96' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='96' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='104' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='100' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='136' y='84' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='136' y='100' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='136' y='116' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='144' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='144' y='116' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='152' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='152' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='152' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='152' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='160' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='160' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='168' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='168' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='176' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='184' y='84' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='184' y='100' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='184' y='116' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='200' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='200' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='200' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='200' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='200' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='208' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='208' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='208' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='216' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='216' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='216' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='224' y='84' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='224' y='100' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='224' y='116' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='232' y='100' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='232' y='116' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='240' y='84' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='240' y='116' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='248' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='248' y='100' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='256' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='256' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='256' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='256' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='264' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='264' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='272' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='272' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='280' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='280' y='68' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='280' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='280' y='116' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='288' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='288' y='84' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='288' y='116' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='296' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='296' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='296' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='296' y='100' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='296' y='116' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='304' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='304' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='304' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='304' y='116' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='312' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='312' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='312' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='312' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='312' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='312' y='116' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='320' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='320' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='320' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='320' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='320' y='116' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='328' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='328' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='328' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='328' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='328' y='84' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='328' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='328' y='116' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='336' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='336' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='336' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='336' y='84' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='336' y='100' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='344' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='344' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='344' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='344' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='352' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='352' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='352' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='352' y='84' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='360' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='360' y='52' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='360' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='360' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='368' y='36' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='368' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='368' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='376' y='20' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='376' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='376' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='376' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='384' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='384' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='384' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='392' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='392' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='392' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='392' y='68' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='400' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='400' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='400' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='400' y='84' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='408' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='408' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='408' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='408' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='416' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='416' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='416' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='416' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='424' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='424' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='424' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='432' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='432' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='432' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='432' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='440' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='440' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='440' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='440' y='84' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='448' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='448' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='456' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='456' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='456' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='464' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='464' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='472' y='52' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='472' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='480' y='36' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='480' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='488' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='488' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='496' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='496' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='504' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='504' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='504' y='68' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='512' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='512' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='520' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='520' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='520' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='528' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='536' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='536' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='544' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='544' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='552' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='560' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='568' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='584' y='52' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='600' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='608' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='616' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='624' y='52' fill='currentColor' style='font-size:1em'>)</text>
</g>

    </svg>
  
</div>
<p>Now, we want to prove that the following property of our reversal and append functions hold:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 656 41"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>_</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='296' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='304' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='312' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='320' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='328' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='344' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='344' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='360' y='4' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='360' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='368' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='376' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='384' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='384' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='392' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='400' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='400' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='408' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='416' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='416' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='424' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='424' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='432' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='432' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='440' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='456' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='464' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='472' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='480' y='20' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='488' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='496' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='504' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='512' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='528' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='536' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='552' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='560' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='568' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='576' y='20' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='584' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='592' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='600' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='608' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='624' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='632' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='640' y='20' fill='currentColor' style='font-size:1em'>.</text>
</g>

    </svg>
  
</div>
<p>This lemma states that reversing the result of appending lists <code>l</code> and <code>m</code> is
equal to appending the reversals of lists <code>m</code> and <code>l</code>. We will prove this by
induction on <code>l</code>. First, consider <code>l = nil</code>.</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 496 121"
      >
      <g transform='translate(8,16)'>
<path d='M 196,24 L 204,8' fill='none' stroke='currentColor'></path>
<path d='M 200,32 L 208,16' fill='none' stroke='currentColor'></path>
<path d='M 200,48 L 208,32' fill='none' stroke='currentColor'></path>
<path d='M 192,80 L 208,48' fill='none' stroke='currentColor'></path>
<path d='M 204,72 L 212,56' fill='none' stroke='currentColor'></path>
<polygon points='204.000000,80.000000 192.000000,74.400002 192.000000,85.599998' fill='currentColor' transform='rotate(120.000000, 192.000000, 80.000000)'></polygon>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='84' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='100' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='84' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='100' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='96' y='100' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='144' y='84' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='144' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='152' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='152' y='84' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='152' y='100' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='168' y='84' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='168' y='100' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='176' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='176' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='184' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='100' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='200' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='216' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='216' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='224' y='68' fill='currentColor' style='font-size:1em'>F</text>
<text text-anchor='middle' x='224' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='240' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='240' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='248' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='248' y='100' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='256' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='256' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='256' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='256' y='100' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='264' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='264' y='84' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='272' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='272' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='280' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='280' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='288' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='296' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='296' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='296' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='304' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='312' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='312' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='312' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='320' y='20' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='320' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='328' y='36' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='328' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='336' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='336' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='344' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='344' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='344' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='344' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='352' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='352' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='352' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='352' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='360' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='360' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='360' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='360' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='368' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='368' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='368' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='376' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='376' y='36' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='376' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='376' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='384' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='384' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='384' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='384' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='392' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='400' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='400' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='400' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='408' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='408' y='52' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='408' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='416' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='424' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='424' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='432' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='432' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='440' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='440' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='448' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='448' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='456' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='456' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='464' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='472' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='480' y='68' fill='currentColor' style='font-size:1em'>:</text>
</g>

    </svg>
  
</div>
<p>Thus, with <code>l = nil</code> the property holds. Now, assume the property holds for
<code>tail</code>; thus, <code>reverse (append tail m) = append (reverse m) (reverse tail)</code>.
Consider <code>l = cons head tail</code>.</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 520 185"
      >
      <g transform='translate(8,16)'>
<path d='M -4,72 L 4,56' fill='none' stroke='currentColor'></path>
<path d='M 4,72 L 12,56' fill='none' stroke='currentColor'></path>
<path d='M -4,104 L 4,88' fill='none' stroke='currentColor'></path>
<path d='M 4,104 L 12,88' fill='none' stroke='currentColor'></path>
<path d='M -4,136 L 4,120' fill='none' stroke='currentColor'></path>
<path d='M 4,136 L 12,120' fill='none' stroke='currentColor'></path>
<path d='M 300,24 L 308,8' fill='none' stroke='currentColor'></path>
<path d='M 296,48 L 312,16' fill='none' stroke='currentColor'></path>
<path d='M 308,40 L 316,24' fill='none' stroke='currentColor'></path>
<circle cx='296' cy='48' r='6' stroke='currentColor' fill='#fff'></circle>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='84' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='148' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='0' y='164' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>I</text>
<text text-anchor='middle' x='24' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='100' fill='currentColor' style='font-size:1em'>U</text>
<text text-anchor='middle' x='24' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='132' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='24' y='148' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='24' y='164' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='32' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='148' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='32' y='164' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='132' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='40' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='132' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='48' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='48' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='56' y='116' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='132' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='56' y='148' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='56' y='164' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='100' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='64' y='132' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='72' y='84' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='148' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='164' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='80' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='88' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='132' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='88' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='96' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='96' y='116' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='96' y='132' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='96' y='148' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='96' y='164' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='100' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='104' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='112' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='112' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='100' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='132' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='120' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='164' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='128' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='128' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='132' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='128' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='136' y='84' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='136' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='144' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='144' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='116' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='144' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='144' y='148' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='144' y='164' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='152' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='152' y='116' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='152' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='148' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='152' y='164' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='160' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='160' y='84' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='160' y='100' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='160' y='132' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='168' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='168' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='116' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='168' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='148' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='168' y='164' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='176' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='176' y='100' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='176' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='176' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='176' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='176' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='184' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='184' y='68' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='184' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='184' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='184' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='184' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='184' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='192' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='192' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='148' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='192' y='164' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='208' y='84' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='208' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='208' y='132' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='208' y='148' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='208' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='216' y='84' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='216' y='116' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='216' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='216' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='216' y='164' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='224' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='232' y='84' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='232' y='116' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='232' y='132' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='240' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='240' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='240' y='148' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='240' y='164' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='248' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='248' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='248' y='148' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='248' y='164' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='256' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='256' y='84' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='256' y='116' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='256' y='132' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='256' y='148' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='256' y='164' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='264' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='264' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='132' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='148' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='272' y='84' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='272' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='272' y='132' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='272' y='148' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='280' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='280' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='280' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='280' y='132' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='288' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='288' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='288' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='288' y='132' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='288' y='148' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='296' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='304' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='304' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='304' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='304' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='312' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='312' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='312' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='312' y='148' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='320' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='320' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='328' y='20' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='328' y='36' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='328' y='52' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='328' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='328' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='328' y='148' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='336' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='336' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='336' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='336' y='84' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='336' y='116' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='336' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='344' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='344' y='36' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='344' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='344' y='84' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='344' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='352' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='352' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='352' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='352' y='116' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='352' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='360' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='360' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='360' y='84' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='360' y='116' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='360' y='148' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='368' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='368' y='36' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='368' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='368' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='368' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='368' y='148' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='376' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='376' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='376' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='384' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='384' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='384' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='384' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='384' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='392' y='20' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='392' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='392' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='392' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='400' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='400' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='400' y='116' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='408' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='408' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='408' y='84' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='408' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='416' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='416' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='424' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='424' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='424' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='424' y='116' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='432' y='20' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='432' y='36' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='432' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='440' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='448' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='448' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='448' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='448' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='456' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='456' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='456' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='456' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='464' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='464' y='36' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='464' y='84' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='464' y='116' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='472' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='472' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='472' y='84' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='472' y='116' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='480' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='480' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='488' y='20' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='488' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='496' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='496' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='504' y='36' fill='currentColor' style='font-size:1em'>:</text>
</g>

    </svg>
  
</div>
<p>As such, if the property holds for <code>tail</code>, we have <code>reverse (append (cons head tail) m) = append (reverse m) (reverse (cons head tail))</code> for any arbitrary
<code>head</code>. Thus, the property also holds for <code>cons head tail</code>. So, with structural
induction on <code>l</code>, the property holds for all lists.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Illogical Reasoning and Reasonable Illogicality: The Differences Between Logic and Reason</title>
      <link>https://uint.one/posts/illogical-reasoning-and-reasonable-illogicality-the-differences-between-logic-and-reason/</link>
      <pubDate>Thu, 04 Feb 2016 06:30:12 +0000</pubDate>
      
      <guid>https://uint.one/posts/illogical-reasoning-and-reasonable-illogicality-the-differences-between-logic-and-reason/</guid>
      <description>&lt;p&gt;What is reasonable is not necessarily logical. One can believe two things and
realize that they imply a third thing. Instead of coming to believe the third
thing, that person might find they should stop believing one of the first two
if they have a good reason to believe the third is false. Similarly, a person
with those beliefs, except without a good reason to believe the third is false,
might still not infer that the third is true: they might be utterly
uninterested in whether it is true or not. There are many things one believes,
and though it would be logical to follow those beliefs to their logical
conclusions, this would result in one’s mind being filled with trivialities; a
consequence that makes the action unreasonable.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>What is reasonable is not necessarily logical. One can believe two things and
realize that they imply a third thing. Instead of coming to believe the third
thing, that person might find they should stop believing one of the first two
if they have a good reason to believe the third is false. Similarly, a person
with those beliefs, except without a good reason to believe the third is false,
might still not infer that the third is true: they might be utterly
uninterested in whether it is true or not. There are many things one believes,
and though it would be logical to follow those beliefs to their logical
conclusions, this would result in one’s mind being filled with trivialities; a
consequence that makes the action unreasonable.</p>
<p>In order to understand the difference between reason and logic, I think it is
important to first understand reason more deeply.</p>
<p>Reason is traditionally split into two types. Theoretical reasoning is a type
of thought to come to a certain belief, whereas practical reasoning is a type
of thought to change plans or intentions. What is reasonable in one type, is
not necessarily reasonable in the other. For example, in practical reasoning
one might be presented with multiple, equally satisfactory options. It would be
rational to choose an arbitrary option; otherwise one would be stalled through
inaction. The same does not hold for theoretical reasoning: when presented with
multiple, equally satisfactory beliefs it would not be rational to arbitrarily
choose one to believe. However, it is possible to rationally choose which
beliefs or questions one evaluates with theoretical reason. The conclusions
remain unaffected.</p>
<p>Ordinarily, reasoning is applied in a conservative manner. One’s current
beliefs and intentions are changed if there is a special reason to do so, and
conserved otherwise. This is in contrast with foundational reasoning, where a
belief should only be continued to be held if there is a justification to do
so. In such a reasoning system, there are some foundational beliefs that
require no further justification, such as current perceptions and logical
axioms. In general, humans reason conservatively.</p>
<p>Logical processes can be divided into three modes. One such mode is deduction,
where logical conclusions are reached from premises. A proof that some
conclusion is true through deduction starts with the premises, then consists of
a series of steps where each step follows logically from the prior steps or the
premises, and finally leads to the conclusion. This proof is sometimes called
“deductive reasoning”.</p>
<p>In reality, it is not actually a type of reasoning. In constructing such a
proof, one can have many different considerations. One first determines what
they are setting out to prove, upon which they might consider which
intermediate steps could be useful. They then aim to prove these intermediate
steps, and only then prove the conclusion is true using those intermediate
results. The reasoning behind constructing a logical proof does not necessarily
follow the same structure as the proof itself: the deductive rules must be
satisfied for the proof, but are not necessarily followed in the proof’s
construction.</p>
<p>As such, something that is reasonable is not necessarily logical, and something
that is logical is not necessarily reasonable. One can reason about deductions,
but deduction is not a kind of reasoning. Logic, at least its deductive mode,
is not a theory of reasoning and does not tell us how we govern our beliefs and
intentions.</p>
<p>If you would like to explore logic and reasoning in more detail, I highly
recommend reading the article <em>Internal critique: A logic is not a theory of
reasoning and a theory of reasoning is not a logic</em>, by G. Harman (2002).</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>An Introduction to Turing Machines</title>
      <link>https://uint.one/posts/an-introduction-to-turing-machines/</link>
      <pubDate>Thu, 22 Oct 2015 12:08:12 +0000</pubDate>
      
      <guid>https://uint.one/posts/an-introduction-to-turing-machines/</guid>
      <description>&lt;p&gt;A Turing machine is a mathematical model of a mechanical machine. At its roots,
the Turing machine uses a read/write head to manipulate symbols on a tape. It
was invented by the computer scientist Alan Turing in 1936. Interestingly,
according to the Church-Turing thesis this simple machine can do everything any
other computer can do; including our contemporary computers. Though these
machines are not a practical or efficient means to calculate something in the
real world, they can be used to reason about computability and other properties
of computer programs.&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&#34;https://uint.one/posts/an-introduction-to-turing-machines/alan.jpg&#34; target=&#34;_blank&#34;&gt;
      &lt;img 
          srcset=&#34;https://uint.one/posts/an-introduction-to-turing-machines/alan.jpg 300w &#34;
          loading=&#34;lazy&#34;
          sizes=&#34;auto&#34;
          style=&#34;max-width: calc(min(100%, 300px))&#34;
          src=&#34;https://uint.one/posts/an-introduction-to-turing-machines/alan.jpg&#34; alt=&#34;A portrait photograph of Alan Turing. The image is in grayscale. Alan is looking ahead and the photograph is taken just off-angle from head-on.&#34;/&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;p&gt; Alan Turing &lt;/p&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;</description>
      <content:encoded><![CDATA[<p>A Turing machine is a mathematical model of a mechanical machine. At its roots,
the Turing machine uses a read/write head to manipulate symbols on a tape. It
was invented by the computer scientist Alan Turing in 1936. Interestingly,
according to the Church-Turing thesis this simple machine can do everything any
other computer can do; including our contemporary computers. Though these
machines are not a practical or efficient means to calculate something in the
real world, they can be used to reason about computability and other properties
of computer programs.</p>
<figure>
    <a href="/posts/an-introduction-to-turing-machines/alan.jpg" target="_blank">
      <img 
          srcset="/posts/an-introduction-to-turing-machines/alan.jpg 300w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 300px))"
          src="/posts/an-introduction-to-turing-machines/alan.jpg" alt="A portrait photograph of Alan Turing. The image is in grayscale. Alan is looking ahead and the photograph is taken just off-angle from head-on."/></a>
    <figcaption><p> Alan Turing </p></figcaption>
  </figure><h1 id="definition">Definition</h1>
<p>There are various different, but equivalent, Turing machine definitions. A
one-tape Turing machine <span class="katex-eq">M</span> can be defined as a 6-tuple</p>
<div class="katex-eq">
M = \left\langle Q, \Sigma, \Gamma, \delta, q_0, F \right\rangle
</div>

<p>with:</p>
<p><span class="katex-eq">Q</span>: Set of states of the machine
<span class="katex-eq">\Sigma</span>: Input alphabet of the machine
<span class="katex-eq">\Gamma</span>: Tape alphabet (including the blank symbol <span class="katex-eq">B</span>, and all symbols in the input alphabet are also in the tape alphabet, <span class="katex-eq">\Sigma \subset \Gamma</span>)
<span class="katex-eq">\delta</span>: Transition function <span class="katex-eq">\delta : Q \times \Gamma \rightarrow Q \times \Gamma \times \left\lbrace L, R \right\rbrace</span>; i.e. given a state and a symbol, the transition function will tell what the new state is, which symbol should be written and whether the head should move left or right, e.g.: <span class="katex-eq">\delta(q_0, B) = \left[ q_1, B, R \right]</span>
<span class="katex-eq">q_0</span>: Initial state, <span class="katex-eq">q_0 \in Q</span>
<span class="katex-eq">F</span>: Set of accepting states, <span class="katex-eq">F \subseteq Q</span></p>
<p>The input of the Turing machine is written on the initial tape configuration. We assume that initially the first symbol on the tape is always the blank symbol <span class="katex-eq">B</span>, and that the following symbols are the input. We also assume that the input is followed by an infinite sequence of blank symbols (i.e., the tape is infinite).</p>
<p>For example, if the input is &ldquo;1011&rdquo;, the tape would be:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 280 41"
      >
      <g transform='translate(8,16)'>
<path d='M 248,0 L 248,16' fill='none' stroke='currentColor'></path>
<path d='M 256,0 L 256,16' fill='none' stroke='currentColor'></path>
<path d='M 264,0 L 264,16' fill='none' stroke='currentColor'></path>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>5</text>
<text text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>6</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>B</text>
</g>

    </svg>
  
</div>
<p>The Turing machine will start its computation in the initial state <span class="katex-eq">q_0</span> with the head at tape position 0. It will follow the transitions in the transition function, and halts when there are no more transitions it is able to take from the current head position. The input is accepted if the halting state is an accepting state. The output is the tape content after the machine has halted, but note that it is possible for machines to never halt for certain inputs.</p>
<h1 id="an-example">An Example</h1>
<p>We can represent Turing machines graphically. Let&rsquo;s look at an example machine:</p>
<figure>
    <a href="/posts/an-introduction-to-turing-machines/machine.png" target="_blank">
      <img 
          srcset="/posts/an-introduction-to-turing-machines/machine_hu_1b13d3f18eb72b83.png 400w,/posts/an-introduction-to-turing-machines/machine.png 464w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 464px))"
          src="/posts/an-introduction-to-turing-machines/machine.png" alt="A schematic diagram of a Turing machine. It has three circles representing states, labeled: q0, q1 and q2. There is an unlabeled arrow going into q0 indicating it is the starting state. State q2 is circled twice, indicating it is an accepting state. There are five labeled arrows. There is an arrow from q0 to q1 labeled B/BR. There is an arrow from q1 to itself labeled 0/1R. There is an arrow from q1 to q2 labeled 1/0R. There is an arrow from q2 to q1 labeled 0/1R. There is an arrow from q2 to itself labeled 1/0R."/></a>
    <figcaption><p> An example Turing machine with three states, of which q2 is an accepting state. The arrow labels x/yd model the transitions from one state to the other, where x is the symbol that is read, y is the symbol it is replaced with, and d is the direction the head moves to. The initial state is indicated by the arrow pointing from nothing to q0. </p></figcaption>
  </figure><p>This machine describes the machine <span class="katex-eq">M</span> with:</p>
<div class="katex-eq">
\begin{aligned}
Q &= \left\lbrace q_0, q_1, q_2 \right\rbrace
\\
\Sigma &= \left\lbrace 0, 1 \right\rbrace
\\
\Gamma &= \left\lbrace 0, 1, B \right\rbrace
\\
F &= \left\lbrace q_2 \right\rbrace
\\
\delta(q_0, B) &= \left[ q_1, B, R \right]
\\
\delta(q_1, 0) &= \left[ q_1, 1, R \right]
\\
\delta(q_1, 1) &= \left[ q_2, 0, R \right]
\\
\delta(q_2, 0) &= \left[ q_1, 1, R \right]
\\
\delta(q_2, 1) &= \left[ q_2, 0, R \right]
\end{aligned}
</div>

<p>and initial state <span class="katex-eq">q_0</span>.</p>
<p>If we run this machine with input &ldquo;1011&rdquo;, we compute <span class="katex-eq">M(1011)</span>. We can follow the computation by evaluating what the machine does at each step:</p>
<p><strong>Step 1</strong> <br>
Tape: B1011BB&hellip; <br>
State: <span class="katex-eq">q_0</span> <br>
Symbol: B <br>
Transition: <span class="katex-eq">\delta(q_0, B) = \left[ q_1, B, R \right]</span></p>
<p><strong>Step 2</strong> <br>
Tape: B1011BB&hellip; <br>
State: <span class="katex-eq">q_1</span> <br>
Symbol: 1 <br>
Transition: <span class="katex-eq">\delta(q_1, 1) = \left[ q_2, 0, R \right]</span></p>
<p><strong>Step 3</strong> <br>
Tape: B0011BB&hellip; <br>
State: <span class="katex-eq">q_2</span> <br>
Symbol: 0 <br>
Transition: <span class="katex-eq">\delta(q_2, 0) = \left[ q_1, 1, R \right]</span></p>
<p><strong>Step 4</strong> <br>
Tape: B0111BB&hellip; <br>
State: <span class="katex-eq">q_1</span> <br>
Symbol: 1 <br>
Transition: <span class="katex-eq">\delta(q_1, 1) = \left[ q_2, 0, R \right]</span></p>
<p><strong>Step 5</strong> <br>
Tape: B0101BB&hellip; <br>
State: <span class="katex-eq">q_2</span> <br>
Symbol: 1 <br>
Transition: <span class="katex-eq">\delta(q_2, 1) = \left[ q_2, 0, R \right]</span></p>
<p><strong>Step 6</strong> <br>
Tape: B0100BB&hellip; <br>
State: <span class="katex-eq">q_2</span> <br>
Symbol: B <br>
Transition: halt</p>
<p>The input is accepted as the machine stops in <span class="katex-eq">q_2 \in F</span>. The output is the input with 0s and 1s flipped: &ldquo;0100&rdquo;. By analyzing the machine, we can easily see that it accepts any input that ends with a &ldquo;1&rdquo;, and that the output is always the input with 0s and 1s flipped.</p>
<h1 id="encoding">Encoding</h1>
<p>Sometimes we want computer programs to perform computations with as input other computer programs. For example, a compiler takes source code and turns it into a program, a virus scanner can look at programs and indicate whether it believes they are viruses or not, and an interpreter takes source code and directly executes the program that is described. To be able to look at Turing machines with Turing machines, we require a means to encode such machines.</p>
<p>There are many different encodings possible. One such encoding is the following, where we encode Turing machines as strings of 0s and 1s. Given a machine <span class="katex-eq">M</span>, and by ignoring accepting states, the encoding of <span class="katex-eq">M</span> is <span class="katex-eq">R(M)</span>:</p>
<div class="katex-eq">
R(M) = 000\underbrace{en_\text{tr}(\delta_1)00en_\text{tr}(\delta_2)...00en_\text{tr}(\delta_n)}_{\text{Encode each transition}}000
</div>

<p>with for a transition <span class="katex-eq">\delta_k</span>:</p>
<div class="katex-eq">
\begin{aligned}
\delta_k(q_i, x) &= \left[ q_j, y, d \right]
\\
en_\text{tr}(\delta_k) &= en_\text{st}(q_i)0en_\text{sym}(x)0en_\text{st}(q_j)0en_\text{sym}(y)0en_\text{dir}(d)
\end{aligned}
</div>

<p>with:</p>
<div class="katex-eq">
\begin{aligned}
en_\text{st}(q_i) &= \underbrace{11...1}_{\text{i+1 1s}} = 1^{i+1}
\\
en_\text{sym}(x) &=
\begin{cases}
1 & \text{if } x = 0
\\
11 & \text{if } x = 1
\\
111 & \text{if } x = B
\end{cases}
\\
en_\text{dir}(d) &=
\begin{cases}
1 & \text{if } d = L
\\
11 & \text{if } d = R
\end{cases}
\end{aligned}
</div>

<p>Thus, the encoding of a Turing machine is three 0s followed by the encoding of the transitions (separated by two 0s), and ends with three 0s. The example Turing machine above would be encoded to (transitions are separated by spaces for clarity):</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 768 25"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='248' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='344' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='352' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='360' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='376' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='384' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='392' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='400' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='408' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='416' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='424' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='440' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='448' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='464' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='472' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='480' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='488' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='496' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='504' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='512' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='520' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='528' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='536' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='544' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='552' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='560' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='568' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='584' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='592' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='608' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='616' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='624' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='632' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='640' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='648' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='656' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='664' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='672' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='680' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='688' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='696' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='704' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='712' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='720' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='736' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='744' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='752' y='4' fill='currentColor' style='font-size:1em'>0</text>
</g>

    </svg>
  
</div>
<h1 id="languages">Languages</h1>
<p>A formal language is not the same as a natural language (such as English). A formal language is a set of strings made from symbols, and certain rules may apply as to which strings are in the language. Turing machines can recognize certain types of formal languages. The example machine above recognizes the language <span class="katex-eq">L(M) = \left\lbrace w \in \left\lbrace 0, 1 \right\rbrace^* | w \text{ ends with } 1 \right\rbrace</span>; that is, it recognizes the language of all strings of 1s and 0s that end with a 1. Note that in recognizing languages, the output of machines is irrelevant. We only need to know whether the input is accepted or not.</p>
<p>There are two types of languages related to Turing machines, recursive languages and recursively enumerable languages. A recursive language is a language for which there exists a Turing machine that will accept any string that is in the language, and rejects any other string. It is important that this machine halts for every possible input. On the other hand, a recursively enumerable language is one for which we can construct a Turing machine that will enumerate all strings in the language, meaning that it will produce output:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 280 25"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>4</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>B</text>
</g>

    </svg>
  
</div>
<p>with <span class="katex-eq">w_i</span> valid strings in the language. For infinite languages this enumeration operation will obviously never halt, but any given string will be reached eventually. Note that this means there does not need to exist a Turing machine that will tell you for all possible inputs whether it is or is not in the language. One is able to construct a machine that will recognize and halt for each valid string, but you cannot guarantee that the machine will halt for strings that are not in the language. One such machine can be constructed from the enumeration machine: enumerate until you find the input string, then halt and accept. Clearly, if the input string is not a valid string and the language is infinite, this machine will never halt.</p>
<p>The set of recursive languages is a subset of the recursively enumerable languages. Given a machine <span class="katex-eq">M</span> that halts for any input and accepts precisely the words of language <span class="katex-eq">L</span>, we can construct a machine that enumerates language <span class="katex-eq">L</span>. The enumerating Turing machine <span class="katex-eq">M&#39;</span> for language <span class="katex-eq">L</span> generates all possible strings <span class="katex-eq">w_i</span> and places them on the output if <span class="katex-eq">w_i</span> is accepted by <span class="katex-eq">M</span>.</p>
<h1 id="halting-problem">Halting Problem</h1>
<p>Given an input and a description of a Turing machine (or any computer program), the halting problem is the problem of determining whether the computation will halt eventually or will run forever. Using his Turing machines, Alan Turing proved that there cannot exist a general algorithm that solves the halting problem for all pairs of computer programs and inputs; the halting problem is undecidable.</p>
<p>We will now prove that the halting problem is undecidable. If the halting problem would be decidable, we could make a Turing machine <span class="katex-eq">H</span> that, given an encoding of a Turing machine <span class="katex-eq">M</span> and an input <span class="katex-eq">w</span> for that machine, would give as output 1 if <span class="katex-eq">M(w)</span> halts, and 0 if it does not. Using <span class="katex-eq">H</span>, we can make a machine <span class="katex-eq">D</span> that takes as input the code for a Turing machine <span class="katex-eq">M</span> and asks <span class="katex-eq">H</span> whether that machine halts when it looks at input <span class="katex-eq">R(M)</span>; i.e., <span class="katex-eq">D</span> asks <span class="katex-eq">H</span> whether <span class="katex-eq">M(R(M))</span> halts. Then, we construct <span class="katex-eq">D</span> such that it halts precisely when <span class="katex-eq">M(R(M))</span> does not.</p>
<div class="katex-eq">
D(R(M)) \text{ halts} \iff M(R(M)) \text{ does not halt}
</div>

<p>Now, instead of making <span class="katex-eq">D</span> look at an arbitrary machine, we make <span class="katex-eq">D</span> look at itself: we compute <span class="katex-eq">D(R(D))</span>. Using our definition of <span class="katex-eq">D</span>, we see that <span class="katex-eq">D(R(D))</span> halts precisely when its input machine on its encoding, <span class="katex-eq">D(R(D))</span>, does not.</p>
<div class="katex-eq">
D(R(D)) \text{ halts} \iff D(R(D)) \text{ does not halt}
</div>

<p>However, this is a contradiction. As such, our initial assumption that the halting problem is decidable must be invalid; the halting problem is undecidable.</p>
<h2 id="gödels-incompleteness-theorem">Gödel&rsquo;s Incompleteness Theorem</h2>
<p>Gödel&rsquo;s first incompleteness theorem states that in a consistent logic system, you will not be able to prove everything that is true. A consistent logic system is one which does not contain contradictions. The first incompleteness theorem follows directly from the halting problem. To prove this, we start by assuming that we can prove all things that are true. Take two things: one being that a computer program will halt for a given input, and the other being that that computer program will not halt for that input. Given our assumption, we would be able to prove that one of these is true, and thus we would be able to decide the halting problem. However, we know that the halting problem is undecidable, so this is a contradiction. It follows that we cannot prove all things that are true, which proves Gödel&rsquo;s first incompleteness theorem.</p>]]></content:encoded>
    </item>
    
    <item>
      <title>Alan Turing Quote from Computing Machinery and Intelligence</title>
      <link>https://uint.one/posts/alan-turing-quote-from-computing-machinery-and-intelligence/</link>
      <pubDate>Thu, 22 Oct 2015 09:51:18 +0000</pubDate>
      
      <guid>https://uint.one/posts/alan-turing-quote-from-computing-machinery-and-intelligence/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;The view that machines cannot give rise to surprises is due, I believe, to a fallacy to which philosophers and mathematicians are particularly subject. This is the assumption that as soon as a fact is presented to a mind all consequences of that fact spring into the mind simultaneously with it. It is a very useful assumption under many circumstances, but one too easily forgets that it is false.&lt;/p&gt;
&lt;p&gt;&amp;ndash; Alan Turing, 1950&lt;/p&gt;&lt;/blockquote&gt;</description>
      <content:encoded><![CDATA[<blockquote>
<p>The view that machines cannot give rise to surprises is due, I believe, to a fallacy to which philosophers and mathematicians are particularly subject. This is the assumption that as soon as a fact is presented to a mind all consequences of that fact spring into the mind simultaneously with it. It is a very useful assumption under many circumstances, but one too easily forgets that it is false.</p>
<p>&ndash; Alan Turing, 1950</p></blockquote>]]></content:encoded>
    </item>
    
    <item>
      <title>Why You Should Never Go Data Fishing</title>
      <link>https://uint.one/posts/why-you-should-never-go-data-fishing/</link>
      <pubDate>Tue, 20 Oct 2015 09:16:35 +0000</pubDate>
      
      <guid>https://uint.one/posts/why-you-should-never-go-data-fishing/</guid>
      <description>&lt;p&gt;Most likely you will have heard that you should never go data fishing, meaning
that you should not repeatedly test data. In the case of statistical
significance tests, perhaps you will have heard that because of the nature of
these tests you will find an effect at the 5% significance level in 5% of cases
when there actually is no effect, and an effect at the 2% significance level in
2% of cases when there actually is no effect, and so on. It is less likely you
will have heard not to continue looking for an effect after your current test
concluded there was none. Here is why.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Most likely you will have heard that you should never go data fishing, meaning
that you should not repeatedly test data. In the case of statistical
significance tests, perhaps you will have heard that because of the nature of
these tests you will find an effect at the 5% significance level in 5% of cases
when there actually is no effect, and an effect at the 2% significance level in
2% of cases when there actually is no effect, and so on. It is less likely you
will have heard not to continue looking for an effect after your current test
concluded there was none. Here is why.</p>
<p>Let&rsquo;s say a researcher has an initial data set of ten samples. The effect they
are looking for is not present in this data. Of course it is possible that they
were just unlucky, and that simply more data is all that is needed to find the
effect. The researcher can now start to draw more samples, and will
continuously tests whether there is a significant effect. Once they find a
significant effect, they stop looking. They do this until the data set hits 100
data points, after which the researcher is convinced there is no effect. When
the statistical test used is looking at the 5% significance level, one might
think that doing this still gives a probability of just 5% of making a mistake.
That is wrong.</p>
<p>Instead, by doing this the researcher finds themselves with an approximate 28%
chance of finding an effect while there is none. This can be confirmed by
writing a bit of code that performs this procedure for a large number of
initial samples from a distribution without the hypothesized effect, which is
precisely what I have done to find this number. I&rsquo;ve included the code I wrote
below. By running this code in MATLAB, you will find that about 2,800 out of
10,000 experiments will (eventually) yield a significant result. This means
that in about 24% of data sets with initially insignificant effects, you will
find a significant effect just by continuing to look for that effect. The issue
is easily remedied; choose a hypothesis and sample size and stick with them.</p>
<p>A related issue can pop up when doing other types of analyses. In data mining,
a researcher is usually interested in finding novel patterns in data. This
means the researcher cannot choose one hypothesis before testing; they will be
forming and testing a great number of hypotheses as they explore the data. One
way to do this without fishing is to split the data randomly into two
sets: exploring, and testing. The researcher uses the
exploring set to formulate hypotheses they want to test, and they test all the
chosen hypotheses on the testing set. Compare this with the training, testing
and development sets I posted about earlier. Note that one still has to account
for the number of tests they are performing.</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 592 537"
      >
      <g transform='translate(8,16)'>
<path d='M 476,488 L 484,472' fill='none' stroke='currentColor'></path>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='0' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='0' y='516' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='8' y='52' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='8' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='116' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='8' y='516' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='16' y='100' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='516' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='24' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='32' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='32' y='132' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='32' y='164' fill='currentColor' style='font-size:1em'>%</text>
<text text-anchor='middle' x='32' y='180' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='32' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='32' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='452' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='484' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='40' y='100' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='40' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='212' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='40' y='244' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='40' y='452' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='40' y='484' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='48' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='48' y='116' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='48' y='132' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='48' y='164' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='48' y='180' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='48' y='244' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='48' y='452' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='48' y='484' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='56' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='56' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='56' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='212' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='56' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='56' y='484' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='64' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='64' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='64' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='64' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='260' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='64' y='436' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='64' y='484' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='500' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='100' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='72' y='132' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='72' y='164' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='72' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='72' y='212' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='72' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='72' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='436' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='484' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='500' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='80' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='80' y='164' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='80' y='180' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='212' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='80' y='228' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='80' y='260' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='436' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='80' y='484' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='80' y='500' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='88' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='116' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='88' y='132' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='88' y='164' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='88' y='180' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='88' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='88' y='484' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='88' y='500' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='100' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='96' y='116' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='96' y='132' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='96' y='164' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='96' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='96' y='212' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='96' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='260' fill='currentColor' style='font-size:1em'>j</text>
<text text-anchor='middle' x='96' y='276' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='96' y='292' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='96' y='324' fill='currentColor' style='font-size:1em'>%</text>
<text text-anchor='middle' x='96' y='340' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='96' y='372' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='96' y='420' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='484' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='96' y='500' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='104' y='116' fill='currentColor' style='font-size:1em'>E</text>
<text text-anchor='middle' x='104' y='132' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='180' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='104' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='104' y='292' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='372' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='104' y='420' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='484' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='104' y='500' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='112' y='100' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='112' y='116' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='112' y='132' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='112' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='112' y='180' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='112' y='212' fill='currentColor' style='font-size:1em'>%</text>
<text text-anchor='middle' x='112' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='112' y='244' fill='currentColor' style='font-size:1em'>%</text>
<text text-anchor='middle' x='112' y='260' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='112' y='276' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='112' y='292' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='112' y='324' fill='currentColor' style='font-size:1em'>P</text>
<text text-anchor='middle' x='112' y='340' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='112' y='420' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='112' y='484' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='112' y='500' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>9</text>
<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='120' y='132' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='120' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='120' y='292' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='120' y='324' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='372' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='120' y='484' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='120' y='500' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='128' y='52' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='128' y='100' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='128' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='128' y='132' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='128' y='164' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='128' y='180' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='128' y='212' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='128' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='244' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='128' y='260' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='128' y='276' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='128' y='324' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='128' y='340' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='128' y='388' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='128' y='404' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='128' y='484' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='128' y='500' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='136' y='100' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='136' y='116' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='136' y='132' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='136' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='180' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='244' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='260' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='136' y='276' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='136' y='292' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='136' y='324' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='136' y='340' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='136' y='372' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='136' y='388' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='404' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='136' y='484' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='136' y='500' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='144' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='144' y='132' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='144' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='180' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='144' y='212' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='144' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='144' y='244' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='144' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='276' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='144' y='324' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='144' y='340' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='372' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='144' y='388' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='144' y='404' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='144' y='484' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='144' y='500' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='152' y='116' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='152' y='132' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='164' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='152' y='180' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='152' y='212' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='152' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='152' y='244' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='152' y='260' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='152' y='276' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='152' y='292' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='152' y='324' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='152' y='340' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='152' y='388' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='152' y='404' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='152' y='484' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='152' y='500' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='160' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='160' y='132' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='160' y='164' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='160' y='212' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='160' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='160' y='244' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='160' y='260' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='160' y='276' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='160' y='292' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='160' y='324' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='160' y='340' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='160' y='372' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='160' y='388' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='160' y='404' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='160' y='484' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='160' y='500' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='168' y='116' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='168' y='164' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='168' y='260' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='168' y='276' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='168' y='292' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='168' y='340' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='168' y='388' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='168' y='404' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='168' y='484' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='176' y='116' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='132' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='176' y='164' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='176' y='228' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='176' y='260' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='176' y='276' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='176' y='292' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='176' y='324' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='176' y='340' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='176' y='372' fill='currentColor' style='font-size:1em'>%</text>
<text text-anchor='middle' x='176' y='388' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='176' y='484' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='184' y='116' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='184' y='132' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='184' y='164' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='184' y='212' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='184' y='244' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='184' y='260' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='184' y='276' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='184' y='292' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='184' y='340' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='184' y='388' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='184' y='484' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>%</text>
<text text-anchor='middle' x='192' y='52' fill='currentColor' style='font-size:1em'>%</text>
<text text-anchor='middle' x='192' y='68' fill='currentColor' style='font-size:1em'>%</text>
<text text-anchor='middle' x='192' y='164' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='192' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='192' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='192' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='192' y='276' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='192' y='324' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='192' y='340' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='192' y='372' fill='currentColor' style='font-size:1em'>S</text>
<text text-anchor='middle' x='192' y='388' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='192' y='484' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>%</text>
<text text-anchor='middle' x='200' y='132' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='200' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='200' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='200' y='244' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='260' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='200' y='276' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='200' y='292' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='200' y='324' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='200' y='340' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='372' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='200' y='388' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='200' y='484' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='208' y='52' fill='currentColor' style='font-size:1em'>N</text>
<text text-anchor='middle' x='208' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='208' y='132' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='208' y='212' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='208' y='228' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='208' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='208' y='260' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='208' y='276' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='208' y='292' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='208' y='324' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='208' y='340' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='208' y='372' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='208' y='388' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='208' y='484' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='216' y='52' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='216' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='216' y='132' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='216' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='216' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='216' y='260' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='216' y='292' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='216' y='324' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='216' y='340' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='216' y='372' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='216' y='388' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='224' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='224' y='68' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='224' y='132' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='224' y='164' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='224' y='212' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='224' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='224' y='244' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='224' y='260' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='224' y='324' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='372' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='224' y='388' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='224' y='484' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='232' y='52' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='232' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='232' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='232' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='232' y='228' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='232' y='244' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='232' y='260' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='232' y='292' fill='currentColor' style='font-size:1em'>%</text>
<text text-anchor='middle' x='232' y='324' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='232' y='372' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='232' y='484' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='240' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='240' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='164' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='240' y='212' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='240' y='228' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='240' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='240' y='324' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='240' y='388' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='240' y='484' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='248' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='248' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='248' y='68' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='248' y='164' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='248' y='212' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='248' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='248' y='244' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='248' y='292' fill='currentColor' style='font-size:1em'>D</text>
<text text-anchor='middle' x='248' y='324' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='248' y='372' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='248' y='484' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='256' y='68' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='256' y='164' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='256' y='212' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='256' y='228' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='256' y='292' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='256' y='324' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='256' y='372' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='256' y='388' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='256' y='484' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='68' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='264' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='264' y='228' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='264' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='264' y='292' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='264' y='324' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='264' y='372' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='264' y='388' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='272' y='52' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='272' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='272' y='164' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='272' y='212' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='272' y='228' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='272' y='244' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='272' y='292' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='272' y='372' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='272' y='388' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='272' y='484' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='280' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='280' y='164' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='280' y='228' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='280' y='244' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='280' y='324' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='280' y='388' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='288' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='288' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='288' y='164' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='288' y='212' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='288' y='228' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='288' y='292' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='288' y='324' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='288' y='372' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='288' y='388' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='288' y='484' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='296' y='36' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='296' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='296' y='164' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='296' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='296' y='244' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='296' y='292' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='296' y='324' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='296' y='372' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='296' y='388' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='296' y='484' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='304' y='52' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='304' y='68' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='304' y='164' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='304' y='212' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='304' y='228' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='304' y='244' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='304' y='292' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='304' y='324' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='304' y='372' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='304' y='388' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='304' y='484' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='312' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='312' y='52' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='312' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='312' y='212' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='312' y='244' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='312' y='324' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='312' y='372' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='312' y='388' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='312' y='484' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='320' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='320' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='320' y='164' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='320' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='320' y='228' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='320' y='244' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='320' y='292' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='320' y='324' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='320' y='372' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='320' y='388' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='320' y='484' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='328' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='328' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='328' y='68' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='328' y='164' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='328' y='212' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='328' y='228' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='328' y='244' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='328' y='292' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='328' y='372' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='328' y='388' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='328' y='484' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='336' y='36' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='336' y='52' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='336' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='336' y='164' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='336' y='212' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='336' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='336' y='292' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='336' y='324' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='336' y='372' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='336' y='388' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='336' y='484' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='344' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='344' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='344' y='68' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='344' y='164' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='344' y='212' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='344' y='324' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='344' y='372' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='344' y='388' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='344' y='484' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='352' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='352' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='352' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='352' y='212' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='352' y='244' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='352' y='292' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='352' y='324' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='352' y='372' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='352' y='388' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='352' y='484' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='360' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='360' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='360' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='360' y='164' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='360' y='212' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='360' y='244' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='360' y='292' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='360' y='324' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='360' y='372' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='360' y='484' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='368' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='368' y='164' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='368' y='212' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='368' y='244' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='368' y='292' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='368' y='324' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='368' y='372' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='368' y='388' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='368' y='484' fill='currentColor' style='font-size:1em'>g</text>
<text text-anchor='middle' x='376' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='376' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='376' y='212' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='376' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='376' y='372' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='376' y='484' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='384' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='384' y='36' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='384' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='384' y='164' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='384' y='212' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='384' y='244' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='384' y='292' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='384' y='324' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='384' y='372' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='384' y='388' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='384' y='484' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='392' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='392' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='392' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='392' y='164' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='392' y='244' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='392' y='292' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='392' y='324' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='392' y='388' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='392' y='484' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='400' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='400' y='212' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='400' y='244' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='400' y='292' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='400' y='324' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='400' y='372' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='400' y='484' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='408' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='408' y='36' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='408' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='408' y='164' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='408' y='212' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='408' y='244' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='408' y='292' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='408' y='324' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='408' y='372' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='408' y='484' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='416' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='416' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='416' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='416' y='164' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='416' y='212' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='416' y='244' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='416' y='292' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='416' y='372' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='416' y='484' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='424' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='424' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='424' y='212' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='424' y='244' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='424' y='292' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='424' y='324' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='424' y='372' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='424' y='484' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='432' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='432' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='432' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='432' y='244' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='432' y='324' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='432' y='372' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='432' y='484' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='440' y='4' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='440' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='440' y='212' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='440' y='244' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='440' y='372' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='440' y='484' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='448' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='448' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='448' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='448' y='244' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='448' y='324' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='448' y='372' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='448' y='484' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='456' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='456' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='456' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='456' y='324' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='456' y='484' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='464' y='4' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='464' y='52' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='464' y='244' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='464' y='372' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='472' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='472' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='472' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='472' y='244' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='472' y='324' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='472' y='372' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='480' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='480' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='480' y='244' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='480' y='324' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='480' y='372' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='488' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='488' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='488' y='52' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='488' y='244' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='488' y='372' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='496' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='504' y='4' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='504' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='504' y='244' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='504' y='372' fill='currentColor' style='font-size:1em'>0</text>
<text text-anchor='middle' x='512' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='512' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='520' y='4' fill='currentColor' style='font-size:1em'>v</text>
<text text-anchor='middle' x='528' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='528' y='52' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='536' y='4' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='536' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='544' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='544' y='52' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='552' y='52' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='568' y='52' fill='currentColor' style='font-size:1em'>a</text>
</g>

    </svg>
  
</div>]]></content:encoded>
    </item>
    
    <item>
      <title>Plotting a Heat Map Table in MATLAB</title>
      <link>https://uint.one/posts/plotting-a-heat-map-table-in-matlab/</link>
      <pubDate>Wed, 14 Oct 2015 18:12:36 +0000</pubDate>
      
      <guid>https://uint.one/posts/plotting-a-heat-map-table-in-matlab/</guid>
      <description>&lt;p&gt;A little while ago I found myself needing to plot a heat map table in MATLAB.
Such a plot is a table where the cells have background colors; the colors
depend on the value in the cell, e.g. a higher value could correspond with a
warmer color. I found no existing function to do this easily, so I set out to
create my own solution.&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&#34;https://uint.one/posts/plotting-a-heat-map-table-in-matlab/tabularHeatMap.png&#34; target=&#34;_blank&#34;&gt;
      &lt;img 
          srcset=&#34;https://uint.one/posts/plotting-a-heat-map-table-in-matlab/tabularHeatMap_hu_50b33939198ca628.png 400w,/posts/plotting-a-heat-map-table-in-matlab/tabularHeatMap.png 477w &#34;
          loading=&#34;lazy&#34;
          sizes=&#34;auto&#34;
          style=&#34;max-width: calc(min(100%, 477px))&#34;
          src=&#34;https://uint.one/posts/plotting-a-heat-map-table-in-matlab/tabularHeatMap.png&#34; alt=&#34;A table of integers between 0 and 12. There are seven rows and seven columns. There is a color gradient ranging from black in the top left of the table dark orange in the middle, to light orange in the bottom right. The integers in the cells start at 0 in the top left and increase with every cell downward and rightward by 1. The first row describes the numbers 0, 1, 2, 3, 4, 5 and 6. The second row describes the numbers 1, 2, 3, 4, 5, 6 and 7. The last row describes numbers 6, 7, 8, 9, 10, 11 and 12. There is a legend on the right of the table ranging from 0 to 12, showing the same gradient from black to light orange.&#34;/&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;p&gt;&lt;/p&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;&lt;p&gt;The code to plot a heat map table can be found &lt;a href=&#34;https://gist.github.com/tomcur/ff7a414dfab0f8474859&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>A little while ago I found myself needing to plot a heat map table in MATLAB.
Such a plot is a table where the cells have background colors; the colors
depend on the value in the cell, e.g. a higher value could correspond with a
warmer color. I found no existing function to do this easily, so I set out to
create my own solution.</p>
<figure>
    <a href="/posts/plotting-a-heat-map-table-in-matlab/tabularHeatMap.png" target="_blank">
      <img 
          srcset="/posts/plotting-a-heat-map-table-in-matlab/tabularHeatMap_hu_50b33939198ca628.png 400w,/posts/plotting-a-heat-map-table-in-matlab/tabularHeatMap.png 477w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 477px))"
          src="/posts/plotting-a-heat-map-table-in-matlab/tabularHeatMap.png" alt="A table of integers between 0 and 12. There are seven rows and seven columns. There is a color gradient ranging from black in the top left of the table dark orange in the middle, to light orange in the bottom right. The integers in the cells start at 0 in the top left and increase with every cell downward and rightward by 1. The first row describes the numbers 0, 1, 2, 3, 4, 5 and 6. The second row describes the numbers 1, 2, 3, 4, 5, 6 and 7. The last row describes numbers 6, 7, 8, 9, 10, 11 and 12. There is a legend on the right of the table ranging from 0 to 12, showing the same gradient from black to light orange."/></a>
    <figcaption><p></p></figcaption>
  </figure><p>The code to plot a heat map table can be found <a href="https://gist.github.com/tomcur/ff7a414dfab0f8474859">here</a>.</p>
<p>Usage is pretty simple. If you have a matrix <span class="katex-eq">A</span>, just pass it into the
function and it will do the rest! For example:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 192 121"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='0' y='84' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='0' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='8' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='8' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='16' y='84' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='16' y='100' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='24' y='100' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>z</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='40' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>d</text>
<text text-anchor='middle' x='48' y='100' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='56' y='100' fill='currentColor' style='font-size:1em'>H</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>j</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='64' y='100' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='72' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>7</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>7</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='80' y='100' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='88' y='100' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>7</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>j</text>
<text text-anchor='middle' x='96' y='100' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>:</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='104' y='100' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>7</text>
<text text-anchor='middle' x='112' y='100' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='120' y='100' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='128' y='100' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='136' y='100' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>+</text>
<text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>j</text>
<text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>-</text>
<text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>;</text>
</g>

    </svg>
  
</div>
<p>There are a number of options available. See the documentation in the code for
more information about the options. To further adjust the generated figure,
such as to add labels, proceed as you would with other plotting functions. For
example:</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="Menlo,Lucida Console,monospace"
      
        viewBox="0 0 424 169"
      >
      <g transform='translate(8,16)'>
<text text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='0' y='68' fill='currentColor' style='font-size:1em'>y</text>
<text text-anchor='middle' x='0' y='84' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='0' y='100' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='0' y='132' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='0' y='148' fill='currentColor' style='font-size:1em'>h</text>
<text text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='8' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='8' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='8' y='84' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='8' y='100' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='8' y='116' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='8' y='132' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='8' y='148' fill='currentColor' style='font-size:1em'>.</text>
<text text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='68' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='16' y='84' fill='currentColor' style='font-size:1em'>X</text>
<text text-anchor='middle' x='16' y='100' fill='currentColor' style='font-size:1em'>X</text>
<text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>X</text>
<text text-anchor='middle' x='16' y='132' fill='currentColor' style='font-size:1em'>Y</text>
<text text-anchor='middle' x='16' y='148' fill='currentColor' style='font-size:1em'>Y</text>
<text text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='24' y='52' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='24' y='68' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='24' y='84' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='24' y='100' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='24' y='116' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='24' y='132' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='24' y='148' fill='currentColor' style='font-size:1em'>T</text>
<text text-anchor='middle' x='32' y='4' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='32' y='116' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='32' y='132' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='32' y='148' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='40' y='68' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='40' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='40' y='100' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='40' y='132' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='40' y='148' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='48' y='100' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='48' y='116' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='48' y='132' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='48' y='148' fill='currentColor' style='font-size:1em'>k</text>
<text text-anchor='middle' x='56' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='56' y='116' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='56' y='148' fill='currentColor' style='font-size:1em'>L</text>
<text text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='64' y='52' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>R</text>
<text text-anchor='middle' x='64' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='64' y='100' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='64' y='132' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='64' y='148' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='72' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='72' y='84' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='72' y='148' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='80' y='100' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='80' y='116' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='80' y='132' fill='currentColor' style='font-size:1em'>[</text>
<text text-anchor='middle' x='80' y='148' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>H</text>
<text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='88' y='100' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='88' y='116' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='88' y='132' fill='currentColor' style='font-size:1em'>1</text>
<text text-anchor='middle' x='88' y='148' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='96' y='52' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='96' y='68' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='104' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='104' y='100' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='104' y='116' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='104' y='132' fill='currentColor' style='font-size:1em'>2</text>
<text text-anchor='middle' x='104' y='148' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='112' y='68' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='120' y='68' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='120' y='100' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='120' y='132' fill='currentColor' style='font-size:1em'>3</text>
<text text-anchor='middle' x='120' y='148' fill='currentColor' style='font-size:1em'>{</text>
<text text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='128' y='52' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='128' y='68' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='128' y='84' fill='currentColor' style='font-size:1em'>=</text>
<text text-anchor='middle' x='128' y='100' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='128' y='116' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='128' y='132' fill='currentColor' style='font-size:1em'>]</text>
<text text-anchor='middle' x='128' y='148' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='136' y='36' fill='currentColor' style='font-size:1em'>M</text>
<text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='136' y='68' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='136' y='100' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='136' y='116' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='136' y='132' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='136' y='148' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='144' y='68' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='144' y='84' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='144' y='116' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='144' y='148' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'>b</text>
<text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='152' y='84' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='152' y='116' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='152' y='148' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='160' y='4' fill='currentColor' style='font-size:1em'>(</text>
<text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='160' y='84' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='168' y='84' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='168' y='116' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='168' y='148' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>f</text>
<text text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'>x</text>
<text text-anchor='middle' x='176' y='84' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='176' y='116' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='176' y='148' fill='currentColor' style='font-size:1em'>B</text>
<text text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'>u</text>
<text text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='184' y='84' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='184' y='116' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='184' y='148' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='192' y='116' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='192' y='148' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='208' y='116' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='208' y='148' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='216' y='116' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='216' y='148' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='224' y='116' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='224' y='148' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='232' y='116' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='232' y='148' fill='currentColor' style='font-size:1em'>}</text>
<text text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='240' y='116' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='240' y='148' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>C</text>
<text text-anchor='middle' x='256' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='4' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'>l</text>
<text text-anchor='middle' x='272' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='272' y='20' fill='currentColor' style='font-size:1em'>o</text>
<text text-anchor='middle' x='280' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='288' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'>m</text>
<text text-anchor='middle' x='296' y='4' fill='currentColor' style='font-size:1em'>c</text>
<text text-anchor='middle' x='296' y='20' fill='currentColor' style='font-size:1em'>a</text>
<text text-anchor='middle' x='304' y='4' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='304' y='20' fill='currentColor' style='font-size:1em'>p</text>
<text text-anchor='middle' x='312' y='4' fill='currentColor' style='font-size:1em'>A</text>
<text text-anchor='middle' x='312' y='20' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='320' y='4' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='320' y='20' fill='currentColor' style='font-size:1em'>,</text>
<text text-anchor='middle' x='328' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='336' y='4' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='336' y='20' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='344' y='4' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='344' y='20' fill='currentColor' style='font-size:1em'>w</text>
<text text-anchor='middle' x='352' y='4' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='352' y='20' fill='currentColor' style='font-size:1em'>i</text>
<text text-anchor='middle' x='360' y='4' fill='currentColor' style='font-size:1em'>s</text>
<text text-anchor='middle' x='360' y='20' fill='currentColor' style='font-size:1em'>n</text>
<text text-anchor='middle' x='368' y='4' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='368' y='20' fill='currentColor' style='font-size:1em'>t</text>
<text text-anchor='middle' x='376' y='4' fill='currentColor' style='font-size:1em'>;</text>
<text text-anchor='middle' x='376' y='20' fill='currentColor' style='font-size:1em'>e</text>
<text text-anchor='middle' x='384' y='20' fill='currentColor' style='font-size:1em'>r</text>
<text text-anchor='middle' x='392' y='20' fill='currentColor' style='font-size:1em'>'</text>
<text text-anchor='middle' x='400' y='20' fill='currentColor' style='font-size:1em'>)</text>
<text text-anchor='middle' x='408' y='20' fill='currentColor' style='font-size:1em'>;</text>
</g>

    </svg>
  
</div>]]></content:encoded>
    </item>
    
    <item>
      <title>Training, Testing and Development / Validation Sets</title>
      <link>https://uint.one/posts/training-testing-and-development-validation-sets/</link>
      <pubDate>Wed, 07 Oct 2015 12:31:32 +0000</pubDate>
      
      <guid>https://uint.one/posts/training-testing-and-development-validation-sets/</guid>
      <description>&lt;p&gt;Finding models that predict or explain relationships in data is a big focus in
information science. Such models often have many parameters that can be tuned,
and in practice we only have limited data to tune the parameters with. If we
make measurements of a function &lt;span class=&#34;katex-eq&#34;&gt;f(x)&lt;/span&gt; at different values of
&lt;span class=&#34;katex-eq&#34;&gt;x&lt;/span&gt;, we might find data like in Figure (a) below. If we now fit a
polynomial curve to all known data points, we might find the model that is
depicted in Figure (b). This model appears to explain the data perfectly: all
data points are covered. However, such a model does not give any additional
insight into the relationship between &lt;span class=&#34;katex-eq&#34;&gt;x&lt;/span&gt; and &lt;span class=&#34;katex-eq&#34;&gt;f(x)&lt;/span&gt;.
Indeed; if we make more measurements, we find the data in Figure (c). Now the
model we found in (b) appears to not fit the data well at all. In fact, the
function used to generate the data is &lt;span class=&#34;katex-eq&#34;&gt;f(x) = x &amp;#43; \epsilon&lt;/span&gt; with
&lt;span class=&#34;katex-eq&#34;&gt;\epsilon&lt;/span&gt; Gaussian noise. The linear model &lt;span class=&#34;katex-eq&#34;&gt;f&amp;#39;(x) = x&lt;/span&gt;
depicted in Figure (d) is the most suitable model to explain the found data and
to make predictions of future data.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Finding models that predict or explain relationships in data is a big focus in
information science. Such models often have many parameters that can be tuned,
and in practice we only have limited data to tune the parameters with. If we
make measurements of a function <span class="katex-eq">f(x)</span> at different values of
<span class="katex-eq">x</span>, we might find data like in Figure (a) below. If we now fit a
polynomial curve to all known data points, we might find the model that is
depicted in Figure (b). This model appears to explain the data perfectly: all
data points are covered. However, such a model does not give any additional
insight into the relationship between <span class="katex-eq">x</span> and <span class="katex-eq">f(x)</span>.
Indeed; if we make more measurements, we find the data in Figure (c). Now the
model we found in (b) appears to not fit the data well at all. In fact, the
function used to generate the data is <span class="katex-eq">f(x) = x &#43; \epsilon</span> with
<span class="katex-eq">\epsilon</span> Gaussian noise. The linear model <span class="katex-eq">f&#39;(x) = x</span>
depicted in Figure (d) is the most suitable model to explain the found data and
to make predictions of future data.</p>
<p>The overly complex model found in (b) is said to have overfitted. A model that
has been overfitted fits the known data extremely well, but it is not suited
for generalization to unseen data. Because of this, it is important to have
some estimate of a model&rsquo;s ability to be generalized to unseen data. This is
where training, testing, and development sets come in. The full set of
collected data is split into these separate sets.</p>
<p><figure>
    <a href="/posts/training-testing-and-development-validation-sets/small_sample_scatter.png" target="_blank">
      <img 
          srcset="/posts/training-testing-and-development-validation-sets/small_sample_scatter.png 312w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 312px))"
          src="/posts/training-testing-and-development-validation-sets/small_sample_scatter.png" alt="A two-dimensional graph ranging from 0 to 10 on the horizontal and 0 to 10 on the vertical. The horizontal axis is labeled &ldquo;x&rdquo;, the vertical axis is labeled &ldquo;f(x)&rdquo;. There are 8 positions marked in the graph, all increasing in f(x) as x increases, but it is not a perfect relationship: there is some jitter."/></a>
    <figcaption><p> (a) Scatter plot of f(x) </p></figcaption>
  </figure>
<figure>
    <a href="/posts/training-testing-and-development-validation-sets/small_sample_scatter_overlay.png" target="_blank">
      <img 
          srcset="/posts/training-testing-and-development-validation-sets/small_sample_scatter_overlay.png 312w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 312px))"
          src="/posts/training-testing-and-development-validation-sets/small_sample_scatter_overlay.png" alt="The same graph with a heavily curved line drawn that crosses perfectly through all the points. It appears to be a perfect, though somewhat complex, representation of the relationship of f(x) and x."/></a>
    <figcaption><p> (b) Overlay with a 7th degree polynomial </p></figcaption>
  </figure>
<figure>
    <a href="/posts/training-testing-and-development-validation-sets/larger_sample_scatter_overlay.png" target="_blank">
      <img 
          srcset="/posts/training-testing-and-development-validation-sets/larger_sample_scatter_overlay.png 312w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 312px))"
          src="/posts/training-testing-and-development-validation-sets/larger_sample_scatter_overlay.png" alt="The same graph with more points added. These new points follow the same relationship: they increase in f(x) as x increases, but again with some jitter. The line drawn in (b) no longer crosses through all points: the line very poorly reflects these new points."/></a>
    <figcaption><p> (c) With more samples </p></figcaption>
  </figure>
<figure>
    <a href="/posts/training-testing-and-development-validation-sets/larger_sample_scatter_linear_overlay.png" target="_blank">
      <img 
          srcset="/posts/training-testing-and-development-validation-sets/larger_sample_scatter_linear_overlay.png 312w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 312px))"
          src="/posts/training-testing-and-development-validation-sets/larger_sample_scatter_linear_overlay.png" alt="The same graph as (c) but with the curved line removed. Instead, a straight line in drawn through the points. It is very close to most points. It appears to capture the relationship between f(x) and x well."/></a>
    <figcaption><p> (d) Simple linear model </p></figcaption>
  </figure></p>
<h1 id="training-set">Training Set</h1>
<p>The training set is the part of all the collected data that is used to tune a
model&rsquo;s parameters. Generally, this set comprises 50-80% of all data. To
increase the probability that a model is generalizable the model&rsquo;s parameters
must be tuned with as much data as possible. So, the training set must be as
large as possible, while still allowing for large enough testing and
development sets.</p>
<h1 id="testing-set">Testing Set</h1>
<p>The testing set is used to test the generalizability of a fully trained model
by testing its ability to predict relationships in unseen data. Once a model is
put to use in the real world, it will not have seen any of the data before it
has to make a prediction. So, it is important that none of the data points in
the testing set have been used to tune any of the model&rsquo;s parameters, otherwise
we do not get a fair estimate of the model&rsquo;s generalizability. The testing set
often comprises 10-25% of all data. The larger the testing set, the more
accurate the estimate of generalizability will be.</p>
<h1 id="development--validation-set">Development / Validation Set</h1>
<p>The development set is closely related to the testing set, but there is a
subtle difference between the two. When searching for models that predict
relationships in data, you generally try a multitude of models. In addition,
you often need to tune model hyper-parameters such as learning rate or
parameter regularization. To evaluate and compare these choices, you would
train models on the training set and evaluate their ability to be generalized
on unseen data. However, (and here comes the subtle part,) if one uses the
testing set to evaluate generalizability of models against each other, they are
actually tuning the hyper-parameters and model choices to data that should be
left completely unseen in order to be able to make a confident statement about
the generalizability of a specific model. If that person then uses the testing
set to assess the generalizability of the chosen model, they would get an
underestimate of the true test error. As such, by using a development set of
unseen data to evaluate models against each other, the testing set of unseen
data can still be used as an estimate of generalizability of a specific model.
The development set often has the same size as the testing set; 10-25% of all
data.</p>
<p>Keep in mind that after evaluating the chosen model on the test set, you should
not tune the model&rsquo;s parameters any further.</p>]]></content:encoded>
    </item>
    
    <item>
      <title>Mistaken Logical Implication</title>
      <link>https://uint.one/posts/mistaken-logical-implication/</link>
      <pubDate>Sat, 12 Sep 2015 09:41:28 +0000</pubDate>
      
      <guid>https://uint.one/posts/mistaken-logical-implication/</guid>
      <description>&lt;p&gt;One of the most common logical inferences uses logical implication. For
example, you know that if it rains then the grass will be wet. If you look
outside and see that it rains, you do not have to look at the grass to know
that it is wet. This inference is called modus ponens: if A implies B and A is
true, then B is true. Formally, the implication can be written as:&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>One of the most common logical inferences uses logical implication. For
example, you know that if it rains then the grass will be wet. If you look
outside and see that it rains, you do not have to look at the grass to know
that it is wet. This inference is called modus ponens: if A implies B and A is
true, then B is true. Formally, the implication can be written as:</p>
<div class="katex-eq">
\text{it rains} \to \text{the grass is wet}
</div>

<p>The modus ponens belonging to this implication can be written as:</p>
<div class="katex-eq">
\frac{\text{it rains} \to \text{the grass is wet},\; \text{it rains}}{\text{the grass is wet}}
</div>

<p>A commonly made mistake is to erroneously also assume the opposite: if the grass is wet it, is raining. This is called the converse:</p>
<div class="katex-eq">
\text{the grass is wet} \to \text{it rains}
</div>

<p>This statement is not necessarily true; it does not follow logically from the
first implication. The grass could have become wet through other means, or it
could have stopped raining. This can be seen easily by diligently constructing
a truth table. The implication says nothing about the grass being wet if it is
not raining, so the grass can be either wet or dry if it is not raining (the
first two rows). If it is raining, then the grass cannot be dry, as that would
contradict the implication (the implication would be false, third row). If it
is raining, clearly the grass can, and should, be wet (the fourth row).</p>
<table>
  <thead>
      <tr>
          <th>it rains</th>
          <th>the grass is wet</th>
          <th>it rains → the grass is wet</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>false</td>
          <td>false</td>
          <td>true</td>
      </tr>
      <tr>
          <td>false</td>
          <td>true</td>
          <td>true</td>
      </tr>
      <tr>
          <td>true</td>
          <td>false</td>
          <td>false</td>
      </tr>
      <tr>
          <td>true</td>
          <td>true</td>
          <td>true</td>
      </tr>
  </tbody>
</table>
<p>If you look at the rows in this table where the grass is wet is false and the
implication is true, you see that the only possibility is that it isn&rsquo;t
raining. If you look at all the rows where both the grass is wet is true and
the implication is true, you see that there are two possibilities. It can be
raining, but it&rsquo;s also possible that it isn&rsquo;t raining. The mistake people
sometimes make &ndash; forgetting about the negative option &ndash; is understandable;
and certainly, the grass being wet makes it more probable that it actually is
raining. However, one should take care not to make these kinds of mistakes.
Logic is a basis of our reasoning, and we should use it with care.</p>]]></content:encoded>
    </item>
    
    <item>
      <title>Introduction to Artificial Neural Networks</title>
      <link>https://uint.one/posts/introduction-to-artificial-neural-networks/</link>
      <pubDate>Sun, 19 Jul 2015 12:16:51 +0000</pubDate>
      
      <guid>https://uint.one/posts/introduction-to-artificial-neural-networks/</guid>
      <description>&lt;p&gt;An artificial neural network (ANN) is a type of machine learning model. It is made up of a number of simple parts called units, or neurons. By combining a large amount of these simple units, ANNs can solve real-world problems. For example, the main network that was used in my bachelor thesis research consisted of over 12,000 units. The name artificial neural network is slightly misleading: they’re mostly related to biological neural networks through the fact that both artificial and natural neural networks are made up of simple parts. Other than that they’re quite unrelated.&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&#34;https://uint.one/posts/introduction-to-artificial-neural-networks/network-1.png&#34; target=&#34;_blank&#34;&gt;
      &lt;img 
          srcset=&#34;https://uint.one/posts/introduction-to-artificial-neural-networks/network-1_hu_803409a3ad8debb7.png 400w,/posts/introduction-to-artificial-neural-networks/network-1_hu_d82eb2e35c490023.png 800w,/posts/introduction-to-artificial-neural-networks/network-1.png 955w &#34;
          loading=&#34;lazy&#34;
          sizes=&#34;auto&#34;
          style=&#34;max-width: calc(min(100%, 955px))&#34;
          src=&#34;https://uint.one/posts/introduction-to-artificial-neural-networks/network-1.png&#34; alt=&#34;A diagram of a simple ANN. It consists of three layers. The first layer consists of three units, the second layer of four units, and the third layer of two units. All units in one layer are connected to all units in the next layer.&#34;
              width=&#34;400&#34;/&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;p&gt; A simple ANN &lt;/p&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;</description>
      <content:encoded><![CDATA[<p>An artificial neural network (ANN) is a type of machine learning model. It is made up of a number of simple parts called units, or neurons. By combining a large amount of these simple units, ANNs can solve real-world problems. For example, the main network that was used in my bachelor thesis research consisted of over 12,000 units. The name artificial neural network is slightly misleading: they’re mostly related to biological neural networks through the fact that both artificial and natural neural networks are made up of simple parts. Other than that they’re quite unrelated.</p>
<figure>
    <a href="/posts/introduction-to-artificial-neural-networks/network-1.png" target="_blank">
      <img 
          srcset="/posts/introduction-to-artificial-neural-networks/network-1_hu_803409a3ad8debb7.png 400w,/posts/introduction-to-artificial-neural-networks/network-1_hu_d82eb2e35c490023.png 800w,/posts/introduction-to-artificial-neural-networks/network-1.png 955w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 955px))"
          src="/posts/introduction-to-artificial-neural-networks/network-1.png" alt="A diagram of a simple ANN. It consists of three layers. The first layer consists of three units, the second layer of four units, and the third layer of two units. All units in one layer are connected to all units in the next layer."
              width="400"/></a>
    <figcaption><p> A simple ANN </p></figcaption>
  </figure><p>The power of neural networks comes from the connections between units. These can be weighted, such that some connections are more important than others. To get the network to calculate something, some of the units are activated by a certain value. These units then activate or deactivate the units that are connected to them. For most practical purposes, a network has a clear set of units that act as the input and a clear set of units that act as the output. For example, the inputs to the network shown above are the units on the left. The next layer of units that are connected to the first layer calculate their activations based on the first layer. Finally, the units in the output layer calculate their activations based on the second layer.</p>
<p>Units</p>
<figure>
    <a href="/posts/introduction-to-artificial-neural-networks/network-6.png" target="_blank">
      <img 
          srcset="/posts/introduction-to-artificial-neural-networks/network-6_hu_7cab4db3d86542c.png 400w,/posts/introduction-to-artificial-neural-networks/network-6_hu_c4d6169eda834f65.png 800w,/posts/introduction-to-artificial-neural-networks/network-6.png 955w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 955px))"
          src="/posts/introduction-to-artificial-neural-networks/network-6.png" alt="A diagram of the same ANN as in the previous diagram. The diagram focuses on the activations of the three units in the first layer and of the first unit of the second layer. The units in the first layer have activations of 3, 1 and -2 respectively. There are weights on the connections to the first unit in the second layer of 2, 1 and 4 respectively. The first unit in the second layer has an activation of -1."
              width="400"/></a>
    <figcaption><p> An ANN; the calculation of one unit&rsquo;s activation can be seen </p></figcaption>
  </figure><p>Each unit is very simple; it just has a certain numeric activation value. For the input units the activation is set to known values; in the case of a network used for image processing the input units&rsquo; activations could correspond to an image&rsquo;s pixel values. The other units calculate their activation values as a function of their input activations, which are based on the units they are connected to and the weights of those connections. For example, the activation function of the unit that can be see in the figure on the right is <span class="katex-eq">f(x) = x</span> with as input activation <span class="katex-eq">x = 2 \cdot 3 &#43; 1 \cdot 1 &#43; 4 \cdot -2 = -1</span>. In general, when working with layered networks like this you call layer <span class="katex-eq">l</span> the input for layer <span class="katex-eq">l&#43;1</span>. For example, the middle layer here is the input for the last (output) layer.</p>
<p>Network activations can be efficiently computed by using parallelization. To do this in MATLAB, you generally represent units as vectors and the connections as weight matrices. Here, the network input would be the vector:</p>
<div class="katex-eq">
\mathbf{x} =
\begin{pmatrix}
3 \\
1 \\
-2
\end{pmatrix}
</div>

<p>and the weight matrix of the middle layer could be:</p>
<div class="katex-eq">
\mathbf{W} =
\begin{pmatrix}
2 & 1 & 4 \\
3 & -2 & 0 \\
1 & 1 & -2 \\
-2 & 0 & 1
\end{pmatrix}
</div>

<p>Then, the activations of the middle layer are calculated as the matrix-vector product <span class="katex-eq">\mathbf{y} = \mathbf{W} \mathbf{x}</span>. Thus:</p>
<div class="katex-eq">
\mathbf{y} =
\begin{pmatrix}
2 \cdot 3 & + & 1 \cdot 1 & + & 4 \cdot -2 \\
3 \cdot 3 & + & -2 \cdot 1 & + & 0 \cdot -2 \\
1 \cdot 3 & + & 1 \cdot 1 & + & -2 \cdot -2 \\
-2 \cdot 3 & + & 0 \cdot 1 & + & 1 \cdot -2
\end{pmatrix}
=
\begin{pmatrix}
-1 \\
7 \\
8 \\
-8
\end{pmatrix}
</div>

<p>Generally, an activation function <span class="katex-eq">f</span> is applied entrywise to the calculated activations, such that the output becomes:</p>
<div class="katex-eq">
\mathbf{y} = f \left( \mathbf{W} \mathbf{x} \right)
</div>

<p>In general, one wants this activation function to be non-linear. This is especially important in multi-layered networks, as adding multiple layers with a linear activation function has no added power over a larger single-layered (input-output) network. This is because each layer&rsquo;s output values &ndash; the vector <span class="katex-eq">\mathbf{y}</span> &ndash; can be calculated as the linear matrix-vector product of the layer&rsquo;s weights and input. If <span class="katex-eq">f</span> is, for example, <span class="katex-eq">f(x)=x</span>, the full output of a network can be calculated simply by multiplying its weight matrices to obtain the combined weight matrix:</p>
<div class="katex-eq">
\begin{aligned}
\mathbf{y} &= f \left( \mathbf{W_1} f \left( \mathbf{W_2} f \left( \mathbf{W_3} \mathbf{x} \right) \right) \right)
\\
&= \mathbf{W_1} \mathbf{W_2} \mathbf{W_3} \mathbf{x}
\\
&= \left( \mathbf{W_1} \mathbf{W_2} \mathbf{W_3} \right) \mathbf{x}
\\
&= \mathbf{W} \mathbf{x}
\end{aligned}
</div>

<p>By using a non-linear activation function <span class="katex-eq">f</span>, this property does not hold. In effect, the network is able to learn non-linear representations of the input. Often used non-linear activation functions are the sigmoid function <span class="katex-eq">f(x) = \frac{1}{1 &#43; e^{-x}}</span> and the rectified linear unit <span class="katex-eq">f(x) = \max \left(x, 0\right)</span>.</p>
<p>Besides these weights, a unit can have a bias which is its intrinsic tendency to be activated. Thus, a layer&rsquo;s full output becomes:</p>
<div class="katex-eq">
\mathbf{y} = f\left(\mathbf{W} \mathbf{x} + \mathbf{b}\right)
</div>

<p>Training</p>
<p>These networks are not inherently useful. They are trained by giving them large amounts of example inputs, such as images belonging to different classes. For each example the network performs its calculation and gives a certain output. In the early stages this output is generally wrong. You then calculate how the connection weights have to be changed such that the network would have provided a better answer. For multi-layered networks this is often done by utilizing gradient descent and backpropagation. This is repeated many times, with the goal to create a network that gives accurate answers to the inputs. If successful, such a network should be able to be generalized for use on unseen inputs.</p>
<p>Training an ANN with gradient descent and backpropagation is performed by optimizing an objective function. In order to update the weights and biases of layers the gradients of the objective function value with respect to the weights and biases have to be known for those layers. This is achieved by iteratively propagating the gradient known in layer <span class="katex-eq">l</span> back to layer <span class="katex-eq">l-1</span>, starting from the top layer. If the error <span class="katex-eq">E</span> is the scalar output of the objective function, then the error gradient with respect to a certain layer&rsquo;s weights <span class="katex-eq">\mathbf{W_l}</span> can be computed by using the chain rule.</p>
<div class="katex-eq">
\frac{\partial E}{\partial \mathbf{w_l}} =
\frac{\partial E}{\partial \mathbf{y_L}}
\frac{\partial \mathbf{y_L}}{\partial \mathbf{y_{L-1}}}
...
\frac{\partial \mathbf{y_{l+1}}}{\partial \mathbf{y_{l}}}
\frac{\partial \mathbf{y_{l}}}{\partial \mathbf{w_l}}
</div>

<p>Here, <span class="katex-eq">L</span> is the number of layers in the network and <span class="katex-eq">\mathbf{w_l}</span> is the vectorized weight matrix of layer <span class="katex-eq">l</span>. Practically, to calculate the gradient for a weight matrix <span class="katex-eq">\mathbf{W}</span> the gradient of the error with respect to its output <span class="katex-eq">\mathbf{y}</span> has to be known; <span class="katex-eq">\partial E/\partial \mathbf{y}</span>. This gradient is given by the layer above through its calculation of the gradient of the error with respect to its input; <span class="katex-eq">\partial E/\partial \mathbf{x&#39;}</span>. As follows from the network&rsquo;s architecture <span class="katex-eq">\mathbf{x&#39;} := \mathbf{y}</span> and thus <span class="katex-eq">\partial E/\partial \mathbf{y} = \partial E/\partial \mathbf{x&#39;}</span>. For the objective function, the topmost &ldquo;layer&rdquo;, <span class="katex-eq">\partial E/\partial \mathbf{y} = 1</span>, as <span class="katex-eq">E</span> is defined as the output of the objective function. The gradient can then be propagated back through the layers by repeatedly calculating <span class="katex-eq">\partial E/\partial \mathbf{x}</span>. To update weights <span class="katex-eq">\mathbf{W}</span> and biases <span class="katex-eq">\mathbf{b}</span> of a layer, <span class="katex-eq">\partial E/\partial \mathbf{W}</span> and <span class="katex-eq">\partial E/\partial \mathbf{b}</span> can be calculated. For biases <span class="katex-eq">\mathbf{b}</span>, and vectorized weights <span class="katex-eq">\mathbf{w} = \text{vec}(\mathbf{W})</span>:</p>
<div class="katex-eq">
\begin{aligned}
\frac{\partial E}{\partial \mathbf{w}} &= \frac{\partial E}{\partial \mathbf{y}} \frac{\partial \mathbf{y}}{\partial \mathbf{w}}
\\
\frac{\partial E}{\partial \mathbf{b}} &= \frac{\partial E}{\partial \mathbf{y}} \frac{\partial \mathbf{y}}{\partial \mathbf{b}}
\end{aligned}
</div>

<p>Once the gradient of the error with respect to layer weights and biases are known, they can be updated in direction opposite to the gradient to improve network performance. The simplest update routine is performing a small step in direction of the negative gradient.</p>
<div class="katex-eq">
\begin{aligned}
\mathbf{W}' &= \mathbf{W} - \eta \frac{\partial E}{\partial \mathbf{F}}
\\
\mathbf{b}' &= \mathbf{b} - \eta \frac{\partial E}{\partial \mathbf{b}}
\end{aligned}
</div>

<p>Here, <span class="katex-eq">\eta</span> is the learning rate, and <span class="katex-eq">\mathbf{W}&#39;</span> and <span class="katex-eq">\mathbf{b}&#39;</span> are the new weights and biases.</p>
<p>Types of Networks</p>
<p>There are various different types of ANNs. Many can be described as being deep neural networks, which are networks that consist of multiple layers. The training of these networks has been laid out above. One remarkable such network is the convolutional neural network, where units correspond to specific receptive fields sensitive to overlapping parts of the input. ANNs can also be recurrent, meaning that the connections form a cycle (e.g., unit A activates unit B, which activates unit C, which activates unit A). One such network is the Hopfield network, which can store input patterns in its weights and reconstruct those patterns from (partial) inputs.</p>]]></content:encoded>
    </item>
    
    <item>
      <title>Decreasing Information</title>
      <link>https://uint.one/posts/decreasing-information/</link>
      <pubDate>Fri, 19 Jun 2015 11:40:38 +0000</pubDate>
      
      <guid>https://uint.one/posts/decreasing-information/</guid>
      <description>&lt;p&gt;During the training of several neural networks for my bachelor’s thesis (more
on that later, maybe!) I noticed something fun. The used networks’ weights (in
this case classification function parameters) are initialized with numbers
drawn from the standard normal distribution, meaning the initial network state
is random. Such randomness by its very nature has no actual structure, and thus
has high entropy. This means that compressing the information to save it to
disk is less effective than on other, more structured, information. Initially,
saving one such network’s weights required approximately 19.5MB of disk space.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>During the training of several neural networks for my bachelor’s thesis (more
on that later, maybe!) I noticed something fun. The used networks’ weights (in
this case classification function parameters) are initialized with numbers
drawn from the standard normal distribution, meaning the initial network state
is random. Such randomness by its very nature has no actual structure, and thus
has high entropy. This means that compressing the information to save it to
disk is less effective than on other, more structured, information. Initially,
saving one such network’s weights required approximately 19.5MB of disk space.</p>
<p>As the networks’ training progressed, the file sizes shrunk! After a day of
training, the space required for saving this network’s weights had decreased to
18.0MB; a 1.5MB decrease from the original value. I hadn’t thought about it
before, but once I noticed it I soon realized what was happening. The whole act
of training networks is exercised to find structure in data. A neural network
does this by learning some sort of representation of the data through
continuously updating its weights while training — in other words, the weights
are getting more structured as the network is getting smarter! When the
weights’ structure increases the entropy decreases, making compression more
effective and our disks happier. Or unhappier, perhaps.</p>]]></content:encoded>
    </item>
    
    <item>
      <title>Rocket Fuel Requirements Revisited</title>
      <link>https://uint.one/posts/rocket-fuel-requirements-revisited/</link>
      <pubDate>Sat, 06 Dec 2014 00:29:26 +0000</pubDate>
      
      <guid>https://uint.one/posts/rocket-fuel-requirements-revisited/</guid>
      <description>&lt;p&gt;In a previous post we looked at the fuel requirements for rockets to reach &lt;a href=&#34;https://uint.one/posts/escape-velocity-and-how-much-fuel-do-rockets-need/&#34;&gt;escape velocity&lt;/a&gt;. We calculated the fuel requirements using the &lt;a href=&#34;https://uint.one/posts/the-rocket-equation/&#34;&gt;rocket equation&lt;/a&gt;. This equation takes into account the conservation of momentum. However, momentum is not the only property influencing the velocity of the rocket during a launch.&lt;/p&gt;
&lt;p&gt;Rockets expel their fuel over time. During this time, the rocket is pulled back due to gravity. Only if a rocket could instantaneously expel all of its fuel, and when ignoring atmospheric drag, the escape velocity would be reached instantaneously and the equation would hold.&lt;/p&gt;
&lt;p&gt;Taking the burn-time and gravity into account yields a difficult differential equation. We can implement that equation in a computer program to simulate the launch.&lt;/p&gt;
&lt;p&gt;The equation is of the following form:&lt;/p&gt;
&lt;div class=&#34;katex-eq&#34;&gt;
\frac{dv}{dt} = \frac{dv_e}{dt} + \frac{dv_g}{dt}
&lt;/div&gt;</description>
      <content:encoded><![CDATA[<p>In a previous post we looked at the fuel requirements for rockets to reach <a href="https://uint.one/posts/escape-velocity-and-how-much-fuel-do-rockets-need/">escape velocity</a>. We calculated the fuel requirements using the <a href="https://uint.one/posts/the-rocket-equation/">rocket equation</a>. This equation takes into account the conservation of momentum. However, momentum is not the only property influencing the velocity of the rocket during a launch.</p>
<p>Rockets expel their fuel over time. During this time, the rocket is pulled back due to gravity. Only if a rocket could instantaneously expel all of its fuel, and when ignoring atmospheric drag, the escape velocity would be reached instantaneously and the equation would hold.</p>
<p>Taking the burn-time and gravity into account yields a difficult differential equation. We can implement that equation in a computer program to simulate the launch.</p>
<p>The equation is of the following form:</p>
<div class="katex-eq">
\frac{dv}{dt} = \frac{dv_e}{dt} + \frac{dv_g}{dt}
</div>

<p>Here, <span class="katex-eq">dv</span> is the total change in velocity, caused by the parts <span class="katex-eq">dv_e</span> and <span class="katex-eq">dv_g</span>, which respectively are the change in velocity due to the exhaust and the change in velocity due to gravity. In the post about the rocket equation, we found:</p>
<div class="katex-eq">
M dv_e = v_e dm
</div>

<p><span class="katex-eq">M</span> is the mass of the rocket, <span class="katex-eq">dv_e</span> is the change in velocity due to the exhaust, <span class="katex-eq">v_e</span> is the exhaust velocity and <span class="katex-eq">dm</span> is the amount of fuel expelled. Because the instantaneous mass of the expelled fuel <span class="katex-eq">dm</span> is equal to the negative instantaneous change of the rocket&rsquo;s mass, <span class="katex-eq">-dM</span>, we get:</p>
<div class="katex-eq">
\begin{aligned}
M dv_e &= -v_e dM
\\
dv_e &= -\frac{v_e dM}{M}
\end{aligned}
</div>

<p>Now we will evaluate the function <span class="katex-eq">dv_g</span>. The force of gravity acting on the rocket due to the Earth is:</p>
<div class="katex-eq">
F_g = -G \frac {M_\oplus M}{r^2}
</div>

<p>As per usual, <span class="katex-eq">G</span> is the gravitational constant. Furthermore, <span class="katex-eq">M_\oplus</span> is the mass of the Earth, <span class="katex-eq">M</span> is the mass of the rocket, and <span class="katex-eq">r</span> is the distance of the rocket to the center of the Earth.</p>
<div class="katex-eq">
\begin{aligned}
F_g &= M a_g = M \frac{dv_g}{dt}
\\
\frac{dv_g}{dt} &= a_g = \frac{F_g}{M}
\\
&= -G \frac{M_\oplus M}{r^2 M}
\\
&= -G \frac{M_\oplus}{r^2}
\end{aligned}
</div>

<p>Plug the found values into the initial differential equation:</p>
<div class="katex-eq">
\begin{aligned}
\frac{dv}{dt} &= \frac{dv_e}{dt} + \frac{dv_g}{dt}
\\
&= -\frac{v_e dM/M}{dt} - G \frac{M_\oplus}{r^2}
\\
&= \frac{-v_e dM/dt}{M} - G \frac{M_\oplus}{r^2}
\end{aligned}
</div>

<p>With the requirement that <span class="katex-eq">v \ge v_e</span>, where <span class="katex-eq">v_e</span> is the escape velocity <span class="katex-eq">\sqrt{2G\frac{M}{r}}</span>, it becomes clear that this equation is hard to solve by hand. Instead, we will implement the equation in a computer program to simulate it. We&rsquo;ll use the following values for our digital rocket:</p>
<div class="katex-eq">
\begin{aligned}
M_{dry} &= 2,000 \text{ kg}
\\
v_e &= 5,000 \text{ m/s}
\\
\frac{dM}{dt} &= -100 \text{ kg/s}
\end{aligned}
</div>

<p>The last value is the burn-rate of the fuel. For simplicity, we will assume both the exhaust velocity and the burn-rate remain constant during the launch. After running the program for multiple initial rocket masses (i.e., different amounts of fuel), we find that the rocket requires roughly <span class="katex-eq">24.5 \text{ tonnes}</span> worth of fuel to escape Earth&rsquo;s gravity completely, which is a lot more than the <span class="katex-eq">19 \text{ tonnes}</span> found with the naive calculation in the previous post.</p>
<p>The graphs of the height, velocity, and acceleration versus time can be seen below. With this configuration, during the final seconds of the launch, the rocket reached an acceleration of nearly 25 g&rsquo;s. Such high forces are incredibly dangerous for humans. Therefore, if this were a real spacecraft carrying humans, it would be vital to throttle down during the final stage of the launch.</p>
<p><figure>
    <a href="/posts/rocket-fuel-requirements-revisited/rocket_acceleration.png" target="_blank">
      <img 
          srcset="/posts/rocket-fuel-requirements-revisited/rocket_acceleration_hu_5584eac1a5612594.png 400w,/posts/rocket-fuel-requirements-revisited/rocket_acceleration.png 561w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 561px))"
          src="/posts/rocket-fuel-requirements-revisited/rocket_acceleration.png" alt=""
              width="250"/></a>
    <figcaption><p> Rocket acceleration over time </p></figcaption>
  </figure>
<figure>
    <a href="/posts/rocket-fuel-requirements-revisited/rocket_velocity.png" target="_blank">
      <img 
          srcset="/posts/rocket-fuel-requirements-revisited/rocket_velocity_hu_c78b3f553a34ae98.png 400w,/posts/rocket-fuel-requirements-revisited/rocket_velocity.png 561w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 561px))"
          src="/posts/rocket-fuel-requirements-revisited/rocket_velocity.png" alt=""
              width="250"/></a>
    <figcaption><p> Rocket velocity over time </p></figcaption>
  </figure>
<figure>
    <a href="/posts/rocket-fuel-requirements-revisited/rocket_height.png" target="_blank">
      <img 
          srcset="/posts/rocket-fuel-requirements-revisited/rocket_height_hu_6c61ff857b9cc111.png 400w,/posts/rocket-fuel-requirements-revisited/rocket_height.png 561w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 561px))"
          src="/posts/rocket-fuel-requirements-revisited/rocket_height.png" alt=""
              width="250"/></a>
    <figcaption><p> Rocket height over time </p></figcaption>
  </figure></p>
<p><em>Update 2018-11-28</em>: the simulation has been reimplemented in JavaScript, you can interact with it here:</p>

<script async src="//jsfiddle.net/Beskhue/u35Lf8m9/embed/result/"></script>]]></content:encoded>
    </item>
    
    <item>
      <title>Black Holes</title>
      <link>https://uint.one/posts/black-holes/</link>
      <pubDate>Thu, 04 Dec 2014 00:35:50 +0000</pubDate>
      
      <guid>https://uint.one/posts/black-holes/</guid>
      <description>&lt;p&gt;A black hole is an object from which nothing, including light, is able to escape. As nothing can go faster than light, this can be more formally defined as an object for which the escape velocity is greater than the speed of light. In &lt;a href=&#34;https://uint.one/posts/escape-velocity-and-how-much-fuel-do-rockets-need/&#34;&gt;my post about escape velocity&lt;/a&gt; we found an equation relating the velocity required to escape from the gravitational pull of an object and that object&amp;rsquo;s mass.&lt;/p&gt;
&lt;div class=&#34;katex-eq&#34;&gt;
v = \sqrt{2G \frac{M}{r}}
&lt;/div&gt;</description>
      <content:encoded><![CDATA[<p>A black hole is an object from which nothing, including light, is able to escape. As nothing can go faster than light, this can be more formally defined as an object for which the escape velocity is greater than the speed of light. In <a href="https://uint.one/posts/escape-velocity-and-how-much-fuel-do-rockets-need/">my post about escape velocity</a> we found an equation relating the velocity required to escape from the gravitational pull of an object and that object&rsquo;s mass.</p>
<div class="katex-eq">
v = \sqrt{2G \frac{M}{r}}
</div>

<p>In this equation, <span class="katex-eq">v</span> is the escape velocity, <span class="katex-eq">M</span> is the mass of the object we want to escape from and <span class="katex-eq">r</span> is the distance from the center of mass of the object we&rsquo;re escaping from. <span class="katex-eq">G</span> is the gravitational constant.</p>
<p>If the required velocity <span class="katex-eq">v</span> is greater than the speed of light, <span class="katex-eq">c</span>, even light will not able to escape the object, making it a black hole. We have two variables, <span class="katex-eq">M</span> and <span class="katex-eq">r</span>, so we can derive two equations from this. One equation gives the distance from the center of mass required to make escaping from the object impossible given the mass, and the other gives the mass required given the distance from the center of mass.</p>
<div class="katex-eq">
\begin{aligned}
\sqrt{2G \frac{M}{r}} &= c \\
2G \frac{M}{r} &= c^2 \\
\frac{M}{r} &= \frac{c^2}{2G} \\
M &= \frac{r c^2}{2G} \\
r &= \frac{2GM}{c^2}
\end{aligned}
</div>

<p>The latter equation, <span class="katex-eq">r = \frac{2GM}{c^2}</span>, is known as the Schwarzschild radius. It is the radius of the perfect sphere around the center of mass of the object, such that if all the mass is within that sphere the resulting escape velocity is equal to the speed of light. In other words, if the object were smaller than this, it would become a black hole. For Earth, the radius is slightly surprising:</p>
<div class="katex-eq">
\begin{aligned}
r &= \frac{2G M_{\oplus}}{c^2} \\
&= \frac{2 \cdot 6.67 \cdot 10^{-11} \cdot 5.97 \cdot 10^{24}}{3.00 \cdot 10^8} \approx 8.87 \text{ mm}
\end{aligned}
</div>

<p>So, Earth would only become a black hole if it was compressed to the size of a marble. A black hole can be smaller than its Swartchzschild radius, however. In this case, the radius acts as the event horizon of the black hole: matter, or information, inside the radius would not necessarily be inside the black hole itself, but it would no longer be able to escape to outside the event horizon. In other words: everything that happens inside the event horizon of a black hole, is invisible to outside observers.</p>]]></content:encoded>
    </item>
    
    <item>
      <title>Escape Velocity (And: How Much Fuel Do Rockets Need?)</title>
      <link>https://uint.one/posts/escape-velocity-and-how-much-fuel-do-rockets-need/</link>
      <pubDate>Thu, 30 Oct 2014 00:22:13 +0000</pubDate>
      
      <guid>https://uint.one/posts/escape-velocity-and-how-much-fuel-do-rockets-need/</guid>
      <description>&lt;p&gt;During the launch of a rocket, the Earth&amp;rsquo;s gravitational field is pulling the rocket back. The rocket needs a certain speed to be able to escape from the Earth&amp;rsquo;s gravitational field, such that it won&amp;rsquo;t fall back to Earth nor get into an orbit around it. Escape velocity is the speed a rocket requires to be able to escape from a body without having to burn more fuel later during the maneuver. For a body as massive as Earth, the required velocity is relatively high, and this is why rockets literally need tonnes of fuel.&lt;/p&gt;
&lt;p&gt;In this post, by making a few simplifications and using the &lt;a href=&#34;https://uint.one/posts/the-rocket-equation/&#34;&gt;rocket equation&lt;/a&gt; that we found earlier, we will derive an equation to calculate the amount of propellant needed to escape from Earth.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>During the launch of a rocket, the Earth&rsquo;s gravitational field is pulling the rocket back. The rocket needs a certain speed to be able to escape from the Earth&rsquo;s gravitational field, such that it won&rsquo;t fall back to Earth nor get into an orbit around it. Escape velocity is the speed a rocket requires to be able to escape from a body without having to burn more fuel later during the maneuver. For a body as massive as Earth, the required velocity is relatively high, and this is why rockets literally need tonnes of fuel.</p>
<p>In this post, by making a few simplifications and using the <a href="https://uint.one/posts/the-rocket-equation/">rocket equation</a> that we found earlier, we will derive an equation to calculate the amount of propellant needed to escape from Earth.</p>
<p>First, we will find the amount of work the Earth&rsquo;s gravitational field puts into pulling a rocket back during a successful escape. This work is what has to be overcome by the work of the thruster of the rocket. When saying a rocket escapes from Earth (without having to burn any more fuel), we can say it moves from some distance from the center of the Earth, <span class="katex-eq">r = r_0</span>, to infinitely far away from Earth, <span class="katex-eq">r = \infty</span> (given enough time, of course).</p>
<p>The Earth&rsquo;s gravitational field acts as a force on the rocket:</p>
<div class="katex-eq">
F(r) = G \frac{Mm}{r^2}
</div>

<p>Here, <span class="katex-eq">G \approx 6.674 \cdot 10^{-11} \text{ N} \text{m}^2 \text{kg}^{-2}</span> is the gravitational constant, <span class="katex-eq">M \approx 5.972 \cdot 10^{24} \text{ kg}</span> is the mass of the Earth and <span class="katex-eq">m</span> is the mass of the rocket, which we&rsquo;ll leave unspecified for now. Of course, <span class="katex-eq">r</span> is the distance from the rocket to the center of the Earth.</p>
<p>The work done by gravity is equal to the force with which gravity acts upon the rocket multiplied by the displacement of the rocket (relative to the force&rsquo;s direction). If the force applied by gravity was constant, we could calculate the work done by gravity as <span class="katex-eq">W = F (r_\text{end} - r_\text{start})</span>. However, the magnitude of the force of gravity depends on the distance between the two objects, and as such we&rsquo;ll have to perform a more delicate calculation.</p>
<p>We could try to calculate the work done by multiplying the force of gravity <span class="katex-eq">F(r)</span> at a point in the path by a very small distance traveled at that point, <span class="katex-eq">\Delta r</span>, and add all those &ldquo;pieces of work&rdquo; together to get the total work done. If we take this just one step further and say we do this for infinitesimally small pieces of the path, we arrive at the precise amount of work required through taking the integral.</p>
<div class="katex-eq">
\begin{aligned}
W &= \int_{r_0}^\infty F(r) dr \\
&= \int_{r_0}^\infty G \frac{Mm}{r^2} dr \\
&= \int_{r_0}^\infty G Mm \frac{1}{r^2} dr \\
&= \int_{r_0}^\infty G Mm r^{-2} dr \\
&= \frac{1}{-1} G Mm r^{-1} \Bigr\rvert_{r_0}^{\infty} \\
&= -G Mm \frac{1}{r} \Bigr\rvert_{r_0}^{\infty}\\
&= -G \frac{Mm}{r} \Bigr\rvert_{r_0}^{\infty} \\
&= (-G \frac{Mm}{\infty}) - (-G \frac{Mm}{r_0}) \\
&= (-0) + G \frac{Mm}{r_0} \\
&= G \frac{Mm}{r_0}
\end{aligned}
</div>

<p>So, we found that <span class="katex-eq">W = G \frac{Mm}{r_0}</span> is the work done by the Earth&rsquo;s gravitational field on a rocket traveling from a distance of <span class="katex-eq">r_0</span> to a point infinitely far away. This is the work the rocket has to overcome by its speed.</p>
<p>An object with a certain speed has a kinetic energy, which is the &ldquo;energy of movement&rdquo; that object has. This energy is equal to <span class="katex-eq">E_k = \frac{1}{2} m v^2</span> with <span class="katex-eq">m</span> the mass of the object and <span class="katex-eq">v</span> the speed. To escape the Earth&rsquo;s gravitational field, our rocket&rsquo;s kinetic energy has to, at least, be equal to the work done by the gravitational field.</p>
<div class="katex-eq">
\begin{aligned}
E_k = \frac{1}{2} m v^2 &= G \frac{Mm}{r_0} \\
v^2 &= 2 G \frac{Mm}{mr_0} \\
v^2 &= 2 G \frac{M}{r_0} \\
v &= \sqrt{2 G \frac{M}{r_0}}
\end{aligned}
</div>

<p>We can now calculate the speed required to escape from the Earth! If we assume the rocket starts to accelerate at sea-level (<span class="katex-eq">r_0 \approx 6.376 \cdot 10^6 \text{ m}</span>), and if we ignore atmospheric drag, we get:</p>
<div class="katex-eq">
v \approx \sqrt{2 \cdot 6.674 \cdot 10^{-11} \frac{5.972 \cdot 10^{24}}{6.376 \cdot 10^6}} \approx 1.118 \cdot 10^4 \text{ m/s} = 11.18 \text{ km/s}
</div>

<p>Now, we use the rocket equation to calculate the mass of the propellant needed to make this happen!</p>
<div class="katex-eq">
\Delta v = v_e \ln \left(\frac{m_i}{m_f} \right)
</div>

<p>Here, <span class="katex-eq">\Delta v</span> is &ldquo;delta-v&rdquo;, the required change in speed, <span class="katex-eq">m_i</span> is the initial mass of the rocket and <span class="katex-eq">m_f</span> is the final mass of the rocket. <span class="katex-eq">v_e</span> is the exhaust velocity of the propellant used. If we say that all fuel is used during the maneuver, <span class="katex-eq">m_f</span> is equal to the payload of the rocket. A relatively modest rocket could have a payload of <span class="katex-eq">2,000 \text{ kg}</span>. A pretty good exhaust velocity is <span class="katex-eq">v_e = 5,000 \text{ m/s}</span>. We require <span class="katex-eq">\Delta v = 1.118 \cdot 10^4 \text{ m/s}</span>.</p>
<p>We want to know the initial mass <span class="katex-eq">m_i</span> of the rocket, and specifically we want to know the mass of the propellant, which is equal to <span class="katex-eq">m_i - m_f</span>.</p>
<div class="katex-eq">
\begin{aligned}
\Delta v &= v_e \ln \left(\frac{m_i}{m_f} \right) \\
\frac{\Delta v}{v_e} &= \ln \left(\frac{m_i}{m_f} \right) \\
e^{\left(\frac{\Delta v}{v_e}\right)} &= \frac{m_i}{m_f} \\
m_i &= m_f e^{\left(\frac{\Delta v}{v_e}\right)}
\end{aligned}
</div>

<p>If we plug in our values for <span class="katex-eq">m_f = 2,000 \text{ kg}</span>, <span class="katex-eq">\Delta v = 1.118 \cdot 10^4 \text{ m/s}</span> and <span class="katex-eq">v_e = 5,000 \text{ m/s}</span>, we get:</p>
<div class="katex-eq">
m_i = 2,000 \cdot e^{\left(\frac{1.118 \cdot 10^4}{5,000}\right)} \approx 1.871 \cdot 10^4 \text{ kg} \approx 19 \text{ tonnes}
</div>

<p>So, for a rocket with a payload of 2 tonnes to escape from Earth with an exhaust velocity of 5 km/s, we require <span class="katex-eq">m_i - m_f = 1.871 \cdot 10^4 - 2,000 = 1.671 \cdot 10^4 \approx 17 \text{ tonnes}</span> of fuel. That is roughly <span class="katex-eq">90\%</span> of the total initial mass of the rocket!</p>]]></content:encoded>
    </item>
    
    <item>
      <title>The Rocket Equation</title>
      <link>https://uint.one/posts/the-rocket-equation/</link>
      <pubDate>Sat, 18 Oct 2014 02:48:33 +0000</pubDate>
      
      <guid>https://uint.one/posts/the-rocket-equation/</guid>
      <description>&lt;p&gt;Rockets in space, like all other objects, have to accelerate to change velocity. But space is a vacuum, so there is nothing to push against to create force. Instead, rockets accelerate by using the conservation of momentum. The momentum of an object is equal to the object&amp;rsquo;s mass multiplied by the object&amp;rsquo;s velocity: &lt;span class=&#34;katex-eq&#34;&gt;\vec{p} = m \vec{v}&lt;/span&gt;. In a closed system, the total momentum remains constant: &lt;span class=&#34;katex-eq&#34;&gt;\vec{p}_{0} = \vec{p}_{t}&lt;/span&gt;.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Rockets in space, like all other objects, have to accelerate to change velocity. But space is a vacuum, so there is nothing to push against to create force. Instead, rockets accelerate by using the conservation of momentum. The momentum of an object is equal to the object&rsquo;s mass multiplied by the object&rsquo;s velocity: <span class="katex-eq">\vec{p} = m \vec{v}</span>. In a closed system, the total momentum remains constant: <span class="katex-eq">\vec{p}_{0} = \vec{p}_{t}</span>.</p>
<p>A rocket carries propellant that it expels at high velocities to accelerate. Imagine a rocket moving in space; at first the rocket is not expelling propellant and so its momentum does not change. Then it expels a part of its propellant. That propellant&rsquo;s momentum is equal to its mass multiplied by its velocity. The rocket and propellant are part of a closed system, so the momentum of the rocket has to change such that the total momentum (that of the rocket plus that of the propellant) is equal to the momentum of the rocket before it expelled the propellant. As a result, the rocket gains velocity in direction opposite to that of the propellant.</p>
<p>Let&rsquo;s find out how much velocity the rocket gains!</p>
<p>We define the mass of the propellant the rocket expels as <span class="katex-eq">\Delta m</span> and the rocket&rsquo;s mass after expelling the propellant as <span class="katex-eq">M</span>. Before the propellant is expelled, the rocket has a mass of <span class="katex-eq">M &#43; \Delta m</span> and a velocity of <span class="katex-eq">v</span>. The propellant is expelled in opposite direction with an exhaust velocity of <span class="katex-eq">v_e</span>. For a stationary observer the propellant will have a velocity of <span class="katex-eq">v-v_e</span>.</p>
<p>The initial momentum of the system consists only of the momentum of the rocket (before the propellant has been expelled).</p>
<div class="katex-eq">
p_i = (M + \Delta m) v
</div>

<p>After the propellant is expelled, the momentum of the system, which we&rsquo;ll call the final momentum, is equal to the momentum of the rocket and the momentum of the propellant. The rocket will have gained some velocity <span class="katex-eq">\Delta v</span>.</p>
<div class="katex-eq">
p_f = \underbrace{M (v + \Delta v)}_{\text{Rocket}} + \underbrace{\Delta m (v-v_e)}_{\text{Propellant}}
</div>

<p>Because of the conservation of momentum it holds that <span class="katex-eq">p_i = p_f</span>.</p>
<div class="katex-eq">
\begin{aligned}
(M + \Delta m) v &= M (v + \Delta v) + \Delta m (v-v_e) \\
M v + \Delta m v &= M v + M \Delta v + \Delta m v - \Delta m v_e \\
0 &= M \Delta v - \Delta m v_e \\
\Delta m v_e &= M \Delta v \\
M \Delta v &= v_e \Delta m
\end{aligned}
</div>

<p>We now look at the instantaneous rate of change of the mass and the velocity (i.e., we use an infinitesimally small time-frame).</p>
<div class="katex-eq">
M dv = v_e dm
</div>

<p>The instantaneous change of propellant mass is equal to the negative change of mass of the rocket, because the propellant is carried by the rocket.</p>
<div class="katex-eq">
\begin{aligned}
M dv &= v_e dm \\
M dv &= v_e \cdot -dM \\
M dv &= -v_e dM \\
dv &= -v_e \frac{1}{M} dM
\end{aligned}
</div>

<p>Now we take the definite integral at both sides, from the initial to the final situation.</p>
<div class="katex-eq">
\begin{aligned}
\int_{v_i}^{v_f} dv &= \int_{M_i}^{M_f} -v_e \frac{1}{M} dM \\
\int_{v_i}^{v_f} 1 dv &= -v_e \int_{M_i}^{M_f} \frac{1}{M} dM \\
v \Bigr\rvert_{v_i}^{v_f} &= -v_e \left( \ln{M} \Bigr\rvert_{M_i}^{M_f} \right) \\
v_f - v_i &= -v_e \left( \ln(M_f) - \ln(M_i) \right) \\
\Delta v &= v_e \left( \ln(M_i) - \ln(M_f) \right) \\
\Delta v &= v_e \ln\left( \frac{M_i}{M_f} \right)
\end{aligned}
</div>

<p>Note that the definite integral of <span class="katex-eq">\frac{1}{x}</span> from <span class="katex-eq">a</span> to <span class="katex-eq">b</span> is <span class="katex-eq">\ln(x)|_a^b</span> and that <span class="katex-eq">\ln(m)-\ln(n) = \ln(m/n)</span>.</p>
<p>&ldquo;Delta-v&rdquo; refers to the amount of change in velocity a rocket can perform. If the rocket&rsquo;s initial total mass is <span class="katex-eq">m_0</span> and the mass of the propellant is <span class="katex-eq">m_p</span>, we can calculate the maximum delta-v.</p>
<div class="katex-eq">
\Delta v_{\text{max}} = v_e \ln\left( \frac{m_0}{m_0-m_p} \right)
</div>

<p>We have a few options to increase the maximum delta-v. The rocket can be filled with more propellant to increase the ratio <span class="katex-eq">\frac{m_0}{m_0-m_p}</span>. The rocket can be made lighter to increase this same ratio. An interesting option is to use staging, where parts of the rocket that are not needed anymore are thrown out. The last option is to increase the exhaust velocity <span class="katex-eq">v_e</span>. In practice, all three of these options are used. Initially, by far the largest part of the mass of the rocket is its propellant. Most rockets use staging: some rockets have successfully been launched using a total of five stages. Finally, propellant is often heated or otherwise handled to increase the exhaust speed. Note that in the case of staging the equation must be applied to each stage separately, otherwise it is assumed that the stages are expelled at the same velocity that the propellant is expelled with!</p>
<p>The equation we found is commonly known as the Tsiolkovsky rocket equation or the ideal rocket equation. It is convenient to use, as this single equation expresses the essentials of rocket flight.</p>]]></content:encoded>
    </item>
    
    <item>
      <title>Shorts: Vertical Travel Distance of Bouncing Objects</title>
      <link>https://uint.one/posts/shorts-vertical-travel-distance-of-bouncing-objects/</link>
      <pubDate>Mon, 06 Oct 2014 20:22:09 +0000</pubDate>
      
      <guid>https://uint.one/posts/shorts-vertical-travel-distance-of-bouncing-objects/</guid>
      <description>&lt;p&gt;If a ball is dropped from a height of 10 meters, and on each bounce it reaches a maximal height of 0.75 times the previous height, then what is the total distance traveled? If we use &lt;span class=&#34;katex-eq&#34;&gt;h_i&lt;/span&gt; as the maximal height reached on bounce &lt;span class=&#34;katex-eq&#34;&gt;i&lt;/span&gt;, &lt;span class=&#34;katex-eq&#34;&gt;h_0&lt;/span&gt; as the initial height, and $latex b $ as the factor of the maximal height achieved relative to the previous bounce, we have &lt;span class=&#34;katex-eq&#34;&gt;h_i = b h_{i-1}&lt;/span&gt;.
Then, the total distance traveled is:&lt;/p&gt;
&lt;div class=&#34;katex-eq&#34;&gt;
\begin{aligned}d &amp;= h_0 + 2 h_1 + 2 h_2 + 2 h_3 + ...\\&amp;= h_0 + 2 b h_0 + 2 b h_1 + 2 b h_2 + ...\\&amp;= h_0 + 2 b h_0 + 2 b b h_0 + 2 b b b h_0 + ...\\&amp;= h_0 + 2 b h_0 + 2 b^2 h_0 + 2 b^3 h_0 + ...\\&amp;= -h_0 + 2 (h_0 + b h_0 + b^2 h_0 + b^3 h_0 + ...)\\&amp;= -h_0 + 2 h_0 (1 + b + b^2 + b^3 + ...)\\&amp;= -h_0 + 2 h_0 \sum_i \left(b^i\right)\end{aligned}
&lt;/div&gt;</description>
      <content:encoded><![CDATA[<p>If a ball is dropped from a height of 10 meters, and on each bounce it reaches a maximal height of 0.75 times the previous height, then what is the total distance traveled? If we use <span class="katex-eq">h_i</span> as the maximal height reached on bounce <span class="katex-eq">i</span>, <span class="katex-eq">h_0</span> as the initial height, and $latex b $ as the factor of the maximal height achieved relative to the previous bounce, we have <span class="katex-eq">h_i = b h_{i-1}</span>.
Then, the total distance traveled is:</p>
<div class="katex-eq">
\begin{aligned}d &= h_0 + 2 h_1 + 2 h_2 + 2 h_3 + ...\\&= h_0 + 2 b h_0 + 2 b h_1 + 2 b h_2 + ...\\&= h_0 + 2 b h_0 + 2 b b h_0 + 2 b b b h_0 + ...\\&= h_0 + 2 b h_0 + 2 b^2 h_0 + 2 b^3 h_0 + ...\\&= -h_0 + 2 (h_0 + b h_0 + b^2 h_0 + b^3 h_0 + ...)\\&= -h_0 + 2 h_0 (1 + b + b^2 + b^3 + ...)\\&= -h_0 + 2 h_0 \sum_i \left(b^i\right)\end{aligned}
</div>

<p>Using <span class="katex-eq">\sum_n \left(x^n\right) = \frac{1}{1-x}</span> if <span class="katex-eq">0 \le x &lt; 1</span>, we get:</p>
<div class="katex-eq">
d = -h_0 + 2 h_0 \frac{1}{1-b}
</div>

<p>Now we plug our values of <span class="katex-eq">h_0 = 10 \text{ m}</span> and <span class="katex-eq">b = 0.75</span> into this equation to find <span class="katex-eq">d = -10 &#43; 20 \cdot \frac{1}{0.25} = 70</span> meters. So, even though our ball will bounce on for eternity, it will travel exactly 70 meters!</p>]]></content:encoded>
    </item>
    
    <item>
      <title>Can an Object with Constant Speed Be Accelerating?</title>
      <link>https://uint.one/posts/can-an-object-with-constant-speed-be-accelerating/</link>
      <pubDate>Mon, 29 Sep 2014 23:05:43 +0000</pubDate>
      
      <guid>https://uint.one/posts/can-an-object-with-constant-speed-be-accelerating/</guid>
      <description>&lt;p&gt;An interesting question is whether an object with a constant speed can still be
accelerating, and intuitively the answer would be &amp;ldquo;no&amp;rdquo;: acceleration means the
object is speeding up or slowing down, right? Apparently, this is not the case.
It actually is possible to have a constant speed while still having an
acceleration. In this post, we will look at how this is possible. Hint:
circular motion!&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&#34;https://uint.one/posts/can-an-object-with-constant-speed-be-accelerating/Circular-Motion.png&#34; target=&#34;_blank&#34;&gt;
      &lt;img 
          srcset=&#34;https://uint.one/posts/can-an-object-with-constant-speed-be-accelerating/Circular-Motion.png 300w &#34;
          loading=&#34;lazy&#34;
          sizes=&#34;auto&#34;
          style=&#34;max-width: calc(min(100%, 300px))&#34;
          src=&#34;https://uint.one/posts/can-an-object-with-constant-speed-be-accelerating/Circular-Motion.png&#34; alt=&#34;A schematic of circulator motion: an object is drawn describing a circle of radius r. An arrow is drawn tangential to the object&amp;rsquo;s current point on the circle labeled with vector v.&#34;/&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;p&gt; Circular Motion &lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>An interesting question is whether an object with a constant speed can still be
accelerating, and intuitively the answer would be &ldquo;no&rdquo;: acceleration means the
object is speeding up or slowing down, right? Apparently, this is not the case.
It actually is possible to have a constant speed while still having an
acceleration. In this post, we will look at how this is possible. Hint:
circular motion!</p>
<figure>
    <a href="/posts/can-an-object-with-constant-speed-be-accelerating/Circular-Motion.png" target="_blank">
      <img 
          srcset="/posts/can-an-object-with-constant-speed-be-accelerating/Circular-Motion.png 300w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 300px))"
          src="/posts/can-an-object-with-constant-speed-be-accelerating/Circular-Motion.png" alt="A schematic of circulator motion: an object is drawn describing a circle of radius r. An arrow is drawn tangential to the object&rsquo;s current point on the circle labeled with vector v."/></a>
    <figcaption><p> Circular Motion </p></figcaption>
  </figure><p>Let&rsquo;s imagine an object traveling with constant speed <span class="katex-eq">v</span> on a perfectly circular path with radius <span class="katex-eq">r</span>. We can describe the position of the object as a function of time: <span class="katex-eq">\vec{R}(t)</span>. This vector has an angle of <span class="katex-eq">\theta(t)</span> with the X-axis (the angle is a function of time, as the object is moving around the origin) and can be decomposed into its X- and Y-components.</p>
<figure>
    <a href="/posts/can-an-object-with-constant-speed-be-accelerating/R-Decompose.png" target="_blank">
      <img 
          srcset="/posts/can-an-object-with-constant-speed-be-accelerating/R-Decompose.png 303w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 303px))"
          src="/posts/can-an-object-with-constant-speed-be-accelerating/R-Decompose.png" alt="A schematic of a point at a distance of radius r from the origin, with a line from the origin to the point&rsquo;s position at an angle of theta from the horizontal. The vertical component of the point&rsquo;s position is labeled r sin(theta). The horizontal component of the point&rsquo;s position is labeled r cos(theta)."/></a>
    <figcaption><p> <span class="katex-eq">\vec{R}</span> can be expressed in terms of Sine and Cosine of the angle. </p></figcaption>
  </figure><p>We&rsquo;ll express the position-vector as <span class="katex-eq">\vec{R}(t) = r \left(\cos(\theta(t)) \vec{i} &#43; \sin(\theta(t)) \vec{j} \right)</span>. Here, <span class="katex-eq">\vec{i}</span> is the unit vector in the +X direction, and <span class="katex-eq">\vec{j}</span> is the unit vector in the +y direction.</p>
<p>We have:</p>
<div class="katex-eq">
\begin{aligned}
\vec{v}(t) &= \frac{\delta \vec{R}(t)}{\delta t}
\\
&= r \left(-\sin(\theta(t)) \frac{\delta \theta(t)}{\delta t} \vec{i} + \cos(\theta(t)) \frac{\delta \theta(t)}{\delta t} \vec{j} \right)
\\
&= r \left(-\sin(\theta(t)) \omega \vec{i} + \cos(\theta(t)) \omega \vec{j} \right)
\\
&= r \omega \left(-\sin(\theta(t)) \vec{i} + \cos(\theta(t)) \vec{j} \right)
\end{aligned}
</div>

<p>Note that the change in angle <span class="katex-eq">\frac{\delta \theta(t)}{\delta t} = \omega</span> with <span class="katex-eq">\omega</span> the angular velocity.</p>
<p>Using this, we find the acceleration:</p>
<div class="katex-eq">
\begin{aligned}
\vec{a}(t) &= \frac{\delta \vec{v}(t)}{\delta t}
\\
&= r \omega \left(-\cos(\theta(t)) \frac{\delta \theta(t)}{\delta t} \vec{i} - \sin(\theta(t)) \frac{\delta \theta(t)}{\delta t} \vec{j} \right)
\\
&= r \omega \left(-\cos(\theta(t)) \omega \vec{i} - \sin(\theta(t)) \omega \vec{j} \right)
\\
&= -r \omega^2 \left(\cos(\theta(t)) \vec{i} + \sin(\theta(t)) \vec{j} \right)
\end{aligned}
</div>

<p>It is interesting to note that, rearranging some terms, we get:</p>
<div class="katex-eq">
\begin{aligned}
\vec{a}(t) &= -\omega^2 r \left(\cos(\theta(t)) \vec{i} + \sin(\theta(t)) \vec{j} \right)
\\
&= -\omega^2 R(t)
\end{aligned}
</div>

<p>In other words, the acceleration vector has opposite direction to the position vector and has a magnitude of <span class="katex-eq">\omega^2</span> times the radius.</p>
<p>In the case of a circular motion, the angular velocity <span class="katex-eq">\omega</span> is equal to <span class="katex-eq">\frac{v}{r}</span>. With this in mind, all that remains is finding the magnitude of <span class="katex-eq">\vec{a}(t)</span>:</p>
<div class="katex-eq">
\begin{aligned}
a(t) & = |-\omega^2 R(t)|
\\
&= |-\omega^2| |R(t)|
\\
&= |-\left(\frac{v}{r}\right)^2| |r \left(\cos(\theta(t)) \vec{i} + \sin(\theta(t)) \vec{j} \right)
\\
&= \frac{v^2}{r^2} r |\left(\cos(\theta(t)) \vec{i} + \sin(\theta(t)) \vec{j} \right) |
\\
&= \frac{v^2}{r}
\end{aligned}
</div>

<p>For the last step, note that <span class="katex-eq">\cos(\theta(t)) \vec{i} &#43; \sin(\theta(t)) \vec{j}</span> describes the unit circle on the X- and Y-axes, and thus this expression has magnitude 1. So, an object with a constant speed can actually be accelerating! We see this in practice in many orbits. For example, the Moon is constantly pulled towards the Earth by gravity, and so is constantly accelerating towards the Earth, but the orbit of the Moon around the Earth describes a roughly circular motion with constant speed!</p>
<p>We already found that the acceleration has a direction opposite to the position vector (when the center of the circle is chosen as the center of the coordinate system). Let&rsquo;s now find the angle between the acceleration and velocity vectors using the definition of the in-product of vectors.</p>
<div class="katex-eq">
\vec{a}(t) \cdot \vec{v}(t) = |a(t)| \cdot |v(t)| \cdot \cos(\phi)
</div>

<p>With <span class="katex-eq">\phi</span> the angle between vectors <span class="katex-eq">\vec{a}(t)</span> and <span class="katex-eq">\vec{v}(t)</span>. By using the definition of the in-product in that <span class="katex-eq">(a \vec{i} &#43; b \vec{j}) \cdot (c \vec{i} &#43; d \vec{j}) = ac &#43; bd</span>, we get:</p>
<div class="katex-eq">
\begin{aligned}
\vec{a}(t) \cdot \vec{v}(t) &= |a(t)| \cdot |v(t)| \cdot \cos(\phi)
\\
&= r^2 w^3 \cos(\theta(t)) \cdot \sin(\theta(t)) - r^2 w^3 \sin(\theta(t)) \cdot \cos(\theta(t))
\\
&= -r^2 w^3 \left(-\cos(\theta(t)\right) \sin(\theta(t)) + \cos(\theta(t)) \sin(\theta(t))
\\
&= 0
\end{aligned}
</div>

<p>Then:</p>
<div class="katex-eq">
\begin{aligned}
\cos(\phi) &= \frac{\vec{a}(t) \cdot \vec{v}(t)}{|a(t)| \cdot |v(t)|}
\\
&= \frac{0}{|a(t)| \cdot |v(t)|}
\\
&= 0
\\
\phi &= cos^{-1}(0) = 90 ^\circ
\end{aligned}
</div>

<p>So, the acceleration is perpendicular to the velocity. This is called radial acceleration. In general, acceleration can be decomposed in radial and tangential parts. The radial part is perpendicular to the velocity, and the tangential part is in the same or opposite direction as the velocity. The radial part causes the velocity to change direction, and the tangential part causes the velocity to change in magnitude!</p>
<figure>
    <a href="/posts/can-an-object-with-constant-speed-be-accelerating/a-decompose.png" target="_blank">
      <img 
          srcset="/posts/can-an-object-with-constant-speed-be-accelerating/a-decompose.png 258w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 258px))"
          src="/posts/can-an-object-with-constant-speed-be-accelerating/a-decompose.png" alt="A schematic of an object with a velocity vector and an acceleration vector acting on it. The acceleration vector is decompose into two orthogonal vectors: a_r (perpendicular to the velocity) and a_t (parallel to the velocity)."/></a>
    <figcaption><p> <span class="katex-eq">\vec{a}</span> can be decomposed into <span class="katex-eq">a_r</span> and <span class="katex-eq">a_t</span>. </p></figcaption>
  </figure>]]></content:encoded>
    </item>
    
    <item>
      <title>Relative Velocity (Or: The Velocity-Addition Formula)</title>
      <link>https://uint.one/posts/relative-velocity-or-the-velocity-addition-formula/</link>
      <pubDate>Thu, 18 Sep 2014 20:21:29 +0000</pubDate>
      
      <guid>https://uint.one/posts/relative-velocity-or-the-velocity-addition-formula/</guid>
      <description>&lt;p&gt;With the knowledge that the speed of light is constant and the same for every
reference frame, and that no object can travel at the speed of light or faster
than the speed of light in any reference frame, we ask ourselves the question:
what happens when two spaceships leave from a space station in opposite
directions and both reach a constant speed of &lt;span class=&#34;katex-eq&#34;&gt;0.95c&lt;/span&gt; (with
&lt;span class=&#34;katex-eq&#34;&gt;c&lt;/span&gt; the speed of light) relative to that space station? In the space station&amp;rsquo;s
reference frame, the two ships travel at &lt;span class=&#34;katex-eq&#34;&gt;2 \cdot 0.95c = 1.9c&lt;/span&gt;
relative to each other. This doesn&amp;rsquo;t violate relativity, as neither spaceship
is actually going at or faster than the speed of light. But, ignoring the
effects of relativity, in the reference frame of either spaceship, the other
ship would appear to travel at &lt;span class=&#34;katex-eq&#34;&gt;1.9c&lt;/span&gt;. This would violate
relativity!&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>With the knowledge that the speed of light is constant and the same for every
reference frame, and that no object can travel at the speed of light or faster
than the speed of light in any reference frame, we ask ourselves the question:
what happens when two spaceships leave from a space station in opposite
directions and both reach a constant speed of <span class="katex-eq">0.95c</span> (with
<span class="katex-eq">c</span> the speed of light) relative to that space station? In the space station&rsquo;s
reference frame, the two ships travel at <span class="katex-eq">2 \cdot 0.95c = 1.9c</span>
relative to each other. This doesn&rsquo;t violate relativity, as neither spaceship
is actually going at or faster than the speed of light. But, ignoring the
effects of relativity, in the reference frame of either spaceship, the other
ship would appear to travel at <span class="katex-eq">1.9c</span>. This would violate
relativity!</p>
<figure>
    <a href="/posts/relative-velocity-or-the-velocity-addition-formula/ships-and-station.png" target="_blank">
      <img 
          srcset="/posts/relative-velocity-or-the-velocity-addition-formula/ships-and-station_hu_75044b9c9f3800e9.png 400w,/posts/relative-velocity-or-the-velocity-addition-formula/ships-and-station.png 500w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 500px))"
          src="/posts/relative-velocity-or-the-velocity-addition-formula/ships-and-station.png" alt="A schematic of two ships (labeled A and B) moving away from each other with a stationary space station in the middle. The ship velocities are labeled 0.95c."/></a>
    <figcaption><p> Two ships and a space station </p></figcaption>
  </figure><p>Applying the equations we found before, we will find out what actually happens.</p>
<p>Let&rsquo;s call the spaceship that travels to the &ldquo;left&rdquo; of the space station ship
A, and the other ship that travels to the &ldquo;right&rdquo;, ship B. As pointed out, from
the point of view of an observer at the space station the ships separate with a
speed of <span class="katex-eq">1.9c</span>. This is not what an observer at either ship sees.</p>
<p>We choose our coordinate systems such that the ships travel along the X-axis.
We take two reference frames, one for the space station and one for ship A.
Seen from the reference frame of the space station, ship A moves with velocity
<span class="katex-eq">v_{A} = -0.95c</span> (<span class="katex-eq">0.95c</span> in the negative X-direction).</p>
<p>We create a coordinate system <span class="katex-eq">k_A</span> with coordinates
<span class="katex-eq">(x&#39;, t&#39;)</span> corresponding to ship A&rsquo;s reference frame. In <span class="katex-eq">k_A</span>,
ship A is at <span class="katex-eq">x&#39; = 0</span> and at rest. We create a second coordinate system
<span class="katex-eq">k_S</span> with coordinates <span class="katex-eq">(x, t)</span> that corresponds to the space
station&rsquo;s reference frame. In <span class="katex-eq">k_S</span>, the space station is at
<span class="katex-eq">x = 0</span> and at rest. Assume that at <span class="katex-eq">t = 0</span>, both ships are at
<span class="katex-eq">x = 0</span> (i.e., the space station and both ships are at the exact
same position).</p>
<p>As seen in <a href="https://uint.one/posts/deriving-the-lorentz-factor/">this post</a>, we have:</p>
<div class="katex-eq">
\begin{aligned}
t' &= \gamma (t - v_{A} x / c^2) \\
x' &= \gamma (x - v_{A} t)
\end{aligned}
</div>

<p>With <span class="katex-eq">\gamma = \frac{1}{\sqrt{1 - v_{A}^2 / c^2}}</span>, the Lorentz factor.</p>
<p>We know that ship B is traveling with velocity <span class="katex-eq">v_{B} = 0.95c</span> in system <span class="katex-eq">k_S</span>. So, we have <span class="katex-eq">x = v_{B} t</span>. Required is the velocity of ship B in system <span class="katex-eq">k_A</span>. We have:</p>
<div class="katex-eq">
\begin{aligned}
t' &= \gamma (t - v_{A} x / c^2) = \gamma (t - v_{A} v_{B} t / c^2) \\
x' &= \gamma (x - v_{A} t) = \gamma(v_{B} t - v_{A} t)
\end{aligned}
</div>

<p>Then, the velocity <span class="katex-eq">v&#39;</span> of ship B in system <span class="katex-eq">k_A</span> is the derivative of B&rsquo;s position <span class="katex-eq">x&#39;</span> as function of time <span class="katex-eq">t&#39;</span> in <span class="katex-eq">k_A</span>:</p>
<div class="katex-eq">
\begin{aligned}
v' &= \frac{d x'}{d t'} = \frac{d \gamma(v_{B} t - v_{A} t)}{d \gamma (t - v_{A} v_{B} t / c^2)} \\
&= \frac{d (v_{B} t - v_{A} t)}{d (t - v_{A} v_{B} t / c^2)} \\
&= \frac{v_{B} - v_{A}}{1 - v_{A} v_{B} / c^2}
\end{aligned}
</div>

<p>So, the velocity <span class="katex-eq">v&#39;</span> of ship B as seen from ship A is:</p>
<div class="katex-eq">
\begin{aligned}
v' &= \frac{v_{B} - v_{A}}{1 - v_{A} v_{B} / c^2} \\
&= \frac{0.95c - - 0.95c}{1 - -0.95c \cdot 0.95c / c^2} \\
&\approx 0.9987 c
\end{aligned}
</div>

<p>This is slower than the speed of light!</p>
<p>In these equations, we have <span class="katex-eq">v_{A} &lt; 0</span>, as it was moving to the left of the space station. If we take <span class="katex-eq">v = -v_{A}</span> and <span class="katex-eq">u = v_{B}</span>, we get:</p>
<div class="katex-eq">
s = \frac{v + u}{1 + v u / c^2}
</div>

<p>Which is the general velocity-addition formula in special relativity. <span class="katex-eq">v</span> and <span class="katex-eq">u</span> have to be in a straight line (collinear) and the formula
assumes they are in opposite direction. Often it is described as the velocity
<span class="katex-eq">s</span> an observer A sees an object C move at, when C is seen to move at
velocity <span class="katex-eq">u</span> by observer B, and B is seen to move at velocity
<span class="katex-eq">v</span> by A. Below is a plot of the equation, with <span class="katex-eq">s</span>,
<span class="katex-eq">v</span> and <span class="katex-eq">u</span> in fractions of the speed of light.</p>
<figure>
    <a href="/posts/relative-velocity-or-the-velocity-addition-formula/velocity-addition.svg" target="_blank">
      
        <img 
          loading="lazy"
          style="max-width: 100%"
          src="/posts/relative-velocity-or-the-velocity-addition-formula/velocity-addition.svg" alt="A three-dimensional diagram showing the relationship between v, u and s."/></a>
    <figcaption><p></p></figcaption>
  </figure>]]></content:encoded>
    </item>
    
    <item>
      <title>The Kessel Run in Less than Twelve Parsecs</title>
      <link>https://uint.one/posts/the-kessel-run-in-less-than-twelve-parsecs/</link>
      <pubDate>Mon, 15 Sep 2014 18:52:50 +0000</pubDate>
      
      <guid>https://uint.one/posts/the-kessel-run-in-less-than-twelve-parsecs/</guid>
      <description>&lt;figure&gt;
    &lt;a href=&#34;https://uint.one/posts/the-kessel-run-in-less-than-twelve-parsecs/millennium-falcon.jpg&#34; target=&#34;_blank&#34;&gt;
      &lt;img 
          srcset=&#34;https://uint.one/posts/the-kessel-run-in-less-than-twelve-parsecs/millennium-falcon_hu_be9ca06ba5684db4.jpg 400w,/posts/the-kessel-run-in-less-than-twelve-parsecs/millennium-falcon.jpg 784w &#34;
          loading=&#34;lazy&#34;
          sizes=&#34;auto&#34;
          style=&#34;max-width: calc(min(100%, 784px))&#34;
          src=&#34;https://uint.one/posts/the-kessel-run-in-less-than-twelve-parsecs/millennium-falcon.jpg&#34; alt=&#34;The millennium falcon seen just off-angle from head-on.&#34;/&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;p&gt; You’ve never heard of the Millennium Falcon?… It’s the ship that made the Kessel Run in less than twelve parsecs. – Han Solo &lt;/p&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;&lt;p&gt;If you’ve seen Star Wars: A New Hope, you’ll have heard the above quote. People
often think Solo refers to his ship’s speed when he says this, but that is not
the case. A parsec is a unit of length, not of time! In fact, it is defined as
the distance from the sun to an astronomical object such that the parallax
angle (the angle between lines from the Earth and the Sun to that object) is
one second of arc. Parallax One parsec is the distance from the Sun to a nearby
astronomical object that has a parallax angle of 1 second of arc.&lt;/p&gt;
&lt;figure&gt;
    &lt;a href=&#34;https://uint.one/posts/the-kessel-run-in-less-than-twelve-parsecs/parsec-parallax-bw.png&#34; target=&#34;_blank&#34;&gt;
      &lt;img 
          srcset=&#34;https://uint.one/posts/the-kessel-run-in-less-than-twelve-parsecs/parsec-parallax-bw_hu_2b8e9e67c41b25b.png 400w,/posts/the-kessel-run-in-less-than-twelve-parsecs/parsec-parallax-bw.png 500w &#34;
          loading=&#34;lazy&#34;
          sizes=&#34;auto&#34;
          style=&#34;max-width: calc(min(100%, 500px))&#34;
          src=&#34;https://uint.one/posts/the-kessel-run-in-less-than-twelve-parsecs/parsec-parallax-bw.png&#34; alt=&#34;A schematic drawing of the angle of 1 arcsec and the distances 1 parsec and 1
au. A line is drawn between a star and a body labeled with a distance of 1
parsec. An object is orbiting the star labeled with a distance of 1 au. From
two opposite sides of the orbit lines are drawn to the distant object. The
lines from the orbiting body and the sun to the distant object are marked as
having an angle of 1 arcsec.&#34;/&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;p&gt; One parsec is the
distance from the Sun to a nearby astronomical object that has a parallax angle
of 1 second of arc. &lt;/p&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;&lt;p&gt;Using this information, we will calculate the length of a parsec in meters.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<figure>
    <a href="/posts/the-kessel-run-in-less-than-twelve-parsecs/millennium-falcon.jpg" target="_blank">
      <img 
          srcset="/posts/the-kessel-run-in-less-than-twelve-parsecs/millennium-falcon_hu_be9ca06ba5684db4.jpg 400w,/posts/the-kessel-run-in-less-than-twelve-parsecs/millennium-falcon.jpg 784w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 784px))"
          src="/posts/the-kessel-run-in-less-than-twelve-parsecs/millennium-falcon.jpg" alt="The millennium falcon seen just off-angle from head-on."/></a>
    <figcaption><p> You’ve never heard of the Millennium Falcon?… It’s the ship that made the Kessel Run in less than twelve parsecs. – Han Solo </p></figcaption>
  </figure><p>If you’ve seen Star Wars: A New Hope, you’ll have heard the above quote. People
often think Solo refers to his ship’s speed when he says this, but that is not
the case. A parsec is a unit of length, not of time! In fact, it is defined as
the distance from the sun to an astronomical object such that the parallax
angle (the angle between lines from the Earth and the Sun to that object) is
one second of arc. Parallax One parsec is the distance from the Sun to a nearby
astronomical object that has a parallax angle of 1 second of arc.</p>
<figure>
    <a href="/posts/the-kessel-run-in-less-than-twelve-parsecs/parsec-parallax-bw.png" target="_blank">
      <img 
          srcset="/posts/the-kessel-run-in-less-than-twelve-parsecs/parsec-parallax-bw_hu_2b8e9e67c41b25b.png 400w,/posts/the-kessel-run-in-less-than-twelve-parsecs/parsec-parallax-bw.png 500w
          "
          loading="lazy"
          sizes="auto"
          style="max-width: calc(min(100%, 500px))"
          src="/posts/the-kessel-run-in-less-than-twelve-parsecs/parsec-parallax-bw.png" alt="A schematic drawing of the angle of 1 arcsec and the distances 1 parsec and 1
au. A line is drawn between a star and a body labeled with a distance of 1
parsec. An object is orbiting the star labeled with a distance of 1 au. From
two opposite sides of the orbit lines are drawn to the distant object. The
lines from the orbiting body and the sun to the distant object are marked as
having an angle of 1 arcsec."/></a>
    <figcaption><p> One parsec is the
distance from the Sun to a nearby astronomical object that has a parallax angle
of 1 second of arc. </p></figcaption>
  </figure><p>Using this information, we will calculate the length of a parsec in meters.</p>
<p>When you are in motion, for example on a train, parallax is the effect where
objects close to you (houses next to the track) appear to move faster than
objects farther away (the treeline in the distance). The same effect occurs on
an astronomical scale. As the Earth orbits around the Sun, astronomical objects
such as stars that are close to us appear to move faster than objects farther
away. Because the Earth’s path is roughly a circle, the closer stars appear to
wobble against the background. (We call the “background” all objects far enough
away such that we can treat them as static for our intentions.)</p>
<p>If you draw a line from the Earth to a near star and another line from the Sun
to the same star, the lines are at an angle of <span class="katex-eq">\theta</span>. When the
lines from the Earth and the Sun to that star have an angle of
<span class="katex-eq">\theta = 1 \text{ arcsec}</span>,
the length of the line from the Sun to that star is one parsec. One second of
arc is equal to a sixtieth of a minute of arc, which is a
sixtieth of a degree:
<span class="katex-eq">\theta = 1 \text{ arcsec} = 1/60/60 = 1/3600 ^\circ</span>.</p>
<p>As a result, the situation can be described by the following triangle. The
distance from the Earth to the Sun is, on average, one astronomical unit (au),
which is exactly 149,597,870,700 meters. We have:</p>

"posts/2014-the-kessel-run-in-less-than-twelve-parsecs/parsec-triangle-bw.png"<div class="katex-eq">
\begin{aligned}
\tan\left(\theta\right) &= \frac{1 \text{ au}}{p} \\
p &= \frac{1 \text{ au}}{\tan\left(\theta\right)}
\end{aligned}
</div>

<p>Now we just plug in the values to get
<span class="katex-eq">p = \frac{149,597,870,700 \text{ m}}{\tan\left(1/3600 ^\circ\right)} \approx 3.086 \cdot 10^{16} \text{ meters}</span>.
To put this number in perspective, a light particle
traveling through a vacuum would need 3.3 years to cover this distance! Man,
those spaceships in Star Wars get quite some mileage…</p>]]></content:encoded>
    </item>
    
    <item>
      <title>Deriving the Lorentz Factor</title>
      <link>https://uint.one/posts/deriving-the-lorentz-factor/</link>
      <pubDate>Sun, 14 Sep 2014 01:23:11 +0000</pubDate>
      
      <guid>https://uint.one/posts/deriving-the-lorentz-factor/</guid>
      <description>&lt;p&gt;The Lorentz Factor is defined as &lt;span class=&#34;katex-eq&#34;&gt;\gamma = 1 / \sqrt{1 - v^2 / c^2}&lt;/span&gt;
with &lt;span class=&#34;katex-eq&#34;&gt;v&lt;/span&gt; the relative velocity between two reference frames (or two
objects, if you will) and &lt;span class=&#34;katex-eq&#34;&gt;c&lt;/span&gt; the speed of light. This is the
factor with which length contracts and time dilates between two reference
frames. For example, if you&amp;rsquo;d sit in a rocket that was traveling at 80% the
speed of light relative to your family on Earth, the Lorentz Factor would be
&lt;span class=&#34;katex-eq&#34;&gt;\gamma = 1 / \sqrt{1 - 0.8^2} = 1 \frac{2}{3}&lt;/span&gt;.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>The Lorentz Factor is defined as <span class="katex-eq">\gamma = 1 / \sqrt{1 - v^2 / c^2}</span>
with <span class="katex-eq">v</span> the relative velocity between two reference frames (or two
objects, if you will) and <span class="katex-eq">c</span> the speed of light. This is the
factor with which length contracts and time dilates between two reference
frames. For example, if you&rsquo;d sit in a rocket that was traveling at 80% the
speed of light relative to your family on Earth, the Lorentz Factor would be
<span class="katex-eq">\gamma = 1 / \sqrt{1 - 0.8^2} = 1 \frac{2}{3}</span>.</p>
<p>What this means is that your rocket and everything in it &ndash; including you &ndash;
would be shortened along the direction of motion for your family relative to
the length you observe the rocket to be. In fact, its length would be
contracted with factor <span class="katex-eq">\gamma</span>; if the rocket&rsquo;s length is
<span class="katex-eq">x</span> as measured by you, your family would measure it to be
<span class="katex-eq">x&#39; = x / \gamma</span>. In this case, they would measure the rocket to
be 60% of the length your measure it to be!</p>
<p>Calculating the time dilation is a similar process. In your reference frame, a clock in the rocket would tick every second. If your family back on earth are able observe that clock, it would appear to tick slower. For one second to pass on your clock, they would have to wait <span class="katex-eq">1 \cdot \gamma = 1 \frac{2}{3}</span> seconds. In general, if a time of <span class="katex-eq">t</span> has passed in your frame of reference, a time of <span class="katex-eq">t&#39; = \gamma t</span> has passed for your family.</p>
<p>In this post, I will follow Einstein&rsquo;s steps in deriving this factor.</p>
<p>Firstly, imagine a space with clocks at certain positions, all at rest relative to each other. An observer at clock A can know the &ldquo;A-time&rdquo; at which events happen in the immediate proximity of clock A. An observer at clock B can know the same for clock B. However, we cannot simply assume that the A-time and B-time are the same; we will define a synchronization method for clocks.</p>
<p>If it takes light <span class="katex-eq">t</span> seconds to travel from clock A to clock B, it also takes light <span class="katex-eq">t</span> seconds to travel from clock B to clock A. Let a ray of light be emitted from clock A at A-time <span class="katex-eq">t_A</span> and let it arrive at clock B at B-time <span class="katex-eq">t_B</span> and be reflected back to A to arrive at A-time <span class="katex-eq">t&#39;_A</span>. The two clocks are synchronized if <span class="katex-eq">t_B - t_A = t&#39;_A - t_B</span>. Using this method, all clocks at rest relative to each other can be synchronized.</p>
<p>Furthermore, from observation we know that light in a vacuum travels with a constant speed <span class="katex-eq">c</span> regardless of the reference frame. Thus, if <span class="katex-eq">AB</span> is the distance between the two clocks, it holds that <span class="katex-eq">\frac{2AB}{t&#39;_A - t_A} = c</span>.</p>
<p>Rod with velocity <span class="katex-eq">v</span></p>
<p>Now, we add a rod to this system. Call one end of the rod point A, and the other end point B. The rod travels with constant velocity <span class="katex-eq">v</span> relative to the stationary clocks. At both ends, clocks are placed that synchronize with the clocks in the stationary system. In other words, the indications of the clocks at points A and B are equal to the time of the stationary system at the point where they happen to be.</p>
<p>At both ends, we add an observer who applies the synchronization method described. A ray of light departs from point A at time <span class="katex-eq">t_A</span> (i.e., the stationary time), and is reflected from B back to A at time <span class="katex-eq">t_B</span> and reaches A again at time <span class="katex-eq">t&#39;_A</span>. For a stationary observer, we find that <span class="katex-eq">t_B - t_A = \frac{r_{AB}}{c-v}</span> and <span class="katex-eq">t&#39;_A - t_B = \frac{r_{AB}}{c &#43; v}</span> because the ray of light travels from A to B with speed <span class="katex-eq">c</span>, but the rod moves in the same direction as the light with speed <span class="katex-eq">v</span>, causing the speed of the light ray to be <span class="katex-eq">c-v</span> relative to the rod for a stationary observer. The reverse is true when the ray of light is reflected back to point A. A consequence of this is that observers moving with the rod would find the clocks to be out of sync!</p>
<p>Now, in stationary space let us introduce two systems of coordinates of which the X-, Y and Z-axes are parallel, and the X-axes coincide. One of the systems moves with constant velocity <span class="katex-eq">v</span> in direction of increasing <span class="katex-eq">X</span> of the other system. Call the moving system <span class="katex-eq">k_m</span> and the stationary system <span class="katex-eq">K</span>. In both systems, add a measuring rod and a number of clocks. All clocks and rods are alike in all respects. The time and place of an event in this space can be defined by coordinates of <span class="katex-eq">K</span>, <span class="katex-eq">(x, y, z, t)</span>; and <span class="katex-eq">k_m</span>, <span class="katex-eq">(\xi, \eta, \zeta, \tau)</span>.</p>
<p>We introduce a third system, <span class="katex-eq">K&#39;</span> with coordinates <span class="katex-eq">(x&#39;, y&#39;, z&#39;, t&#39;)</span>.</p>
<div class="katex-eq">
\begin{aligned}
x' &= x - vt
\\
y' &= y
\\
z' &= z
\\
t' &= t
\end{aligned}
</div>

<p>A point at rest in system <span class="katex-eq">k_m</span> must also be at rest in this new system <span class="katex-eq">K&#39;</span>.</p>
<p>A ray of light in <span class="katex-eq">K</span> would travel with velocity <span class="katex-eq">c</span> in both direction of increasing <span class="katex-eq">X</span> as well as decreasing <span class="katex-eq">X</span>. Following from this, for an observer in <span class="katex-eq">K</span>, the ray of light would travel with speed <span class="katex-eq">c-v</span> in direction of increasing <span class="katex-eq">X</span> relative to system <span class="katex-eq">K&#39;</span>, and with speed <span class="katex-eq">c&#43;v</span> in the opposite direction.</p>
<p>At time <span class="katex-eq">\tau_0</span>, let a ray of light be emitted from the origin of <span class="katex-eq">k_m</span> to a mirror at rest in <span class="katex-eq">k_m</span> at position <span class="katex-eq">(\xi, 0, 0)</span> where it arrives and is reflected at time <span class="katex-eq">\tau_1</span>. Because the mirror is at rest in system <span class="katex-eq">k_m</span>, it&rsquo;s position can also be described by coordinates <span class="katex-eq">(x&#39;, 0, 0)</span> of system <span class="katex-eq">K&#39;</span>. The ray arrives back at the origin of <span class="katex-eq">k_m</span> at time <span class="katex-eq">\tau_2</span>. Because the speed of light is constant, we have <span class="katex-eq">\tau_2 - \tau_1 = \tau_1 - \tau_0</span>, or: <span class="katex-eq">\tau_1 = \frac{1}{2} (\tau_0 &#43; \tau_2)</span>.</p>
<p>Let&rsquo;s define a function <span class="katex-eq">\tau(x&#39;, y&#39;, z&#39;, t&#39;)</span> which gives the time of an event in system <span class="katex-eq">k_m</span> given the coordinates of that event in system <span class="katex-eq">K&#39;</span>. We know that <span class="katex-eq">\tau_1 = \frac{1}{2} (\tau_0 &#43; \tau_2)</span> and that the mirror is at position <span class="katex-eq">(x&#39;, 0, 0)</span> in system <span class="katex-eq">K&#39;</span>. The ray of light was emitted at time <span class="katex-eq">\tau_0</span> from <span class="katex-eq">k_m</span>, let&rsquo;s call <span class="katex-eq">t&#39;</span> the time it was emitted as observed from system <span class="katex-eq">K&#39;</span>. Light traveling in direction of increasing <span class="katex-eq">X</span> has a speed of <span class="katex-eq">c-v</span> and a speed of <span class="katex-eq">c&#43;v</span> in direction of decreasing <span class="katex-eq">X</span> in <span class="katex-eq">K&#39;</span> because <span class="katex-eq">K&#39;</span> is defined in terms of <span class="katex-eq">K</span>. Using this, we obtain the following equations:</p>
<div class="katex-eq">
\begin{aligned}
\tau_0 &= \tau \left(0, 0, 0, t'\right) \\
\tau_1 &= \tau \left(x', 0, 0, t' + \frac{x'}{c - v}\right) \\
\tau_2 &= \tau \left(x', 0, 0, t' + \frac{x'}{c - v} + \frac{x'}{c + v}\right)
\end{aligned}
</div>

<p>Hence, <span class="katex-eq">\tau \left(x&#39;, 0, 0, t&#39; &#43; \frac{x&#39;}{c - v} \right) = \frac{1}{2} \left(\tau \left(0, 0, 0, t&#39;\right) &#43; \tau \left(x&#39;, 0, 0, t&#39; &#43; \frac{x&#39;}{c - v} &#43; \frac{x&#39;}{c &#43; v}\right) \right)</span>.</p>
<p>Furthermore, all equations must be linear because of the homogeneity of the two systems. Because of this, our function can be described as the plane <span class="katex-eq">\tau(x&#39;, 0, 0, t&#39;) = a \cdot x&#39; &#43; b \cdot t&#39; &#43; \tau_0</span>.</p>
<p>We have:</p>
<div class="katex-eq">
\begin{aligned}
a &= \frac{\partial \tau}{\partial x'} \\
b &= \frac{\partial \tau}{\partial t'}
\end{aligned}
</div>

<p>Plugging in the values for <span class="katex-eq">\tau_0</span>, <span class="katex-eq">\tau_1</span> and <span class="katex-eq">\tau_2</span> in this equation, we get:</p>
<div class="katex-eq">
\begin{aligned}
\frac{\partial \tau}{\partial x'} x' + \frac{\partial \tau}{\partial t'} \left(t' + \frac{x'}{c-v} \right) + \tau_0 =
\frac{1}{2} \bigl(&\frac{\partial \tau}{\partial t'} t' + \tau_0 + \frac{\partial \tau}{\partial x'} x'
\\
& + \frac{\partial \tau}{\partial t'} \left(t' + \frac{x'}{c - v} + \frac{x'}{c + v} \right)
\\
& + \tau_0 )\bigr)
\end{aligned}
</div>

<p>Cancel <span class="katex-eq">\tau_0</span> and <span class="katex-eq">\frac{\partial \tau}{\partial t&#39;} t&#39;</span>, and set <span class="katex-eq">x&#39; = 1</span>:</p>
<div class="katex-eq">
\begin{aligned}
\frac{\partial \tau}{\partial x'} + \frac{\partial \tau}{\partial t'} \left(\frac{1}{c-v} \right) &= \frac{1}{2} \left(\frac{\partial \tau}{\partial t'} \left(\frac{1}{c - v} + \frac{1}{c + v} \right) \right)
\\
\frac{\partial \tau}{\partial x'} + \frac{\partial \tau}{\partial t'} \left(\frac{0.5}{c-v} - \frac{0.5}{c+v} \right) &= 0
\\
\frac{\partial \tau}{\partial x'} + \frac{\partial \tau}{\partial t'} \left(\frac{v}{c^2 - v^2} \right) &= 0
\end{aligned}
</div>

<p>Note that we could have chosen any other emission point for the ray, so this equation is valid for all values of <span class="katex-eq">(x&#39;, y&#39;, z&#39;)</span>.</p>
<p>As before we have <span class="katex-eq">\tau(x&#39;, 0, 0, t&#39;) = a \cdot x&#39; &#43; b \cdot t&#39; &#43; \tau_0</span>. However, we now also know that <span class="katex-eq">a &#43; b \frac{v}{c^2 - v^2} = 0</span>.</p>
<p>So we have <span class="katex-eq">a = -b \frac{v}{c^2 - v^2}</span>. Putting this into our formula for <span class="katex-eq">\tau</span> gives us <span class="katex-eq">\tau(x&#39;, 0, 0, t&#39;) = a&#39; \left(-\frac{v}{c^2 - v^2} x&#39; &#43; t&#39;\right) &#43; \tau_0</span>.</p>
<p><span class="katex-eq">a&#39;</span> is a function of velocity that is still unknown. For brevity, we will assume that at the origin <span class="katex-eq">\tau = t&#39; = 0</span>, and so <span class="katex-eq">\tau(x&#39;, 0, 0, t&#39;) = a&#39; \left(-\frac{v}{c^2 - v^2} x&#39; &#43; t&#39;\right)</span>.</p>
<p>We know also that a ray of light travels with a constant speed <span class="katex-eq">c</span> in our system <span class="katex-eq">k_m</span>. For a ray emitted at time <span class="katex-eq">\tau = 0</span> in direction of increasing <span class="katex-eq">X</span> we have <span class="katex-eq">\xi = c \cdot \tau</span>.</p>
<p>Plugging in our equation for <span class="katex-eq">\tau</span>, we obtain <span class="katex-eq">\xi = c \cdot a&#39; \left(-\frac{v}{c^2 - v^2} x&#39; &#43; t&#39;\right)</span>.</p>
<p>In <span class="katex-eq">K&#39;</span>, the ray moves at speed <span class="katex-eq">c-v</span> relative to the X-axis of <span class="katex-eq">k_m</span>, so we obtain <span class="katex-eq">t = \frac{x&#39;}{c - v}</span>.</p>
<p>This gives us:</p>
<div class="katex-eq">
\begin{aligned}
\xi
&= c \cdot a' \left(-\frac{v}{c^2 - v^2} x' + t'\right) \\
&= c \cdot a' \left(-\frac{v}{c^2 - v^2} x' + \frac{x'}{c - v} \right) \\
&= a' \left(-\frac{cv}{c^2 - v^2} + \frac{c}{c - v} \right) x' \\
&= a' \frac{-c^2 v + c^3}{c^3 - c^2 v - c v^2 + v^3} x' \\
&= a' \frac{(c-v) c^2}{(c-v) (c^2 - v^2)} x' \\
&= a' \frac{c^2}{c^2 - v^2} x'
\end{aligned}
</div>

<p>Velocity vectors in <span class="katex-eq">K</span></p>
<p>Analogously, if a ray were to travel along the Y-axis, we would find <span class="katex-eq">\eta = c \tau = a&#39; c \left(t&#39; - \frac{v}{c^2 - v^2} x&#39; \right)</span>. In both <span class="katex-eq">k_m</span> and <span class="katex-eq">K</span> this ray is moving at speed <span class="katex-eq">c</span>, but in <span class="katex-eq">K</span> the ray has an additional velocity <span class="katex-eq">v</span> in direction of increasing X. Using the Pythagorean theorem we have <span class="katex-eq">v^2 &#43; v_y^2 = c^2</span>, or: <span class="katex-eq">v_y^2 = \sqrt{c^2 - v^2}</span>. So in <span class="katex-eq">K</span>, and by extension <span class="katex-eq">K&#39;</span>, the ray has a velocity in direction of increasing Y of <span class="katex-eq">\sqrt{c^2 - v^2}</span>.</p>
<p>So in this case <span class="katex-eq">t&#39; = \frac{y}{\sqrt{c^2 - v^2}}</span> and <span class="katex-eq">x&#39; = 0</span>. We then find <span class="katex-eq">\eta = a&#39; \frac{c}{\sqrt{c^2 - v^2}} y&#39;</span> and, repeating the same process for the Z-axis, <span class="katex-eq">\zeta = a&#39; \frac{c}{\sqrt{c^2 - v^2}} z&#39;</span>.</p>
<p>Plugging in <span class="katex-eq">x&#39; = x - vt</span>, <span class="katex-eq">y&#39;=y</span>, <span class="katex-eq">z&#39; = z</span> and <span class="katex-eq">t&#39; = t</span>, our equations can be written as:</p>
<div class="katex-eq">
\begin{aligned}
\tau &= \Phi(v) \cdot \beta(v) \cdot (t - vx / c^2) \\
\xi &= \Phi(v) \cdot \beta(v) \cdot (x - vt) \\
\eta &= \Phi(v) \cdot y \\
\zeta &= \Phi(v) \cdot z
\end{aligned}
</div>

<p>With <span class="katex-eq">\Phi(v) = a&#39; \frac{c}{\sqrt{c^2 - v^2}}</span> and <span class="katex-eq">\beta(v) = \frac{c}{\sqrt{c^2 - v^2}}</span>.</p>
<p>In these equations, we have an as of yet unknown function <span class="katex-eq">\Phi(v)</span> that we have to determine. To determine the function, we introduce a fourth system of coordinates <span class="katex-eq">k_s</span>, <span class="katex-eq">(x&#39;&#39;, y&#39;&#39;, z&#39;&#39;, t&#39;&#39;)</span> that has a velocity of <span class="katex-eq">-v</span> on the X-axis relative to system <span class="katex-eq">k_m</span>. At time <span class="katex-eq">t=0</span>, let the origins of <span class="katex-eq">K</span>, <span class="katex-eq">k_m</span> and <span class="katex-eq">k_s</span> coincide and let <span class="katex-eq">t&#39;&#39; = 0</span> (i.e., <span class="katex-eq">t&#39;&#39;</span> is the time in system <span class="katex-eq">k_s</span> which is 0 when the time <span class="katex-eq">t</span> in <span class="katex-eq">K</span> is 0).</p>
<p>The equations to transform from system <span class="katex-eq">K</span> to system <span class="katex-eq">k_m</span> are given above. Because the situation between systems <span class="katex-eq">k_s</span> and <span class="katex-eq">k_m</span> is simply the mirrored situation between systems <span class="katex-eq">K</span> and <span class="katex-eq">k_m</span>, we can apply the same equations with opposite sign to get the equations to transform from <span class="katex-eq">k_m</span> coordinates to <span class="katex-eq">k_s</span> coordinates.</p>
<div class="katex-eq">
\begin{aligned}
t'' &= \Phi(-v) \cdot \beta(-v) \cdot (\tau + v \xi / c^2) \\
x'' &= \Phi(-v) \cdot \beta(-v) \cdot (\xi + v \tau) \\
y'' &= \Phi(-v) \cdot \eta \\
z'' &= \Phi(-v) \cdot \zeta
\end{aligned}
</div>

<p>Plugging in the transformations for <span class="katex-eq">(\xi, \eta, \zeta, \tau)</span> from <span class="katex-eq">K</span> to <span class="katex-eq">k_m</span> into this set of equations will yield a transform from <span class="katex-eq">K</span> to <span class="katex-eq">k_s</span>. First, note that:</p>
<div class="katex-eq">
\begin{aligned}
\beta(-v) \beta(v) &= \frac{c}{\sqrt{c^2-(-v)^2}} \frac{c}{\sqrt{c^2-v^2}} = \frac{c}{\sqrt{c^2-v^2}} \frac{c}{\sqrt{c^2-v^2}}
\\
&= \left(\frac{c}{\sqrt{c^2-v^2}}\right)^2 = \frac{c^2}{\sqrt{c^2-v^2}^2}
\\
&= \frac{c^2}{c^2 - v^2}
\end{aligned}
</div>

<p>Now:</p>
<div class="katex-eq">
\begin{aligned}
t'' &= \Phi(-v) \cdot \beta(-v) \cdot (\Phi(v) \cdot \beta(v) \cdot (t - vx / c^2) \\
& \hphantom{=} + v (\Phi(v) \cdot \beta(v) \cdot (x - vt)) / c^2) \\
&= \Phi(-v) \cdot \beta(-v) \cdot \Phi(v) \cdot \beta(v) (t - vx / c^2 + v(x - vt)/c^2) \\
&= \Phi(-v) \cdot \Phi(v) \cdot \beta(-v) \cdot \beta(v) (t - vx / c^2 + vx/c^2 - v^2t/c^2) \\
&= \Phi(-v) \cdot \Phi(v) \cdot \frac{c^2}{c^2 - v^2} (t - v^2t/c^2) \\
&= \Phi(-v) \cdot \Phi(v) \cdot \frac{c^2 (t - v^2t/c^2)}{c^2 - v^2} \\
&= \Phi(-v) \cdot \Phi(v) \cdot \frac{c^2 t (1 - v^2/c^2)}{c^2 - v^2} \\
&= \Phi(-v) \cdot \Phi(v) \cdot \frac{t (c^2 - v^2)}{c^2 - v^2} \\
&= \Phi(-v) \cdot \Phi(v) \cdot t
\end{aligned}
</div>

<p>And:</p>
<div class="katex-eq">
\begin{aligned}
x'' &= \Phi(-v) \cdot \beta(-v) \cdot (\Phi(v) \cdot \beta(v) \cdot (x - vt) \\
& \hphantom{=} + v \Phi(v) \cdot \beta(v) \cdot (t - vx / c^2)) \\
&= \Phi(-v) \cdot \beta(-v) \cdot \Phi(v) \cdot \beta(v) ((x - vt) + vt - v^2x / c^2) \\
&= \Phi(-v) \cdot \Phi(v) \cdot \beta(-v) \cdot \beta(v) (x - vt + vt - v^2x / c^2) \\
&= \Phi(-v) \cdot \Phi(v) \cdot \frac{c^2}{c^2 - v^2} (x - v^2x / c^2) \\
&= \Phi(-v) \cdot \Phi(v) \cdot \frac{c^2 (x - v^2x / c^2)}{c^2 - v^2} \\
&= \Phi(-v) \cdot \Phi(v) \cdot \frac{c^2 x(1 - v^2 / c^2)}{c^2 - v^2} \\
&= \Phi(-v) \cdot \Phi(v) \cdot \frac{x(c^2 - v^2)}{c^2 - v^2} \\
&= \Phi(-v) \cdot \Phi(v) x
\end{aligned}
</div>

<p>And finally:</p>
<div class="katex-eq">
\begin{aligned}
y'' &= \Phi(-v) \cdot \Phi(v) \cdot y \\
z'' &= \Phi(-v) \cdot \Phi(v) \cdot z
\end{aligned}
</div>

<p>To summarize, to transform from <span class="katex-eq">K</span> to <span class="katex-eq">k_s</span>, we have the following equations:</p>
<div class="katex-eq">
\begin{aligned}
t'' &= \Phi(-v) \cdot \Phi(v) \cdot t \\
x'' &= \Phi(-v) \cdot \Phi(v) \cdot x \\
y'' &= \Phi(-v) \cdot \Phi(v) \cdot y \\
z'' &= \Phi(-v) \cdot \Phi(v) \cdot z
\end{aligned}
</div>

<p>Note that <span class="katex-eq">x&#39;&#39;</span>, <span class="katex-eq">y&#39;&#39;</span> and <span class="katex-eq">z&#39;&#39;</span> are independent of time. Thus, <span class="katex-eq">k_s</span> and <span class="katex-eq">K</span> are at rest relative to each other. Because the origins were set to coincide at <span class="katex-eq">t = 0</span>, this must remain the case. As such, it must hold that <span class="katex-eq">(x&#39;&#39;, y&#39;&#39;, z&#39;&#39;) = (x, y, z)</span> and thus <span class="katex-eq">\Phi(-v) \cdot \Phi(v) = 1</span>.</p>
<p>Let&rsquo;s find out what <span class="katex-eq">\Phi(v)</span> means with regard to our systems. Say we a have stationary rod in system <span class="katex-eq">k_m</span> with one end on the origin and the other at <span class="katex-eq">\eta = 1</span>. In other words, the rod is pointing upwards in system <span class="katex-eq">k_m</span> and has length 1. This rod, in system <span class="katex-eq">K</span>, must also be pointing upwards and must have one end on the origin. We know that <span class="katex-eq">\eta = \Phi(v) \cdot y</span>, thus <span class="katex-eq">y = \frac{\eta}{\Phi(v)}</span>. In other words, in system <span class="katex-eq">K</span>, this rod is pointing upwards and has length <span class="katex-eq">\frac{\eta}{\Phi(v)}</span>. It is clear that because of symmetry, it does not matter whether the rod relative to system <span class="katex-eq">K</span> is moving in direction of increasing X or decreasing X. As such, we have <span class="katex-eq">\frac{\eta}{\Phi(v)} = \frac{\eta}{\Phi(-v)}</span>, or: <span class="katex-eq">\Phi(v) = \Phi(-v)</span>.</p>
<p>So, we have:</p>
<div class="katex-eq">
\begin{aligned}
\Phi(-v) \Phi(v) &= 1 \\
\Phi(-v) &= \Phi(v) \\
\Phi(-v) &= \Phi(v) \cdot 1 = \Phi(v) \Phi(-v) \Phi(v) \\
1 &= \Phi(v) \Phi(v) \\
1 &= \Phi(v)^2 \\
\Phi(v) &= \sqrt{1} = 1
\end{aligned}
</div>

<p>With the knowledge that <span class="katex-eq">\Phi(v) = 1</span>, we just need a little bit more algebra to arrive at the Lorentz Factor:</p>
<div class="katex-eq">
\begin{aligned}
\beta(v) &= \frac{c}{\sqrt{c^2 - v^2}} \\
&= \frac{1}{c^{-1} \sqrt{c^2 - v^2}} \\
&= \frac{1}{\sqrt{c^{-2} (c^2 - v^2)}} \\
&= \frac{1}{\sqrt{1 - v^2 / c^2}} = \gamma
\end{aligned}
</div>]]></content:encoded>
    </item>
    
  </channel>
</rss>
