summaryrefslogtreecommitdiff
path: root/chapter11/docs
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-10-02 13:04:34 -0700
committerCliff Click <cliffc@acm.org>2026-10-02 13:04:34 -0700
commite4dc3273f201ae741637b626998637cce973546b (patch)
tree7607c1da4378da42549e8142371d95bdca4e06e0 /chapter11/docs
parent6cd01a8d646750748a0af221073de8a7787472ad (diff)
downloadSimple-e4dc3273f201ae741637b626998637cce973546b.tar.gz
Simple-e4dc3273f201ae741637b626998637cce973546b.zip
First pass README updates
Diffstat (limited to 'chapter11/docs')
-rw-r--r--chapter11/docs/Makefile15
-rw-r--r--chapter11/docs/graph1.json33
-rw-r--r--chapter11/docs/graph1.svg457
-rw-r--r--chapter11/docs/graph2.json33
-rw-r--r--chapter11/docs/graph2.svg486
-rw-r--r--chapter11/docs/graph3-snip.json20
-rw-r--r--chapter11/docs/graph3-snip.svg102
-rw-r--r--chapter11/docs/graph3.json33
-rw-r--r--chapter11/docs/graph3.svg500
-rw-r--r--chapter11/docs/graph4.json42
-rw-r--r--chapter11/docs/graph4.svg616
-rw-r--r--chapter11/docs/graph5.json42
-rw-r--r--chapter11/docs/graph5.svg659
-rw-r--r--chapter11/docs/graph6.json42
-rw-r--r--chapter11/docs/graph6.svg658
-rw-r--r--chapter11/docs/graph7.json16
-rw-r--r--chapter11/docs/graph7.svg132
-rw-r--r--chapter11/docs/graph8.json21
-rw-r--r--chapter11/docs/graph8.svg213
19 files changed, 1576 insertions, 2544 deletions
diff --git a/chapter11/docs/Makefile b/chapter11/docs/Makefile
index 055882b2..6fa0f057 100644
--- a/chapter11/docs/Makefile
+++ b/chapter11/docs/Makefile
@@ -1,14 +1 @@
-GV := $(wildcard *.gv)
-SVG := $(patsubst %.gv,%.svg,$(GV))
-.DELETE_ON_ERROR:
-
-.PHONY: all
-all: $(SVG)
-
-%.svg: %.gv
- dot -Tsvg $< > $@
- @sed -i 's/\r$$//' $@
-
-.PHONY: clean
-clean:
- @rm -f $(SVG)
+include ../../graph/docs.mk
diff --git a/chapter11/docs/graph1.json b/chapter11/docs/graph1.json
new file mode 100644
index 00000000..748bdae9
--- /dev/null
+++ b/chapter11/docs/graph1.json
@@ -0,0 +1,33 @@
+{
+ "ver": 1,
+ "comp": "chapter11/docs/graph1.svg",
+ "step": 1,
+ "roots": [],
+ "scope": 0,
+ "nodes": [
+ {"id": 1, "label": "MemMerge", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 6, "role": "MEM", "label": null}, {"idx": 2, "def": 224, "role": "MEM", "label": null}], "proj": null},
+ {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null},
+ {"id": 3, "label": "Stop", "type": null, "kind": "STOP", "edges": [{"idx": 0, "def": 25, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 4, "label": "#0", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 5, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}},
+ {"id": 6, "label": "$mem", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 2, "role": "MEM", "label": null}], "proj": {"par": 2, "idx": 1}},
+ {"id": 7, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 2, "role": "DATA", "label": null}], "proj": {"par": 2, "idx": 2}},
+ {"id": 8, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 17, "role": "CTRL", "label": null}], "proj": {"par": 17, "idx": 0}},
+ {"id": 9, "label": "new S", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 10, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 17, "role": "CTRL", "label": null}], "proj": {"par": 17, "idx": 1}},
+ {"id": 11, "label": "#2", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 12, "label": ".f =", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 6, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}, {"idx": 3, "def": 11, "role": "DATA", "label": null}], "proj": null},
+ {"id": 13, "label": "new S", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 14, "label": ".f =", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 12, "role": "MEM", "label": null}, {"idx": 2, "def": 13, "role": "DATA", "label": null}, {"idx": 3, "def": 4, "role": "DATA", "label": null}], "proj": null},
+ {"id": 16, "label": ".f", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 14, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}], "proj": null},
+ {"id": 17, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}, {"idx": 1, "def": 7, "role": "DATA", "label": null}], "proj": null},
+ {"id": 21, "label": "#1", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 22, "label": ".f =", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 14, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}, {"idx": 3, "def": 21, "role": "DATA", "label": null}], "proj": null},
+ {"id": 23, "label": "Region", "type": null, "kind": "REGION", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 8, "role": "CTRL", "label": null}, {"idx": 2, "def": 10, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 25, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 23, "role": "CTRL", "label": null}, {"idx": 1, "def": 1, "role": "MEM", "label": null}, {"idx": 2, "def": 16, "role": "DATA", "label": null}], "proj": null},
+ {"id": 224, "label": "MemPhi_2", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 23, "role": "ASSOC", "label": null}, {"idx": 1, "def": 22, "role": "MEM", "label": null}, {"idx": 2, "def": 14, "role": "MEM", "label": null}], "proj": null}
+ ],
+ "groups": [
+ {"id": 17, "par": 0, "nodes": [8, 10, 17, 22, 23, 224]}
+ ]
+}
diff --git a/chapter11/docs/graph1.svg b/chapter11/docs/graph1.svg
index 422d790e..ef4d0293 100644
--- a/chapter11/docs/graph1.svg
+++ b/chapter11/docs/graph1.svg
@@ -1,306 +1,151 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
- "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 12.2.0 (20241103.1931)
- -->
-<!-- Title: chapter11 Pages: 1 -->
-<svg width="346pt" height="714pt"
- viewBox="0.00 0.00 346.00 714.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 710)">
-<title>chapter11</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-710 342,-710 342,4 -4,4"/>
-<g id="clust1" class="cluster">
-<title>cluster_Nodes</title>
-<polygon fill="none" stroke="black" points="8,-8 8,-698 330,-698 330,-8 8,-8"/>
-</g>
-<!-- Start2 -->
-<g id="node1" class="node">
-<title>Start2</title>
-<polygon fill="yellow" stroke="none" points="207.38,-659.5 207.38,-686 312.62,-686 312.62,-659.5 207.38,-659.5"/>
-<polygon fill="none" stroke="black" points="207.38,-659.5 207.38,-686 312.62,-686 312.62,-659.5 207.38,-659.5"/>
-<text text-anchor="start" x="247.25" y="-667.7" font-family="Times New Roman,serif" font-size="14.00">Start</text>
-<polygon fill="none" stroke="black" points="207.38,-627 207.38,-659.5 312.62,-659.5 312.62,-627 207.38,-627"/>
-<polygon fill="yellow" stroke="none" points="212.38,-632 212.38,-654.5 243.12,-654.5 243.12,-632 212.38,-632"/>
-<polygon fill="none" stroke="black" points="212.38,-632 212.38,-654.5 243.12,-654.5 243.12,-632 212.38,-632"/>
-<text text-anchor="start" x="215.38" y="-638.2" font-family="Times New Roman,serif" font-size="14.00">$ctrl</text>
-<polygon fill="none" stroke="black" points="243.12,-632 243.12,-654.5 284.38,-654.5 284.38,-632 243.12,-632"/>
-<text text-anchor="start" x="246.12" y="-638.2" font-family="Times New Roman,serif" font-size="14.00">$mem</text>
-<polygon fill="none" stroke="black" points="284.38,-632 284.38,-654.5 307.62,-654.5 307.62,-632 284.38,-632"/>
-<text text-anchor="start" x="287.38" y="-638.2" font-family="Times New Roman,serif" font-size="14.00">arg</text>
-</g>
-<!-- MemMerge -->
-<g id="node2" class="node">
-<title>MemMerge</title>
-<polygon fill="none" stroke="black" points="195,-196 113,-196 113,-160 195,-160 195,-196"/>
-<text text-anchor="middle" x="154" y="-172.95" font-family="Times New Roman,serif" font-size="14.00">MemMerge</text>
-</g>
-<!-- MemMerge&#45;&gt;Start2 -->
-<g id="edge25" class="edge">
-<title>MemMerge&#45;&gt;Start2:p1</title>
-<path fill="none" stroke="blue" d="M174.24,-196.05C184.06,-205.56 195.02,-218.24 201,-232 238.55,-318.39 196.42,-352.07 221,-443 234.8,-494.06 259.62,-499.34 271,-551 277.81,-581.92 266.84,-592.84 264.27,-619.8"/>
-<polygon fill="blue" stroke="blue" points="260.79,-619.34 263.82,-629.49 267.78,-619.66 260.79,-619.34"/>
-<text text-anchor="middle" x="171.99" y="-198.2" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_224 -->
-<g id="node15" class="node">
-<title>Phi_224</title>
-<ellipse fill="lightyellow" stroke="black" cx="139" cy="-250" rx="52.89" ry="18"/>
-<text text-anchor="middle" x="139" y="-244.95" font-family="Times New Roman,serif" font-size="14.00">MemPhi_2</text>
-</g>
-<!-- MemMerge&#45;&gt;Phi_224 -->
-<g id="edge26" class="edge">
-<title>MemMerge&#45;&gt;Phi_224</title>
-<path fill="none" stroke="blue" d="M150.29,-196.3C148.71,-203.68 146.83,-212.48 145.05,-220.75"/>
-<polygon fill="blue" stroke="blue" points="141.66,-219.9 142.98,-230.42 148.5,-221.37 141.66,-219.9"/>
-<text text-anchor="middle" x="148.04" y="-198.45" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Stop3 -->
-<g id="node3" class="node">
-<title>Stop3</title>
-<polygon fill="yellow" stroke="black" points="181,-52 127,-52 127,-16 181,-16 181,-52"/>
-<text text-anchor="middle" x="154" y="-28.95" font-family="Times New Roman,serif" font-size="14.00">Stop</text>
-</g>
-<!-- Return25 -->
-<g id="node16" class="node">
-<title>Return25</title>
-<polygon fill="yellow" stroke="black" points="181,-124 127,-124 127,-88 181,-88 181,-124"/>
-<text text-anchor="middle" x="154" y="-100.95" font-family="Times New Roman,serif" font-size="14.00">Return</text>
-</g>
-<!-- Stop3&#45;&gt;Return25 -->
-<g id="edge1" class="edge">
-<title>Stop3&#45;&gt;Return25</title>
-<path fill="none" stroke="red" d="M154,-52.3C154,-59.59 154,-68.27 154,-76.46"/>
-<polygon fill="red" stroke="red" points="150.5,-76.38 154,-86.38 157.5,-76.38 150.5,-76.38"/>
-<text text-anchor="middle" x="151.75" y="-54.45" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Con_4 -->
-<g id="node4" class="node">
-<title>Con_4</title>
-<ellipse fill="none" stroke="black" cx="93" cy="-497" rx="27" ry="18"/>
-<text text-anchor="middle" x="93" y="-491.95" font-family="Times New Roman,serif" font-size="14.00">#0</text>
-</g>
-<!-- new9 -->
-<g id="node5" class="node">
-<title>new9</title>
-<ellipse fill="none" stroke="black" cx="50" cy="-569" rx="33.95" ry="18"/>
-<text text-anchor="middle" x="50" y="-563.95" font-family="Times New Roman,serif" font-size="14.00">new S</text>
-</g>
-<!-- new9&#45;&gt;Start2 -->
-<g id="edge2" class="edge">
-<title>new9&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="green" d="M68.15,-584.47C94.9,-604.4 147.46,-638.35 200.14,-642.77"/>
-<polygon fill="green" stroke="green" points="199.72,-646.26 209.86,-643.19 200.02,-639.26 199.72,-646.26"/>
-<text text-anchor="middle" x="70.4" y="-586.62" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Con_11 -->
-<g id="node6" class="node">
-<title>Con_11</title>
-<ellipse fill="none" stroke="black" cx="149" cy="-569" rx="27" ry="18"/>
-<text text-anchor="middle" x="149" y="-563.95" font-family="Times New Roman,serif" font-size="14.00">#2</text>
-</g>
-<!-- Store12 -->
-<g id="node7" class="node">
-<title>Store12</title>
-<ellipse fill="none" stroke="black" cx="165" cy="-497" rx="27" ry="18"/>
-<text text-anchor="middle" x="165" y="-491.95" font-family="Times New Roman,serif" font-size="14.00">.f =</text>
-</g>
-<!-- Store12&#45;&gt;Start2 -->
-<g id="edge3" class="edge">
-<title>Store12&#45;&gt;Start2:p1</title>
-<path fill="none" stroke="blue" d="M147.77,-510.96C126.13,-528.81 94,-561.66 113,-587 152.26,-639.35 250.4,-570.87 262.52,-619.62"/>
-<polygon fill="blue" stroke="blue" points="259.03,-619.93 263.59,-629.5 265.99,-619.18 259.03,-619.93"/>
-<text text-anchor="middle" x="145.52" y="-513.11" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Store12&#45;&gt;new9 -->
-<g id="edge4" class="edge">
-<title>Store12&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M145.49,-509.87C127.95,-520.55 101.87,-536.43 81.39,-548.89"/>
-<polygon fill="black" stroke="black" points="79.58,-545.9 72.86,-554.09 83.22,-551.88 79.58,-545.9"/>
-<text text-anchor="middle" x="147.74" y="-502.27" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Store12&#45;&gt;Con_11 -->
-<g id="edge5" class="edge">
-<title>Store12&#45;&gt;Con_11</title>
-<path fill="none" stroke="black" d="M161.04,-515.3C159.36,-522.68 157.35,-531.48 155.46,-539.75"/>
-<polygon fill="black" stroke="black" points="152.06,-538.89 153.25,-549.42 158.89,-540.45 152.06,-538.89"/>
-<text text-anchor="middle" x="158.79" y="-517.45" font-family="Helvetica,sans-Serif" font-size="8.00">3</text>
-</g>
-<!-- new13 -->
-<g id="node8" class="node">
-<title>new13</title>
-<ellipse fill="none" stroke="black" cx="228" cy="-569" rx="33.95" ry="18"/>
-<text text-anchor="middle" x="228" y="-563.95" font-family="Times New Roman,serif" font-size="14.00">new S</text>
-</g>
-<!-- new13&#45;&gt;Start2 -->
-<g id="edge6" class="edge">
-<title>new13&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="green" d="M227.89,-587.35C227.84,-596.51 227.79,-608.2 227.76,-619.69"/>
-<polygon fill="green" stroke="green" points="224.26,-619.48 227.75,-629.49 231.26,-619.49 224.26,-619.48"/>
-<text text-anchor="middle" x="225.64" y="-589.5" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Store14 -->
-<g id="node9" class="node">
-<title>Store14</title>
-<ellipse fill="none" stroke="black" cx="93" cy="-409.5" rx="27" ry="18"/>
-<text text-anchor="middle" x="93" y="-404.45" font-family="Times New Roman,serif" font-size="14.00">.f =</text>
-</g>
-<!-- Store14&#45;&gt;Con_4 -->
-<g id="edge9" class="edge">
-<title>Store14&#45;&gt;Con_4</title>
-<path fill="none" stroke="black" d="M93,-427.8C93,-439.16 93,-454.28 93,-467.4"/>
-<polygon fill="black" stroke="black" points="89.5,-467.21 93,-477.21 96.5,-467.21 89.5,-467.21"/>
-<text text-anchor="middle" x="90.75" y="-429.95" font-family="Helvetica,sans-Serif" font-size="8.00">3</text>
-</g>
-<!-- Store14&#45;&gt;Store12 -->
-<g id="edge7" class="edge">
-<title>Store14&#45;&gt;Store12</title>
-<path fill="none" stroke="blue" d="M105.87,-425.79C116.73,-438.67 132.44,-457.34 144.94,-472.18"/>
-<polygon fill="blue" stroke="blue" points="142.15,-474.29 151.26,-479.69 147.5,-469.79 142.15,-474.29"/>
-<text text-anchor="middle" x="103.62" y="-427.94" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Store14&#45;&gt;new13 -->
-<g id="edge8" class="edge">
-<title>Store14&#45;&gt;new13</title>
-<path fill="none" stroke="black" d="M107.31,-425.06C113.63,-431.04 121.35,-437.78 129,-443 158.55,-463.17 177.93,-451.66 201,-479 215.33,-495.99 222.06,-520.44 225.21,-539.41"/>
-<polygon fill="black" stroke="black" points="221.73,-539.76 226.58,-549.18 228.66,-538.79 221.73,-539.76"/>
-<text text-anchor="middle" x="109.56" y="-427.21" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Load16 -->
-<g id="node10" class="node">
-<title>Load16</title>
-<ellipse fill="none" stroke="black" cx="43" cy="-322" rx="27" ry="18"/>
-<text text-anchor="middle" x="43" y="-316.95" font-family="Times New Roman,serif" font-size="14.00">.f</text>
-</g>
-<!-- Load16&#45;&gt;new9 -->
-<g id="edge11" class="edge">
-<title>Load16&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M47,-410.5C36.94,-454.72 41.17,-507.73 45.4,-539.6"/>
-<polygon fill="black" stroke="black" points="41.89,-539.81 46.78,-549.21 48.82,-538.82 41.89,-539.81"/>
-<path fill="none" stroke="black" d="M46.72,-340.02C49.87,-357.49 53,-385.34 47,-408.5"/>
-<text text-anchor="middle" x="44.75" y="-402.9" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Load16&#45;&gt;Store14 -->
-<g id="edge10" class="edge">
-<title>Load16&#45;&gt;Store14</title>
-<path fill="none" stroke="blue" d="M52.4,-339.08C59.55,-351.3 69.53,-368.37 77.81,-382.52"/>
-<polygon fill="blue" stroke="blue" points="74.63,-384.03 82.7,-390.89 80.68,-380.49 74.63,-384.03"/>
-<text text-anchor="middle" x="50.15" y="-341.23" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- If17 -->
-<g id="node11" class="node">
-<title>If17</title>
-<polygon fill="yellow" stroke="none" points="238,-412.5 238,-439 314,-439 314,-412.5 238,-412.5"/>
-<polygon fill="none" stroke="black" points="238,-412.5 238,-439 314,-439 314,-412.5 238,-412.5"/>
-<text text-anchor="start" x="271.5" y="-420.7" font-family="Times New Roman,serif" font-size="14.00">If</text>
-<polygon fill="none" stroke="black" points="238,-380 238,-412.5 314,-412.5 314,-380 238,-380"/>
-<polygon fill="yellow" stroke="none" points="243,-385 243,-407.5 274.5,-407.5 274.5,-385 243,-385"/>
-<polygon fill="none" stroke="black" points="243,-385 243,-407.5 274.5,-407.5 274.5,-385 243,-385"/>
-<text text-anchor="start" x="246" y="-391.2" font-family="Times New Roman,serif" font-size="14.00">True</text>
-<polygon fill="yellow" stroke="none" points="274.5,-385 274.5,-407.5 309,-407.5 309,-385 274.5,-385"/>
-<polygon fill="none" stroke="black" points="274.5,-385 274.5,-407.5 309,-407.5 309,-385 274.5,-385"/>
-<text text-anchor="start" x="277.5" y="-391.2" font-family="Times New Roman,serif" font-size="14.00">False</text>
-</g>
-<!-- If17&#45;&gt;Start2 -->
-<g id="edge12" class="edge">
-<title>If17&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M301,-498C306.79,-539.34 292.85,-551.43 271,-587 261.11,-603.09 244.32,-604.88 234.83,-613.4"/>
-<polygon fill="red" stroke="red" points="231.88,-611.53 229.53,-621.86 237.81,-615.25 231.88,-611.53"/>
-<path fill="none" stroke="red" d="M287.84,-442.9C293,-458.69 298.44,-478.09 301,-496"/>
-<text text-anchor="middle" x="298.75" y="-490.4" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- If17&#45;&gt;Start2 -->
-<g id="edge13" class="edge">
-<title>If17&#45;&gt;Start2:p2</title>
-<path fill="none" stroke="black" d="M301,-498C306.61,-537.22 310.42,-547.63 306,-587 304.69,-598.67 301.49,-604.88 299.06,-612.05"/>
-<polygon fill="black" stroke="black" points="295.7,-611.02 296.82,-621.55 302.52,-612.62 295.7,-611.02"/>
-<text text-anchor="middle" x="298.75" y="-500.15" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Con_21 -->
-<g id="node12" class="node">
-<title>Con_21</title>
-<ellipse fill="none" stroke="black" cx="165" cy="-409.5" rx="27" ry="18"/>
-<text text-anchor="middle" x="165" y="-404.45" font-family="Times New Roman,serif" font-size="14.00">#1</text>
-</g>
-<!-- Store22 -->
-<g id="node13" class="node">
-<title>Store22</title>
-<ellipse fill="none" stroke="black" cx="135" cy="-322" rx="27" ry="18"/>
-<text text-anchor="middle" x="135" y="-316.95" font-family="Times New Roman,serif" font-size="14.00">.f =</text>
-</g>
-<!-- Store22&#45;&gt;new9 -->
-<g id="edge15" class="edge">
-<title>Store22&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M113.11,-332.75C95.54,-341.64 71.49,-356.38 57,-376 48.02,-388.16 50.79,-393.87 47,-408.5"/>
-<text text-anchor="middle" x="115.36" y="-334.9" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Store22&#45;&gt;Store14 -->
-<g id="edge14" class="edge">
-<title>Store22&#45;&gt;Store14</title>
-<path fill="none" stroke="blue" d="M126.9,-339.49C120.98,-351.55 112.81,-368.17 105.98,-382.08"/>
-<polygon fill="blue" stroke="blue" points="103.01,-380.19 101.74,-390.71 109.29,-383.27 103.01,-380.19"/>
-<text text-anchor="middle" x="124.65" y="-341.64" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Store22&#45;&gt;Con_21 -->
-<g id="edge16" class="edge">
-<title>Store22&#45;&gt;Con_21</title>
-<path fill="none" stroke="black" d="M140.93,-339.89C145.04,-351.6 150.6,-367.46 155.34,-380.98"/>
-<polygon fill="black" stroke="black" points="151.97,-381.94 158.58,-390.21 158.58,-379.62 151.97,-381.94"/>
-<text text-anchor="middle" x="138.68" y="-342.04" font-family="Helvetica,sans-Serif" font-size="8.00">3</text>
-</g>
-<!-- Region23 -->
-<g id="node14" class="node">
-<title>Region23</title>
-<polygon fill="yellow" stroke="black" points="285.5,-268 230.5,-268 230.5,-232 285.5,-232 285.5,-268"/>
-<text text-anchor="middle" x="258" y="-244.95" font-family="Times New Roman,serif" font-size="14.00">Region</text>
-</g>
-<!-- Region23&#45;&gt;If17 -->
-<g id="edge17" class="edge">
-<title>Region23&#45;&gt;If17:p0</title>
-<path fill="none" stroke="red" d="M258.16,-268.22C258.36,-291.29 258.68,-333.85 258.74,-372.64"/>
-<polygon fill="red" stroke="red" points="255.24,-372.49 258.75,-382.49 262.24,-372.48 255.24,-372.49"/>
-<text text-anchor="middle" x="255.91" y="-270.37" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_224&#45;&gt;Store14 -->
-<g id="edge21" class="edge">
-<title>Phi_224&#45;&gt;Store14</title>
-<path fill="none" stroke="blue" d="M122.4,-267.57C113.78,-277.31 104.01,-290.37 99,-304 90,-328.5 89.21,-358.4 90.25,-379.93"/>
-<polygon fill="blue" stroke="blue" points="86.75,-379.98 90.9,-389.73 93.73,-379.52 86.75,-379.98"/>
-<text text-anchor="middle" x="120.15" y="-269.72" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Phi_224&#45;&gt;Store22 -->
-<g id="edge20" class="edge">
-<title>Phi_224&#45;&gt;Store22</title>
-<path fill="none" stroke="blue" d="M138.01,-268.3C137.59,-275.59 137.1,-284.27 136.63,-292.46"/>
-<polygon fill="blue" stroke="blue" points="133.14,-292.2 136.06,-302.38 140.13,-292.6 133.14,-292.2"/>
-<text text-anchor="middle" x="135.76" y="-270.45" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_224&#45;&gt;Region23 -->
-<g id="edge19" class="edge">
-<title>Phi_224&#45;&gt;Region23</title>
-<path fill="none" stroke="black" stroke-dasharray="1,5" d="M191.99,-250C200.94,-250 209.88,-250 218.82,-250"/>
-<polygon fill="black" stroke="black" points="218.64,-253.5 228.64,-250 218.64,-246.5 218.64,-253.5"/>
-<text text-anchor="middle" x="194.24" y="-242.4" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Return25&#45;&gt;MemMerge -->
-<g id="edge24" class="edge">
-<title>Return25&#45;&gt;MemMerge</title>
-<path fill="none" stroke="blue" d="M154,-124.3C154,-131.59 154,-140.27 154,-148.46"/>
-<polygon fill="blue" stroke="blue" points="150.5,-148.38 154,-158.38 157.5,-148.38 150.5,-148.38"/>
-<text text-anchor="middle" x="151.75" y="-126.45" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Return25&#45;&gt;Load16 -->
-<g id="edge23" class="edge">
-<title>Return25&#45;&gt;Load16</title>
-<path fill="none" stroke="black" d="M134.47,-124.14C124.31,-133.85 112.32,-146.7 104,-160 77.05,-203.06 59,-259.91 49.91,-293.26"/>
-<polygon fill="black" stroke="black" points="46.62,-291.99 47.45,-302.55 53.39,-293.78 46.62,-291.99"/>
-<text text-anchor="middle" x="132.22" y="-126.29" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Return25&#45;&gt;Region23 -->
-<g id="edge22" class="edge">
-<title>Return25&#45;&gt;Region23</title>
-<path fill="none" stroke="red" d="M172.12,-124.31C182.08,-134.28 194.34,-147.32 204,-160 218.92,-179.59 233.25,-203.54 243.4,-221.66"/>
-<polygon fill="red" stroke="red" points="240.24,-223.18 248.13,-230.25 246.37,-219.8 240.24,-223.18"/>
-<text text-anchor="middle" x="169.87" y="-126.46" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-</g>
-</svg>
+<svg aria-label="Compiler graph" width="689" height="1044" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 689 1044" style="font-family: sans-serif;"><style>
+ html, body { height:100%; margin:0; font-family:sans-serif; }
+ .viewer { height:100%; display:grid; grid-template-rows:auto minmax(0,1fr) auto; }
+ .source { padding:8px; border-bottom:1px solid #ccc; }
+ #program { width:min(600px,80vw); vertical-align:middle; }
+ #status { margin-top:4px; }
+ #graph { min-height:0; overflow:hidden; position:relative; background:#fafbfc; }
+ #elk { width:100%; height:100%; }
+ #graph svg { display:block; }
+ .tools { display:flex; flex-wrap:wrap; align-items:center; gap:14px; margin-top:8px; font-size:12px; }
+ .hint { color:#616c78; }
+ .ctrl { color:#b63838; } .mem { color:#2867b2; } .data { color:#536477; }
+ .edge { fill:none; stroke-width:1.5; }
+ .edge.CTRL { stroke-width:2; }
+ .edge.ASSOC { stroke-dasharray:4 4; }
+ .edge.PARSER { stroke-dasharray:5 4; }
+ .parser rect { fill:#f6f0ff; stroke:#7956a5; stroke-width:1.5; stroke-dasharray:5 4; }
+ .edge.selected { stroke-width:3.5; }
+ .edge.bundle { stroke-width:4; }
+ .edge.bundle.selected { stroke-width:6; }
+ .edge-hit { fill:none; stroke:transparent; stroke-width:12; vector-effect:non-scaling-stroke; pointer-events:stroke; cursor:pointer; }
+ .edge-jump { fill:transparent; pointer-events:all; cursor:pointer; }
+ .node { cursor:pointer; }
+ .box { stroke:#758191; stroke-width:1; }
+ .node.held .box { stroke-dasharray:5 3; }
+ .node.near .box { stroke:#c18221; stroke-width:2; }
+ .node.focus .box { stroke:#9c4900; stroke-width:3; }
+ .node.selected .box { stroke:#1569b9; stroke-width:3; }
+ .node.folded .box { stroke-width:4; }
+ .node.folding .box { fill:#f4ccd7; }
+ .fold-tag { font-size:9px; font-weight:700; fill:#963751; }
+ .peep-area { fill:#fff3d9; fill-opacity:.8; stroke:#c18221; stroke-width:2; pointer-events:none; }
+ .node.peep-edit .box { stroke:#9c4900; stroke-width:3; }
+ .node.error .box { stroke:#b42318; stroke-width:4; }
+ #event.error { color:#b42318; font-weight:600; white-space:pre-wrap; overflow-wrap:anywhere; }
+ .peep-ghosts { pointer-events:none; }
+ .region-box { stroke:#9da9b8; stroke-width:1.5; }
+ .fold-btn { cursor:pointer; }
+ .fold-btn rect { fill:white; stroke:#596674; }
+ .fold-btn text { font-size:14px; fill:#152330; }
+ .fold-btn:focus rect { stroke:#1569b9; stroke-width:2; }
+ .shortcut { cursor:pointer; }
+ .shortcut path { fill:none; stroke-width:1.5; }
+ .shortcut rect { fill:#fff8ec; stroke:#b63838; stroke-dasharray:3 2; }
+ .shortcut text { font-size:11px; fill:#783030; }
+ .shortcut.selected rect, .shortcut:focus rect { stroke-width:2.5; }
+ .label { font-size:12px; fill:#152330; font-weight:600; }
+ .node-id { font-size:10px; fill:#596674; font-weight:400; }
+ .type { font-size:11px; fill:#455768; }
+ .port { stroke:#536477; stroke-width:1; }
+ .row { stroke:#b6afcf; stroke-width:1; }
+ .bind { font-size:12px; fill:#152330; }
+ .slot { font-size:10px; fill:#364352; paint-order:stroke; stroke:#fafbfc; stroke-width:3; }
+ #detail { position:absolute; top:8px; right:8px; margin:0; padding:12px; max-width:320px;
+ max-height:45%; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere;
+ background:#fffffff2; border:1px solid #bac5d0; border-radius:4px; font-size:12px; }
+ .controls { display:flex; flex-wrap:wrap; justify-content:center; align-items:center; gap:6px; padding:6px; }
+ .button { color:white; background:black; font-size:20px; min-width:30px; }
+ .button:disabled { background:grey; }
+ .count { font-size:20px; min-width:35px; text-align:center; }
+ #N { width:6ch; }
+ #scrub { width:clamp(120px,35vw,600px); }
+ </style><defs><marker id="arrow-CTRL" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#b63838"/></marker><marker id="arrow-DATA" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#536477"/></marker><marker id="arrow-MEM" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#2867b2"/></marker><marker id="arrow-ASSOC" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#9396a3"/></marker><marker id="arrow-PARSER" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#7956a5"/></marker></defs><rect width="100%" height="100%" fill="rgb(250, 251, 252)"/><g><g class="regions" style="opacity: 1;"><g class="region" transform="translate(35,483)"><rect class="region-box" rx="8" width="433" height="250" fill="#f2f7ef"/></g></g><rect class="peep-area" rx="36" style="opacity: 0;"/><g class="edges"><path class="edge MEM" id="e1i1" d="M340,118 L340,128 L24,128 L24,748 L268,748 L268,786" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#1[1] → #6 · MEM</title></path><path class="edge MEM" id="e1i2" d="M349,721 L349,748 L298,748 L298,786" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#1[2] → #224 · MEM</title></path><path class="edge CTRL" id="e3i0" d="M227,943 C227,967 344.5,970 344.5,994" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#3[0] → #25 · CTRL</title></path><path class="edge CTRL" id="e9i0" d="M220,118 L220,166" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#9[0] → #5 · CTRL</title></path><path class="edge MEM" id="e12i1" d="M340,118 L340,128 L149,128 L149,242 L278,242 L278,270" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#12[1] → #6 · MEM</title></path><path class="edge DATA" id="e12i2" d="M220,222 L220,232 L302,232 L302,270" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#12[2] → #9 · DATA</title></path><path class="edge DATA" id="e12i3" d="M372,222 L372,242 L326,242 L326,270" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#12[3] → #11 · DATA</title></path><path class="edge CTRL" id="e13i0" d="M220,118 L220,148 L442,148 L442,270" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#13[0] → #5 · CTRL</title></path><path class="edge MEM" id="e14i1" d="M290,326 L290,346 L443,346 L443,374" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#14[1] → #12 · MEM</title></path><path class="edge DATA" id="e14i2" d="M442,326 L442,336 L467,336 L467,374" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#14[2] → #13 · DATA</title></path><path class="edge DATA" id="e14i3" d="M594,326 L594,336 L491,336 L491,374" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#14[3] → #4 · DATA</title></path><path class="edge MEM" id="e16i1" d="M455,430 L455,450 L560,450 L560,546" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#16[1] → #14 · MEM</title></path><path class="edge DATA" id="e16i2" d="M220,222 L220,232 L664,232 L664,440 L590,440 L590,546" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#16[2] → #9 · DATA</title></path><path class="edge CTRL" id="e17i0" d="M220,118 L220,148 L127,148 L127,517" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#17[0] → #5 · CTRL</title></path><path class="edge DATA" id="e17i1" d="M460,118 L460,138 L138,138 L138,440 L207,440 L207,517" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#17[1] → #7 · DATA</title></path><path class="edge MEM" id="e22i1" d="M455,430 L455,450 L373,450 L373,528" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#22[1] → #14 · MEM</title></path><path class="edge DATA" id="e22i2" d="M220,222 L220,232 L219,232 L219,460 L397,460 L397,528" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#22[2] → #9 · DATA</title></path><path class="edge DATA" id="e22i3" d="M303,430 L303,440 L421,440 L421,528" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#22[3] → #21 · DATA</title></path><path class="edge CTRL" id="e23i1" d="M107,617 L107,627 L197,627 L197,665" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#23[1] → #8 · CTRL</title></path><path class="edge CTRL" id="e23i2" d="M227,617 L227,665" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#23[2] → #10 · CTRL</title></path><path class="edge CTRL" id="e25i0" d="M197,721 L197,890" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#25[0] → #23 · CTRL</title></path><path class="edge MEM" id="e25i1" d="M268,842 L268,852 L227,852 L227,890" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#25[1] → #1 · MEM</title></path><path class="edge DATA" id="e25i2" d="M560,602 L560,862 L257,862 L257,890" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#25[2] → #16 · DATA</title></path><path class="edge MEM" id="e224i1" d="M385,584 L385,627 L329,627 L329,665" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#224[1] → #22 · MEM</title></path><path class="edge MEM" id="e224i2" d="M455,430 L455,637 L369,637 L369,665" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#224[2] → #14 · MEM</title></path></g><g class="edge-hits"/><g class="parser" style="opacity: 1;"/><g class="nodes"><g class="node" id="n1" data-id="1" transform="translate(208,792)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemMerge</tspan><tspan class="node-id">  #1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#1 MemMerge
+Type not computed
+
+[0] → — DATA
+[1] → #6 MEM
+[2] → #224 MEM</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n2" data-id="2" transform="translate(160,24)" style="opacity: 1;"><path class="box" d="M0,0H360V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="180" y="18"><tspan>Start</tspan><tspan class="node-id">  #2</tspan></text><text class="type" text-anchor="middle" y="35" x="180"/><title>#2 Start
+Type not computed
+
+</title></g><g class="node" id="n3" data-id="3" transform="translate(308.5,994)" style="opacity: 1;"><path class="box" d="M0,0H72V26H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="36" y="17"><tspan>Stop</tspan><tspan class="node-id">  #3</tspan></text><text class="type" text-anchor="middle" y="35" x="36"/><title>#3 Stop
+Type not computed
+
+[0] → #25 CTRL</title><circle class="port" cx="36" cy="0" r="3" fill="#536477"/><text class="slot" x="36" y="-7" text-anchor="middle">0</text></g><g class="node" id="n4" data-id="4" transform="translate(534,276)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#0</tspan><tspan class="node-id">  #4</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#4 #0
+Type not computed
+
+</title></g><g class="node" id="n5" data-id="5" transform="translate(160,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$ctrl</tspan><tspan class="node-id">  #5/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#5 $ctrl
+Projection 0 of #2
+Type not computed
+
+[0] → #2 CTRL</title></g><g class="node" id="n6" data-id="6" transform="translate(280,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$mem</tspan><tspan class="node-id">  #6/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#6 $mem
+Projection 1 of #2
+Type not computed
+
+[0] → #2 MEM</title></g><g class="node" id="n7" data-id="7" transform="translate(400,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>arg</tspan><tspan class="node-id">  #7/2</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#7 arg
+Projection 2 of #2
+Type not computed
+
+[0] → #2 DATA</title></g><g class="node" id="n8" data-id="8" transform="translate(47,567)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>True</tspan><tspan class="node-id">  #8/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#8 True
+Projection 0 of #17
+Type not computed
+
+[0] → #17 CTRL</title></g><g class="node" id="n9" data-id="9" transform="translate(160,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>new S</tspan><tspan class="node-id">  #9</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#9 new S
+Type not computed
+
+[0] → #5 CTRL</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n10" data-id="10" transform="translate(167,567)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>False</tspan><tspan class="node-id">  #10/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#10 False
+Projection 1 of #17
+Type not computed
+
+[0] → #17 CTRL</title></g><g class="node" id="n11" data-id="11" transform="translate(312,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#2</tspan><tspan class="node-id">  #11</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#11 #2
+Type not computed
+
+</title></g><g class="node" id="n12" data-id="12" transform="translate(230,276)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f =</tspan><tspan class="node-id">  #12</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#12 .f =
+Type not computed
+
+[0] → — DATA
+[1] → #6 MEM
+[2] → #9 DATA
+[3] → #11 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n13" data-id="13" transform="translate(382,276)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>new S</tspan><tspan class="node-id">  #13</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#13 new S
+Type not computed
+
+[0] → #5 CTRL</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n14" data-id="14" transform="translate(395,380)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f =</tspan><tspan class="node-id">  #14</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#14 .f =
+Type not computed
+
+[0] → — DATA
+[1] → #12 MEM
+[2] → #13 DATA
+[3] → #4 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n16" data-id="16" transform="translate(500,552)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f</tspan><tspan class="node-id">  #16</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#16 .f
+Type not computed
+
+[0] → — DATA
+[1] → #14 MEM
+[2] → #9 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n17" data-id="17" transform="translate(47,523)" style="opacity: 1;"><path class="box" d="M0,0H240V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="120" y="18"><tspan>If</tspan><tspan class="node-id">  #17</tspan></text><text class="type" text-anchor="middle" y="35" x="120"/><title>#17 If
+Type not computed
+
+[0] → #5 CTRL
+[1] → #7 DATA</title><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><circle class="port" cx="160" cy="-3" r="3" fill="#536477"/><text class="slot" x="80" y="-10" text-anchor="middle">0</text><text class="slot" x="160" y="-10" text-anchor="middle">1</text></g><g class="node" id="n21" data-id="21" transform="translate(243,380)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#1</tspan><tspan class="node-id">  #21</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#21 #1
+Type not computed
+
+</title></g><g class="node" id="n22" data-id="22" transform="translate(325,534)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f =</tspan><tspan class="node-id">  #22</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#22 .f =
+Type not computed
+
+[0] → — DATA
+[1] → #14 MEM
+[2] → #9 DATA
+[3] → #21 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n23" data-id="23" transform="translate(137,671)" style="opacity: 1;"><path class="box" d="M12,0H108L120,44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Region</tspan><tspan class="node-id">  #23</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#23 Region
+Type not computed
+
+[0] → — DATA
+[1] → #8 CTRL
+[2] → #10 CTRL</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n25" data-id="25" transform="translate(167,896)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Return</tspan><tspan class="node-id">  #25</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#25 Return
+Type not computed
+
+[0] → #23 CTRL
+[1] → #1 MEM
+[2] → #16 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n224" data-id="224" transform="translate(289,671)" style="opacity: 1;"><path class="box" d="M12,0H108L120,22L108,44H12L0,22Z" fill="#f5e4fa"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemPhi_2</tspan><tspan class="node-id">  #224</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#224 MemPhi_2
+Type not computed
+
+[0] → #23 ASSOC
+[1] → #22 MEM
+[2] → #14 MEM</title><circle class="port" cx="-3" cy="22" r="3" fill="#536477"/><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><path class="reg" fill="none" stroke="#b63838" d="M-3,22H-18m4,-3l-4,3l4,3"><title>[0] → #23</title></path><text class="slot" x="-10" y="15" text-anchor="middle">0</text><text class="slot" x="40" y="-10" text-anchor="middle">1</text><text class="slot" x="80" y="-10" text-anchor="middle">2</text></g></g><g class="region-heads" style="opacity: 1;"><g class="region-head" transform="translate(35,483)"><text class="label" x="26" y="17"><tspan>If</tspan><tspan class="node-id">  #17</tspan></text><title>If · 6 nodes</title><g class="fold-btn" role="button" tabindex="0" transform="translate(4,4)" aria-label="Fold region #17"><rect width="16" height="16" rx="2"/><text x="8" y="12" text-anchor="middle">−</text><title>Fold region</title></g></g></g><g class="shortcuts" style="opacity: 1;"/><g class="peep-ghosts" pointer-events="none"/></g></svg>
diff --git a/chapter11/docs/graph2.json b/chapter11/docs/graph2.json
new file mode 100644
index 00000000..7c50307d
--- /dev/null
+++ b/chapter11/docs/graph2.json
@@ -0,0 +1,33 @@
+{
+ "ver": 1,
+ "comp": "chapter11/docs/graph2.svg",
+ "step": 1,
+ "roots": [],
+ "scope": 0,
+ "nodes": [
+ {"id": 1, "label": "MemMerge", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 23, "role": "CTRL", "label": null}, {"idx": 1, "def": 6, "role": "MEM", "label": null}, {"idx": 2, "def": 224, "role": "MEM", "label": null}], "proj": null},
+ {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null},
+ {"id": 3, "label": "Stop", "type": null, "kind": "STOP", "edges": [{"idx": 0, "def": 25, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 4, "label": "#0", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 5, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}},
+ {"id": 6, "label": "$mem", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 2, "role": "MEM", "label": null}], "proj": {"par": 2, "idx": 1}},
+ {"id": 7, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 2, "role": "DATA", "label": null}], "proj": {"par": 2, "idx": 2}},
+ {"id": 8, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 17, "role": "CTRL", "label": null}], "proj": {"par": 17, "idx": 0}},
+ {"id": 9, "label": "new S", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 10, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 17, "role": "CTRL", "label": null}], "proj": {"par": 17, "idx": 1}},
+ {"id": 11, "label": "#2", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 12, "label": ".f =", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}, {"idx": 1, "def": 6, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}, {"idx": 3, "def": 11, "role": "DATA", "label": null}], "proj": null},
+ {"id": 13, "label": "new S", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 14, "label": ".f =", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}, {"idx": 1, "def": 12, "role": "MEM", "label": null}, {"idx": 2, "def": 13, "role": "DATA", "label": null}, {"idx": 3, "def": 4, "role": "DATA", "label": null}], "proj": null},
+ {"id": 16, "label": ".f", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}, {"idx": 1, "def": 14, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}], "proj": null},
+ {"id": 17, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}, {"idx": 1, "def": 7, "role": "DATA", "label": null}], "proj": null},
+ {"id": 21, "label": "#1", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 22, "label": ".f =", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}, {"idx": 1, "def": 14, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}, {"idx": 3, "def": 21, "role": "DATA", "label": null}], "proj": null},
+ {"id": 23, "label": "Region", "type": null, "kind": "REGION", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 8, "role": "CTRL", "label": null}, {"idx": 2, "def": 10, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 25, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 23, "role": "CTRL", "label": null}, {"idx": 1, "def": 1, "role": "MEM", "label": null}, {"idx": 2, "def": 16, "role": "DATA", "label": null}], "proj": null},
+ {"id": 224, "label": "MemPhi_2", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 23, "role": "ASSOC", "label": null}, {"idx": 1, "def": 22, "role": "MEM", "label": null}, {"idx": 2, "def": 14, "role": "MEM", "label": null}], "proj": null}
+ ],
+ "groups": [
+ {"id": 17, "par": 0, "nodes": [1, 8, 10, 17, 23, 224]}
+ ]
+}
diff --git a/chapter11/docs/graph2.svg b/chapter11/docs/graph2.svg
index b8d43cc9..a3afd14f 100644
--- a/chapter11/docs/graph2.svg
+++ b/chapter11/docs/graph2.svg
@@ -1,335 +1,151 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
- "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 12.2.0 (20241103.1931)
- -->
-<!-- Title: chapter11 Pages: 1 -->
-<svg width="358pt" height="714pt"
- viewBox="0.00 0.00 358.12 714.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 710)">
-<title>chapter11</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-710 354.12,-710 354.12,4 -4,4"/>
-<g id="clust1" class="cluster">
-<title>cluster_Nodes</title>
-<polygon fill="none" stroke="black" points="10.12,-8 10.12,-698 342.12,-698 342.12,-8 10.12,-8"/>
-</g>
-<!-- Start2 -->
-<g id="node1" class="node">
-<title>Start2</title>
-<polygon fill="yellow" stroke="none" points="178.5,-659.5 178.5,-686 283.75,-686 283.75,-659.5 178.5,-659.5"/>
-<polygon fill="none" stroke="black" points="178.5,-659.5 178.5,-686 283.75,-686 283.75,-659.5 178.5,-659.5"/>
-<text text-anchor="start" x="218.37" y="-667.7" font-family="Times New Roman,serif" font-size="14.00">Start</text>
-<polygon fill="none" stroke="black" points="178.5,-627 178.5,-659.5 283.75,-659.5 283.75,-627 178.5,-627"/>
-<polygon fill="yellow" stroke="none" points="183.5,-632 183.5,-654.5 214.25,-654.5 214.25,-632 183.5,-632"/>
-<polygon fill="none" stroke="black" points="183.5,-632 183.5,-654.5 214.25,-654.5 214.25,-632 183.5,-632"/>
-<text text-anchor="start" x="186.5" y="-638.2" font-family="Times New Roman,serif" font-size="14.00">$ctrl</text>
-<polygon fill="none" stroke="black" points="214.25,-632 214.25,-654.5 255.5,-654.5 255.5,-632 214.25,-632"/>
-<text text-anchor="start" x="217.25" y="-638.2" font-family="Times New Roman,serif" font-size="14.00">$mem</text>
-<polygon fill="none" stroke="black" points="255.5,-632 255.5,-654.5 278.75,-654.5 278.75,-632 255.5,-632"/>
-<text text-anchor="start" x="258.5" y="-638.2" font-family="Times New Roman,serif" font-size="14.00">arg</text>
-</g>
-<!-- MemMerge -->
-<g id="node2" class="node">
-<title>MemMerge</title>
-<polygon fill="none" stroke="black" points="235.12,-196 153.12,-196 153.12,-160 235.12,-160 235.12,-196"/>
-<text text-anchor="middle" x="194.12" y="-172.95" font-family="Times New Roman,serif" font-size="14.00">MemMerge</text>
-</g>
-<!-- MemMerge&#45;&gt;Start2 -->
-<g id="edge29" class="edge">
-<title>MemMerge&#45;&gt;Start2:p1</title>
-<path fill="none" stroke="blue" d="M230.64,-196.45C271.82,-218.98 333.12,-262.35 333.12,-321 333.12,-321 333.12,-321 333.12,-498 333.12,-542.32 315.79,-552.37 288.12,-587 271.8,-607.42 244.66,-602.71 236.96,-619.82"/>
-<polygon fill="blue" stroke="blue" points="233.55,-619.04 235.15,-629.51 240.43,-620.33 233.55,-619.04"/>
-<text text-anchor="middle" x="228.39" y="-198.6" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Region23 -->
-<g id="node14" class="node">
-<title>Region23</title>
-<polygon fill="yellow" stroke="black" points="270.62,-268 215.62,-268 215.62,-232 270.62,-232 270.62,-268"/>
-<text text-anchor="middle" x="243.12" y="-244.95" font-family="Times New Roman,serif" font-size="14.00">Region</text>
-</g>
-<!-- MemMerge&#45;&gt;Region23 -->
-<g id="edge31" class="edge">
-<title>MemMerge&#45;&gt;Region23</title>
-<path fill="none" stroke="green" d="M206.23,-196.3C211.81,-204.27 218.55,-213.9 224.74,-222.74"/>
-<polygon fill="green" stroke="green" points="221.68,-224.47 230.28,-230.66 227.41,-220.46 221.68,-224.47"/>
-<text text-anchor="middle" x="203.98" y="-198.45" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Phi_224 -->
-<g id="node15" class="node">
-<title>Phi_224</title>
-<ellipse fill="lightyellow" stroke="black" cx="145.12" cy="-250" rx="52.89" ry="18"/>
-<text text-anchor="middle" x="145.12" y="-244.95" font-family="Times New Roman,serif" font-size="14.00">MemPhi_2</text>
-</g>
-<!-- MemMerge&#45;&gt;Phi_224 -->
-<g id="edge30" class="edge">
-<title>MemMerge&#45;&gt;Phi_224</title>
-<path fill="none" stroke="blue" d="M182.01,-196.3C176.35,-204.39 169.49,-214.19 163.23,-223.13"/>
-<polygon fill="blue" stroke="blue" points="160.49,-220.94 157.62,-231.14 166.23,-224.95 160.49,-220.94"/>
-<text text-anchor="middle" x="179.76" y="-198.45" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Stop3 -->
-<g id="node3" class="node">
-<title>Stop3</title>
-<polygon fill="yellow" stroke="black" points="136.12,-52 82.12,-52 82.12,-16 136.12,-16 136.12,-52"/>
-<text text-anchor="middle" x="109.12" y="-28.95" font-family="Times New Roman,serif" font-size="14.00">Stop</text>
-</g>
-<!-- Return25 -->
-<g id="node16" class="node">
-<title>Return25</title>
-<polygon fill="yellow" stroke="black" points="136.12,-124 82.12,-124 82.12,-88 136.12,-88 136.12,-124"/>
-<text text-anchor="middle" x="109.12" y="-100.95" font-family="Times New Roman,serif" font-size="14.00">Return</text>
-</g>
-<!-- Stop3&#45;&gt;Return25 -->
-<g id="edge1" class="edge">
-<title>Stop3&#45;&gt;Return25</title>
-<path fill="none" stroke="red" d="M109.12,-52.3C109.12,-59.59 109.12,-68.27 109.12,-76.46"/>
-<polygon fill="red" stroke="red" points="105.62,-76.38 109.12,-86.38 112.62,-76.38 105.62,-76.38"/>
-<text text-anchor="middle" x="106.87" y="-54.45" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Con_4 -->
-<g id="node4" class="node">
-<title>Con_4</title>
-<ellipse fill="none" stroke="black" cx="85.12" cy="-497" rx="27" ry="18"/>
-<text text-anchor="middle" x="85.12" y="-491.95" font-family="Times New Roman,serif" font-size="14.00">#0</text>
-</g>
-<!-- new9 -->
-<g id="node5" class="node">
-<title>new9</title>
-<ellipse fill="none" stroke="black" cx="158.12" cy="-569" rx="33.95" ry="18"/>
-<text text-anchor="middle" x="158.12" y="-563.95" font-family="Times New Roman,serif" font-size="14.00">new S</text>
-</g>
-<!-- new9&#45;&gt;Start2 -->
-<g id="edge2" class="edge">
-<title>new9&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="green" d="M175.17,-584.76C183.98,-593.73 193.64,-606.07 197.33,-619.77"/>
-<polygon fill="green" stroke="green" points="193.84,-620.07 198.66,-629.5 200.77,-619.12 193.84,-620.07"/>
-<text text-anchor="middle" x="177.42" y="-586.91" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Con_11 -->
-<g id="node6" class="node">
-<title>Con_11</title>
-<ellipse fill="none" stroke="black" cx="237.12" cy="-569" rx="27" ry="18"/>
-<text text-anchor="middle" x="237.12" y="-563.95" font-family="Times New Roman,serif" font-size="14.00">#2</text>
-</g>
-<!-- Store12 -->
-<g id="node7" class="node">
-<title>Store12</title>
-<ellipse fill="none" stroke="black" cx="200.12" cy="-497" rx="27" ry="18"/>
-<text text-anchor="middle" x="200.12" y="-491.95" font-family="Times New Roman,serif" font-size="14.00">.f =</text>
-</g>
-<!-- Store12&#45;&gt;Start2 -->
-<g id="edge3" class="edge">
-<title>Store12&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M283.12,-570C284.3,-608.41 225.3,-593.17 205.36,-613.49"/>
-<polygon fill="red" stroke="red" points="202.48,-611.47 200.58,-621.89 208.57,-614.92 202.48,-611.47"/>
-<path fill="none" stroke="red" d="M223.33,-506.27C247.55,-516.58 282.16,-536.72 283.12,-568"/>
-<text text-anchor="middle" x="280.87" y="-562.4" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Store12&#45;&gt;new9 -->
-<g id="edge5" class="edge">
-<title>Store12&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M190.38,-514.24C185.52,-522.33 179.52,-532.34 174.02,-541.51"/>
-<polygon fill="black" stroke="black" points="171.02,-539.69 168.88,-550.07 177.03,-543.29 171.02,-539.69"/>
-<text text-anchor="middle" x="188.13" y="-516.39" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Store12&#45;&gt;Con_11 -->
-<g id="edge6" class="edge">
-<title>Store12&#45;&gt;Con_11</title>
-<path fill="none" stroke="black" d="M208.7,-514.24C213.05,-522.45 218.42,-532.63 223.33,-541.91"/>
-<polygon fill="black" stroke="black" points="220.11,-543.31 227.88,-550.51 226.3,-540.04 220.11,-543.31"/>
-<text text-anchor="middle" x="206.45" y="-516.39" font-family="Helvetica,sans-Serif" font-size="8.00">3</text>
-</g>
-<!-- new13 -->
-<g id="node8" class="node">
-<title>new13</title>
-<ellipse fill="none" stroke="black" cx="72.12" cy="-569" rx="33.95" ry="18"/>
-<text text-anchor="middle" x="72.12" y="-563.95" font-family="Times New Roman,serif" font-size="14.00">new S</text>
-</g>
-<!-- new13&#45;&gt;Start2 -->
-<g id="edge7" class="edge">
-<title>new13&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="green" d="M84.9,-585.89C102,-605.42 134.45,-636.66 171.03,-642.35"/>
-<polygon fill="green" stroke="green" points="170.74,-645.84 180.99,-643.13 171.29,-638.86 170.74,-645.84"/>
-<text text-anchor="middle" x="82.65" y="-588.04" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Store14 -->
-<g id="node9" class="node">
-<title>Store14</title>
-<ellipse fill="none" stroke="black" cx="65.12" cy="-409.5" rx="27" ry="18"/>
-<text text-anchor="middle" x="65.12" y="-404.45" font-family="Times New Roman,serif" font-size="14.00">.f =</text>
-</g>
-<!-- Store14&#45;&gt;Start2 -->
-<g id="edge8" class="edge">
-<title>Store14&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M39.12,-498C35.91,-530.2 3.02,-539.93 19.12,-568"/>
-<path fill="none" stroke="red" d="M57.93,-427.13C51.12,-444.08 41.58,-471.3 39.12,-496"/>
-<text text-anchor="middle" x="36.87" y="-490.4" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Store14&#45;&gt;Con_4 -->
-<g id="edge11" class="edge">
-<title>Store14&#45;&gt;Con_4</title>
-<path fill="none" stroke="black" d="M69.07,-427.39C71.77,-438.91 75.4,-454.44 78.53,-467.81"/>
-<polygon fill="black" stroke="black" points="75.08,-468.44 80.76,-477.38 81.89,-466.84 75.08,-468.44"/>
-<text text-anchor="middle" x="66.82" y="-429.54" font-family="Helvetica,sans-Serif" font-size="8.00">3</text>
-</g>
-<!-- Store14&#45;&gt;Store12 -->
-<g id="edge9" class="edge">
-<title>Store14&#45;&gt;Store12</title>
-<path fill="none" stroke="blue" d="M84.18,-422.57C106.99,-437.02 145.41,-461.35 171.73,-478.02"/>
-<polygon fill="blue" stroke="blue" points="169.56,-480.79 179.88,-483.18 173.31,-474.88 169.56,-480.79"/>
-<text text-anchor="middle" x="86.43" y="-424.72" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Store14&#45;&gt;new13 -->
-<g id="edge10" class="edge">
-<title>Store14&#45;&gt;new13</title>
-<path fill="none" stroke="black" d="M39.12,-498C37.54,-513.82 44.48,-529.98 52.39,-542.78"/>
-<polygon fill="black" stroke="black" points="49.45,-544.68 57.96,-551 55.25,-540.75 49.45,-544.68"/>
-<text text-anchor="middle" x="36.87" y="-500.15" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Load16 -->
-<g id="node10" class="node">
-<title>Load16</title>
-<ellipse fill="none" stroke="black" cx="45.12" cy="-322" rx="27" ry="18"/>
-<text text-anchor="middle" x="45.12" y="-316.95" font-family="Times New Roman,serif" font-size="14.00">.f</text>
-</g>
-<!-- Load16&#45;&gt;Start2 -->
-<g id="edge12" class="edge">
-<title>Load16&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M37.1,-339.54C18.2,-381.13 -24.39,-492.12 19.12,-568"/>
-<path fill="none" stroke="red" d="M19.12,-570C23.95,-577.31 22.39,-581.38 29.12,-587 78.43,-628.14 103.69,-640.51 159.1,-642.82"/>
-<polygon fill="red" stroke="red" points="158.99,-646.32 169.09,-643.11 159.19,-639.32 158.99,-646.32"/>
-<text text-anchor="middle" x="34.85" y="-341.69" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Load16&#45;&gt;new9 -->
-<g id="edge14" class="edge">
-<title>Load16&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M63.11,-335.98C75.41,-345.72 91.23,-360.08 101.12,-376 109.09,-388.84 106.98,-393.97 111.12,-408.5"/>
-<path fill="none" stroke="black" d="M111.12,-410.5C124.08,-456.01 139.97,-508.64 149.56,-540.08"/>
-<polygon fill="black" stroke="black" points="146.19,-541.04 152.46,-549.58 152.89,-538.99 146.19,-541.04"/>
-<text text-anchor="middle" x="60.86" y="-338.13" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Load16&#45;&gt;Store14 -->
-<g id="edge13" class="edge">
-<title>Load16&#45;&gt;Store14</title>
-<path fill="none" stroke="blue" d="M49.07,-339.89C51.77,-351.41 55.4,-366.94 58.53,-380.31"/>
-<polygon fill="blue" stroke="blue" points="55.08,-380.94 60.76,-389.88 61.89,-379.34 55.08,-380.94"/>
-<text text-anchor="middle" x="46.82" y="-342.04" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- If17 -->
-<g id="node11" class="node">
-<title>If17</title>
-<polygon fill="yellow" stroke="none" points="230.12,-412.5 230.12,-439 306.12,-439 306.12,-412.5 230.12,-412.5"/>
-<polygon fill="none" stroke="black" points="230.12,-412.5 230.12,-439 306.12,-439 306.12,-412.5 230.12,-412.5"/>
-<text text-anchor="start" x="263.62" y="-420.7" font-family="Times New Roman,serif" font-size="14.00">If</text>
-<polygon fill="none" stroke="black" points="230.12,-380 230.12,-412.5 306.12,-412.5 306.12,-380 230.12,-380"/>
-<polygon fill="yellow" stroke="none" points="235.12,-385 235.12,-407.5 266.62,-407.5 266.62,-385 235.12,-385"/>
-<polygon fill="none" stroke="black" points="235.12,-385 235.12,-407.5 266.62,-407.5 266.62,-385 235.12,-385"/>
-<text text-anchor="start" x="238.12" y="-391.2" font-family="Times New Roman,serif" font-size="14.00">True</text>
-<polygon fill="yellow" stroke="none" points="266.62,-385 266.62,-407.5 301.12,-407.5 301.12,-385 266.62,-385"/>
-<polygon fill="none" stroke="black" points="266.62,-385 266.62,-407.5 301.12,-407.5 301.12,-385 266.62,-385"/>
-<text text-anchor="start" x="269.62" y="-391.2" font-family="Times New Roman,serif" font-size="14.00">False</text>
-</g>
-<!-- If17&#45;&gt;Start2 -->
-<g id="edge15" class="edge">
-<title>If17&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M263.95,-442.76C262.88,-459.03 263.19,-478.88 268.12,-496"/>
-<text text-anchor="middle" x="261.7" y="-444.91" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Con_21 -->
-<g id="node12" class="node">
-<title>Con_21</title>
-<ellipse fill="none" stroke="black" cx="157.12" cy="-409.5" rx="27" ry="18"/>
-<text text-anchor="middle" x="157.12" y="-404.45" font-family="Times New Roman,serif" font-size="14.00">#1</text>
-</g>
-<!-- Store22 -->
-<g id="node13" class="node">
-<title>Store22</title>
-<ellipse fill="none" stroke="black" cx="117.12" cy="-322" rx="27" ry="18"/>
-<text text-anchor="middle" x="117.12" y="-316.95" font-family="Times New Roman,serif" font-size="14.00">.f =</text>
-</g>
-<!-- Store22&#45;&gt;Start2 -->
-<g id="edge17" class="edge">
-<title>Store22&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M138.84,-333.04C155.95,-342.01 179.17,-356.71 193.12,-376 211.33,-401.18 196.96,-416.46 213.12,-443 230.78,-471.99 258.72,-463.38 268.12,-496"/>
-<path fill="none" stroke="red" d="M268.12,-498C276.93,-528.57 282.14,-536.2 283.12,-568"/>
-<text text-anchor="middle" x="136.59" y="-335.19" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Store22&#45;&gt;new9 -->
-<g id="edge19" class="edge">
-<title>Store22&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M112.54,-340.07C108.62,-357.58 104.56,-385.46 111.12,-408.5"/>
-<text text-anchor="middle" x="110.29" y="-342.22" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Store22&#45;&gt;Store14 -->
-<g id="edge18" class="edge">
-<title>Store22&#45;&gt;Store14</title>
-<path fill="none" stroke="blue" d="M107.34,-339.08C99.86,-351.38 89.4,-368.59 80.76,-382.79"/>
-<polygon fill="blue" stroke="blue" points="77.85,-380.83 75.64,-391.2 83.83,-384.47 77.85,-380.83"/>
-<text text-anchor="middle" x="105.09" y="-341.23" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Store22&#45;&gt;Con_21 -->
-<g id="edge20" class="edge">
-<title>Store22&#45;&gt;Con_21</title>
-<path fill="none" stroke="black" d="M124.83,-339.49C130.39,-351.36 138,-367.64 144.44,-381.4"/>
-<polygon fill="black" stroke="black" points="141.25,-382.83 148.65,-390.4 147.59,-379.86 141.25,-382.83"/>
-<text text-anchor="middle" x="122.58" y="-341.64" font-family="Helvetica,sans-Serif" font-size="8.00">3</text>
-</g>
-<!-- Region23&#45;&gt;If17 -->
-<g id="edge21" class="edge">
-<title>Region23&#45;&gt;If17:p0</title>
-<path fill="none" stroke="red" d="M244.76,-268.2C246.83,-291.25 250.19,-333.78 250.78,-372.63"/>
-<polygon fill="red" stroke="red" points="247.28,-372.51 250.86,-382.49 254.28,-372.46 247.28,-372.51"/>
-<text text-anchor="middle" x="242.51" y="-270.35" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Region23&#45;&gt;If17 -->
-<g id="edge22" class="edge">
-<title>Region23&#45;&gt;If17:p1</title>
-<path fill="none" stroke="red" d="M252.57,-268.22C257.8,-278.38 264.05,-291.63 268.12,-304 278.15,-334.53 282.78,-345.32 283.7,-372.64"/>
-<polygon fill="red" stroke="red" points="280.19,-372.54 283.85,-382.49 287.19,-372.43 280.19,-372.54"/>
-<text text-anchor="middle" x="250.32" y="-270.37" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Phi_224&#45;&gt;Store14 -->
-<g id="edge25" class="edge">
-<title>Phi_224&#45;&gt;Store14</title>
-<path fill="none" stroke="blue" d="M151.73,-268.04C157.85,-286.71 164.45,-317.05 153.12,-340 141.47,-363.59 126.88,-359.83 106.12,-376 101.11,-379.91 95.77,-384.11 90.66,-388.15"/>
-<polygon fill="blue" stroke="blue" points="88.67,-385.26 83.01,-394.21 93.02,-390.74 88.67,-385.26"/>
-<text text-anchor="middle" x="149.48" y="-270.19" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Phi_224&#45;&gt;Store22 -->
-<g id="edge24" class="edge">
-<title>Phi_224&#45;&gt;Store22</title>
-<path fill="none" stroke="blue" d="M138.2,-268.3C135.14,-275.96 131.46,-285.15 128.04,-293.7"/>
-<polygon fill="blue" stroke="blue" points="124.8,-292.39 124.33,-302.97 131.3,-294.99 124.8,-292.39"/>
-<text text-anchor="middle" x="135.95" y="-270.45" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_224&#45;&gt;Region23 -->
-<g id="edge23" class="edge">
-<title>Phi_224&#45;&gt;Region23</title>
-<path fill="none" stroke="black" stroke-dasharray="1,5" d="M198.33,-250C200.17,-250 202.01,-250 203.84,-250"/>
-<polygon fill="black" stroke="black" points="203.61,-253.5 213.61,-250 203.61,-246.5 203.61,-253.5"/>
-<text text-anchor="middle" x="200.58" y="-242.4" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Return25&#45;&gt;MemMerge -->
-<g id="edge28" class="edge">
-<title>Return25&#45;&gt;MemMerge</title>
-<path fill="none" stroke="blue" d="M130.13,-124.3C140.45,-132.8 153.06,-143.19 164.35,-152.49"/>
-<polygon fill="blue" stroke="blue" points="161.94,-155.04 171.89,-158.69 166.39,-149.63 161.94,-155.04"/>
-<text text-anchor="middle" x="127.88" y="-126.45" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Return25&#45;&gt;Load16 -->
-<g id="edge27" class="edge">
-<title>Return25&#45;&gt;Load16</title>
-<path fill="none" stroke="black" d="M73.12,-179C81.32,-218.99 67.84,-265.4 56.89,-293.98"/>
-<polygon fill="black" stroke="black" points="53.76,-292.38 53.29,-302.96 60.26,-294.99 53.76,-292.38"/>
-<path fill="none" stroke="black" d="M92.26,-124.39C81.14,-137.97 69.27,-157.7 73.12,-177"/>
-<text text-anchor="middle" x="70.87" y="-171.4" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Return25&#45;&gt;Region23 -->
-<g id="edge26" class="edge">
-<title>Return25&#45;&gt;Region23</title>
-<path fill="none" stroke="red" d="M73.12,-179C85.3,-238.43 141.92,-209.98 204.75,-231.55"/>
-<polygon fill="red" stroke="red" points="203.29,-234.74 213.88,-235.09 205.83,-228.21 203.29,-234.74"/>
-<text text-anchor="middle" x="70.87" y="-181.15" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-</g>
-</svg>
+<svg aria-label="Compiler graph" width="730" height="1150" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 730 1150" style="font-family: sans-serif;"><style>
+ html, body { height:100%; margin:0; font-family:sans-serif; }
+ .viewer { height:100%; display:grid; grid-template-rows:auto minmax(0,1fr) auto; }
+ .source { padding:8px; border-bottom:1px solid #ccc; }
+ #program { width:min(600px,80vw); vertical-align:middle; }
+ #status { margin-top:4px; }
+ #graph { min-height:0; overflow:hidden; position:relative; background:#fafbfc; }
+ #elk { width:100%; height:100%; }
+ #graph svg { display:block; }
+ .tools { display:flex; flex-wrap:wrap; align-items:center; gap:14px; margin-top:8px; font-size:12px; }
+ .hint { color:#616c78; }
+ .ctrl { color:#b63838; } .mem { color:#2867b2; } .data { color:#536477; }
+ .edge { fill:none; stroke-width:1.5; }
+ .edge.CTRL { stroke-width:2; }
+ .edge.ASSOC { stroke-dasharray:4 4; }
+ .edge.PARSER { stroke-dasharray:5 4; }
+ .parser rect { fill:#f6f0ff; stroke:#7956a5; stroke-width:1.5; stroke-dasharray:5 4; }
+ .edge.selected { stroke-width:3.5; }
+ .edge.bundle { stroke-width:4; }
+ .edge.bundle.selected { stroke-width:6; }
+ .edge-hit { fill:none; stroke:transparent; stroke-width:12; vector-effect:non-scaling-stroke; pointer-events:stroke; cursor:pointer; }
+ .edge-jump { fill:transparent; pointer-events:all; cursor:pointer; }
+ .node { cursor:pointer; }
+ .box { stroke:#758191; stroke-width:1; }
+ .node.held .box { stroke-dasharray:5 3; }
+ .node.near .box { stroke:#c18221; stroke-width:2; }
+ .node.focus .box { stroke:#9c4900; stroke-width:3; }
+ .node.selected .box { stroke:#1569b9; stroke-width:3; }
+ .node.folded .box { stroke-width:4; }
+ .node.folding .box { fill:#f4ccd7; }
+ .fold-tag { font-size:9px; font-weight:700; fill:#963751; }
+ .peep-area { fill:#fff3d9; fill-opacity:.8; stroke:#c18221; stroke-width:2; pointer-events:none; }
+ .node.peep-edit .box { stroke:#9c4900; stroke-width:3; }
+ .node.error .box { stroke:#b42318; stroke-width:4; }
+ #event.error { color:#b42318; font-weight:600; white-space:pre-wrap; overflow-wrap:anywhere; }
+ .peep-ghosts { pointer-events:none; }
+ .region-box { stroke:#9da9b8; stroke-width:1.5; }
+ .fold-btn { cursor:pointer; }
+ .fold-btn rect { fill:white; stroke:#596674; }
+ .fold-btn text { font-size:14px; fill:#152330; }
+ .fold-btn:focus rect { stroke:#1569b9; stroke-width:2; }
+ .shortcut { cursor:pointer; }
+ .shortcut path { fill:none; stroke-width:1.5; }
+ .shortcut rect { fill:#fff8ec; stroke:#b63838; stroke-dasharray:3 2; }
+ .shortcut text { font-size:11px; fill:#783030; }
+ .shortcut.selected rect, .shortcut:focus rect { stroke-width:2.5; }
+ .label { font-size:12px; fill:#152330; font-weight:600; }
+ .node-id { font-size:10px; fill:#596674; font-weight:400; }
+ .type { font-size:11px; fill:#455768; }
+ .port { stroke:#536477; stroke-width:1; }
+ .row { stroke:#b6afcf; stroke-width:1; }
+ .bind { font-size:12px; fill:#152330; }
+ .slot { font-size:10px; fill:#364352; paint-order:stroke; stroke:#fafbfc; stroke-width:3; }
+ #detail { position:absolute; top:8px; right:8px; margin:0; padding:12px; max-width:320px;
+ max-height:45%; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere;
+ background:#fffffff2; border:1px solid #bac5d0; border-radius:4px; font-size:12px; }
+ .controls { display:flex; flex-wrap:wrap; justify-content:center; align-items:center; gap:6px; padding:6px; }
+ .button { color:white; background:black; font-size:20px; min-width:30px; }
+ .button:disabled { background:grey; }
+ .count { font-size:20px; min-width:35px; text-align:center; }
+ #N { width:6ch; }
+ #scrub { width:clamp(120px,35vw,600px); }
+ </style><defs><marker id="arrow-CTRL" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#b63838"/></marker><marker id="arrow-DATA" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#536477"/></marker><marker id="arrow-MEM" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#2867b2"/></marker><marker id="arrow-ASSOC" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#9396a3"/></marker><marker id="arrow-PARSER" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#7956a5"/></marker></defs><rect width="100%" height="100%" fill="rgb(250, 251, 252)"/><g><g class="regions" style="opacity: 1;"><g class="region" transform="translate(24,589)"><rect class="region-box" rx="8" width="371" height="354" fill="#f2f7ef"/></g></g><rect class="peep-area" rx="36" style="opacity: 0;"/><g class="edges"><path class="edge CTRL" id="e1i0" d="M160,827 L160,837 L201,837 L201,875" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#1[0] → #23 · CTRL</title></path><path class="edge MEM" id="e1i1" d="M280,118 L280,138 L605,138 L605,338 L575,338 L575,442 L382,442 L382,837 L231,837 L231,875" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#1[1] → #6 · MEM</title></path><path class="edge MEM" id="e1i2" d="M312,827 L312,847 L261,847 L261,875" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#1[2] → #224 · MEM</title></path><path class="edge CTRL" id="e3i0" d="M190,1049 C190,1073 365,1076 365,1100" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#3[0] → #25 · CTRL</title></path><path class="edge CTRL" id="e9i0" d="M160,118 L160,148 L242,148 L242,166" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#9[0] → #5 · CTRL</title></path><path class="edge CTRL" id="e12i0" d="M160,118 L160,262 L195,262 L195,272" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#12[0] → #5 · CTRL</title></path><path class="edge MEM" id="e12i1" d="M280,118 L280,138 L171,138 L171,232 L219,232 L219,272" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#12[1] → #6 · MEM</title></path><path class="edge DATA" id="e12i2" d="M242,222 L242,252 L243,252 L243,272" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#12[2] → #9 · DATA</title></path><path class="edge DATA" id="e12i3" d="M394,222 L394,232 L267,232 L267,272" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#12[3] → #11 · DATA</title></path><path class="edge CTRL" id="e13i0" d="M160,118 L160,148 L464,148 L464,242 L383,242 L383,272" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#13[0] → #5 · CTRL</title></path><path class="edge CTRL" id="e14i0" d="M160,118 L160,348 L336,348 L336,376" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#14[0] → #5 · CTRL</title></path><path class="edge MEM" id="e14i1" d="M231,328 L231,338 L360,338 L360,376" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#14[1] → #12 · MEM</title></path><path class="edge DATA" id="e14i2" d="M383,328 L383,338 L384,338 L384,376" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#14[2] → #13 · DATA</title></path><path class="edge DATA" id="e14i3" d="M535,328 L535,338 L408,338 L408,376" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#14[3] → #4 · DATA</title></path><path class="edge CTRL" id="e16i0" d="M160,118 L160,148 L616,148 L616,480" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#16[0] → #5 · CTRL</title></path><path class="edge MEM" id="e16i1" d="M372,432 L372,452 L646,452 L646,480" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#16[1] → #14 · MEM</title></path><path class="edge DATA" id="e16i2" d="M242,222 L242,252 L627,252 L627,442 L676,442 L676,480" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#16[2] → #9 · DATA</title></path><path class="edge CTRL" id="e17i0" d="M160,118 L160,148 L116,148 L116,623" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#17[0] → #5 · CTRL</title></path><path class="edge DATA" id="e17i1" d="M400,118 L400,128 L127,128 L127,556 L196,556 L196,623" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#17[1] → #7 · DATA</title></path><path class="edge CTRL" id="e22i0" d="M160,118 L160,262 L138,262 L138,452 L162,452 L162,480" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#22[0] → #5 · CTRL</title></path><path class="edge MEM" id="e22i1" d="M372,432 L372,452 L186,452 L186,480" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#22[1] → #14 · MEM</title></path><path class="edge DATA" id="e22i2" d="M242,222 L242,252 L149,252 L149,442 L210,442 L210,480" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#22[2] → #9 · DATA</title></path><path class="edge DATA" id="e22i3" d="M220,432 L220,462 L234,462 L234,480" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#22[3] → #21 · DATA</title></path><path class="edge CTRL" id="e23i1" d="M96,723 L96,733 L160,733 L160,771" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#23[1] → #8 · CTRL</title></path><path class="edge CTRL" id="e23i2" d="M216,723 L216,733 L190,733 L190,771" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#23[2] → #10 · CTRL</title></path><path class="edge CTRL" id="e25i0" d="M160,827 L160,996" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#25[0] → #23 · CTRL</title></path><path class="edge MEM" id="e25i1" d="M231,931 L231,958 L190,958 L190,996" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#25[1] → #1 · MEM</title></path><path class="edge DATA" id="e25i2" d="M646,536 L646,968 L220,968 L220,996" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#25[2] → #16 · DATA</title></path><path class="edge MEM" id="e224i1" d="M198,536 L198,546 L292,546 L292,771" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#224[1] → #22 · MEM</title></path><path class="edge MEM" id="e224i2" d="M372,432 L372,452 L332,452 L332,771" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#224[2] → #14 · MEM</title></path></g><g class="edge-hits"/><g class="parser" style="opacity: 1;"/><g class="nodes"><g class="node" id="n1" data-id="1" transform="translate(171,881)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemMerge</tspan><tspan class="node-id">  #1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#1 MemMerge
+Type not computed
+
+[0] → #23 CTRL
+[1] → #6 MEM
+[2] → #224 MEM</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n2" data-id="2" transform="translate(100,24)" style="opacity: 1;"><path class="box" d="M0,0H360V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="180" y="18"><tspan>Start</tspan><tspan class="node-id">  #2</tspan></text><text class="type" text-anchor="middle" y="35" x="180"/><title>#2 Start
+Type not computed
+
+</title></g><g class="node" id="n3" data-id="3" transform="translate(329,1100)" style="opacity: 1;"><path class="box" d="M0,0H72V26H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="36" y="17"><tspan>Stop</tspan><tspan class="node-id">  #3</tspan></text><text class="type" text-anchor="middle" y="35" x="36"/><title>#3 Stop
+Type not computed
+
+[0] → #25 CTRL</title><circle class="port" cx="36" cy="0" r="3" fill="#536477"/><text class="slot" x="36" y="-7" text-anchor="middle">0</text></g><g class="node" id="n4" data-id="4" transform="translate(475,278)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#0</tspan><tspan class="node-id">  #4</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#4 #0
+Type not computed
+
+</title></g><g class="node" id="n5" data-id="5" transform="translate(100,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$ctrl</tspan><tspan class="node-id">  #5/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#5 $ctrl
+Projection 0 of #2
+Type not computed
+
+[0] → #2 CTRL</title></g><g class="node" id="n6" data-id="6" transform="translate(220,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$mem</tspan><tspan class="node-id">  #6/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#6 $mem
+Projection 1 of #2
+Type not computed
+
+[0] → #2 MEM</title></g><g class="node" id="n7" data-id="7" transform="translate(340,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>arg</tspan><tspan class="node-id">  #7/2</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#7 arg
+Projection 2 of #2
+Type not computed
+
+[0] → #2 DATA</title></g><g class="node" id="n8" data-id="8" transform="translate(36,673)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>True</tspan><tspan class="node-id">  #8/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#8 True
+Projection 0 of #17
+Type not computed
+
+[0] → #17 CTRL</title></g><g class="node" id="n9" data-id="9" transform="translate(182,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>new S</tspan><tspan class="node-id">  #9</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#9 new S
+Type not computed
+
+[0] → #5 CTRL</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n10" data-id="10" transform="translate(156,673)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>False</tspan><tspan class="node-id">  #10/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#10 False
+Projection 1 of #17
+Type not computed
+
+[0] → #17 CTRL</title></g><g class="node" id="n11" data-id="11" transform="translate(334,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#2</tspan><tspan class="node-id">  #11</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#11 #2
+Type not computed
+
+</title></g><g class="node" id="n12" data-id="12" transform="translate(171,278)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f =</tspan><tspan class="node-id">  #12</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#12 .f =
+Type not computed
+
+[0] → #5 CTRL
+[1] → #6 MEM
+[2] → #9 DATA
+[3] → #11 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="#536477"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n13" data-id="13" transform="translate(323,278)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>new S</tspan><tspan class="node-id">  #13</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#13 new S
+Type not computed
+
+[0] → #5 CTRL</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n14" data-id="14" transform="translate(312,382)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f =</tspan><tspan class="node-id">  #14</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#14 .f =
+Type not computed
+
+[0] → #5 CTRL
+[1] → #12 MEM
+[2] → #13 DATA
+[3] → #4 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="#536477"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n16" data-id="16" transform="translate(586,486)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f</tspan><tspan class="node-id">  #16</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#16 .f
+Type not computed
+
+[0] → #5 CTRL
+[1] → #14 MEM
+[2] → #9 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n17" data-id="17" transform="translate(36,629)" style="opacity: 1;"><path class="box" d="M0,0H240V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="120" y="18"><tspan>If</tspan><tspan class="node-id">  #17</tspan></text><text class="type" text-anchor="middle" y="35" x="120"/><title>#17 If
+Type not computed
+
+[0] → #5 CTRL
+[1] → #7 DATA</title><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><circle class="port" cx="160" cy="-3" r="3" fill="#536477"/><text class="slot" x="80" y="-10" text-anchor="middle">0</text><text class="slot" x="160" y="-10" text-anchor="middle">1</text></g><g class="node" id="n21" data-id="21" transform="translate(160,382)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#1</tspan><tspan class="node-id">  #21</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#21 #1
+Type not computed
+
+</title></g><g class="node" id="n22" data-id="22" transform="translate(138,486)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f =</tspan><tspan class="node-id">  #22</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#22 .f =
+Type not computed
+
+[0] → #5 CTRL
+[1] → #14 MEM
+[2] → #9 DATA
+[3] → #21 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="#536477"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n23" data-id="23" transform="translate(100,777)" style="opacity: 1;"><path class="box" d="M12,0H108L120,44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Region</tspan><tspan class="node-id">  #23</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#23 Region
+Type not computed
+
+[0] → — DATA
+[1] → #8 CTRL
+[2] → #10 CTRL</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n25" data-id="25" transform="translate(130,1002)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Return</tspan><tspan class="node-id">  #25</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#25 Return
+Type not computed
+
+[0] → #23 CTRL
+[1] → #1 MEM
+[2] → #16 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n224" data-id="224" transform="translate(252,777)" style="opacity: 1;"><path class="box" d="M12,0H108L120,22L108,44H12L0,22Z" fill="#f5e4fa"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemPhi_2</tspan><tspan class="node-id">  #224</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#224 MemPhi_2
+Type not computed
+
+[0] → #23 ASSOC
+[1] → #22 MEM
+[2] → #14 MEM</title><circle class="port" cx="-3" cy="22" r="3" fill="#536477"/><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><path class="reg" fill="none" stroke="#b63838" d="M-3,22H-18m4,-3l-4,3l4,3"><title>[0] → #23</title></path><text class="slot" x="-10" y="15" text-anchor="middle">0</text><text class="slot" x="40" y="-10" text-anchor="middle">1</text><text class="slot" x="80" y="-10" text-anchor="middle">2</text></g></g><g class="region-heads" style="opacity: 1;"><g class="region-head" transform="translate(24,589)"><text class="label" x="26" y="17"><tspan>If</tspan><tspan class="node-id">  #17</tspan></text><title>If · 6 nodes</title><g class="fold-btn" role="button" tabindex="0" transform="translate(4,4)" aria-label="Fold region #17"><rect width="16" height="16" rx="2"/><text x="8" y="12" text-anchor="middle">−</text><title>Fold region</title></g></g></g><g class="shortcuts" style="opacity: 1;"/><g class="peep-ghosts" pointer-events="none"/></g></svg>
diff --git a/chapter11/docs/graph3-snip.json b/chapter11/docs/graph3-snip.json
new file mode 100644
index 00000000..00b3e744
--- /dev/null
+++ b/chapter11/docs/graph3-snip.json
@@ -0,0 +1,20 @@
+{
+ "ver": 1,
+ "comp": "chapter11/docs/graph3-snip.svg",
+ "step": 1,
+ "roots": [],
+ "scope": 0,
+ "nodes": [
+ {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null},
+ {"id": 5, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}},
+ {"id": 8, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 17, "role": "CTRL", "label": null}], "proj": {"par": 17, "idx": 0}},
+ {"id": 9, "label": "new S", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 14, "label": ".f =", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}, {"idx": 1, "def": 0, "role": "MEM", "label": null}, {"idx": 2, "def": 0, "role": "DATA", "label": null}, {"idx": 3, "def": 0, "role": "DATA", "label": null}], "proj": null},
+ {"id": 16, "label": ".f", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}, {"idx": 1, "def": 14, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}], "proj": null},
+ {"id": 17, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}, {"idx": 1, "def": 0, "role": "DATA", "label": null}], "proj": null},
+ {"id": 21, "label": "#1", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 22, "label": ".f =", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 8, "role": "CTRL", "label": null}, {"idx": 1, "def": 14, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}, {"idx": 3, "def": 21, "role": "DATA", "label": null}, {"idx": 4, "def": 16, "role": "DATA", "label": null}], "proj": null}
+ ],
+ "groups": [
+ ]
+}
diff --git a/chapter11/docs/graph3-snip.svg b/chapter11/docs/graph3-snip.svg
new file mode 100644
index 00000000..cf6420c5
--- /dev/null
+++ b/chapter11/docs/graph3-snip.svg
@@ -0,0 +1,102 @@
+<svg aria-label="Compiler graph" width="478" height="500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 478 500" style="font-family: sans-serif;"><style>
+ html, body { height:100%; margin:0; font-family:sans-serif; }
+ .viewer { height:100%; display:grid; grid-template-rows:auto minmax(0,1fr) auto; }
+ .source { padding:8px; border-bottom:1px solid #ccc; }
+ #program { width:min(600px,80vw); vertical-align:middle; }
+ #status { margin-top:4px; }
+ #graph { min-height:0; overflow:hidden; position:relative; background:#fafbfc; }
+ #elk { width:100%; height:100%; }
+ #graph svg { display:block; }
+ .tools { display:flex; flex-wrap:wrap; align-items:center; gap:14px; margin-top:8px; font-size:12px; }
+ .hint { color:#616c78; }
+ .ctrl { color:#b63838; } .mem { color:#2867b2; } .data { color:#536477; }
+ .edge { fill:none; stroke-width:1.5; }
+ .edge.CTRL { stroke-width:2; }
+ .edge.ASSOC { stroke-dasharray:4 4; }
+ .edge.PARSER { stroke-dasharray:5 4; }
+ .parser rect { fill:#f6f0ff; stroke:#7956a5; stroke-width:1.5; stroke-dasharray:5 4; }
+ .edge.selected { stroke-width:3.5; }
+ .edge.bundle { stroke-width:4; }
+ .edge.bundle.selected { stroke-width:6; }
+ .edge-hit { fill:none; stroke:transparent; stroke-width:12; vector-effect:non-scaling-stroke; pointer-events:stroke; cursor:pointer; }
+ .edge-jump { fill:transparent; pointer-events:all; cursor:pointer; }
+ .node { cursor:pointer; }
+ .box { stroke:#758191; stroke-width:1; }
+ .node.held .box { stroke-dasharray:5 3; }
+ .node.near .box { stroke:#c18221; stroke-width:2; }
+ .node.focus .box { stroke:#9c4900; stroke-width:3; }
+ .node.selected .box { stroke:#1569b9; stroke-width:3; }
+ .node.folded .box { stroke-width:4; }
+ .node.folding .box { fill:#f4ccd7; }
+ .fold-tag { font-size:9px; font-weight:700; fill:#963751; }
+ .peep-area { fill:#fff3d9; fill-opacity:.8; stroke:#c18221; stroke-width:2; pointer-events:none; }
+ .node.peep-edit .box { stroke:#9c4900; stroke-width:3; }
+ .node.error .box { stroke:#b42318; stroke-width:4; }
+ #event.error { color:#b42318; font-weight:600; white-space:pre-wrap; overflow-wrap:anywhere; }
+ .peep-ghosts { pointer-events:none; }
+ .region-box { stroke:#9da9b8; stroke-width:1.5; }
+ .fold-btn { cursor:pointer; }
+ .fold-btn rect { fill:white; stroke:#596674; }
+ .fold-btn text { font-size:14px; fill:#152330; }
+ .fold-btn:focus rect { stroke:#1569b9; stroke-width:2; }
+ .shortcut { cursor:pointer; }
+ .shortcut path { fill:none; stroke-width:1.5; }
+ .shortcut rect { fill:#fff8ec; stroke:#b63838; stroke-dasharray:3 2; }
+ .shortcut text { font-size:11px; fill:#783030; }
+ .shortcut.selected rect, .shortcut:focus rect { stroke-width:2.5; }
+ .label { font-size:12px; fill:#152330; font-weight:600; }
+ .node-id { font-size:10px; fill:#596674; font-weight:400; }
+ .type { font-size:11px; fill:#455768; }
+ .port { stroke:#536477; stroke-width:1; }
+ .row { stroke:#b6afcf; stroke-width:1; }
+ .bind { font-size:12px; fill:#152330; }
+ .slot { font-size:10px; fill:#364352; paint-order:stroke; stroke:#fafbfc; stroke-width:3; }
+ #detail { position:absolute; top:8px; right:8px; margin:0; padding:12px; max-width:320px;
+ max-height:45%; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere;
+ background:#fffffff2; border:1px solid #bac5d0; border-radius:4px; font-size:12px; }
+ .controls { display:flex; flex-wrap:wrap; justify-content:center; align-items:center; gap:6px; padding:6px; }
+ .button { color:white; background:black; font-size:20px; min-width:30px; }
+ .button:disabled { background:grey; }
+ .count { font-size:20px; min-width:35px; text-align:center; }
+ #N { width:6ch; }
+ #scrub { width:clamp(120px,35vw,600px); }
+ </style><defs><marker id="arrow-CTRL" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#b63838"/></marker><marker id="arrow-DATA" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#536477"/></marker><marker id="arrow-MEM" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#2867b2"/></marker><marker id="arrow-ASSOC" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#9396a3"/></marker><marker id="arrow-PARSER" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#7956a5"/></marker></defs><rect width="100%" height="100%" fill="rgb(250, 251, 252)"/><g><g class="regions" style="opacity: 1;"/><rect class="peep-area" rx="36" style="opacity: 0;"/><g class="edges"><path class="edge CTRL" id="e9i0" d="M124,118 L124,128 L301,128 L301,166" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#9[0] → #5 · CTRL</title></path><path class="edge CTRL" id="e14i0" d="M124,118 L124,166" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#14[0] → #5 · CTRL</title></path><path class="edge CTRL" id="e16i0" d="M124,118 L124,128 L230,128 L230,242 L364,242 L364,281" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#16[0] → #5 · CTRL</title></path><path class="edge MEM" id="e16i1" d="M160,222 L160,252 L394,252 L394,281" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#16[1] → #14 · MEM</title></path><path class="edge DATA" id="e16i2" d="M301,222 L301,232 L424,232 L424,281" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#16[2] → #9 · DATA</title></path><path class="edge CTRL" id="e17i0" d="M124,118 L124,128 L64,128 L64,270" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#17[0] → #5 · CTRL</title></path><path class="edge CTRL" id="e22i0" d="M84,370 L84,420" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#22[0] → #8 · CTRL</title></path><path class="edge MEM" id="e22i1" d="M160,222 L160,380 L104,380 L104,420" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#22[1] → #14 · MEM</title></path><path class="edge DATA" id="e22i2" d="M301,222 L301,232 L171,232 L171,390 L124,390 L124,420" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#22[2] → #9 · DATA</title></path><path class="edge DATA" id="e22i3" d="M242,370 L242,400 L144,400 L144,420" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#22[3] → #21 · DATA</title></path><path class="edge DATA" id="e22i4" d="M394,337 L394,410 L164,410 L164,420" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#22[4] → #16 · DATA</title></path></g><g class="edge-hits"/><g class="parser" style="opacity: 1;"/><g class="nodes"><g class="node" id="n2" data-id="2" transform="translate(64,24)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Start</tspan><tspan class="node-id">  #2</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#2 Start
+Type not computed
+
+</title></g><g class="node" id="n5" data-id="5" transform="translate(64,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$ctrl</tspan><tspan class="node-id">  #5/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#5 $ctrl
+Projection 0 of #2
+Type not computed
+
+[0] → #2 CTRL</title></g><g class="node" id="n8" data-id="8" transform="translate(24,320)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>True</tspan><tspan class="node-id">  #8/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#8 True
+Projection 0 of #17
+Type not computed
+
+[0] → #17 CTRL</title></g><g class="node" id="n9" data-id="9" transform="translate(241,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>new S</tspan><tspan class="node-id">  #9</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#9 new S
+Type not computed
+
+[0] → #5 CTRL</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n14" data-id="14" transform="translate(100,172)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f =</tspan><tspan class="node-id">  #14</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#14 .f =
+Type not computed
+
+[0] → #5 CTRL
+[1] → — MEM
+[2] → — DATA
+[3] → — DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="#536477"/><circle class="port" cx="48" cy="-3" r="3" fill="white"/><circle class="port" cx="72" cy="-3" r="3" fill="white"/><circle class="port" cx="96" cy="-3" r="3" fill="white"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n16" data-id="16" transform="translate(334,287)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f</tspan><tspan class="node-id">  #16</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#16 .f
+Type not computed
+
+[0] → #5 CTRL
+[1] → #14 MEM
+[2] → #9 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n17" data-id="17" transform="translate(24,276)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>If</tspan><tspan class="node-id">  #17</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#17 If
+Type not computed
+
+[0] → #5 CTRL
+[1] → — DATA</title><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="white"/><text class="slot" x="40" y="-10" text-anchor="middle">0</text><text class="slot" x="80" y="-10" text-anchor="middle">1</text></g><g class="node" id="n21" data-id="21" transform="translate(182,320)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#1</tspan><tspan class="node-id">  #21</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#21 #1
+Type not computed
+
+</title></g><g class="node" id="n22" data-id="22" transform="translate(64,426)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f =</tspan><tspan class="node-id">  #22</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#22 .f =
+Type not computed
+
+[0] → #8 CTRL
+[1] → #14 MEM
+[2] → #9 DATA
+[3] → #21 DATA
+[4] → #16 DATA</title><circle class="port" cx="20" cy="-3" r="3" fill="#536477"/><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><circle class="port" cx="100" cy="-3" r="3" fill="#536477"/><text class="slot" x="20" y="-10" text-anchor="middle">0</text><text class="slot" x="40" y="-10" text-anchor="middle">1</text><text class="slot" x="60" y="-10" text-anchor="middle">2</text><text class="slot" x="80" y="-10" text-anchor="middle">3</text><text class="slot" x="100" y="-10" text-anchor="middle">4</text></g></g><g class="region-heads" style="opacity: 1;"/><g class="shortcuts" style="opacity: 1;"/><g class="peep-ghosts" pointer-events="none"/></g></svg>
diff --git a/chapter11/docs/graph3.json b/chapter11/docs/graph3.json
new file mode 100644
index 00000000..998c6f87
--- /dev/null
+++ b/chapter11/docs/graph3.json
@@ -0,0 +1,33 @@
+{
+ "ver": 1,
+ "comp": "chapter11/docs/graph3.svg",
+ "step": 1,
+ "roots": [],
+ "scope": 0,
+ "nodes": [
+ {"id": 1, "label": "MemMerge", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 23, "role": "CTRL", "label": null}, {"idx": 1, "def": 6, "role": "MEM", "label": null}, {"idx": 2, "def": 224, "role": "MEM", "label": null}], "proj": null},
+ {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null},
+ {"id": 3, "label": "Stop", "type": null, "kind": "STOP", "edges": [{"idx": 0, "def": 25, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 4, "label": "#0", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 5, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}},
+ {"id": 6, "label": "$mem", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 2, "role": "MEM", "label": null}], "proj": {"par": 2, "idx": 1}},
+ {"id": 7, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 2, "role": "DATA", "label": null}], "proj": {"par": 2, "idx": 2}},
+ {"id": 8, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 17, "role": "CTRL", "label": null}], "proj": {"par": 17, "idx": 0}},
+ {"id": 9, "label": "new S", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 10, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 17, "role": "CTRL", "label": null}], "proj": {"par": 17, "idx": 1}},
+ {"id": 11, "label": "#2", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 12, "label": ".f =", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}, {"idx": 1, "def": 6, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}, {"idx": 3, "def": 11, "role": "DATA", "label": null}], "proj": null},
+ {"id": 13, "label": "new S", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 14, "label": ".f =", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}, {"idx": 1, "def": 12, "role": "MEM", "label": null}, {"idx": 2, "def": 13, "role": "DATA", "label": null}, {"idx": 3, "def": 4, "role": "DATA", "label": null}], "proj": null},
+ {"id": 16, "label": ".f", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}, {"idx": 1, "def": 14, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}], "proj": null},
+ {"id": 17, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}, {"idx": 1, "def": 7, "role": "DATA", "label": null}], "proj": null},
+ {"id": 21, "label": "#1", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 22, "label": ".f =", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 8, "role": "CTRL", "label": null}, {"idx": 1, "def": 14, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}, {"idx": 3, "def": 21, "role": "DATA", "label": null}, {"idx": 4, "def": 16, "role": "DATA", "label": null}], "proj": null},
+ {"id": 23, "label": "Region", "type": null, "kind": "REGION", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 8, "role": "CTRL", "label": null}, {"idx": 2, "def": 10, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 25, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 23, "role": "CTRL", "label": null}, {"idx": 1, "def": 1, "role": "MEM", "label": null}, {"idx": 2, "def": 16, "role": "DATA", "label": null}], "proj": null},
+ {"id": 224, "label": "MemPhi_2", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 23, "role": "ASSOC", "label": null}, {"idx": 1, "def": 22, "role": "MEM", "label": null}, {"idx": 2, "def": 14, "role": "MEM", "label": null}], "proj": null}
+ ],
+ "groups": [
+ {"id": 17, "par": 0, "nodes": [1, 8, 10, 17, 22, 23, 224]}
+ ]
+}
diff --git a/chapter11/docs/graph3.svg b/chapter11/docs/graph3.svg
index a16a1733..6fe5fe73 100644
--- a/chapter11/docs/graph3.svg
+++ b/chapter11/docs/graph3.svg
@@ -1,348 +1,152 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
- "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 12.2.0 (20241103.1931)
- -->
-<!-- Title: chapter11 Pages: 1 -->
-<svg width="356pt" height="786pt"
- viewBox="0.00 0.00 356.00 786.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 782)">
-<title>chapter11</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-782 352,-782 352,4 -4,4"/>
-<g id="clust1" class="cluster">
-<title>cluster_Nodes</title>
-<polygon fill="none" stroke="black" points="8,-8 8,-770 340,-770 340,-8 8,-8"/>
-</g>
-<!-- Start2 -->
-<g id="node1" class="node">
-<title>Start2</title>
-<polygon fill="yellow" stroke="none" points="218.38,-731.5 218.38,-758 323.62,-758 323.62,-731.5 218.38,-731.5"/>
-<polygon fill="none" stroke="black" points="218.38,-731.5 218.38,-758 323.62,-758 323.62,-731.5 218.38,-731.5"/>
-<text text-anchor="start" x="258.25" y="-739.7" font-family="Times New Roman,serif" font-size="14.00">Start</text>
-<polygon fill="none" stroke="black" points="218.38,-699 218.38,-731.5 323.62,-731.5 323.62,-699 218.38,-699"/>
-<polygon fill="yellow" stroke="none" points="223.38,-704 223.38,-726.5 254.12,-726.5 254.12,-704 223.38,-704"/>
-<polygon fill="none" stroke="black" points="223.38,-704 223.38,-726.5 254.12,-726.5 254.12,-704 223.38,-704"/>
-<text text-anchor="start" x="226.38" y="-710.2" font-family="Times New Roman,serif" font-size="14.00">$ctrl</text>
-<polygon fill="none" stroke="black" points="254.12,-704 254.12,-726.5 295.38,-726.5 295.38,-704 254.12,-704"/>
-<text text-anchor="start" x="257.12" y="-710.2" font-family="Times New Roman,serif" font-size="14.00">$mem</text>
-<polygon fill="none" stroke="black" points="295.38,-704 295.38,-726.5 318.62,-726.5 318.62,-704 295.38,-704"/>
-<text text-anchor="start" x="298.38" y="-710.2" font-family="Times New Roman,serif" font-size="14.00">arg</text>
-</g>
-<!-- MemMerge -->
-<g id="node2" class="node">
-<title>MemMerge</title>
-<polygon fill="none" stroke="black" points="234,-196 152,-196 152,-160 234,-160 234,-196"/>
-<text text-anchor="middle" x="193" y="-172.95" font-family="Times New Roman,serif" font-size="14.00">MemMerge</text>
-</g>
-<!-- MemMerge&#45;&gt;Start2 -->
-<g id="edge30" class="edge">
-<title>MemMerge&#45;&gt;Start2:p1</title>
-<path fill="none" stroke="blue" d="M234.18,-194.39C253.1,-203.11 274.68,-215.59 290,-232 319.72,-263.83 331,-277.45 331,-321 331,-321 331,-321 331,-498 331,-538.11 326.09,-548.18 316,-587 309.95,-610.27 282.67,-661.11 276.15,-691.66"/>
-<polygon fill="blue" stroke="blue" points="272.69,-691.14 274.94,-701.5 279.64,-692 272.69,-691.14"/>
-<text text-anchor="middle" x="236.43" y="-186.79" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Region23 -->
-<g id="node14" class="node">
-<title>Region23</title>
-<polygon fill="yellow" stroke="black" points="280.5,-268 225.5,-268 225.5,-232 280.5,-232 280.5,-268"/>
-<text text-anchor="middle" x="253" y="-244.95" font-family="Times New Roman,serif" font-size="14.00">Region</text>
-</g>
-<!-- MemMerge&#45;&gt;Region23 -->
-<g id="edge32" class="edge">
-<title>MemMerge&#45;&gt;Region23</title>
-<path fill="none" stroke="green" d="M207.83,-196.3C214.81,-204.44 223.27,-214.31 230.97,-223.3"/>
-<polygon fill="green" stroke="green" points="228.19,-225.43 237.35,-230.75 233.5,-220.88 228.19,-225.43"/>
-<text text-anchor="middle" x="205.58" y="-198.45" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Phi_224 -->
-<g id="node15" class="node">
-<title>Phi_224</title>
-<ellipse fill="lightyellow" stroke="black" cx="155" cy="-250" rx="52.89" ry="18"/>
-<text text-anchor="middle" x="155" y="-244.95" font-family="Times New Roman,serif" font-size="14.00">MemPhi_2</text>
-</g>
-<!-- MemMerge&#45;&gt;Phi_224 -->
-<g id="edge31" class="edge">
-<title>MemMerge&#45;&gt;Phi_224</title>
-<path fill="none" stroke="blue" d="M183.61,-196.3C179.42,-204.02 174.39,-213.29 169.72,-221.89"/>
-<polygon fill="blue" stroke="blue" points="166.7,-220.11 165.01,-230.57 172.85,-223.45 166.7,-220.11"/>
-<text text-anchor="middle" x="181.36" y="-198.45" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Stop3 -->
-<g id="node3" class="node">
-<title>Stop3</title>
-<polygon fill="yellow" stroke="black" points="220,-52 166,-52 166,-16 220,-16 220,-52"/>
-<text text-anchor="middle" x="193" y="-28.95" font-family="Times New Roman,serif" font-size="14.00">Stop</text>
-</g>
-<!-- Return25 -->
-<g id="node16" class="node">
-<title>Return25</title>
-<polygon fill="yellow" stroke="black" points="220,-124 166,-124 166,-88 220,-88 220,-124"/>
-<text text-anchor="middle" x="193" y="-100.95" font-family="Times New Roman,serif" font-size="14.00">Return</text>
-</g>
-<!-- Stop3&#45;&gt;Return25 -->
-<g id="edge1" class="edge">
-<title>Stop3&#45;&gt;Return25</title>
-<path fill="none" stroke="red" d="M193,-52.3C193,-59.59 193,-68.27 193,-76.46"/>
-<polygon fill="red" stroke="red" points="189.5,-76.38 193,-86.38 196.5,-76.38 189.5,-76.38"/>
-<text text-anchor="middle" x="190.75" y="-54.45" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Con_4 -->
-<g id="node4" class="node">
-<title>Con_4</title>
-<ellipse fill="none" stroke="black" cx="235" cy="-569" rx="27" ry="18"/>
-<text text-anchor="middle" x="235" y="-563.95" font-family="Times New Roman,serif" font-size="14.00">#0</text>
-</g>
-<!-- new9 -->
-<g id="node5" class="node">
-<title>new9</title>
-<ellipse fill="none" stroke="black" cx="70" cy="-641" rx="33.95" ry="18"/>
-<text text-anchor="middle" x="70" y="-635.95" font-family="Times New Roman,serif" font-size="14.00">new S</text>
-</g>
-<!-- new9&#45;&gt;Start2 -->
-<g id="edge2" class="edge">
-<title>new9&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="green" d="M87.44,-656.82C112.58,-676.72 161.43,-710.12 211.1,-714.72"/>
-<polygon fill="green" stroke="green" points="210.71,-718.2 220.86,-715.18 211.04,-711.21 210.71,-718.2"/>
-<text text-anchor="middle" x="89.69" y="-658.97" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Con_11 -->
-<g id="node6" class="node">
-<title>Con_11</title>
-<ellipse fill="none" stroke="black" cx="235" cy="-641" rx="27" ry="18"/>
-<text text-anchor="middle" x="235" y="-635.95" font-family="Times New Roman,serif" font-size="14.00">#2</text>
-</g>
-<!-- Store12 -->
-<g id="node7" class="node">
-<title>Store12</title>
-<ellipse fill="none" stroke="black" cx="163" cy="-569" rx="27" ry="18"/>
-<text text-anchor="middle" x="163" y="-563.95" font-family="Times New Roman,serif" font-size="14.00">.f =</text>
-</g>
-<!-- Store12&#45;&gt;Start2 -->
-<g id="edge3" class="edge">
-<title>Store12&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M184.74,-580.27C215.27,-594.76 267.54,-619.8 271,-623 277.43,-628.96 279.81,-631.32 281,-640"/>
-<path fill="none" stroke="red" d="M281,-642C284.46,-667.2 257.45,-670.2 244.91,-685.38"/>
-<polygon fill="red" stroke="red" points="241.97,-683.46 240.43,-693.94 248.17,-686.71 241.97,-683.46"/>
-<text text-anchor="middle" x="182.49" y="-582.42" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Store12&#45;&gt;new9 -->
-<g id="edge5" class="edge">
-<title>Store12&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M145.51,-583.17C132.17,-593.2 113.54,-607.23 98.12,-618.83"/>
-<polygon fill="black" stroke="black" points="96.11,-615.97 90.22,-624.78 100.32,-621.56 96.11,-615.97"/>
-<text text-anchor="middle" x="143.26" y="-585.32" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Store12&#45;&gt;Con_11 -->
-<g id="edge6" class="edge">
-<title>Store12&#45;&gt;Con_11</title>
-<path fill="none" stroke="black" d="M177.92,-584.5C187.77,-594.08 200.86,-606.81 212.03,-617.66"/>
-<polygon fill="black" stroke="black" points="209.41,-620 219.02,-624.46 214.29,-614.98 209.41,-620"/>
-<text text-anchor="middle" x="175.67" y="-586.65" font-family="Helvetica,sans-Serif" font-size="8.00">3</text>
-</g>
-<!-- new13 -->
-<g id="node8" class="node">
-<title>new13</title>
-<ellipse fill="none" stroke="black" cx="156" cy="-641" rx="33.95" ry="18"/>
-<text text-anchor="middle" x="156" y="-635.95" font-family="Times New Roman,serif" font-size="14.00">new S</text>
-</g>
-<!-- new13&#45;&gt;Start2 -->
-<g id="edge7" class="edge">
-<title>new13&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="green" d="M162.55,-658.99C170.89,-677.84 187.18,-706.54 211.2,-713.63"/>
-<polygon fill="green" stroke="green" points="210.48,-717.06 220.88,-715.03 211.48,-710.13 210.48,-717.06"/>
-<text text-anchor="middle" x="160.3" y="-661.14" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Store14 -->
-<g id="node9" class="node">
-<title>Store14</title>
-<ellipse fill="none" stroke="black" cx="182" cy="-497" rx="27" ry="18"/>
-<text text-anchor="middle" x="182" y="-491.95" font-family="Times New Roman,serif" font-size="14.00">.f =</text>
-</g>
-<!-- Store14&#45;&gt;Start2 -->
-<g id="edge8" class="edge">
-<title>Store14&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M205.98,-505.45C226.83,-513.27 255.99,-527.73 271,-551 292.57,-584.45 275.58,-600.57 281,-640"/>
-<text text-anchor="middle" x="203.73" y="-507.6" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Store14&#45;&gt;Con_4 -->
-<g id="edge11" class="edge">
-<title>Store14&#45;&gt;Con_4</title>
-<path fill="none" stroke="black" d="M193.76,-513.54C200.42,-522.33 208.89,-533.52 216.43,-543.47"/>
-<polygon fill="black" stroke="black" points="213.53,-545.44 222.36,-551.3 219.11,-541.22 213.53,-545.44"/>
-<text text-anchor="middle" x="191.51" y="-515.69" font-family="Helvetica,sans-Serif" font-size="8.00">3</text>
-</g>
-<!-- Store14&#45;&gt;Store12 -->
-<g id="edge9" class="edge">
-<title>Store14&#45;&gt;Store12</title>
-<path fill="none" stroke="blue" d="M177.4,-514.95C175.35,-522.51 172.87,-531.63 170.56,-540.15"/>
-<polygon fill="blue" stroke="blue" points="167.2,-539.18 167.95,-549.75 173.95,-541.02 167.2,-539.18"/>
-<text text-anchor="middle" x="175.15" y="-517.1" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Store14&#45;&gt;new13 -->
-<g id="edge10" class="edge">
-<title>Store14&#45;&gt;new13</title>
-<path fill="none" stroke="black" d="M162.83,-510.26C150.03,-519.67 134.26,-533.91 127,-551 118.14,-571.85 127.53,-596.39 137.92,-614.41"/>
-<polygon fill="black" stroke="black" points="134.8,-616.02 143.05,-622.65 140.74,-612.32 134.8,-616.02"/>
-<text text-anchor="middle" x="160.58" y="-512.41" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Load16 -->
-<g id="node10" class="node">
-<title>Load16</title>
-<ellipse fill="none" stroke="black" cx="43" cy="-409.5" rx="27" ry="18"/>
-<text text-anchor="middle" x="43" y="-404.45" font-family="Times New Roman,serif" font-size="14.00">.f</text>
-</g>
-<!-- Load16&#45;&gt;Start2 -->
-<g id="edge12" class="edge">
-<title>Load16&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M49.4,-427.07C59.67,-455.78 77.82,-516.65 69,-568"/>
-<path fill="none" stroke="red" d="M69,-570C64.24,-599.68 36.88,-594.62 27,-623 21.74,-638.11 17.38,-646.22 27,-659 50.34,-690 144.38,-709.24 199.08,-714.06"/>
-<polygon fill="red" stroke="red" points="198.71,-717.54 208.93,-714.77 199.21,-710.56 198.71,-717.54"/>
-<text text-anchor="middle" x="47.15" y="-429.22" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Load16&#45;&gt;new9 -->
-<g id="edge14" class="edge">
-<title>Load16&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M69,-570C66.69,-583.43 66.6,-598.53 67.22,-611.26"/>
-<polygon fill="black" stroke="black" points="63.72,-611.35 67.89,-621.09 70.7,-610.88 63.72,-611.35"/>
-<text text-anchor="middle" x="66.75" y="-562.4" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Load16&#45;&gt;Store14 -->
-<g id="edge13" class="edge">
-<title>Load16&#45;&gt;Store14</title>
-<path fill="none" stroke="blue" d="M62.33,-422.39C85.88,-436.87 125.88,-461.48 153.09,-478.22"/>
-<polygon fill="blue" stroke="blue" points="151.2,-481.16 161.55,-483.42 154.86,-475.2 151.2,-481.16"/>
-<text text-anchor="middle" x="64.58" y="-424.54" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- If17 -->
-<g id="node11" class="node">
-<title>If17</title>
-<polygon fill="yellow" stroke="none" points="228,-412.5 228,-439 304,-439 304,-412.5 228,-412.5"/>
-<polygon fill="none" stroke="black" points="228,-412.5 228,-439 304,-439 304,-412.5 228,-412.5"/>
-<text text-anchor="start" x="261.5" y="-420.7" font-family="Times New Roman,serif" font-size="14.00">If</text>
-<polygon fill="none" stroke="black" points="228,-380 228,-412.5 304,-412.5 304,-380 228,-380"/>
-<polygon fill="yellow" stroke="none" points="233,-385 233,-407.5 264.5,-407.5 264.5,-385 233,-385"/>
-<polygon fill="none" stroke="black" points="233,-385 233,-407.5 264.5,-407.5 264.5,-385 233,-385"/>
-<text text-anchor="start" x="236" y="-391.2" font-family="Times New Roman,serif" font-size="14.00">True</text>
-<polygon fill="yellow" stroke="none" points="264.5,-385 264.5,-407.5 299,-407.5 299,-385 264.5,-385"/>
-<polygon fill="none" stroke="black" points="264.5,-385 264.5,-407.5 299,-407.5 299,-385 264.5,-385"/>
-<text text-anchor="start" x="267.5" y="-391.2" font-family="Times New Roman,serif" font-size="14.00">False</text>
-</g>
-<!-- If17&#45;&gt;Start2 -->
-<g id="edge15" class="edge">
-<title>If17&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M311,-570C308.67,-603.77 276.11,-606.51 281,-640"/>
-<path fill="none" stroke="red" d="M282.37,-442.96C296.46,-474.31 314.08,-523.46 311,-568"/>
-<text text-anchor="middle" x="308.75" y="-562.4" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- If17&#45;&gt;Start2 -->
-<g id="edge16" class="edge">
-<title>If17&#45;&gt;Start2:p2</title>
-<path fill="none" stroke="black" d="M311,-570C310.66,-622.18 307.81,-639.78 307.14,-683.82"/>
-<polygon fill="black" stroke="black" points="303.64,-683.74 307.04,-693.78 310.64,-683.81 303.64,-683.74"/>
-<text text-anchor="middle" x="308.75" y="-572.15" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Con_21 -->
-<g id="node12" class="node">
-<title>Con_21</title>
-<ellipse fill="none" stroke="black" cx="155" cy="-409.5" rx="27" ry="18"/>
-<text text-anchor="middle" x="155" y="-404.45" font-family="Times New Roman,serif" font-size="14.00">#1</text>
-</g>
-<!-- Store22 -->
-<g id="node13" class="node">
-<title>Store22</title>
-<ellipse fill="none" stroke="black" cx="155" cy="-322" rx="27" ry="18"/>
-<text text-anchor="middle" x="155" y="-316.95" font-family="Times New Roman,serif" font-size="14.00">.f =</text>
-</g>
-<!-- Store22&#45;&gt;new9 -->
-<g id="edge19" class="edge">
-<title>Store22&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M137.84,-335.86C126.26,-345.54 111.73,-359.88 104,-376 93.96,-396.94 78.72,-547.81 72.64,-611.62"/>
-<polygon fill="black" stroke="black" points="69.18,-611.02 71.72,-621.31 76.15,-611.68 69.18,-611.02"/>
-<text text-anchor="middle" x="135.59" y="-338.01" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Store22&#45;&gt;Store14 -->
-<g id="edge18" class="edge">
-<title>Store22&#45;&gt;Store14</title>
-<path fill="none" stroke="blue" d="M168.75,-337.93C176.96,-347.9 186.62,-361.75 191,-376 200.34,-406.37 195.4,-443.02 189.86,-467.76"/>
-<polygon fill="blue" stroke="blue" points="186.48,-466.85 187.51,-477.4 193.28,-468.51 186.48,-466.85"/>
-<text text-anchor="middle" x="166.5" y="-340.08" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Store22&#45;&gt;Load16 -->
-<g id="edge21" class="edge">
-<title>Store22&#45;&gt;Load16</title>
-<path fill="none" stroke="black" d="M137.39,-335.93C122.95,-346.57 102.04,-362.12 84,-376 78.96,-379.88 73.61,-384.06 68.5,-388.1"/>
-<polygon fill="black" stroke="black" points="66.51,-385.21 60.86,-394.17 70.86,-390.69 66.51,-385.21"/>
-<text text-anchor="middle" x="139.64" y="-338.08" font-family="Helvetica,sans-Serif" font-size="8.00">4</text>
-</g>
-<!-- Store22&#45;&gt;If17 -->
-<g id="edge17" class="edge">
-<title>Store22&#45;&gt;If17:p0</title>
-<path fill="none" stroke="red" d="M169.18,-337.47C184.82,-353.32 209.52,-378.02 222.95,-389.7"/>
-<polygon fill="red" stroke="red" points="220.62,-392.34 230.77,-395.36 224.72,-386.67 220.62,-392.34"/>
-<text text-anchor="middle" x="171.43" y="-339.62" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Store22&#45;&gt;Con_21 -->
-<g id="edge20" class="edge">
-<title>Store22&#45;&gt;Con_21</title>
-<path fill="none" stroke="black" d="M155,-340.3C155,-351.66 155,-366.78 155,-379.9"/>
-<polygon fill="black" stroke="black" points="151.5,-379.71 155,-389.71 158.5,-379.71 151.5,-379.71"/>
-<text text-anchor="middle" x="152.75" y="-342.45" font-family="Helvetica,sans-Serif" font-size="8.00">3</text>
-</g>
-<!-- Region23&#45;&gt;If17 -->
-<g id="edge22" class="edge">
-<title>Region23&#45;&gt;If17:p0</title>
-<path fill="none" stroke="red" d="M252.1,-268.21C250.96,-291.28 249.12,-333.83 248.8,-372.64"/>
-<polygon fill="red" stroke="red" points="245.3,-372.47 248.76,-382.49 252.3,-372.5 245.3,-372.47"/>
-<text text-anchor="middle" x="249.85" y="-270.36" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Region23&#45;&gt;If17 -->
-<g id="edge23" class="edge">
-<title>Region23&#45;&gt;If17:p1</title>
-<path fill="none" stroke="red" d="M259.4,-268.46C262.95,-278.7 267.2,-291.95 270,-304 277.21,-335.04 280.87,-345.68 281.61,-372.75"/>
-<polygon fill="red" stroke="red" points="278.11,-372.53 281.73,-382.49 285.11,-372.44 278.11,-372.53"/>
-<text text-anchor="middle" x="257.15" y="-270.61" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Phi_224&#45;&gt;Store14 -->
-<g id="edge26" class="edge">
-<title>Phi_224&#45;&gt;Store14</title>
-<path fill="none" stroke="blue" d="M170.61,-267.54C186.09,-286.03 205.55,-316.46 191,-340 172.19,-370.43 137.81,-345.57 119,-376 103.34,-401.33 106.43,-416 119,-443 125.92,-457.87 139.3,-470.06 151.95,-478.98"/>
-<polygon fill="blue" stroke="blue" points="149.82,-481.77 160.1,-484.33 153.66,-475.91 149.82,-481.77"/>
-<text text-anchor="middle" x="168.36" y="-269.69" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Phi_224&#45;&gt;Store22 -->
-<g id="edge25" class="edge">
-<title>Phi_224&#45;&gt;Store22</title>
-<path fill="none" stroke="blue" d="M155,-268.3C155,-275.59 155,-284.27 155,-292.46"/>
-<polygon fill="blue" stroke="blue" points="151.5,-292.38 155,-302.38 158.5,-292.38 151.5,-292.38"/>
-<text text-anchor="middle" x="152.75" y="-270.45" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_224&#45;&gt;Region23 -->
-<g id="edge24" class="edge">
-<title>Phi_224&#45;&gt;Region23</title>
-<path fill="none" stroke="black" stroke-dasharray="1,5" d="M208.21,-250C210.05,-250 211.89,-250 213.72,-250"/>
-<polygon fill="black" stroke="black" points="213.49,-253.5 223.49,-250 213.49,-246.5 213.49,-253.5"/>
-<text text-anchor="middle" x="210.46" y="-242.4" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Return25&#45;&gt;MemMerge -->
-<g id="edge29" class="edge">
-<title>Return25&#45;&gt;MemMerge</title>
-<path fill="none" stroke="blue" d="M193,-124.3C193,-131.59 193,-140.27 193,-148.46"/>
-<polygon fill="blue" stroke="blue" points="189.5,-148.38 193,-158.38 196.5,-148.38 189.5,-148.38"/>
-<text text-anchor="middle" x="190.75" y="-126.45" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Return25&#45;&gt;Load16 -->
-<g id="edge28" class="edge">
-<title>Return25&#45;&gt;Load16</title>
-<path fill="none" stroke="black" d="M175.65,-124.07C165.7,-134.18 153.2,-147.43 143,-160 118.45,-190.25 109.65,-196.78 93,-232 69.52,-281.67 54.98,-344.54 48,-380.27"/>
-<polygon fill="black" stroke="black" points="44.61,-379.32 46.19,-389.8 51.49,-380.62 44.61,-379.32"/>
-<text text-anchor="middle" x="173.4" y="-126.22" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Return25&#45;&gt;Region23 -->
-<g id="edge27" class="edge">
-<title>Return25&#45;&gt;Region23</title>
-<path fill="none" stroke="red" d="M214.94,-124.32C225.23,-133.72 236.62,-146.23 243,-160 251.76,-178.89 254.09,-202.36 254.32,-220.46"/>
-<polygon fill="red" stroke="red" points="250.82,-220.19 254.22,-230.23 257.82,-220.26 250.82,-220.19"/>
-<text text-anchor="middle" x="212.69" y="-126.47" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-</g>
-</svg>
+<svg aria-label="Compiler graph" width="719" height="1268" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 719 1268" style="font-family: sans-serif;"><style>
+ html, body { height:100%; margin:0; font-family:sans-serif; }
+ .viewer { height:100%; display:grid; grid-template-rows:auto minmax(0,1fr) auto; }
+ .source { padding:8px; border-bottom:1px solid #ccc; }
+ #program { width:min(600px,80vw); vertical-align:middle; }
+ #status { margin-top:4px; }
+ #graph { min-height:0; overflow:hidden; position:relative; background:#fafbfc; }
+ #elk { width:100%; height:100%; }
+ #graph svg { display:block; }
+ .tools { display:flex; flex-wrap:wrap; align-items:center; gap:14px; margin-top:8px; font-size:12px; }
+ .hint { color:#616c78; }
+ .ctrl { color:#b63838; } .mem { color:#2867b2; } .data { color:#536477; }
+ .edge { fill:none; stroke-width:1.5; }
+ .edge.CTRL { stroke-width:2; }
+ .edge.ASSOC { stroke-dasharray:4 4; }
+ .edge.PARSER { stroke-dasharray:5 4; }
+ .parser rect { fill:#f6f0ff; stroke:#7956a5; stroke-width:1.5; stroke-dasharray:5 4; }
+ .edge.selected { stroke-width:3.5; }
+ .edge.bundle { stroke-width:4; }
+ .edge.bundle.selected { stroke-width:6; }
+ .edge-hit { fill:none; stroke:transparent; stroke-width:12; vector-effect:non-scaling-stroke; pointer-events:stroke; cursor:pointer; }
+ .edge-jump { fill:transparent; pointer-events:all; cursor:pointer; }
+ .node { cursor:pointer; }
+ .box { stroke:#758191; stroke-width:1; }
+ .node.held .box { stroke-dasharray:5 3; }
+ .node.near .box { stroke:#c18221; stroke-width:2; }
+ .node.focus .box { stroke:#9c4900; stroke-width:3; }
+ .node.selected .box { stroke:#1569b9; stroke-width:3; }
+ .node.folded .box { stroke-width:4; }
+ .node.folding .box { fill:#f4ccd7; }
+ .fold-tag { font-size:9px; font-weight:700; fill:#963751; }
+ .peep-area { fill:#fff3d9; fill-opacity:.8; stroke:#c18221; stroke-width:2; pointer-events:none; }
+ .node.peep-edit .box { stroke:#9c4900; stroke-width:3; }
+ .node.error .box { stroke:#b42318; stroke-width:4; }
+ #event.error { color:#b42318; font-weight:600; white-space:pre-wrap; overflow-wrap:anywhere; }
+ .peep-ghosts { pointer-events:none; }
+ .region-box { stroke:#9da9b8; stroke-width:1.5; }
+ .fold-btn { cursor:pointer; }
+ .fold-btn rect { fill:white; stroke:#596674; }
+ .fold-btn text { font-size:14px; fill:#152330; }
+ .fold-btn:focus rect { stroke:#1569b9; stroke-width:2; }
+ .shortcut { cursor:pointer; }
+ .shortcut path { fill:none; stroke-width:1.5; }
+ .shortcut rect { fill:#fff8ec; stroke:#b63838; stroke-dasharray:3 2; }
+ .shortcut text { font-size:11px; fill:#783030; }
+ .shortcut.selected rect, .shortcut:focus rect { stroke-width:2.5; }
+ .label { font-size:12px; fill:#152330; font-weight:600; }
+ .node-id { font-size:10px; fill:#596674; font-weight:400; }
+ .type { font-size:11px; fill:#455768; }
+ .port { stroke:#536477; stroke-width:1; }
+ .row { stroke:#b6afcf; stroke-width:1; }
+ .bind { font-size:12px; fill:#152330; }
+ .slot { font-size:10px; fill:#364352; paint-order:stroke; stroke:#fafbfc; stroke-width:3; }
+ #detail { position:absolute; top:8px; right:8px; margin:0; padding:12px; max-width:320px;
+ max-height:45%; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere;
+ background:#fffffff2; border:1px solid #bac5d0; border-radius:4px; font-size:12px; }
+ .controls { display:flex; flex-wrap:wrap; justify-content:center; align-items:center; gap:6px; padding:6px; }
+ .button { color:white; background:black; font-size:20px; min-width:30px; }
+ .button:disabled { background:grey; }
+ .count { font-size:20px; min-width:35px; text-align:center; }
+ #N { width:6ch; }
+ #scrub { width:clamp(120px,35vw,600px); }
+ </style><defs><marker id="arrow-CTRL" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#b63838"/></marker><marker id="arrow-DATA" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#536477"/></marker><marker id="arrow-MEM" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#2867b2"/></marker><marker id="arrow-ASSOC" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#9396a3"/></marker><marker id="arrow-PARSER" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#7956a5"/></marker></defs><rect width="100%" height="100%" fill="rgb(250, 251, 252)"/><g><g class="regions" style="opacity: 1;"><g class="region" transform="translate(24,591)"><rect class="region-box" rx="8" width="336" height="470" fill="#f2f7ef"/></g></g><rect class="peep-area" rx="36" style="opacity: 0;"/><g class="edges"><path class="edge CTRL" id="e1i0" d="M96,945 L96,955 L137,955 L137,993" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#1[0] → #23 · CTRL</title></path><path class="edge MEM" id="e1i1" d="M269,118 L269,138 L694,138 L694,556 L347,556 L347,955 L167,955 L167,993" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#1[1] → #6 · MEM</title></path><path class="edge MEM" id="e1i2" d="M248,945 L248,965 L197,965 L197,993" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#1[2] → #224 · MEM</title></path><path class="edge CTRL" id="e3i0" d="M126,1167 C126,1191 359.5,1194 359.5,1218" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#3[0] → #25 · CTRL</title></path><path class="edge CTRL" id="e9i0" d="M149,118 L149,148 L231,148 L231,166" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#9[0] → #5 · CTRL</title></path><path class="edge CTRL" id="e12i0" d="M149,118 L149,252 L184,252 L184,272" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#12[0] → #5 · CTRL</title></path><path class="edge MEM" id="e12i1" d="M269,118 L269,138 L160,138 L160,232 L208,232 L208,272" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#12[1] → #6 · MEM</title></path><path class="edge DATA" id="e12i2" d="M231,222 L231,242 L232,242 L232,272" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#12[2] → #9 · DATA</title></path><path class="edge DATA" id="e12i3" d="M383,222 L383,252 L256,252 L256,272" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#12[3] → #11 · DATA</title></path><path class="edge CTRL" id="e13i0" d="M149,118 L149,148 L594,148 L594,262 L372,262 L372,272" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#13[0] → #5 · CTRL</title></path><path class="edge CTRL" id="e14i0" d="M149,118 L149,338 L173,338 L173,376" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#14[0] → #5 · CTRL</title></path><path class="edge MEM" id="e14i1" d="M220,328 L220,338 L197,338 L197,376" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#14[1] → #12 · MEM</title></path><path class="edge DATA" id="e14i2" d="M372,328 L372,348 L221,348 L221,376" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#14[2] → #13 · DATA</title></path><path class="edge DATA" id="e14i3" d="M524,328 L524,358 L245,358 L245,376" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#14[3] → #4 · DATA</title></path><path class="edge CTRL" id="e16i0" d="M149,118 L149,148 L594,148 L594,480" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#16[0] → #5 · CTRL</title></path><path class="edge MEM" id="e16i1" d="M209,432 L209,452 L624,452 L624,480" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#16[1] → #14 · MEM</title></path><path class="edge DATA" id="e16i2" d="M231,222 L231,242 L605,242 L605,442 L654,442 L654,480" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#16[2] → #9 · DATA</title></path><path class="edge CTRL" id="e17i0" d="M149,118 L149,148 L116,148 L116,625" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#17[0] → #5 · CTRL</title></path><path class="edge DATA" id="e17i1" d="M389,118 L389,128 L127,128 L127,576 L196,576 L196,625" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#17[1] → #7 · DATA</title></path><path class="edge CTRL" id="e22i0" d="M96,725 L96,745 L157,745 L157,785" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#22[0] → #8 · CTRL</title></path><path class="edge MEM" id="e22i1" d="M209,432 L209,452 L138,452 L138,566 L292,566 L292,745 L177,745 L177,785" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#22[1] → #14 · MEM</title></path><path class="edge DATA" id="e22i2" d="M231,222 L231,242 L138,242 L138,442 L149,442 L149,556 L303,556 L303,755 L197,755 L197,785" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#22[2] → #9 · DATA</title></path><path class="edge DATA" id="e22i3" d="M266,536 L266,546 L314,546 L314,765 L217,765 L217,785" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#22[3] → #21 · DATA</title></path><path class="edge DATA" id="e22i4" d="M624,536 L624,546 L325,546 L325,775 L237,775 L237,785" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#22[4] → #16 · DATA</title></path><path class="edge CTRL" id="e23i1" d="M96,725 L96,889" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#23[1] → #8 · CTRL</title></path><path class="edge CTRL" id="e23i2" d="M216,725 L216,735 L126,735 L126,889" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#23[2] → #10 · CTRL</title></path><path class="edge CTRL" id="e25i0" d="M96,945 L96,1114" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#25[0] → #23 · CTRL</title></path><path class="edge MEM" id="e25i1" d="M167,1049 L167,1076 L126,1076 L126,1114" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#25[1] → #1 · MEM</title></path><path class="edge DATA" id="e25i2" d="M624,536 L624,1086 L156,1086 L156,1114" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#25[2] → #16 · DATA</title></path><path class="edge MEM" id="e224i1" d="M197,841 L197,851 L228,851 L228,889" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#224[1] → #22 · MEM</title></path><path class="edge MEM" id="e224i2" d="M209,432 L209,452 L336,452 L336,851 L268,851 L268,889" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#224[2] → #14 · MEM</title></path></g><g class="edge-hits"/><g class="parser" style="opacity: 1;"/><g class="nodes"><g class="node" id="n1" data-id="1" transform="translate(107,999)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemMerge</tspan><tspan class="node-id">  #1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#1 MemMerge
+Type not computed
+
+[0] → #23 CTRL
+[1] → #6 MEM
+[2] → #224 MEM</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n2" data-id="2" transform="translate(89,24)" style="opacity: 1;"><path class="box" d="M0,0H360V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="180" y="18"><tspan>Start</tspan><tspan class="node-id">  #2</tspan></text><text class="type" text-anchor="middle" y="35" x="180"/><title>#2 Start
+Type not computed
+
+</title></g><g class="node" id="n3" data-id="3" transform="translate(323.5,1218)" style="opacity: 1;"><path class="box" d="M0,0H72V26H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="36" y="17"><tspan>Stop</tspan><tspan class="node-id">  #3</tspan></text><text class="type" text-anchor="middle" y="35" x="36"/><title>#3 Stop
+Type not computed
+
+[0] → #25 CTRL</title><circle class="port" cx="36" cy="0" r="3" fill="#536477"/><text class="slot" x="36" y="-7" text-anchor="middle">0</text></g><g class="node" id="n4" data-id="4" transform="translate(464,278)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#0</tspan><tspan class="node-id">  #4</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#4 #0
+Type not computed
+
+</title></g><g class="node" id="n5" data-id="5" transform="translate(89,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$ctrl</tspan><tspan class="node-id">  #5/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#5 $ctrl
+Projection 0 of #2
+Type not computed
+
+[0] → #2 CTRL</title></g><g class="node" id="n6" data-id="6" transform="translate(209,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$mem</tspan><tspan class="node-id">  #6/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#6 $mem
+Projection 1 of #2
+Type not computed
+
+[0] → #2 MEM</title></g><g class="node" id="n7" data-id="7" transform="translate(329,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>arg</tspan><tspan class="node-id">  #7/2</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#7 arg
+Projection 2 of #2
+Type not computed
+
+[0] → #2 DATA</title></g><g class="node" id="n8" data-id="8" transform="translate(36,675)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>True</tspan><tspan class="node-id">  #8/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#8 True
+Projection 0 of #17
+Type not computed
+
+[0] → #17 CTRL</title></g><g class="node" id="n9" data-id="9" transform="translate(171,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>new S</tspan><tspan class="node-id">  #9</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#9 new S
+Type not computed
+
+[0] → #5 CTRL</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n10" data-id="10" transform="translate(156,675)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>False</tspan><tspan class="node-id">  #10/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#10 False
+Projection 1 of #17
+Type not computed
+
+[0] → #17 CTRL</title></g><g class="node" id="n11" data-id="11" transform="translate(323,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#2</tspan><tspan class="node-id">  #11</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#11 #2
+Type not computed
+
+</title></g><g class="node" id="n12" data-id="12" transform="translate(160,278)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f =</tspan><tspan class="node-id">  #12</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#12 .f =
+Type not computed
+
+[0] → #5 CTRL
+[1] → #6 MEM
+[2] → #9 DATA
+[3] → #11 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="#536477"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n13" data-id="13" transform="translate(312,278)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>new S</tspan><tspan class="node-id">  #13</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#13 new S
+Type not computed
+
+[0] → #5 CTRL</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n14" data-id="14" transform="translate(149,382)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f =</tspan><tspan class="node-id">  #14</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#14 .f =
+Type not computed
+
+[0] → #5 CTRL
+[1] → #12 MEM
+[2] → #13 DATA
+[3] → #4 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="#536477"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n16" data-id="16" transform="translate(564,486)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f</tspan><tspan class="node-id">  #16</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#16 .f
+Type not computed
+
+[0] → #5 CTRL
+[1] → #14 MEM
+[2] → #9 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n17" data-id="17" transform="translate(36,631)" style="opacity: 1;"><path class="box" d="M0,0H240V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="120" y="18"><tspan>If</tspan><tspan class="node-id">  #17</tspan></text><text class="type" text-anchor="middle" y="35" x="120"/><title>#17 If
+Type not computed
+
+[0] → #5 CTRL
+[1] → #7 DATA</title><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><circle class="port" cx="160" cy="-3" r="3" fill="#536477"/><text class="slot" x="80" y="-10" text-anchor="middle">0</text><text class="slot" x="160" y="-10" text-anchor="middle">1</text></g><g class="node" id="n21" data-id="21" transform="translate(206,486)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#1</tspan><tspan class="node-id">  #21</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#21 #1
+Type not computed
+
+</title></g><g class="node" id="n22" data-id="22" transform="translate(137,791)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f =</tspan><tspan class="node-id">  #22</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#22 .f =
+Type not computed
+
+[0] → #8 CTRL
+[1] → #14 MEM
+[2] → #9 DATA
+[3] → #21 DATA
+[4] → #16 DATA</title><circle class="port" cx="20" cy="-3" r="3" fill="#536477"/><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><circle class="port" cx="100" cy="-3" r="3" fill="#536477"/><text class="slot" x="20" y="-10" text-anchor="middle">0</text><text class="slot" x="40" y="-10" text-anchor="middle">1</text><text class="slot" x="60" y="-10" text-anchor="middle">2</text><text class="slot" x="80" y="-10" text-anchor="middle">3</text><text class="slot" x="100" y="-10" text-anchor="middle">4</text></g><g class="node" id="n23" data-id="23" transform="translate(36,895)" style="opacity: 1;"><path class="box" d="M12,0H108L120,44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Region</tspan><tspan class="node-id">  #23</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#23 Region
+Type not computed
+
+[0] → — DATA
+[1] → #8 CTRL
+[2] → #10 CTRL</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n25" data-id="25" transform="translate(66,1120)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Return</tspan><tspan class="node-id">  #25</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#25 Return
+Type not computed
+
+[0] → #23 CTRL
+[1] → #1 MEM
+[2] → #16 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n224" data-id="224" transform="translate(188,895)" style="opacity: 1;"><path class="box" d="M12,0H108L120,22L108,44H12L0,22Z" fill="#f5e4fa"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemPhi_2</tspan><tspan class="node-id">  #224</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#224 MemPhi_2
+Type not computed
+
+[0] → #23 ASSOC
+[1] → #22 MEM
+[2] → #14 MEM</title><circle class="port" cx="-3" cy="22" r="3" fill="#536477"/><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><path class="reg" fill="none" stroke="#b63838" d="M-3,22H-18m4,-3l-4,3l4,3"><title>[0] → #23</title></path><text class="slot" x="-10" y="15" text-anchor="middle">0</text><text class="slot" x="40" y="-10" text-anchor="middle">1</text><text class="slot" x="80" y="-10" text-anchor="middle">2</text></g></g><g class="region-heads" style="opacity: 1;"><g class="region-head" transform="translate(24,591)"><text class="label" x="26" y="17"><tspan>If</tspan><tspan class="node-id">  #17</tspan></text><title>If · 7 nodes</title><g class="fold-btn" role="button" tabindex="0" transform="translate(4,4)" aria-label="Fold region #17"><rect width="16" height="16" rx="2"/><text x="8" y="12" text-anchor="middle">−</text><title>Fold region</title></g></g></g><g class="shortcuts" style="opacity: 1;"/><g class="peep-ghosts" pointer-events="none"/></g></svg>
diff --git a/chapter11/docs/graph4.json b/chapter11/docs/graph4.json
new file mode 100644
index 00000000..b021c03f
--- /dev/null
+++ b/chapter11/docs/graph4.json
@@ -0,0 +1,42 @@
+{
+ "ver": 1,
+ "comp": "chapter11/docs/graph4.svg",
+ "step": 1,
+ "roots": [],
+ "scope": 0,
+ "nodes": [
+ {"id": 1, "label": "MemMerge", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 6, "role": "MEM", "label": null}, {"idx": 2, "def": 230, "role": "MEM", "label": null}], "proj": null},
+ {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null},
+ {"id": 3, "label": "Stop", "type": null, "kind": "STOP", "edges": [{"idx": 0, "def": 37, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 4, "label": "#0", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 5, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}},
+ {"id": 6, "label": "$mem", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 2, "role": "MEM", "label": null}], "proj": {"par": 2, "idx": 1}},
+ {"id": 7, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 2, "role": "DATA", "label": null}], "proj": {"par": 2, "idx": 2}},
+ {"id": 8, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 16, "role": "CTRL", "label": null}], "proj": {"par": 16, "idx": 0}},
+ {"id": 9, "label": "new S", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 10, "label": ".f =", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 6, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}, {"idx": 3, "def": 4, "role": "DATA", "label": null}], "proj": null},
+ {"id": 11, "label": "Loop", "type": null, "kind": "LOOP", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 5, "role": "CTRL", "label": null}, {"idx": 2, "def": 32, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 12, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 16, "role": "CTRL", "label": null}], "proj": {"par": 16, "idx": 1}},
+ {"id": 13, "label": "φ_arg", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 11, "role": "ASSOC", "label": null}, {"idx": 1, "def": 7, "role": "DATA", "label": null}, {"idx": 2, "def": 35, "role": "DATA", "label": null}], "proj": null},
+ {"id": 14, "label": "<", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 4, "role": "DATA", "label": null}, {"idx": 2, "def": 13, "role": "DATA", "label": null}], "proj": null},
+ {"id": 15, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 25, "role": "CTRL", "label": null}], "proj": {"par": 25, "idx": 0}},
+ {"id": 16, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 11, "role": "CTRL", "label": null}, {"idx": 1, "def": 14, "role": "DATA", "label": null}], "proj": null},
+ {"id": 17, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 25, "role": "CTRL", "label": null}], "proj": {"par": 25, "idx": 1}},
+ {"id": 21, "label": "//", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 7, "role": "DATA", "label": null}, {"idx": 2, "def": 22, "role": "DATA", "label": null}], "proj": null},
+ {"id": 22, "label": "#3", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 23, "label": "==", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 13, "role": "DATA", "label": null}, {"idx": 2, "def": 24, "role": "DATA", "label": null}], "proj": null},
+ {"id": 24, "label": "#5", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 25, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 8, "role": "CTRL", "label": null}, {"idx": 1, "def": 23, "role": "DATA", "label": null}], "proj": null},
+ {"id": 31, "label": ".f =", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 230, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}, {"idx": 3, "def": 21, "role": "DATA", "label": null}], "proj": null},
+ {"id": 32, "label": "Region", "type": null, "kind": "REGION", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 15, "role": "CTRL", "label": null}, {"idx": 2, "def": 17, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 35, "label": "-", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 13, "role": "DATA", "label": null}, {"idx": 2, "def": 36, "role": "DATA", "label": null}], "proj": null},
+ {"id": 36, "label": "#1", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 37, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 12, "role": "CTRL", "label": null}, {"idx": 1, "def": 1, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}], "proj": null},
+ {"id": 230, "label": "MemPhi_2", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 11, "role": "ASSOC", "label": null}, {"idx": 1, "def": 10, "role": "MEM", "label": null}, {"idx": 2, "def": 233, "role": "MEM", "label": null}], "proj": null},
+ {"id": 233, "label": "MemPhi_2", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 32, "role": "ASSOC", "label": null}, {"idx": 1, "def": 31, "role": "MEM", "label": null}, {"idx": 2, "def": 230, "role": "MEM", "label": null}], "proj": null}
+ ],
+ "groups": [
+ {"id": 11, "par": 0, "nodes": [8, 10, 11, 12, 13, 14, 16, 35, 230]},
+ {"id": 25, "par": 11, "nodes": [15, 17, 21, 23, 25, 31, 32, 233]}
+ ]
+}
diff --git a/chapter11/docs/graph4.svg b/chapter11/docs/graph4.svg
index 2730813a..c268b4e9 100644
--- a/chapter11/docs/graph4.svg
+++ b/chapter11/docs/graph4.svg
@@ -1,429 +1,187 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
- "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 12.2.0 (20241103.1931)
- -->
-<!-- Title: chapter11 Pages: 1 -->
-<svg width="510pt" height="689pt"
- viewBox="0.00 0.00 510.00 688.57" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 684.57)">
-<title>chapter11</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-684.57 506,-684.57 506,4 -4,4"/>
-<g id="clust1" class="cluster">
-<title>cluster_Nodes</title>
-<polygon fill="none" stroke="black" points="8,-23.57 8,-672.57 494,-672.57 494,-23.57 8,-23.57"/>
-</g>
-<!-- Start2 -->
-<g id="node1" class="node">
-<title>Start2</title>
-<polygon fill="yellow" stroke="none" points="177.38,-634.07 177.38,-660.57 282.62,-660.57 282.62,-634.07 177.38,-634.07"/>
-<polygon fill="none" stroke="black" points="177.38,-634.07 177.38,-660.57 282.62,-660.57 282.62,-634.07 177.38,-634.07"/>
-<text text-anchor="start" x="217.25" y="-642.27" font-family="Times New Roman,serif" font-size="14.00">Start</text>
-<polygon fill="none" stroke="black" points="177.38,-601.57 177.38,-634.07 282.62,-634.07 282.62,-601.57 177.38,-601.57"/>
-<polygon fill="yellow" stroke="none" points="182.38,-606.57 182.38,-629.07 213.12,-629.07 213.12,-606.57 182.38,-606.57"/>
-<polygon fill="none" stroke="black" points="182.38,-606.57 182.38,-629.07 213.12,-629.07 213.12,-606.57 182.38,-606.57"/>
-<text text-anchor="start" x="185.38" y="-612.77" font-family="Times New Roman,serif" font-size="14.00">$ctrl</text>
-<polygon fill="none" stroke="black" points="213.12,-606.57 213.12,-629.07 254.38,-629.07 254.38,-606.57 213.12,-606.57"/>
-<text text-anchor="start" x="216.12" y="-612.77" font-family="Times New Roman,serif" font-size="14.00">$mem</text>
-<polygon fill="none" stroke="black" points="254.38,-606.57 254.38,-629.07 277.62,-629.07 277.62,-606.57 254.38,-606.57"/>
-<text text-anchor="start" x="257.38" y="-612.77" font-family="Times New Roman,serif" font-size="14.00">arg</text>
-</g>
-<!-- MemMerge -->
-<g id="node2" class="node">
-<title>MemMerge</title>
-<polygon fill="none" stroke="black" points="190,-345.57 108,-345.57 108,-309.57 190,-309.57 190,-345.57"/>
-<text text-anchor="middle" x="149" y="-322.52" font-family="Times New Roman,serif" font-size="14.00">MemMerge</text>
-</g>
-<!-- MemMerge&#45;&gt;Start2 -->
-<g id="edge37" class="edge">
-<title>MemMerge&#45;&gt;Start2:p1</title>
-<path fill="none" stroke="blue" d="M182.26,-345.95C196.56,-354.9 212.4,-367 223,-381.57 271.6,-448.32 296.36,-483.66 269,-561.57 262.19,-580.96 242.83,-581.28 236.1,-594.6"/>
-<polygon fill="blue" stroke="blue" points="232.74,-593.57 234.07,-604.09 239.58,-595.04 232.74,-593.57"/>
-<text text-anchor="middle" x="180.01" y="-348.1" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_230 -->
-<g id="node16" class="node">
-<title>Phi_230</title>
-<ellipse fill="lightyellow" stroke="black" cx="161" cy="-399.57" rx="52.89" ry="18"/>
-<text text-anchor="middle" x="161" y="-394.52" font-family="Times New Roman,serif" font-size="14.00">MemPhi_2</text>
-</g>
-<!-- MemMerge&#45;&gt;Phi_230 -->
-<g id="edge38" class="edge">
-<title>MemMerge&#45;&gt;Phi_230</title>
-<path fill="none" stroke="blue" d="M151.97,-345.87C153.23,-353.24 154.74,-362.04 156.16,-370.32"/>
-<polygon fill="blue" stroke="blue" points="152.67,-370.7 157.81,-379.97 159.57,-369.52 152.67,-370.7"/>
-<text text-anchor="middle" x="149.72" y="-348.02" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Stop3 -->
-<g id="node3" class="node">
-<title>Stop3</title>
-<polygon fill="yellow" stroke="black" points="194,-67.57 140,-67.57 140,-31.57 194,-31.57 194,-67.57"/>
-<text text-anchor="middle" x="167" y="-44.52" font-family="Times New Roman,serif" font-size="14.00">Stop</text>
-</g>
-<!-- Return37 -->
-<g id="node22" class="node">
-<title>Return37</title>
-<polygon fill="yellow" stroke="black" points="183,-155.07 129,-155.07 129,-119.07 183,-119.07 183,-155.07"/>
-<text text-anchor="middle" x="156" y="-132.02" font-family="Times New Roman,serif" font-size="14.00">Return</text>
-</g>
-<!-- Stop3&#45;&gt;Return37 -->
-<g id="edge1" class="edge">
-<title>Stop3&#45;&gt;Return37</title>
-<path fill="none" stroke="red" d="M164.77,-67.87C163.31,-79.22 161.37,-94.35 159.68,-107.47"/>
-<polygon fill="red" stroke="red" points="156.22,-106.92 158.42,-117.29 163.16,-107.82 156.22,-106.92"/>
-<text text-anchor="middle" x="162.52" y="-70.02" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Con_4 -->
-<g id="node4" class="node">
-<title>Con_4</title>
-<ellipse fill="none" stroke="black" cx="233" cy="-543.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="233" y="-538.52" font-family="Times New Roman,serif" font-size="14.00">#0</text>
-</g>
-<!-- new9 -->
-<g id="node5" class="node">
-<title>new9</title>
-<ellipse fill="none" stroke="black" cx="134" cy="-543.57" rx="33.95" ry="18"/>
-<text text-anchor="middle" x="134" y="-538.52" font-family="Times New Roman,serif" font-size="14.00">new S</text>
-</g>
-<!-- new9&#45;&gt;Start2 -->
-<g id="edge2" class="edge">
-<title>new9&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="green" d="M137.27,-561.92C141.67,-580.29 151.26,-607.68 170.22,-615.6"/>
-<polygon fill="green" stroke="green" points="169.4,-619 179.89,-617.52 170.76,-612.14 169.4,-619"/>
-<text text-anchor="middle" x="135.02" y="-564.07" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Store10 -->
-<g id="node6" class="node">
-<title>Store10</title>
-<ellipse fill="none" stroke="black" cx="174" cy="-471.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="174" y="-466.52" font-family="Times New Roman,serif" font-size="14.00">.f =</text>
-</g>
-<!-- Store10&#45;&gt;Start2 -->
-<g id="edge3" class="edge">
-<title>Store10&#45;&gt;Start2:p1</title>
-<path fill="none" stroke="blue" d="M176.14,-489.77C178.97,-508.31 185.04,-538.28 197,-561.57 206.55,-580.16 225.16,-580.71 231.54,-594.37"/>
-<polygon fill="blue" stroke="blue" points="228.09,-594.95 233.46,-604.08 234.95,-593.59 228.09,-594.95"/>
-<text text-anchor="middle" x="173.89" y="-491.92" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Store10&#45;&gt;Con_4 -->
-<g id="edge5" class="edge">
-<title>Store10&#45;&gt;Con_4</title>
-<path fill="none" stroke="black" d="M186.8,-487.75C194.46,-496.84 204.35,-508.57 213.01,-518.85"/>
-<polygon fill="black" stroke="black" points="210.13,-520.86 219.25,-526.25 215.48,-516.35 210.13,-520.86"/>
-<text text-anchor="middle" x="184.55" y="-489.9" font-family="Helvetica,sans-Serif" font-size="8.00">3</text>
-</g>
-<!-- Store10&#45;&gt;new9 -->
-<g id="edge4" class="edge">
-<title>Store10&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M164.72,-488.8C160.09,-496.9 154.38,-506.9 149.14,-516.07"/>
-<polygon fill="black" stroke="black" points="146.18,-514.2 144.26,-524.62 152.26,-517.67 146.18,-514.2"/>
-<text text-anchor="middle" x="162.47" y="-490.95" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Loop11 -->
-<g id="node7" class="node">
-<title>Loop11</title>
-<polygon fill="yellow" stroke="black" points="326,-417.57 272,-417.57 272,-381.57 326,-381.57 326,-417.57"/>
-<text text-anchor="middle" x="299" y="-394.52" font-family="Times New Roman,serif" font-size="14.00">Loop</text>
-</g>
-<!-- Loop11&#45;&gt;Start2 -->
-<g id="edge6" class="edge">
-<title>Loop11&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M302.41,-417.85C307.63,-449.41 314.1,-517.19 284,-561.57 262.39,-593.42 210.43,-569.06 199.7,-594.37"/>
-<polygon fill="red" stroke="red" points="196.28,-593.62 198.01,-604.07 203.18,-594.83 196.28,-593.62"/>
-<text text-anchor="middle" x="300.16" y="-420" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Region32 -->
-<g id="node18" class="node">
-<title>Region32</title>
-<polygon fill="yellow" stroke="black" points="277.5,-67.57 222.5,-67.57 222.5,-31.57 277.5,-31.57 277.5,-67.57"/>
-<text text-anchor="middle" x="250" y="-44.52" font-family="Times New Roman,serif" font-size="14.00">Region</text>
-</g>
-<!-- Loop11&#45;&gt;Region32 -->
-<g id="edge7" class="edge">
-<title>Loop11&#45;&gt;Region32</title>
-<path fill="none" stroke="red" d="M294.37,-381.1C287.79,-356.73 275.97,-314.9 271,-309.57 241.37,-277.72 212.98,-301.92 180,-273.57 139.82,-239.03 133.81,-221.71 120,-170.57 112.24,-141.82 103.39,-128.28 120,-103.57 122.76,-99.46 174.37,-79.22 211.72,-64.98"/>
-<polygon fill="red" stroke="red" points="212.79,-68.32 220.89,-61.49 210.3,-61.77 212.79,-68.32"/>
-<text text-anchor="middle" x="292.12" y="-373.5" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Phi_arg13 -->
-<g id="node8" class="node">
-<title>Phi_arg13</title>
-<ellipse fill="lightyellow" stroke="black" cx="377" cy="-399.57" rx="32.93" ry="18"/>
-<text text-anchor="middle" x="377" y="-394.52" font-family="Times New Roman,serif" font-size="14.00">φ_arg</text>
-</g>
-<!-- Phi_arg13&#45;&gt;Start2 -->
-<g id="edge9" class="edge">
-<title>Phi_arg13&#45;&gt;Start2:p2</title>
-<path fill="none" stroke="black" d="M377.05,-417.98C376.25,-467.21 367.08,-604.69 289.96,-616.94"/>
-<polygon fill="black" stroke="black" points="289.83,-613.44 280.13,-617.7 290.37,-620.42 289.83,-613.44"/>
-<text text-anchor="middle" x="374.8" y="-420.13" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_arg13&#45;&gt;Loop11 -->
-<g id="edge8" class="edge">
-<title>Phi_arg13&#45;&gt;Loop11</title>
-<path fill="none" stroke="black" stroke-dasharray="1,5" d="M343.81,-399.57C341.82,-399.57 339.82,-399.57 337.83,-399.57"/>
-<polygon fill="black" stroke="black" points="337.94,-396.07 327.94,-399.57 337.94,-403.07 337.94,-396.07"/>
-<text text-anchor="middle" x="341.56" y="-391.97" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Sub35 -->
-<g id="node20" class="node">
-<title>Sub35</title>
-<ellipse fill="none" stroke="black" cx="459" cy="-327.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="459" y="-322.52" font-family="Times New Roman,serif" font-size="14.00">&#45;</text>
-</g>
-<!-- LT14 -->
-<g id="node9" class="node">
-<title>LT14</title>
-<ellipse fill="none" stroke="black" cx="235" cy="-327.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="235" y="-322.52" font-family="Times New Roman,serif" font-size="14.00">&lt;</text>
-</g>
-<!-- LT14&#45;&gt;Con_4 -->
-<g id="edge11" class="edge">
-<title>LT14&#45;&gt;Con_4</title>
-<path fill="none" stroke="black" d="M234.84,-345.72C234.5,-382.42 233.69,-468.91 233.27,-514.03"/>
-<polygon fill="black" stroke="black" points="229.77,-513.79 233.18,-523.82 236.77,-513.85 229.77,-513.79"/>
-<text text-anchor="middle" x="232.59" y="-347.87" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- LT14&#45;&gt;Phi_arg13 -->
-<g id="edge12" class="edge">
-<title>LT14&#45;&gt;Phi_arg13</title>
-<path fill="none" stroke="black" d="M256.26,-339.05C279.21,-350.36 316.09,-368.54 343.06,-381.84"/>
-<polygon fill="black" stroke="black" points="341.35,-384.89 351.86,-386.17 344.44,-378.61 341.35,-384.89"/>
-<text text-anchor="middle" x="258.51" y="-341.2" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- If16 -->
-<g id="node10" class="node">
-<title>If16</title>
-<polygon fill="yellow" stroke="none" points="197,-243.07 197,-269.57 273,-269.57 273,-243.07 197,-243.07"/>
-<polygon fill="none" stroke="black" points="197,-243.07 197,-269.57 273,-269.57 273,-243.07 197,-243.07"/>
-<text text-anchor="start" x="230.5" y="-251.27" font-family="Times New Roman,serif" font-size="14.00">If</text>
-<polygon fill="none" stroke="black" points="197,-210.57 197,-243.07 273,-243.07 273,-210.57 197,-210.57"/>
-<polygon fill="yellow" stroke="none" points="202,-215.57 202,-238.07 233.5,-238.07 233.5,-215.57 202,-215.57"/>
-<polygon fill="none" stroke="black" points="202,-215.57 202,-238.07 233.5,-238.07 233.5,-215.57 202,-215.57"/>
-<text text-anchor="start" x="205" y="-221.77" font-family="Times New Roman,serif" font-size="14.00">True</text>
-<polygon fill="yellow" stroke="none" points="233.5,-215.57 233.5,-238.07 268,-238.07 268,-215.57 233.5,-215.57"/>
-<polygon fill="none" stroke="black" points="233.5,-215.57 233.5,-238.07 268,-238.07 268,-215.57 233.5,-215.57"/>
-<text text-anchor="start" x="236.5" y="-221.77" font-family="Times New Roman,serif" font-size="14.00">False</text>
-</g>
-<!-- If16&#45;&gt;Loop11 -->
-<g id="edge13" class="edge">
-<title>If16&#45;&gt;Loop11</title>
-<path fill="none" stroke="red" d="M264.28,-273.52C272.55,-284.3 280.73,-296.83 286,-309.57 293.91,-328.67 297.12,-351.83 298.37,-369.73"/>
-<polygon fill="red" stroke="red" points="294.87,-369.85 298.88,-379.66 301.86,-369.5 294.87,-369.85"/>
-<text text-anchor="middle" x="262.03" y="-275.67" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- If16&#45;&gt;LT14 -->
-<g id="edge14" class="edge">
-<title>If16&#45;&gt;LT14</title>
-<path fill="none" stroke="black" d="M235,-273.39C235,-281.55 235,-290.26 235,-298.21"/>
-<polygon fill="black" stroke="black" points="231.5,-298.02 235,-308.02 238.5,-298.02 231.5,-298.02"/>
-<text text-anchor="middle" x="232.75" y="-275.54" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Div21 -->
-<g id="node11" class="node">
-<title>Div21</title>
-<ellipse fill="none" stroke="black" cx="43" cy="-399.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="43" y="-394.52" font-family="Times New Roman,serif" font-size="14.00">//</text>
-</g>
-<!-- Div21&#45;&gt;Start2 -->
-<g id="edge15" class="edge">
-<title>Div21&#45;&gt;Start2:p2</title>
-<path fill="none" stroke="black" d="M56.22,-415.68C64.22,-425.72 73.84,-439.58 79,-453.57 95.73,-498.87 59.24,-525.18 91,-561.57 140.95,-618.8 253.3,-535.12 265.01,-594.3"/>
-<polygon fill="black" stroke="black" points="261.5,-594.4 265.87,-604.06 268.48,-593.79 261.5,-594.4"/>
-<text text-anchor="middle" x="58.47" y="-417.83" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Con_22 -->
-<g id="node12" class="node">
-<title>Con_22</title>
-<ellipse fill="none" stroke="black" cx="43" cy="-471.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="43" y="-466.52" font-family="Times New Roman,serif" font-size="14.00">#3</text>
-</g>
-<!-- Div21&#45;&gt;Con_22 -->
-<g id="edge16" class="edge">
-<title>Div21&#45;&gt;Con_22</title>
-<path fill="none" stroke="black" d="M43,-417.87C43,-425.16 43,-433.84 43,-442.03"/>
-<polygon fill="black" stroke="black" points="39.5,-441.95 43,-451.95 46.5,-441.95 39.5,-441.95"/>
-<text text-anchor="middle" x="40.75" y="-420.02" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- EQ23 -->
-<g id="node13" class="node">
-<title>EQ23</title>
-<ellipse fill="none" stroke="black" cx="346" cy="-240.07" rx="27" ry="18"/>
-<text text-anchor="middle" x="346" y="-235.02" font-family="Times New Roman,serif" font-size="14.00">==</text>
-</g>
-<!-- EQ23&#45;&gt;Phi_arg13 -->
-<g id="edge17" class="edge">
-<title>EQ23&#45;&gt;Phi_arg13</title>
-<path fill="none" stroke="black" d="M344.71,-258.4C343.62,-279.39 343.3,-315.66 351,-345.57 353.31,-354.54 357.23,-363.78 361.33,-371.99"/>
-<polygon fill="black" stroke="black" points="358.21,-373.56 366.01,-380.73 364.38,-370.26 358.21,-373.56"/>
-<text text-anchor="middle" x="342.46" y="-260.55" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Con_24 -->
-<g id="node14" class="node">
-<title>Con_24</title>
-<ellipse fill="none" stroke="black" cx="387" cy="-327.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="387" y="-322.52" font-family="Times New Roman,serif" font-size="14.00">#5</text>
-</g>
-<!-- EQ23&#45;&gt;Con_24 -->
-<g id="edge18" class="edge">
-<title>EQ23&#45;&gt;Con_24</title>
-<path fill="none" stroke="black" d="M353.91,-257.55C359.69,-269.62 367.66,-286.24 374.33,-300.14"/>
-<polygon fill="black" stroke="black" points="370.98,-301.26 378.46,-308.77 377.3,-298.24 370.98,-301.26"/>
-<text text-anchor="middle" x="351.66" y="-259.7" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- If25 -->
-<g id="node15" class="node">
-<title>If25</title>
-<polygon fill="yellow" stroke="none" points="229,-140.07 229,-166.57 305,-166.57 305,-140.07 229,-140.07"/>
-<polygon fill="none" stroke="black" points="229,-140.07 229,-166.57 305,-166.57 305,-140.07 229,-140.07"/>
-<text text-anchor="start" x="262.5" y="-148.27" font-family="Times New Roman,serif" font-size="14.00">If</text>
-<polygon fill="none" stroke="black" points="229,-107.57 229,-140.07 305,-140.07 305,-107.57 229,-107.57"/>
-<polygon fill="yellow" stroke="none" points="234,-112.57 234,-135.07 265.5,-135.07 265.5,-112.57 234,-112.57"/>
-<polygon fill="none" stroke="black" points="234,-112.57 234,-135.07 265.5,-135.07 265.5,-112.57 234,-112.57"/>
-<text text-anchor="start" x="237" y="-118.77" font-family="Times New Roman,serif" font-size="14.00">True</text>
-<polygon fill="yellow" stroke="none" points="265.5,-112.57 265.5,-135.07 300,-135.07 300,-112.57 265.5,-112.57"/>
-<polygon fill="none" stroke="black" points="265.5,-112.57 265.5,-135.07 300,-135.07 300,-112.57 265.5,-112.57"/>
-<text text-anchor="start" x="268.5" y="-118.77" font-family="Times New Roman,serif" font-size="14.00">False</text>
-</g>
-<!-- If25&#45;&gt;If16 -->
-<g id="edge19" class="edge">
-<title>If25&#45;&gt;If16:p0</title>
-<path fill="none" stroke="red" d="M234.98,-170.32C227.77,-180.06 221.5,-191.38 218.96,-203.38"/>
-<polygon fill="red" stroke="red" points="215.51,-202.74 217.91,-213.06 222.47,-203.49 215.51,-202.74"/>
-<text text-anchor="middle" x="232.73" y="-172.47" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- If25&#45;&gt;EQ23 -->
-<g id="edge20" class="edge">
-<title>If25&#45;&gt;EQ23</title>
-<path fill="none" stroke="black" d="M292.21,-170.3C303.4,-184.61 316.37,-201.18 326.76,-214.47"/>
-<polygon fill="black" stroke="black" points="323.96,-216.57 332.88,-222.29 329.48,-212.26 323.96,-216.57"/>
-<text text-anchor="middle" x="289.96" y="-172.45" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_230&#45;&gt;Store10 -->
-<g id="edge22" class="edge">
-<title>Phi_230&#45;&gt;Store10</title>
-<path fill="none" stroke="blue" d="M164.21,-417.87C165.58,-425.24 167.22,-434.04 168.75,-442.32"/>
-<polygon fill="blue" stroke="blue" points="165.28,-442.78 170.55,-451.97 172.16,-441.5 165.28,-442.78"/>
-<text text-anchor="middle" x="161.96" y="-420.02" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_230&#45;&gt;Loop11 -->
-<g id="edge21" class="edge">
-<title>Phi_230&#45;&gt;Loop11</title>
-<path fill="none" stroke="black" stroke-dasharray="1,5" d="M214.37,-399.57C229.71,-399.57 245.05,-399.57 260.39,-399.57"/>
-<polygon fill="black" stroke="black" points="260.05,-403.07 270.05,-399.57 260.05,-396.07 260.05,-403.07"/>
-<text text-anchor="middle" x="216.62" y="-391.97" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Phi_233 -->
-<g id="node19" class="node">
-<title>Phi_233</title>
-<ellipse fill="lightyellow" stroke="black" cx="69" cy="-49.57" rx="52.89" ry="18"/>
-<text text-anchor="middle" x="69" y="-44.52" font-family="Times New Roman,serif" font-size="14.00">MemPhi_2</text>
-</g>
-<!-- Store31 -->
-<g id="node17" class="node">
-<title>Store31</title>
-<ellipse fill="none" stroke="black" cx="43" cy="-327.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="43" y="-322.52" font-family="Times New Roman,serif" font-size="14.00">.f =</text>
-</g>
-<!-- Store31&#45;&gt;new9 -->
-<g id="edge25" class="edge">
-<title>Store31&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M56.48,-343.35C67.65,-356.68 82.68,-377.39 89,-398.57"/>
-<path fill="none" stroke="black" d="M89,-400.57C100.9,-440.42 115.61,-486.25 124.9,-514.81"/>
-<polygon fill="black" stroke="black" points="121.51,-515.71 127.94,-524.13 128.17,-513.54 121.51,-515.71"/>
-<text text-anchor="middle" x="58.73" y="-345.5" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Store31&#45;&gt;Div21 -->
-<g id="edge26" class="edge">
-<title>Store31&#45;&gt;Div21</title>
-<path fill="none" stroke="black" d="M43,-345.87C43,-353.16 43,-361.84 43,-370.03"/>
-<polygon fill="black" stroke="black" points="39.5,-369.95 43,-379.95 46.5,-369.95 39.5,-369.95"/>
-<text text-anchor="middle" x="40.75" y="-348.02" font-family="Helvetica,sans-Serif" font-size="8.00">3</text>
-</g>
-<!-- Store31&#45;&gt;Phi_230 -->
-<g id="edge24" class="edge">
-<title>Store31&#45;&gt;Phi_230</title>
-<path fill="none" stroke="blue" d="M62.75,-340.28C79.89,-350.45 105.12,-365.42 125.72,-377.64"/>
-<polygon fill="blue" stroke="blue" points="123.72,-380.52 134.1,-382.61 127.29,-374.5 123.72,-380.52"/>
-<text text-anchor="middle" x="65" y="-342.43" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Region32&#45;&gt;If25 -->
-<g id="edge27" class="edge">
-<title>Region32&#45;&gt;If25:p0</title>
-<path fill="none" stroke="red" d="M249.89,-67.92C249.84,-77.07 249.79,-88.77 249.76,-100.25"/>
-<polygon fill="red" stroke="red" points="246.26,-100.05 249.75,-110.05 253.26,-100.06 246.26,-100.05"/>
-<text text-anchor="middle" x="247.64" y="-70.07" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Region32&#45;&gt;If25 -->
-<g id="edge28" class="edge">
-<title>Region32&#45;&gt;If25:p1</title>
-<path fill="none" stroke="red" d="M265.22,-67.95C271.77,-76.79 278.57,-88.22 281.39,-100.32"/>
-<polygon fill="red" stroke="red" points="277.9,-100.55 282.57,-110.06 284.84,-99.72 277.9,-100.55"/>
-<text text-anchor="middle" x="262.97" y="-70.1" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Phi_233&#45;&gt;Phi_230 -->
-<g id="edge31" class="edge">
-<title>Phi_233&#45;&gt;Phi_230</title>
-<path fill="none" stroke="blue" d="M117.06,-66.52C146.85,-77.29 181.4,-91.65 192,-103.57 212.65,-126.78 191.64,-147.08 212,-170.57 237.01,-199.41 269.42,-174.4 290,-206.57 323.6,-259.09 310.68,-297.47 271,-345.57 256.18,-363.53 233.82,-375.83 213.13,-384.03"/>
-<polygon fill="blue" stroke="blue" points="118.37,-63.28 107.78,-63.24 116.04,-69.87 118.37,-63.28"/>
-<polygon fill="blue" stroke="blue" points="212.09,-380.68 203.93,-387.42 214.52,-387.25 212.09,-380.68"/>
-<text text-anchor="middle" x="108.6" y="-64.88" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Phi_233&#45;&gt;Store31 -->
-<g id="edge30" class="edge">
-<title>Phi_233&#45;&gt;Store31</title>
-<path fill="none" stroke="blue" d="M67.37,-67.83C63.02,-114.01 51.09,-240.72 45.7,-297.9"/>
-<polygon fill="blue" stroke="blue" points="42.22,-297.52 44.77,-307.8 49.19,-298.17 42.22,-297.52"/>
-<text text-anchor="middle" x="65.12" y="-69.98" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_233&#45;&gt;Region32 -->
-<g id="edge29" class="edge">
-<title>Phi_233&#45;&gt;Region32</title>
-<path fill="none" stroke="black" stroke-dasharray="1,5" d="M89.57,-32.51C103.01,-22.52 121.45,-10.85 140,-5.57 163.08,1.01 171.32,2.28 194,-5.57 205.22,-9.45 215.9,-16.6 224.86,-24.03"/>
-<polygon fill="black" stroke="black" points="222.28,-26.42 232.09,-30.44 226.93,-21.19 222.28,-26.42"/>
-<text text-anchor="middle" x="87.32" y="-24.91" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Sub35&#45;&gt;Phi_arg13 -->
-<g id="edge32" class="edge">
-<title>Sub35&#45;&gt;Phi_arg13</title>
-<path fill="none" stroke="black" d="M434.35,-349.61C424.46,-358.05 413.06,-367.79 403.03,-376.34"/>
-<polygon fill="black" stroke="black" points="436.32,-352.53 441.65,-343.38 431.77,-347.21 436.32,-352.53"/>
-<polygon fill="black" stroke="black" points="400.78,-373.66 395.45,-382.82 405.33,-378.98 400.78,-373.66"/>
-<text text-anchor="middle" x="440.55" y="-344.55" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Con_36 -->
-<g id="node21" class="node">
-<title>Con_36</title>
-<ellipse fill="none" stroke="black" cx="459" cy="-399.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="459" y="-394.52" font-family="Times New Roman,serif" font-size="14.00">#1</text>
-</g>
-<!-- Sub35&#45;&gt;Con_36 -->
-<g id="edge33" class="edge">
-<title>Sub35&#45;&gt;Con_36</title>
-<path fill="none" stroke="black" d="M459,-345.87C459,-353.16 459,-361.84 459,-370.03"/>
-<polygon fill="black" stroke="black" points="455.5,-369.95 459,-379.95 462.5,-369.95 455.5,-369.95"/>
-<text text-anchor="middle" x="456.75" y="-348.02" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Return37&#45;&gt;MemMerge -->
-<g id="edge36" class="edge">
-<title>Return37&#45;&gt;MemMerge</title>
-<path fill="none" stroke="blue" d="M89,-241.07C86.12,-264.36 101.49,-285.96 117.39,-301.62"/>
-<polygon fill="blue" stroke="blue" points="114.82,-304.01 124.55,-308.22 119.57,-298.86 114.82,-304.01"/>
-<text text-anchor="middle" x="86.75" y="-233.47" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Return37&#45;&gt;new9 -->
-<g id="edge35" class="edge">
-<title>Return37&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M89,-241.07C84.7,-275.8 78.53,-365.17 89,-398.57"/>
-<path fill="none" stroke="black" d="M137.42,-155.26C119.26,-173.82 93.67,-205.3 89,-239.07"/>
-<text text-anchor="middle" x="86.75" y="-243.22" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Return37&#45;&gt;If16 -->
-<g id="edge34" class="edge">
-<title>Return37&#45;&gt;If16:p1</title>
-<path fill="none" stroke="red" d="M177.98,-155.47C198.53,-171.78 228.14,-195.38 242.42,-207.22"/>
-<polygon fill="red" stroke="red" points="239.8,-209.58 249.61,-213.56 244.43,-204.33 239.8,-209.58"/>
-<text text-anchor="middle" x="175.73" y="-157.62" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-</g>
-</svg>
+<svg aria-label="Compiler graph" width="890" height="1532" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 890 1532" style="font-family: sans-serif;"><style>
+ html, body { height:100%; margin:0; font-family:sans-serif; }
+ .viewer { height:100%; display:grid; grid-template-rows:auto minmax(0,1fr) auto; }
+ .source { padding:8px; border-bottom:1px solid #ccc; }
+ #program { width:min(600px,80vw); vertical-align:middle; }
+ #status { margin-top:4px; }
+ #graph { min-height:0; overflow:hidden; position:relative; background:#fafbfc; }
+ #elk { width:100%; height:100%; }
+ #graph svg { display:block; }
+ .tools { display:flex; flex-wrap:wrap; align-items:center; gap:14px; margin-top:8px; font-size:12px; }
+ .hint { color:#616c78; }
+ .ctrl { color:#b63838; } .mem { color:#2867b2; } .data { color:#536477; }
+ .edge { fill:none; stroke-width:1.5; }
+ .edge.CTRL { stroke-width:2; }
+ .edge.ASSOC { stroke-dasharray:4 4; }
+ .edge.PARSER { stroke-dasharray:5 4; }
+ .parser rect { fill:#f6f0ff; stroke:#7956a5; stroke-width:1.5; stroke-dasharray:5 4; }
+ .edge.selected { stroke-width:3.5; }
+ .edge.bundle { stroke-width:4; }
+ .edge.bundle.selected { stroke-width:6; }
+ .edge-hit { fill:none; stroke:transparent; stroke-width:12; vector-effect:non-scaling-stroke; pointer-events:stroke; cursor:pointer; }
+ .edge-jump { fill:transparent; pointer-events:all; cursor:pointer; }
+ .node { cursor:pointer; }
+ .box { stroke:#758191; stroke-width:1; }
+ .node.held .box { stroke-dasharray:5 3; }
+ .node.near .box { stroke:#c18221; stroke-width:2; }
+ .node.focus .box { stroke:#9c4900; stroke-width:3; }
+ .node.selected .box { stroke:#1569b9; stroke-width:3; }
+ .node.folded .box { stroke-width:4; }
+ .node.folding .box { fill:#f4ccd7; }
+ .fold-tag { font-size:9px; font-weight:700; fill:#963751; }
+ .peep-area { fill:#fff3d9; fill-opacity:.8; stroke:#c18221; stroke-width:2; pointer-events:none; }
+ .node.peep-edit .box { stroke:#9c4900; stroke-width:3; }
+ .node.error .box { stroke:#b42318; stroke-width:4; }
+ #event.error { color:#b42318; font-weight:600; white-space:pre-wrap; overflow-wrap:anywhere; }
+ .peep-ghosts { pointer-events:none; }
+ .region-box { stroke:#9da9b8; stroke-width:1.5; }
+ .fold-btn { cursor:pointer; }
+ .fold-btn rect { fill:white; stroke:#596674; }
+ .fold-btn text { font-size:14px; fill:#152330; }
+ .fold-btn:focus rect { stroke:#1569b9; stroke-width:2; }
+ .shortcut { cursor:pointer; }
+ .shortcut path { fill:none; stroke-width:1.5; }
+ .shortcut rect { fill:#fff8ec; stroke:#b63838; stroke-dasharray:3 2; }
+ .shortcut text { font-size:11px; fill:#783030; }
+ .shortcut.selected rect, .shortcut:focus rect { stroke-width:2.5; }
+ .label { font-size:12px; fill:#152330; font-weight:600; }
+ .node-id { font-size:10px; fill:#596674; font-weight:400; }
+ .type { font-size:11px; fill:#455768; }
+ .port { stroke:#536477; stroke-width:1; }
+ .row { stroke:#b6afcf; stroke-width:1; }
+ .bind { font-size:12px; fill:#152330; }
+ .slot { font-size:10px; fill:#364352; paint-order:stroke; stroke:#fafbfc; stroke-width:3; }
+ #detail { position:absolute; top:8px; right:8px; margin:0; padding:12px; max-width:320px;
+ max-height:45%; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere;
+ background:#fffffff2; border:1px solid #bac5d0; border-radius:4px; font-size:12px; }
+ .controls { display:flex; flex-wrap:wrap; justify-content:center; align-items:center; gap:6px; padding:6px; }
+ .button { color:white; background:black; font-size:20px; min-width:30px; }
+ .button:disabled { background:grey; }
+ .count { font-size:20px; min-width:35px; text-align:center; }
+ #N { width:6ch; }
+ #scrub { width:clamp(120px,35vw,600px); }
+ </style><defs><marker id="arrow-CTRL" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#b63838"/></marker><marker id="arrow-DATA" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#536477"/></marker><marker id="arrow-MEM" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#2867b2"/></marker><marker id="arrow-ASSOC" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#9396a3"/></marker><marker id="arrow-PARSER" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#7956a5"/></marker></defs><rect width="100%" height="100%" fill="rgb(250, 251, 252)"/><g><g class="regions" style="opacity: 1;"><g class="region" transform="translate(41,277)"><rect class="region-box" rx="8" width="803" height="944" fill="#f1f6fc"/></g><g class="region" transform="translate(276,800)"><rect class="region-box" rx="8" width="503" height="374" fill="#f2f7ef"/></g></g><rect class="peep-area" rx="36" style="opacity: 0;"/><g class="edges"><path class="edge MEM" id="e1i1" d="M275,118 L275,128 L854,128 L854,1236 L795,1236 L795,1274" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#1[1] → #6 · MEM</title></path><path class="edge MEM" id="e1i2" d="M459,495 L459,505 L789,505 L789,1246 L825,1246 L825,1274" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#1[2] → #230 · MEM</title></path><path class="edge CTRL" id="e3i0" d="M285,1431 C285,1455 445,1458 445,1482" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#3[0] → #37 · CTRL</title></path><path class="edge CTRL" id="e9i0" d="M155,118 L155,148 L530,148 L530,166" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#9[0] → #5 · CTRL</title></path><path class="edge MEM" id="e10i1" d="M275,118 L275,128 L307,128 L307,262 L427,262 L427,335" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#10[1] → #6 · MEM</title></path><path class="edge DATA" id="e10i2" d="M530,222 L530,232 L451,232 L451,335" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#10[2] → #9 · DATA</title></path><path class="edge DATA" id="e10i3" d="M237,222 L237,252 L475,252 L475,335" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#10[3] → #4 · DATA</title></path><path class="edge CTRL" id="e11i1" d="M155,118 L155,439" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#11[1] → #5 · CTRL</title></path><path class="edge CTRL" id="e11i2" d="M438,1139 L438,1149 L832,1149 L832,414 L185,414 L185,442" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#11[2] → #32 · CTRL</title></path><path class="edge DATA" id="e13i1" d="M395,118 L395,138 L166,138 L166,262 L287,262 L287,439" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#13[1] → #7 · DATA</title></path><path class="edge DATA" id="e13i2" d="M378,596 L378,606 L822,606 L822,422 L327,422 L327,442" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#13[2] → #35 · DATA</title></path><path class="edge DATA" id="e14i1" d="M237,222 L237,252 L73,252 L73,515 L226,515 L226,543" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#14[1] → #4 · DATA</title></path><path class="edge DATA" id="e14i2" d="M307,495 L307,515 L256,515 L256,543" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#14[2] → #13 · DATA</title></path><path class="edge CTRL" id="e16i0" d="M155,495 L155,647" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#16[0] → #11 · CTRL</title></path><path class="edge DATA" id="e16i1" d="M226,599 L226,609 L235,609 L235,647" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#16[1] → #14 · DATA</title></path><path class="edge DATA" id="e21i1" d="M395,118 L395,138 L655,138 L655,242 L696,242 L696,834" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#21[1] → #7 · DATA</title></path><path class="edge DATA" id="e21i2" d="M726,222 L726,834" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#21[2] → #22 · DATA</title></path><path class="edge DATA" id="e23i1" d="M307,495 L307,515 L448,515 L448,834" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#23[1] → #13 · DATA</title></path><path class="edge DATA" id="e23i2" d="M378,222 L378,242 L539,242 L539,757 L478,757 L478,834" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#23[2] → #24 · DATA</title></path><path class="edge CTRL" id="e25i0" d="M135,747 L135,757 L368,757 L368,938" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#25[0] → #8 · CTRL</title></path><path class="edge DATA" id="e25i1" d="M448,890 L448,938" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#25[1] → #23 · DATA</title></path><path class="edge MEM" id="e31i1" d="M459,495 L459,505 L614,505 L614,949" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#31[1] → #230 · MEM</title></path><path class="edge DATA" id="e31i2" d="M530,222 L530,232 L625,232 L625,900 L638,900 L638,949" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#31[2] → #9 · DATA</title></path><path class="edge DATA" id="e31i3" d="M696,890 L696,900 L662,900 L662,949" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#31[3] → #21 · DATA</title></path><path class="edge CTRL" id="e32i1" d="M348,1038 L348,1048 L438,1048 L438,1086" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#32[1] → #15 · CTRL</title></path><path class="edge CTRL" id="e32i2" d="M468,1038 L468,1086" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#32[2] → #17 · CTRL</title></path><path class="edge DATA" id="e35i1" d="M307,495 L307,515 L378,515 L378,543" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#35[1] → #13 · DATA</title></path><path class="edge DATA" id="e35i2" d="M84,222 L84,505 L408,505 L408,543" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#35[2] → #36 · DATA</title></path><path class="edge CTRL" id="e37i0" d="M255,747 L255,1378" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#37[0] → #12 · CTRL</title></path><path class="edge MEM" id="e37i1" d="M795,1330 L795,1340 L285,1340 L285,1378" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#37[1] → #1 · MEM</title></path><path class="edge DATA" id="e37i2" d="M530,222 L530,232 L865,232 L865,1350 L315,1350 L315,1378" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#37[2] → #9 · DATA</title></path><path class="edge MEM" id="e230i1" d="M439,391 L439,439" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#230[1] → #10 · MEM</title></path><path class="edge MEM" id="e230i2" d="M590,1139 L590,1149 L812,1149 L812,430 L479,430 L479,442" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#230[2] → #233 · MEM</title></path><path class="edge MEM" id="e233i1" d="M626,1005 L626,1048 L570,1048 L570,1086" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#233[1] → #31 · MEM</title></path><path class="edge MEM" id="e233i2" d="M459,495 L459,505 L789,505 L789,757 L766,757 L766,1058 L610,1058 L610,1086" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#233[2] → #230 · MEM</title></path></g><g class="edge-hits"/><g class="parser" style="opacity: 1;"/><g class="nodes"><g class="node" id="n1" data-id="1" transform="translate(735,1280)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemMerge</tspan><tspan class="node-id">  #1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#1 MemMerge
+Type not computed
+
+[0] → — DATA
+[1] → #6 MEM
+[2] → #230 MEM</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n2" data-id="2" transform="translate(95,24)" style="opacity: 1;"><path class="box" d="M0,0H360V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="180" y="18"><tspan>Start</tspan><tspan class="node-id">  #2</tspan></text><text class="type" text-anchor="middle" y="35" x="180"/><title>#2 Start
+Type not computed
+
+</title></g><g class="node" id="n3" data-id="3" transform="translate(409,1482)" style="opacity: 1;"><path class="box" d="M0,0H72V26H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="36" y="17"><tspan>Stop</tspan><tspan class="node-id">  #3</tspan></text><text class="type" text-anchor="middle" y="35" x="36"/><title>#3 Stop
+Type not computed
+
+[0] → #37 CTRL</title><circle class="port" cx="36" cy="0" r="3" fill="#536477"/><text class="slot" x="36" y="-7" text-anchor="middle">0</text></g><g class="node" id="n4" data-id="4" transform="translate(177,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#0</tspan><tspan class="node-id">  #4</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#4 #0
+Type not computed
+
+</title></g><g class="node" id="n5" data-id="5" transform="translate(95,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$ctrl</tspan><tspan class="node-id">  #5/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#5 $ctrl
+Projection 0 of #2
+Type not computed
+
+[0] → #2 CTRL</title></g><g class="node" id="n6" data-id="6" transform="translate(215,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$mem</tspan><tspan class="node-id">  #6/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#6 $mem
+Projection 1 of #2
+Type not computed
+
+[0] → #2 MEM</title></g><g class="node" id="n7" data-id="7" transform="translate(335,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>arg</tspan><tspan class="node-id">  #7/2</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#7 arg
+Projection 2 of #2
+Type not computed
+
+[0] → #2 DATA</title></g><g class="node" id="n8" data-id="8" transform="translate(75,697)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>True</tspan><tspan class="node-id">  #8/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#8 True
+Projection 0 of #16
+Type not computed
+
+[0] → #16 CTRL</title></g><g class="node" id="n9" data-id="9" transform="translate(470,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>new S</tspan><tspan class="node-id">  #9</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#9 new S
+Type not computed
+
+[0] → #5 CTRL</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n10" data-id="10" transform="translate(379,341)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f =</tspan><tspan class="node-id">  #10</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#10 .f =
+Type not computed
+
+[0] → — DATA
+[1] → #6 MEM
+[2] → #9 DATA
+[3] → #4 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n11" data-id="11" transform="translate(95,445)" style="opacity: 1;"><path class="box" d="M20,0H100Q120,0 120,20V24Q120,44 100,44H20Q0,44 0,24V20Q0,0 20,0Z" fill="#ffe0ab"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Loop</tspan><tspan class="node-id">  #11</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#11 Loop
+Type not computed
+
+[0] → — DATA
+[1] → #5 CTRL
+[2] → #32 CTRL</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n12" data-id="12" transform="translate(195,697)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>False</tspan><tspan class="node-id">  #12/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#12 False
+Projection 1 of #16
+Type not computed
+
+[0] → #16 CTRL</title></g><g class="node" id="n13" data-id="13" transform="translate(247,445)" style="opacity: 1;"><path class="box" d="M12,0H108L120,22L108,44H12L0,22Z" fill="#f5e4fa"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>φ_arg</tspan><tspan class="node-id">  #13</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#13 φ_arg
+Type not computed
+
+[0] → #11 ASSOC
+[1] → #7 DATA
+[2] → #35 DATA</title><circle class="port" cx="-3" cy="22" r="3" fill="#536477"/><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><path class="reg" fill="none" stroke="#b63838" d="M-3,22H-18m4,-3l-4,3l4,3"><title>[0] → #11</title></path><text class="slot" x="-10" y="15" text-anchor="middle">0</text><text class="slot" x="40" y="-10" text-anchor="middle">1</text><text class="slot" x="80" y="-10" text-anchor="middle">2</text></g><g class="node" id="n14" data-id="14" transform="translate(166,549)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>&lt;</tspan><tspan class="node-id">  #14</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#14 &lt;
+Type not computed
+
+[0] → — DATA
+[1] → #4 DATA
+[2] → #13 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n15" data-id="15" transform="translate(288,988)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>True</tspan><tspan class="node-id">  #15/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#15 True
+Projection 0 of #25
+Type not computed
+
+[0] → #25 CTRL</title></g><g class="node" id="n16" data-id="16" transform="translate(75,653)" style="opacity: 1;"><path class="box" d="M0,0H240V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="120" y="18"><tspan>If</tspan><tspan class="node-id">  #16</tspan></text><text class="type" text-anchor="middle" y="35" x="120"/><title>#16 If
+Type not computed
+
+[0] → #11 CTRL
+[1] → #14 DATA</title><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><circle class="port" cx="160" cy="-3" r="3" fill="#536477"/><text class="slot" x="80" y="-10" text-anchor="middle">0</text><text class="slot" x="160" y="-10" text-anchor="middle">1</text></g><g class="node" id="n17" data-id="17" transform="translate(408,988)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>False</tspan><tspan class="node-id">  #17/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#17 False
+Projection 1 of #25
+Type not computed
+
+[0] → #25 CTRL</title></g><g class="node" id="n21" data-id="21" transform="translate(636,840)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>//</tspan><tspan class="node-id">  #21</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#21 //
+Type not computed
+
+[0] → — DATA
+[1] → #7 DATA
+[2] → #22 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n22" data-id="22" transform="translate(666,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#3</tspan><tspan class="node-id">  #22</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#22 #3
+Type not computed
+
+</title></g><g class="node" id="n23" data-id="23" transform="translate(388,840)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>==</tspan><tspan class="node-id">  #23</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#23 ==
+Type not computed
+
+[0] → — DATA
+[1] → #13 DATA
+[2] → #24 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n24" data-id="24" transform="translate(318,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#5</tspan><tspan class="node-id">  #24</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#24 #5
+Type not computed
+
+</title></g><g class="node" id="n25" data-id="25" transform="translate(288,944)" style="opacity: 1;"><path class="box" d="M0,0H240V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="120" y="18"><tspan>If</tspan><tspan class="node-id">  #25</tspan></text><text class="type" text-anchor="middle" y="35" x="120"/><title>#25 If
+Type not computed
+
+[0] → #8 CTRL
+[1] → #23 DATA</title><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><circle class="port" cx="160" cy="-3" r="3" fill="#536477"/><text class="slot" x="80" y="-10" text-anchor="middle">0</text><text class="slot" x="160" y="-10" text-anchor="middle">1</text></g><g class="node" id="n31" data-id="31" transform="translate(566,955)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f =</tspan><tspan class="node-id">  #31</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#31 .f =
+Type not computed
+
+[0] → — DATA
+[1] → #230 MEM
+[2] → #9 DATA
+[3] → #21 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="white"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n32" data-id="32" transform="translate(378,1092)" style="opacity: 1;"><path class="box" d="M12,0H108L120,44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Region</tspan><tspan class="node-id">  #32</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#32 Region
+Type not computed
+
+[0] → — DATA
+[1] → #15 CTRL
+[2] → #17 CTRL</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n35" data-id="35" transform="translate(318,549)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>-</tspan><tspan class="node-id">  #35</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#35 -
+Type not computed
+
+[0] → — DATA
+[1] → #13 DATA
+[2] → #36 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n36" data-id="36" transform="translate(24,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#1</tspan><tspan class="node-id">  #36</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#36 #1
+Type not computed
+
+</title></g><g class="node" id="n37" data-id="37" transform="translate(225,1384)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Return</tspan><tspan class="node-id">  #37</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#37 Return
+Type not computed
+
+[0] → #12 CTRL
+[1] → #1 MEM
+[2] → #9 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n230" data-id="230" transform="translate(399,445)" style="opacity: 1;"><path class="box" d="M12,0H108L120,22L108,44H12L0,22Z" fill="#f5e4fa"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemPhi_2</tspan><tspan class="node-id">  #230</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#230 MemPhi_2
+Type not computed
+
+[0] → #11 ASSOC
+[1] → #10 MEM
+[2] → #233 MEM</title><circle class="port" cx="-3" cy="22" r="3" fill="#536477"/><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><path class="reg" fill="none" stroke="#b63838" d="M-3,22H-18m4,-3l-4,3l4,3"><title>[0] → #11</title></path><text class="slot" x="-10" y="15" text-anchor="middle">0</text><text class="slot" x="40" y="-10" text-anchor="middle">1</text><text class="slot" x="80" y="-10" text-anchor="middle">2</text></g><g class="node" id="n233" data-id="233" transform="translate(530,1092)" style="opacity: 1;"><path class="box" d="M12,0H108L120,22L108,44H12L0,22Z" fill="#f5e4fa"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemPhi_2</tspan><tspan class="node-id">  #233</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#233 MemPhi_2
+Type not computed
+
+[0] → #32 ASSOC
+[1] → #31 MEM
+[2] → #230 MEM</title><circle class="port" cx="-3" cy="22" r="3" fill="#536477"/><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><path class="reg" fill="none" stroke="#b63838" d="M-3,22H-18m4,-3l-4,3l4,3"><title>[0] → #32</title></path><text class="slot" x="-10" y="15" text-anchor="middle">0</text><text class="slot" x="40" y="-10" text-anchor="middle">1</text><text class="slot" x="80" y="-10" text-anchor="middle">2</text></g></g><g class="region-heads" style="opacity: 1;"><g class="region-head" transform="translate(41,277)"><text class="label" x="26" y="17"><tspan>Loop</tspan><tspan class="node-id">  #11</tspan></text><title>Loop · 17 nodes</title><g class="fold-btn" role="button" tabindex="0" transform="translate(4,4)" aria-label="Fold region #11"><rect width="16" height="16" rx="2"/><text x="8" y="12" text-anchor="middle">−</text><title>Fold region</title></g></g><g class="region-head" transform="translate(276,800)"><text class="label" x="26" y="17"><tspan>If</tspan><tspan class="node-id">  #25</tspan></text><title>If · 8 nodes</title><g class="fold-btn" role="button" tabindex="0" transform="translate(4,4)" aria-label="Fold region #25"><rect width="16" height="16" rx="2"/><text x="8" y="12" text-anchor="middle">−</text><title>Fold region</title></g></g></g><g class="shortcuts" style="opacity: 1;"/><g class="peep-ghosts" pointer-events="none"/></g></svg>
diff --git a/chapter11/docs/graph5.json b/chapter11/docs/graph5.json
new file mode 100644
index 00000000..2211cb19
--- /dev/null
+++ b/chapter11/docs/graph5.json
@@ -0,0 +1,42 @@
+{
+ "ver": 1,
+ "comp": "chapter11/docs/graph5.svg",
+ "step": 1,
+ "roots": [],
+ "scope": 0,
+ "nodes": [
+ {"id": 1, "label": "MemMerge", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 11, "role": "CTRL", "label": null}, {"idx": 1, "def": 6, "role": "MEM", "label": null}, {"idx": 2, "def": 230, "role": "MEM", "label": null}], "proj": null},
+ {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null},
+ {"id": 3, "label": "Stop", "type": null, "kind": "STOP", "edges": [{"idx": 0, "def": 37, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 4, "label": "#0", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 5, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}},
+ {"id": 6, "label": "$mem", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 2, "role": "MEM", "label": null}], "proj": {"par": 2, "idx": 1}},
+ {"id": 7, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 2, "role": "DATA", "label": null}], "proj": {"par": 2, "idx": 2}},
+ {"id": 8, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 16, "role": "CTRL", "label": null}], "proj": {"par": 16, "idx": 0}},
+ {"id": 9, "label": "new S", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 10, "label": ".f =", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}, {"idx": 1, "def": 6, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}, {"idx": 3, "def": 4, "role": "DATA", "label": null}], "proj": null},
+ {"id": 11, "label": "Loop", "type": null, "kind": "LOOP", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 5, "role": "CTRL", "label": null}, {"idx": 2, "def": 32, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 12, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 16, "role": "CTRL", "label": null}], "proj": {"par": 16, "idx": 1}},
+ {"id": 13, "label": "φ_arg", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 11, "role": "ASSOC", "label": null}, {"idx": 1, "def": 7, "role": "DATA", "label": null}, {"idx": 2, "def": 35, "role": "DATA", "label": null}], "proj": null},
+ {"id": 14, "label": "<", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 11, "role": "CTRL", "label": null}, {"idx": 1, "def": 4, "role": "DATA", "label": null}, {"idx": 2, "def": 13, "role": "DATA", "label": null}], "proj": null},
+ {"id": 15, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 25, "role": "CTRL", "label": null}], "proj": {"par": 25, "idx": 0}},
+ {"id": 16, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 11, "role": "CTRL", "label": null}, {"idx": 1, "def": 14, "role": "DATA", "label": null}], "proj": null},
+ {"id": 17, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 25, "role": "CTRL", "label": null}], "proj": {"par": 25, "idx": 1}},
+ {"id": 21, "label": "//", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}, {"idx": 1, "def": 7, "role": "DATA", "label": null}, {"idx": 2, "def": 22, "role": "DATA", "label": null}], "proj": null},
+ {"id": 22, "label": "#3", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 23, "label": "==", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 11, "role": "CTRL", "label": null}, {"idx": 1, "def": 13, "role": "DATA", "label": null}, {"idx": 2, "def": 24, "role": "DATA", "label": null}], "proj": null},
+ {"id": 24, "label": "#5", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 25, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 8, "role": "CTRL", "label": null}, {"idx": 1, "def": 23, "role": "DATA", "label": null}], "proj": null},
+ {"id": 31, "label": ".f =", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 11, "role": "CTRL", "label": null}, {"idx": 1, "def": 230, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}, {"idx": 3, "def": 21, "role": "DATA", "label": null}], "proj": null},
+ {"id": 32, "label": "Region", "type": null, "kind": "REGION", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 15, "role": "CTRL", "label": null}, {"idx": 2, "def": 17, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 35, "label": "-", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 11, "role": "CTRL", "label": null}, {"idx": 1, "def": 13, "role": "DATA", "label": null}, {"idx": 2, "def": 36, "role": "DATA", "label": null}], "proj": null},
+ {"id": 36, "label": "#1", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 37, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 12, "role": "CTRL", "label": null}, {"idx": 1, "def": 1, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}], "proj": null},
+ {"id": 230, "label": "MemPhi_2", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 11, "role": "ASSOC", "label": null}, {"idx": 1, "def": 10, "role": "MEM", "label": null}, {"idx": 2, "def": 233, "role": "MEM", "label": null}], "proj": null},
+ {"id": 233, "label": "MemPhi_2", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 32, "role": "ASSOC", "label": null}, {"idx": 1, "def": 31, "role": "MEM", "label": null}, {"idx": 2, "def": 230, "role": "MEM", "label": null}], "proj": null}
+ ],
+ "groups": [
+ {"id": 11, "par": 0, "nodes": [1, 8, 11, 12, 13, 14, 16, 23, 31, 35, 230]},
+ {"id": 25, "par": 11, "nodes": [15, 17, 25, 32, 233]}
+ ]
+}
diff --git a/chapter11/docs/graph5.svg b/chapter11/docs/graph5.svg
index 9336ac3e..1669e008 100644
--- a/chapter11/docs/graph5.svg
+++ b/chapter11/docs/graph5.svg
@@ -1,472 +1,187 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
- "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 12.2.0 (20241103.1931)
- -->
-<!-- Title: chapter11 Pages: 1 -->
-<svg width="526pt" height="689pt"
- viewBox="0.00 0.00 526.00 688.57" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 684.57)">
-<title>chapter11</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-684.57 522,-684.57 522,4 -4,4"/>
-<g id="clust1" class="cluster">
-<title>cluster_Nodes</title>
-<polygon fill="none" stroke="black" points="8,-23.57 8,-672.57 510,-672.57 510,-23.57 8,-23.57"/>
-</g>
-<!-- Start2 -->
-<g id="node1" class="node">
-<title>Start2</title>
-<polygon fill="yellow" stroke="none" points="146.38,-634.07 146.38,-660.57 251.62,-660.57 251.62,-634.07 146.38,-634.07"/>
-<polygon fill="none" stroke="black" points="146.38,-634.07 146.38,-660.57 251.62,-660.57 251.62,-634.07 146.38,-634.07"/>
-<text text-anchor="start" x="186.25" y="-642.27" font-family="Times New Roman,serif" font-size="14.00">Start</text>
-<polygon fill="none" stroke="black" points="146.38,-601.57 146.38,-634.07 251.62,-634.07 251.62,-601.57 146.38,-601.57"/>
-<polygon fill="yellow" stroke="none" points="151.38,-606.57 151.38,-629.07 182.12,-629.07 182.12,-606.57 151.38,-606.57"/>
-<polygon fill="none" stroke="black" points="151.38,-606.57 151.38,-629.07 182.12,-629.07 182.12,-606.57 151.38,-606.57"/>
-<text text-anchor="start" x="154.38" y="-612.77" font-family="Times New Roman,serif" font-size="14.00">$ctrl</text>
-<polygon fill="none" stroke="black" points="182.12,-606.57 182.12,-629.07 223.38,-629.07 223.38,-606.57 182.12,-606.57"/>
-<text text-anchor="start" x="185.12" y="-612.77" font-family="Times New Roman,serif" font-size="14.00">$mem</text>
-<polygon fill="none" stroke="black" points="223.38,-606.57 223.38,-629.07 246.62,-629.07 246.62,-606.57 223.38,-606.57"/>
-<text text-anchor="start" x="226.38" y="-612.77" font-family="Times New Roman,serif" font-size="14.00">arg</text>
-</g>
-<!-- MemMerge -->
-<g id="node2" class="node">
-<title>MemMerge</title>
-<polygon fill="none" stroke="black" points="190,-345.57 108,-345.57 108,-309.57 190,-309.57 190,-345.57"/>
-<text text-anchor="middle" x="149" y="-322.52" font-family="Times New Roman,serif" font-size="14.00">MemMerge</text>
-</g>
-<!-- MemMerge&#45;&gt;Start2 -->
-<g id="edge43" class="edge">
-<title>MemMerge&#45;&gt;Start2:p1</title>
-<path fill="none" stroke="blue" d="M157.48,-345.84C162.13,-356.02 167.63,-369.27 171,-381.57 196.5,-474.76 202.31,-502.84 202.73,-594.11"/>
-<polygon fill="blue" stroke="blue" points="199.22,-594.06 202.75,-604.05 206.22,-594.04 199.22,-594.06"/>
-<text text-anchor="middle" x="155.23" y="-347.99" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Loop11 -->
-<g id="node7" class="node">
-<title>Loop11</title>
-<polygon fill="yellow" stroke="black" points="274,-417.57 220,-417.57 220,-381.57 274,-381.57 274,-417.57"/>
-<text text-anchor="middle" x="247" y="-394.52" font-family="Times New Roman,serif" font-size="14.00">Loop</text>
-</g>
-<!-- MemMerge&#45;&gt;Loop11 -->
-<g id="edge45" class="edge">
-<title>MemMerge&#45;&gt;Loop11</title>
-<path fill="none" stroke="green" d="M173.48,-346.05C185.61,-354.72 200.45,-365.32 213.61,-374.72"/>
-<polygon fill="green" stroke="green" points="211.43,-377.46 221.6,-380.43 215.5,-371.76 211.43,-377.46"/>
-<text text-anchor="middle" x="171.23" y="-348.2" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Phi_230 -->
-<g id="node16" class="node">
-<title>Phi_230</title>
-<ellipse fill="lightyellow" stroke="black" cx="109" cy="-399.57" rx="52.89" ry="18"/>
-<text text-anchor="middle" x="109" y="-394.52" font-family="Times New Roman,serif" font-size="14.00">MemPhi_2</text>
-</g>
-<!-- MemMerge&#45;&gt;Phi_230 -->
-<g id="edge44" class="edge">
-<title>MemMerge&#45;&gt;Phi_230</title>
-<path fill="none" stroke="blue" d="M139.11,-345.87C134.66,-353.67 129.29,-363.06 124.33,-371.74"/>
-<polygon fill="blue" stroke="blue" points="121.45,-369.73 119.52,-380.15 127.53,-373.2 121.45,-369.73"/>
-<text text-anchor="middle" x="136.86" y="-348.02" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Stop3 -->
-<g id="node3" class="node">
-<title>Stop3</title>
-<polygon fill="yellow" stroke="black" points="194,-67.57 140,-67.57 140,-31.57 194,-31.57 194,-67.57"/>
-<text text-anchor="middle" x="167" y="-44.52" font-family="Times New Roman,serif" font-size="14.00">Stop</text>
-</g>
-<!-- Return37 -->
-<g id="node22" class="node">
-<title>Return37</title>
-<polygon fill="yellow" stroke="black" points="183,-155.07 129,-155.07 129,-119.07 183,-119.07 183,-155.07"/>
-<text text-anchor="middle" x="156" y="-132.02" font-family="Times New Roman,serif" font-size="14.00">Return</text>
-</g>
-<!-- Stop3&#45;&gt;Return37 -->
-<g id="edge1" class="edge">
-<title>Stop3&#45;&gt;Return37</title>
-<path fill="none" stroke="red" d="M164.77,-67.87C163.31,-79.22 161.37,-94.35 159.68,-107.47"/>
-<polygon fill="red" stroke="red" points="156.22,-106.92 158.42,-117.29 163.16,-107.82 156.22,-106.92"/>
-<text text-anchor="middle" x="162.52" y="-70.02" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Con_4 -->
-<g id="node4" class="node">
-<title>Con_4</title>
-<ellipse fill="none" stroke="black" cx="241" cy="-543.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="241" y="-538.52" font-family="Times New Roman,serif" font-size="14.00">#0</text>
-</g>
-<!-- new9 -->
-<g id="node5" class="node">
-<title>new9</title>
-<ellipse fill="none" stroke="black" cx="122" cy="-543.57" rx="33.95" ry="18"/>
-<text text-anchor="middle" x="122" y="-538.52" font-family="Times New Roman,serif" font-size="14.00">new S</text>
-</g>
-<!-- new9&#45;&gt;Start2 -->
-<g id="edge2" class="edge">
-<title>new9&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="green" d="M140.72,-558.99C150.49,-567.91 161.22,-580.35 165.17,-594.47"/>
-<polygon fill="green" stroke="green" points="161.67,-594.66 166.54,-604.07 168.6,-593.67 161.67,-594.66"/>
-<text text-anchor="middle" x="138.47" y="-561.14" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Store10 -->
-<g id="node6" class="node">
-<title>Store10</title>
-<ellipse fill="none" stroke="black" cx="128" cy="-471.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="128" y="-466.52" font-family="Times New Roman,serif" font-size="14.00">.f =</text>
-</g>
-<!-- Store10&#45;&gt;Start2 -->
-<g id="edge3" class="edge">
-<title>Store10&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M142.02,-487.46C150.41,-497.42 160.33,-511.27 165,-525.57 174.79,-555.54 168.59,-567.3 167.06,-594.37"/>
-<polygon fill="red" stroke="red" points="163.57,-593.96 166.79,-604.05 170.57,-594.15 163.57,-593.96"/>
-<text text-anchor="middle" x="144.27" y="-489.61" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Store10&#45;&gt;Con_4 -->
-<g id="edge6" class="edge">
-<title>Store10&#45;&gt;Con_4</title>
-<path fill="none" stroke="black" d="M147.43,-484.6C165.24,-495.63 191.86,-512.12 212.15,-524.7"/>
-<polygon fill="black" stroke="black" points="210.2,-527.6 220.54,-529.89 213.88,-521.65 210.2,-527.6"/>
-<text text-anchor="middle" x="149.68" y="-486.75" font-family="Helvetica,sans-Serif" font-size="8.00">3</text>
-</g>
-<!-- Store10&#45;&gt;new9 -->
-<g id="edge5" class="edge">
-<title>Store10&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M126.52,-489.87C125.89,-497.16 125.15,-505.84 124.45,-514.03"/>
-<polygon fill="black" stroke="black" points="120.96,-513.69 123.6,-523.95 127.94,-514.29 120.96,-513.69"/>
-<text text-anchor="middle" x="124.27" y="-492.02" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Loop11&#45;&gt;Start2 -->
-<g id="edge7" class="edge">
-<title>Loop11&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M257.71,-417.74C275.77,-449.11 307.46,-516.61 277,-561.57 249.83,-601.66 179.64,-560.76 168.31,-594.59"/>
-<polygon fill="red" stroke="red" points="164.9,-593.67 166.96,-604.07 171.83,-594.66 164.9,-593.67"/>
-<text text-anchor="middle" x="255.46" y="-419.89" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Region32 -->
-<g id="node18" class="node">
-<title>Region32</title>
-<polygon fill="yellow" stroke="black" points="277.5,-67.57 222.5,-67.57 222.5,-31.57 277.5,-31.57 277.5,-67.57"/>
-<text text-anchor="middle" x="250" y="-44.52" font-family="Times New Roman,serif" font-size="14.00">Region</text>
-</g>
-<!-- Loop11&#45;&gt;Region32 -->
-<g id="edge8" class="edge">
-<title>Loop11&#45;&gt;Region32</title>
-<path fill="none" stroke="red" d="M259.49,-381.16C271.43,-362.17 285.63,-331.55 271,-309.57 248.04,-275.07 216.63,-300.33 185,-273.57 123.24,-221.32 74.87,-170.7 120,-103.57 122.76,-99.46 174.37,-79.22 211.72,-64.98"/>
-<polygon fill="red" stroke="red" points="212.79,-68.32 220.89,-61.49 210.3,-61.77 212.79,-68.32"/>
-<text text-anchor="middle" x="257.24" y="-373.56" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Phi_arg13 -->
-<g id="node8" class="node">
-<title>Phi_arg13</title>
-<ellipse fill="lightyellow" stroke="black" cx="325" cy="-399.57" rx="32.93" ry="18"/>
-<text text-anchor="middle" x="325" y="-394.52" font-family="Times New Roman,serif" font-size="14.00">φ_arg</text>
-</g>
-<!-- Phi_arg13&#45;&gt;Start2 -->
-<g id="edge10" class="edge">
-<title>Phi_arg13&#45;&gt;Start2:p2</title>
-<path fill="none" stroke="black" d="M326.47,-417.98C329.72,-467.11 332.08,-604.13 258.97,-616.86"/>
-<polygon fill="black" stroke="black" points="258.81,-613.36 249.13,-617.69 259.39,-620.34 258.81,-613.36"/>
-<text text-anchor="middle" x="324.22" y="-420.13" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_arg13&#45;&gt;Loop11 -->
-<g id="edge9" class="edge">
-<title>Phi_arg13&#45;&gt;Loop11</title>
-<path fill="none" stroke="black" stroke-dasharray="1,5" d="M291.81,-399.57C289.82,-399.57 287.82,-399.57 285.83,-399.57"/>
-<polygon fill="black" stroke="black" points="285.94,-396.07 275.94,-399.57 285.94,-403.07 285.94,-396.07"/>
-<text text-anchor="middle" x="289.56" y="-391.97" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Sub35 -->
-<g id="node20" class="node">
-<title>Sub35</title>
-<ellipse fill="none" stroke="black" cx="439" cy="-327.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="439" y="-322.52" font-family="Times New Roman,serif" font-size="14.00">&#45;</text>
-</g>
-<!-- LT14 -->
-<g id="node9" class="node">
-<title>LT14</title>
-<ellipse fill="none" stroke="black" cx="235" cy="-327.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="235" y="-322.52" font-family="Times New Roman,serif" font-size="14.00">&lt;</text>
-</g>
-<!-- LT14&#45;&gt;Con_4 -->
-<g id="edge13" class="edge">
-<title>LT14&#45;&gt;Con_4</title>
-<path fill="none" stroke="black" d="M225.54,-344.65C220.11,-354.85 213.81,-368.53 211,-381.57 200.86,-428.55 217.2,-483.7 229.46,-515.73"/>
-<polygon fill="black" stroke="black" points="226.06,-516.65 233.02,-524.64 232.56,-514.06 226.06,-516.65"/>
-<text text-anchor="middle" x="223.29" y="-346.8" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- LT14&#45;&gt;Loop11 -->
-<g id="edge12" class="edge">
-<title>LT14&#45;&gt;Loop11</title>
-<path fill="none" stroke="red" d="M237.97,-345.87C239.23,-353.24 240.74,-362.04 242.16,-370.32"/>
-<polygon fill="red" stroke="red" points="238.67,-370.7 243.81,-379.97 245.57,-369.52 238.67,-370.7"/>
-<text text-anchor="middle" x="235.72" y="-348.02" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- LT14&#45;&gt;Phi_arg13 -->
-<g id="edge14" class="edge">
-<title>LT14&#45;&gt;Phi_arg13</title>
-<path fill="none" stroke="black" d="M251.93,-341.73C264.83,-351.77 282.86,-365.79 297.78,-377.4"/>
-<polygon fill="black" stroke="black" points="295.36,-379.95 305.4,-383.32 299.66,-374.42 295.36,-379.95"/>
-<text text-anchor="middle" x="249.68" y="-343.88" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- If16 -->
-<g id="node10" class="node">
-<title>If16</title>
-<polygon fill="yellow" stroke="none" points="202,-243.07 202,-269.57 278,-269.57 278,-243.07 202,-243.07"/>
-<polygon fill="none" stroke="black" points="202,-243.07 202,-269.57 278,-269.57 278,-243.07 202,-243.07"/>
-<text text-anchor="start" x="235.5" y="-251.27" font-family="Times New Roman,serif" font-size="14.00">If</text>
-<polygon fill="none" stroke="black" points="202,-210.57 202,-243.07 278,-243.07 278,-210.57 202,-210.57"/>
-<polygon fill="yellow" stroke="none" points="207,-215.57 207,-238.07 238.5,-238.07 238.5,-215.57 207,-215.57"/>
-<polygon fill="none" stroke="black" points="207,-215.57 207,-238.07 238.5,-238.07 238.5,-215.57 207,-215.57"/>
-<text text-anchor="start" x="210" y="-221.77" font-family="Times New Roman,serif" font-size="14.00">True</text>
-<polygon fill="yellow" stroke="none" points="238.5,-215.57 238.5,-238.07 273,-238.07 273,-215.57 238.5,-215.57"/>
-<polygon fill="none" stroke="black" points="238.5,-215.57 238.5,-238.07 273,-238.07 273,-215.57 238.5,-215.57"/>
-<text text-anchor="start" x="241.5" y="-221.77" font-family="Times New Roman,serif" font-size="14.00">False</text>
-</g>
-<!-- If16&#45;&gt;Loop11 -->
-<g id="edge15" class="edge">
-<title>If16&#45;&gt;Loop11</title>
-<path fill="none" stroke="red" d="M267.48,-273.51C274.99,-284.3 282.12,-296.82 286,-309.57 290.66,-324.87 290.99,-330.36 286,-345.57 282.88,-355.08 277.32,-364.3 271.36,-372.3"/>
-<polygon fill="red" stroke="red" points="268.78,-369.92 265.24,-379.91 274.24,-374.31 268.78,-369.92"/>
-<text text-anchor="middle" x="265.23" y="-275.66" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- If16&#45;&gt;LT14 -->
-<g id="edge16" class="edge">
-<title>If16&#45;&gt;LT14</title>
-<path fill="none" stroke="black" d="M238.11,-273.39C237.63,-281.55 237.12,-290.26 236.66,-298.21"/>
-<polygon fill="black" stroke="black" points="233.17,-297.84 236.08,-308.03 240.16,-298.25 233.17,-297.84"/>
-<text text-anchor="middle" x="235.86" y="-275.54" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Div21 -->
-<g id="node11" class="node">
-<title>Div21</title>
-<ellipse fill="none" stroke="black" cx="43" cy="-543.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="43" y="-538.52" font-family="Times New Roman,serif" font-size="14.00">//</text>
-</g>
-<!-- Div21&#45;&gt;Start2 -->
-<g id="edge17" class="edge">
-<title>Div21&#45;&gt;Start2</title>
-<path fill="none" stroke="red" d="M63.39,-555.74C80.45,-565.09 105.82,-578.99 130.01,-592.25"/>
-<polygon fill="red" stroke="red" points="128.14,-595.22 138.59,-596.96 131.5,-589.08 128.14,-595.22"/>
-<text text-anchor="middle" x="65.64" y="-557.89" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Div21&#45;&gt;Start2 -->
-<g id="edge18" class="edge">
-<title>Div21&#45;&gt;Start2:p2</title>
-<path fill="none" stroke="black" d="M64.07,-555.23C68.91,-557.48 74.08,-559.72 79,-561.57 142.52,-585.33 224.7,-539.5 234.11,-594.15"/>
-<polygon fill="black" stroke="black" points="230.62,-594.36 234.88,-604.06 237.59,-593.81 230.62,-594.36"/>
-<text text-anchor="middle" x="66.32" y="-547.63" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Con_22 -->
-<g id="node12" class="node">
-<title>Con_22</title>
-<ellipse fill="none" stroke="black" cx="43" cy="-631.07" rx="27" ry="18"/>
-<text text-anchor="middle" x="43" y="-626.02" font-family="Times New Roman,serif" font-size="14.00">#3</text>
-</g>
-<!-- Div21&#45;&gt;Con_22 -->
-<g id="edge19" class="edge">
-<title>Div21&#45;&gt;Con_22</title>
-<path fill="none" stroke="black" d="M43,-561.87C43,-573.22 43,-588.35 43,-601.47"/>
-<polygon fill="black" stroke="black" points="39.5,-601.28 43,-611.28 46.5,-601.28 39.5,-601.28"/>
-<text text-anchor="middle" x="40.75" y="-564.02" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- EQ23 -->
-<g id="node13" class="node">
-<title>EQ23</title>
-<ellipse fill="none" stroke="black" cx="367" cy="-327.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="367" y="-322.52" font-family="Times New Roman,serif" font-size="14.00">==</text>
-</g>
-<!-- EQ23&#45;&gt;Loop11 -->
-<g id="edge20" class="edge">
-<title>EQ23&#45;&gt;Loop11</title>
-<path fill="none" stroke="red" d="M347.18,-340.12C330.14,-350.07 305.08,-364.69 284.29,-376.81"/>
-<polygon fill="red" stroke="red" points="282.66,-373.71 275.79,-381.77 286.19,-379.76 282.66,-373.71"/>
-<text text-anchor="middle" x="349.43" y="-342.27" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- EQ23&#45;&gt;Phi_arg13 -->
-<g id="edge21" class="edge">
-<title>EQ23&#45;&gt;Phi_arg13</title>
-<path fill="none" stroke="black" d="M357.26,-344.8C352.4,-352.9 346.4,-362.9 340.89,-372.07"/>
-<polygon fill="black" stroke="black" points="337.9,-370.26 335.76,-380.63 343.9,-373.86 337.9,-370.26"/>
-<text text-anchor="middle" x="355.01" y="-346.95" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Con_24 -->
-<g id="node14" class="node">
-<title>Con_24</title>
-<ellipse fill="none" stroke="black" cx="403" cy="-399.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="403" y="-394.52" font-family="Times New Roman,serif" font-size="14.00">#5</text>
-</g>
-<!-- EQ23&#45;&gt;Con_24 -->
-<g id="edge22" class="edge">
-<title>EQ23&#45;&gt;Con_24</title>
-<path fill="none" stroke="black" d="M375.35,-344.8C379.58,-353.02 384.81,-363.19 389.58,-372.47"/>
-<polygon fill="black" stroke="black" points="386.32,-373.78 394,-381.07 392.54,-370.58 386.32,-373.78"/>
-<text text-anchor="middle" x="373.1" y="-346.95" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- If25 -->
-<g id="node15" class="node">
-<title>If25</title>
-<polygon fill="yellow" stroke="none" points="229,-140.07 229,-166.57 305,-166.57 305,-140.07 229,-140.07"/>
-<polygon fill="none" stroke="black" points="229,-140.07 229,-166.57 305,-166.57 305,-140.07 229,-140.07"/>
-<text text-anchor="start" x="262.5" y="-148.27" font-family="Times New Roman,serif" font-size="14.00">If</text>
-<polygon fill="none" stroke="black" points="229,-107.57 229,-140.07 305,-140.07 305,-107.57 229,-107.57"/>
-<polygon fill="yellow" stroke="none" points="234,-112.57 234,-135.07 265.5,-135.07 265.5,-112.57 234,-112.57"/>
-<polygon fill="none" stroke="black" points="234,-112.57 234,-135.07 265.5,-135.07 265.5,-112.57 234,-112.57"/>
-<text text-anchor="start" x="237" y="-118.77" font-family="Times New Roman,serif" font-size="14.00">True</text>
-<polygon fill="yellow" stroke="none" points="265.5,-112.57 265.5,-135.07 300,-135.07 300,-112.57 265.5,-112.57"/>
-<polygon fill="none" stroke="black" points="265.5,-112.57 265.5,-135.07 300,-135.07 300,-112.57 265.5,-112.57"/>
-<text text-anchor="start" x="268.5" y="-118.77" font-family="Times New Roman,serif" font-size="14.00">False</text>
-</g>
-<!-- If25&#45;&gt;If16 -->
-<g id="edge23" class="edge">
-<title>If25&#45;&gt;If16:p0</title>
-<path fill="none" stroke="red" d="M238.48,-170.44C231.99,-180.18 226.3,-191.42 223.93,-203.17"/>
-<polygon fill="red" stroke="red" points="220.45,-202.75 222.91,-213.06 227.42,-203.47 220.45,-202.75"/>
-<text text-anchor="middle" x="236.23" y="-172.59" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- If25&#45;&gt;EQ23 -->
-<g id="edge24" class="edge">
-<title>If25&#45;&gt;EQ23</title>
-<path fill="none" stroke="black" d="M295.16,-170.52C303.84,-181.5 312.95,-194.14 320,-206.57 336.96,-236.47 350.49,-273.71 358.6,-298.71"/>
-<polygon fill="black" stroke="black" points="355.23,-299.66 361.58,-308.14 361.91,-297.55 355.23,-299.66"/>
-<text text-anchor="middle" x="292.91" y="-172.67" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_230&#45;&gt;Store10 -->
-<g id="edge26" class="edge">
-<title>Phi_230&#45;&gt;Store10</title>
-<path fill="none" stroke="blue" d="M113.7,-417.87C115.72,-425.33 118.14,-434.24 120.41,-442.6"/>
-<polygon fill="blue" stroke="blue" points="116.96,-443.27 122.96,-452 123.72,-441.43 116.96,-443.27"/>
-<text text-anchor="middle" x="111.45" y="-420.02" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_230&#45;&gt;Loop11 -->
-<g id="edge25" class="edge">
-<title>Phi_230&#45;&gt;Loop11</title>
-<path fill="none" stroke="black" stroke-dasharray="1,5" d="M162.37,-399.57C177.71,-399.57 193.05,-399.57 208.39,-399.57"/>
-<polygon fill="black" stroke="black" points="208.05,-403.07 218.05,-399.57 208.05,-396.07 208.05,-403.07"/>
-<text text-anchor="middle" x="164.62" y="-391.97" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Phi_233 -->
-<g id="node19" class="node">
-<title>Phi_233</title>
-<ellipse fill="lightyellow" stroke="black" cx="69" cy="-49.57" rx="52.89" ry="18"/>
-<text text-anchor="middle" x="69" y="-44.52" font-family="Times New Roman,serif" font-size="14.00">MemPhi_2</text>
-</g>
-<!-- Store31 -->
-<g id="node17" class="node">
-<title>Store31</title>
-<ellipse fill="none" stroke="black" cx="43" cy="-327.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="43" y="-322.52" font-family="Times New Roman,serif" font-size="14.00">.f =</text>
-</g>
-<!-- Store31&#45;&gt;new9 -->
-<g id="edge30" class="edge">
-<title>Store31&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M30,-472.57C39.38,-497.6 63.9,-515.54 85.27,-526.98"/>
-<polygon fill="black" stroke="black" points="83.57,-530.04 94.08,-531.4 86.71,-523.79 83.57,-530.04"/>
-<text text-anchor="middle" x="27.75" y="-464.97" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Store31&#45;&gt;Loop11 -->
-<g id="edge28" class="edge">
-<title>Store31&#45;&gt;Loop11</title>
-<path fill="none" stroke="red" d="M66.8,-336.73C101.75,-348.72 167.31,-371.22 208.98,-385.52"/>
-<polygon fill="red" stroke="red" points="207.77,-388.8 218.36,-388.74 210.04,-382.18 207.77,-388.8"/>
-<text text-anchor="middle" x="64.55" y="-338.88" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Store31&#45;&gt;Div21 -->
-<g id="edge31" class="edge">
-<title>Store31&#45;&gt;Div21</title>
-<path fill="none" stroke="black" d="M36.55,-345.12C26.96,-372.45 11.89,-428.23 30,-470.57"/>
-<path fill="none" stroke="black" d="M30,-472.57C34.94,-485.77 38.06,-501.11 40,-514.05"/>
-<polygon fill="black" stroke="black" points="36.49,-514.19 41.27,-523.64 43.43,-513.27 36.49,-514.19"/>
-<text text-anchor="middle" x="34.3" y="-347.27" font-family="Helvetica,sans-Serif" font-size="8.00">3</text>
-</g>
-<!-- Store31&#45;&gt;Phi_230 -->
-<g id="edge29" class="edge">
-<title>Store31&#45;&gt;Phi_230</title>
-<path fill="none" stroke="blue" d="M57,-343.41C65.39,-352.32 76.28,-363.86 85.92,-374.08"/>
-<polygon fill="blue" stroke="blue" points="83.2,-376.3 92.6,-381.17 88.29,-371.5 83.2,-376.3"/>
-<text text-anchor="middle" x="54.75" y="-345.56" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Region32&#45;&gt;If25 -->
-<g id="edge32" class="edge">
-<title>Region32&#45;&gt;If25:p0</title>
-<path fill="none" stroke="red" d="M249.89,-67.92C249.84,-77.07 249.79,-88.77 249.76,-100.25"/>
-<polygon fill="red" stroke="red" points="246.26,-100.05 249.75,-110.05 253.26,-100.06 246.26,-100.05"/>
-<text text-anchor="middle" x="247.64" y="-70.07" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Region32&#45;&gt;If25 -->
-<g id="edge33" class="edge">
-<title>Region32&#45;&gt;If25:p1</title>
-<path fill="none" stroke="red" d="M265.22,-67.95C271.77,-76.79 278.57,-88.22 281.39,-100.32"/>
-<polygon fill="red" stroke="red" points="277.9,-100.55 282.57,-110.06 284.84,-99.72 277.9,-100.55"/>
-<text text-anchor="middle" x="262.97" y="-70.1" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Phi_233&#45;&gt;Phi_230 -->
-<g id="edge36" class="edge">
-<title>Phi_233&#45;&gt;Phi_230</title>
-<path fill="none" stroke="blue" d="M117.06,-66.52C146.85,-77.29 181.4,-91.65 192,-103.57 212.65,-126.78 191.37,-147.32 212,-170.57 238.69,-200.64 272.94,-172.95 295,-206.57 329.4,-258.98 315.45,-301.36 271,-345.57 244.42,-372 204.48,-385.25 170.9,-391.89"/>
-<polygon fill="blue" stroke="blue" points="118.37,-63.28 107.78,-63.24 116.04,-69.87 118.37,-63.28"/>
-<polygon fill="blue" stroke="blue" points="170.5,-388.41 161.28,-393.63 171.74,-395.3 170.5,-388.41"/>
-<text text-anchor="middle" x="108.6" y="-64.88" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Phi_233&#45;&gt;Store31 -->
-<g id="edge35" class="edge">
-<title>Phi_233&#45;&gt;Store31</title>
-<path fill="none" stroke="blue" d="M67.37,-67.83C63.02,-114.01 51.09,-240.72 45.7,-297.9"/>
-<polygon fill="blue" stroke="blue" points="42.22,-297.52 44.77,-307.8 49.19,-298.17 42.22,-297.52"/>
-<text text-anchor="middle" x="65.12" y="-69.98" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_233&#45;&gt;Region32 -->
-<g id="edge34" class="edge">
-<title>Phi_233&#45;&gt;Region32</title>
-<path fill="none" stroke="black" stroke-dasharray="1,5" d="M89.57,-32.51C103.01,-22.52 121.45,-10.85 140,-5.57 163.08,1.01 171.32,2.28 194,-5.57 205.22,-9.45 215.9,-16.6 224.86,-24.03"/>
-<polygon fill="black" stroke="black" points="222.28,-26.42 232.09,-30.44 226.93,-21.19 222.28,-26.42"/>
-<text text-anchor="middle" x="87.32" y="-24.91" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Sub35&#45;&gt;Loop11 -->
-<g id="edge37" class="edge">
-<title>Sub35&#45;&gt;Loop11</title>
-<path fill="none" stroke="red" d="M417.91,-339.17C413.07,-341.42 407.9,-343.68 403,-345.57 354.16,-364.3 337.06,-362 284.88,-381.16"/>
-<polygon fill="red" stroke="red" points="283.87,-377.8 275.75,-384.61 286.34,-384.35 283.87,-377.8"/>
-<text text-anchor="middle" x="415.66" y="-341.32" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Sub35&#45;&gt;Phi_arg13 -->
-<g id="edge38" class="edge">
-<title>Sub35&#45;&gt;Phi_arg13</title>
-<path fill="none" stroke="black" d="M409.92,-346.42C393.35,-356.59 372.61,-369.33 355.78,-379.67"/>
-<polygon fill="black" stroke="black" points="411.68,-349.45 418.37,-341.23 408.02,-343.48 411.68,-349.45"/>
-<polygon fill="black" stroke="black" points="354.36,-376.43 347.67,-384.65 358.02,-382.4 354.36,-376.43"/>
-<text text-anchor="middle" x="419.66" y="-342.59" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Con_36 -->
-<g id="node21" class="node">
-<title>Con_36</title>
-<ellipse fill="none" stroke="black" cx="475" cy="-399.57" rx="27" ry="18"/>
-<text text-anchor="middle" x="475" y="-394.52" font-family="Times New Roman,serif" font-size="14.00">#1</text>
-</g>
-<!-- Sub35&#45;&gt;Con_36 -->
-<g id="edge39" class="edge">
-<title>Sub35&#45;&gt;Con_36</title>
-<path fill="none" stroke="black" d="M447.35,-344.8C451.58,-353.02 456.81,-363.19 461.58,-372.47"/>
-<polygon fill="black" stroke="black" points="458.32,-373.78 466,-381.07 464.54,-370.58 458.32,-373.78"/>
-<text text-anchor="middle" x="445.1" y="-346.95" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Return37&#45;&gt;MemMerge -->
-<g id="edge42" class="edge">
-<title>Return37&#45;&gt;MemMerge</title>
-<path fill="none" stroke="blue" d="M89,-241.07C86.12,-264.36 101.49,-285.96 117.39,-301.62"/>
-<polygon fill="blue" stroke="blue" points="114.82,-304.01 124.55,-308.22 119.57,-298.86 114.82,-304.01"/>
-<text text-anchor="middle" x="86.75" y="-233.47" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Return37&#45;&gt;new9 -->
-<g id="edge41" class="edge">
-<title>Return37&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M137.23,-155.23C118.91,-173.78 93.19,-205.24 89,-239.07"/>
-<path fill="none" stroke="black" d="M89,-241.07C83.27,-287.37 97.64,-302.79 79,-345.57 70.45,-365.19 54.61,-361.56 47,-381.57 41.31,-396.52 42.73,-402.15 47,-417.57 57.57,-455.72 83.23,-493.93 101.59,-517.87"/>
-<polygon fill="black" stroke="black" points="98.84,-520.03 107.77,-525.73 104.34,-515.7 98.84,-520.03"/>
-<text text-anchor="middle" x="134.98" y="-157.38" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Return37&#45;&gt;If16 -->
-<g id="edge40" class="edge">
-<title>Return37&#45;&gt;If16:p1</title>
-<path fill="none" stroke="red" d="M177.62,-155.38C183.85,-160.32 190.67,-165.69 197,-170.57 219.31,-187.76 246.88,-183.75 254.01,-203.32"/>
-<polygon fill="red" stroke="red" points="250.53,-203.72 255.52,-213.07 257.45,-202.65 250.53,-203.72"/>
-<text text-anchor="middle" x="175.37" y="-157.53" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-</g>
-</svg>
+<svg aria-label="Compiler graph" width="1045" height="1366" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1045 1366" style="font-family: sans-serif;"><style>
+ html, body { height:100%; margin:0; font-family:sans-serif; }
+ .viewer { height:100%; display:grid; grid-template-rows:auto minmax(0,1fr) auto; }
+ .source { padding:8px; border-bottom:1px solid #ccc; }
+ #program { width:min(600px,80vw); vertical-align:middle; }
+ #status { margin-top:4px; }
+ #graph { min-height:0; overflow:hidden; position:relative; background:#fafbfc; }
+ #elk { width:100%; height:100%; }
+ #graph svg { display:block; }
+ .tools { display:flex; flex-wrap:wrap; align-items:center; gap:14px; margin-top:8px; font-size:12px; }
+ .hint { color:#616c78; }
+ .ctrl { color:#b63838; } .mem { color:#2867b2; } .data { color:#536477; }
+ .edge { fill:none; stroke-width:1.5; }
+ .edge.CTRL { stroke-width:2; }
+ .edge.ASSOC { stroke-dasharray:4 4; }
+ .edge.PARSER { stroke-dasharray:5 4; }
+ .parser rect { fill:#f6f0ff; stroke:#7956a5; stroke-width:1.5; stroke-dasharray:5 4; }
+ .edge.selected { stroke-width:3.5; }
+ .edge.bundle { stroke-width:4; }
+ .edge.bundle.selected { stroke-width:6; }
+ .edge-hit { fill:none; stroke:transparent; stroke-width:12; vector-effect:non-scaling-stroke; pointer-events:stroke; cursor:pointer; }
+ .edge-jump { fill:transparent; pointer-events:all; cursor:pointer; }
+ .node { cursor:pointer; }
+ .box { stroke:#758191; stroke-width:1; }
+ .node.held .box { stroke-dasharray:5 3; }
+ .node.near .box { stroke:#c18221; stroke-width:2; }
+ .node.focus .box { stroke:#9c4900; stroke-width:3; }
+ .node.selected .box { stroke:#1569b9; stroke-width:3; }
+ .node.folded .box { stroke-width:4; }
+ .node.folding .box { fill:#f4ccd7; }
+ .fold-tag { font-size:9px; font-weight:700; fill:#963751; }
+ .peep-area { fill:#fff3d9; fill-opacity:.8; stroke:#c18221; stroke-width:2; pointer-events:none; }
+ .node.peep-edit .box { stroke:#9c4900; stroke-width:3; }
+ .node.error .box { stroke:#b42318; stroke-width:4; }
+ #event.error { color:#b42318; font-weight:600; white-space:pre-wrap; overflow-wrap:anywhere; }
+ .peep-ghosts { pointer-events:none; }
+ .region-box { stroke:#9da9b8; stroke-width:1.5; }
+ .fold-btn { cursor:pointer; }
+ .fold-btn rect { fill:white; stroke:#596674; }
+ .fold-btn text { font-size:14px; fill:#152330; }
+ .fold-btn:focus rect { stroke:#1569b9; stroke-width:2; }
+ .shortcut { cursor:pointer; }
+ .shortcut path { fill:none; stroke-width:1.5; }
+ .shortcut rect { fill:#fff8ec; stroke:#b63838; stroke-dasharray:3 2; }
+ .shortcut text { font-size:11px; fill:#783030; }
+ .shortcut.selected rect, .shortcut:focus rect { stroke-width:2.5; }
+ .label { font-size:12px; fill:#152330; font-weight:600; }
+ .node-id { font-size:10px; fill:#596674; font-weight:400; }
+ .type { font-size:11px; fill:#455768; }
+ .port { stroke:#536477; stroke-width:1; }
+ .row { stroke:#b6afcf; stroke-width:1; }
+ .bind { font-size:12px; fill:#152330; }
+ .slot { font-size:10px; fill:#364352; paint-order:stroke; stroke:#fafbfc; stroke-width:3; }
+ #detail { position:absolute; top:8px; right:8px; margin:0; padding:12px; max-width:320px;
+ max-height:45%; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere;
+ background:#fffffff2; border:1px solid #bac5d0; border-radius:4px; font-size:12px; }
+ .controls { display:flex; flex-wrap:wrap; justify-content:center; align-items:center; gap:6px; padding:6px; }
+ .button { color:white; background:black; font-size:20px; min-width:30px; }
+ .button:disabled { background:grey; }
+ .count { font-size:20px; min-width:35px; text-align:center; }
+ #N { width:6ch; }
+ #scrub { width:clamp(120px,35vw,600px); }
+ </style><defs><marker id="arrow-CTRL" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#b63838"/></marker><marker id="arrow-DATA" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#536477"/></marker><marker id="arrow-MEM" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#2867b2"/></marker><marker id="arrow-ASSOC" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#9396a3"/></marker><marker id="arrow-PARSER" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#7956a5"/></marker></defs><rect width="100%" height="100%" fill="rgb(250, 251, 252)"/><g><g class="regions" style="opacity: 1;"><g class="region" transform="translate(24,379)"><rect class="region-box" rx="8" width="951" height="780" fill="#f1f6fc"/></g><g class="region" transform="translate(243,862)"><rect class="region-box" rx="8" width="360" height="250" fill="#f2f7ef"/></g></g><rect class="peep-area" rx="36" style="opacity: 0;"/><g class="edges"><path class="edge CTRL" id="e1i0" d="M513,533 L513,593 L706,593 L706,603" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#1[0] → #11 · CTRL</title></path><path class="edge MEM" id="e1i1" d="M655,118 L655,128 L991,128 L991,336 L920,336 L920,593 L736,593 L736,603" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#1[1] → #6 · MEM</title></path><path class="edge MEM" id="e1i2" d="M817,533 L817,573 L766,573 L766,603" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#1[2] → #230 · MEM</title></path><path class="edge CTRL" id="e3i0" d="M643,1265 C643,1289 522.5,1292 522.5,1316" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#3[0] → #37 · CTRL</title></path><path class="edge CTRL" id="e9i0" d="M535,118 L535,148 L769,148 L769,166" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#9[0] → #5 · CTRL</title></path><path class="edge CTRL" id="e10i0" d="M535,118 L535,242 L559,242 L559,270" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#10[0] → #5 · CTRL</title></path><path class="edge MEM" id="e10i1" d="M655,118 L655,128 L546,128 L546,232 L583,232 L583,270" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#10[1] → #6 · MEM</title></path><path class="edge DATA" id="e10i2" d="M769,222 L769,232 L607,232 L607,270" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#10[2] → #9 · DATA</title></path><path class="edge DATA" id="e10i3" d="M617,222 L617,252 L631,252 L631,270" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#10[3] → #4 · DATA</title></path><path class="edge CTRL" id="e11i1" d="M535,118 L535,148 L513,148 L513,477" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#11[1] → #5 · CTRL</title></path><path class="edge CTRL" id="e11i2" d="M379,1097 L379,1107 L963,1107 L963,452 L543,452 L543,480" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#11[2] → #32 · CTRL</title></path><path class="edge DATA" id="e13i1" d="M775,118 L775,138 L524,138 L524,356 L645,356 L645,477" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#13[1] → #7 · DATA</title></path><path class="edge DATA" id="e13i2" d="M128,656 L128,666 L953,666 L953,460 L685,460 L685,480" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#13[2] → #35 · DATA</title></path><path class="edge CTRL" id="e14i0" d="M513,533 L513,593 L554,593 L554,603" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#14[0] → #11 · CTRL</title></path><path class="edge DATA" id="e14i1" d="M617,222 L617,252 L909,252 L909,583 L584,583 L584,603" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#14[1] → #4 · DATA</title></path><path class="edge DATA" id="e14i2" d="M665,533 L665,543 L614,543 L614,603" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#14[2] → #13 · DATA</title></path><path class="edge CTRL" id="e16i0" d="M513,533 L513,707" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#16[0] → #11 · CTRL</title></path><path class="edge DATA" id="e16i1" d="M584,659 L584,669 L593,669 L593,707" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#16[1] → #14 · DATA</title></path><path class="edge CTRL" id="e21i0" d="M841,46 L891,46 L891,166" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#21[0] → #2 · CTRL</title></path><path class="edge DATA" id="e21i1" d="M775,118 L775,138 L921,138 L921,166" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#21[1] → #7 · DATA</title></path><path class="edge DATA" id="e21i2" d="M961,118 L961,138 L951,138 L951,166" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#21[2] → #22 · DATA</title></path><path class="edge CTRL" id="e23i0" d="M513,533 L513,593 L250,593 L250,603" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#23[0] → #11 · CTRL</title></path><path class="edge DATA" id="e23i1" d="M665,533 L665,543 L280,543 L280,603" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#23[1] → #13 · DATA</title></path><path class="edge DATA" id="e23i2" d="M310,326 L310,603" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#23[2] → #24 · DATA</title></path><path class="edge CTRL" id="e25i0" d="M493,807 L493,837 L335,837 L335,896" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#25[0] → #8 · CTRL</title></path><path class="edge DATA" id="e25i1" d="M280,659 L280,847 L415,847 L415,896" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#25[1] → #23 · DATA</title></path><path class="edge CTRL" id="e31i0" d="M513,533 L513,593 L396,593 L396,603" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#31[0] → #11 · CTRL</title></path><path class="edge MEM" id="e31i1" d="M817,533 L817,573 L420,573 L420,603" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#31[1] → #230 · MEM</title></path><path class="edge DATA" id="e31i2" d="M769,222 L769,336 L887,336 L887,553 L444,553 L444,603" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#31[2] → #9 · DATA</title></path><path class="edge DATA" id="e31i3" d="M921,222 L921,242 L898,242 L898,563 L468,563 L468,603" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#31[3] → #21 · DATA</title></path><path class="edge CTRL" id="e32i1" d="M315,996 L315,1006 L379,1006 L379,1044" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#32[1] → #15 · CTRL</title></path><path class="edge CTRL" id="e32i2" d="M435,996 L435,1006 L409,1006 L409,1044" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#32[2] → #17 · CTRL</title></path><path class="edge CTRL" id="e35i0" d="M513,533 L513,593 L98,593 L98,603" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#35[0] → #11 · CTRL</title></path><path class="edge DATA" id="e35i1" d="M665,533 L665,543 L128,543 L128,603" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#35[1] → #13 · DATA</title></path><path class="edge DATA" id="e35i2" d="M158,326 L158,603" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#35[2] → #36 · DATA</title></path><path class="edge CTRL" id="e37i0" d="M613,807 L613,1212" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#37[0] → #12 · CTRL</title></path><path class="edge MEM" id="e37i1" d="M736,659 L736,1174 L643,1174 L643,1212" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#37[1] → #1 · MEM</title></path><path class="edge DATA" id="e37i2" d="M769,222 L769,232 L1002,232 L1002,1184 L673,1184 L673,1212" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#37[2] → #9 · DATA</title></path><path class="edge MEM" id="e230i1" d="M595,326 L595,346 L797,346 L797,477" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#230[1] → #10 · MEM</title></path><path class="edge MEM" id="e230i2" d="M531,1097 L531,1107 L943,1107 L943,468 L837,468 L837,480" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#230[2] → #233 · MEM</title></path><path class="edge MEM" id="e233i1" d="M432,659 L432,669 L411,669 L411,827 L511,827 L511,1044" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#233[1] → #31 · MEM</title></path><path class="edge MEM" id="e233i2" d="M817,533 L817,573 L502,573 L502,679 L422,679 L422,817 L551,817 L551,1044" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#233[2] → #230 · MEM</title></path></g><g class="edge-hits"/><g class="parser" style="opacity: 1;"/><g class="nodes"><g class="node" id="n1" data-id="1" transform="translate(676,609)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemMerge</tspan><tspan class="node-id">  #1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#1 MemMerge
+Type not computed
+
+[0] → #11 CTRL
+[1] → #6 MEM
+[2] → #230 MEM</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n2" data-id="2" transform="translate(475,24)" style="opacity: 1;"><path class="box" d="M0,0H360V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="180" y="18"><tspan>Start</tspan><tspan class="node-id">  #2</tspan></text><text class="type" text-anchor="middle" y="35" x="180"/><title>#2 Start
+Type not computed
+
+</title></g><g class="node" id="n3" data-id="3" transform="translate(486.5,1316)" style="opacity: 1;"><path class="box" d="M0,0H72V26H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="36" y="17"><tspan>Stop</tspan><tspan class="node-id">  #3</tspan></text><text class="type" text-anchor="middle" y="35" x="36"/><title>#3 Stop
+Type not computed
+
+[0] → #37 CTRL</title><circle class="port" cx="36" cy="0" r="3" fill="#536477"/><text class="slot" x="36" y="-7" text-anchor="middle">0</text></g><g class="node" id="n4" data-id="4" transform="translate(557,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#0</tspan><tspan class="node-id">  #4</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#4 #0
+Type not computed
+
+</title></g><g class="node" id="n5" data-id="5" transform="translate(475,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$ctrl</tspan><tspan class="node-id">  #5/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#5 $ctrl
+Projection 0 of #2
+Type not computed
+
+[0] → #2 CTRL</title></g><g class="node" id="n6" data-id="6" transform="translate(595,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$mem</tspan><tspan class="node-id">  #6/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#6 $mem
+Projection 1 of #2
+Type not computed
+
+[0] → #2 MEM</title></g><g class="node" id="n7" data-id="7" transform="translate(715,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>arg</tspan><tspan class="node-id">  #7/2</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#7 arg
+Projection 2 of #2
+Type not computed
+
+[0] → #2 DATA</title></g><g class="node" id="n8" data-id="8" transform="translate(433,757)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>True</tspan><tspan class="node-id">  #8/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#8 True
+Projection 0 of #16
+Type not computed
+
+[0] → #16 CTRL</title></g><g class="node" id="n9" data-id="9" transform="translate(709,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>new S</tspan><tspan class="node-id">  #9</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#9 new S
+Type not computed
+
+[0] → #5 CTRL</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n10" data-id="10" transform="translate(535,276)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f =</tspan><tspan class="node-id">  #10</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#10 .f =
+Type not computed
+
+[0] → #5 CTRL
+[1] → #6 MEM
+[2] → #9 DATA
+[3] → #4 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="#536477"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n11" data-id="11" transform="translate(453,483)" style="opacity: 1;"><path class="box" d="M20,0H100Q120,0 120,20V24Q120,44 100,44H20Q0,44 0,24V20Q0,0 20,0Z" fill="#ffe0ab"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Loop</tspan><tspan class="node-id">  #11</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#11 Loop
+Type not computed
+
+[0] → — DATA
+[1] → #5 CTRL
+[2] → #32 CTRL</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n12" data-id="12" transform="translate(553,757)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>False</tspan><tspan class="node-id">  #12/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#12 False
+Projection 1 of #16
+Type not computed
+
+[0] → #16 CTRL</title></g><g class="node" id="n13" data-id="13" transform="translate(605,483)" style="opacity: 1;"><path class="box" d="M12,0H108L120,22L108,44H12L0,22Z" fill="#f5e4fa"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>φ_arg</tspan><tspan class="node-id">  #13</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#13 φ_arg
+Type not computed
+
+[0] → #11 ASSOC
+[1] → #7 DATA
+[2] → #35 DATA</title><circle class="port" cx="-3" cy="22" r="3" fill="#536477"/><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><path class="reg" fill="none" stroke="#b63838" d="M-3,22H-18m4,-3l-4,3l4,3"><title>[0] → #11</title></path><text class="slot" x="-10" y="15" text-anchor="middle">0</text><text class="slot" x="40" y="-10" text-anchor="middle">1</text><text class="slot" x="80" y="-10" text-anchor="middle">2</text></g><g class="node" id="n14" data-id="14" transform="translate(524,609)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>&lt;</tspan><tspan class="node-id">  #14</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#14 &lt;
+Type not computed
+
+[0] → #11 CTRL
+[1] → #4 DATA
+[2] → #13 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n15" data-id="15" transform="translate(255,946)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>True</tspan><tspan class="node-id">  #15/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#15 True
+Projection 0 of #25
+Type not computed
+
+[0] → #25 CTRL</title></g><g class="node" id="n16" data-id="16" transform="translate(433,713)" style="opacity: 1;"><path class="box" d="M0,0H240V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="120" y="18"><tspan>If</tspan><tspan class="node-id">  #16</tspan></text><text class="type" text-anchor="middle" y="35" x="120"/><title>#16 If
+Type not computed
+
+[0] → #11 CTRL
+[1] → #14 DATA</title><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><circle class="port" cx="160" cy="-3" r="3" fill="#536477"/><text class="slot" x="80" y="-10" text-anchor="middle">0</text><text class="slot" x="160" y="-10" text-anchor="middle">1</text></g><g class="node" id="n17" data-id="17" transform="translate(375,946)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>False</tspan><tspan class="node-id">  #17/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#17 False
+Projection 1 of #25
+Type not computed
+
+[0] → #25 CTRL</title></g><g class="node" id="n21" data-id="21" transform="translate(861,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>//</tspan><tspan class="node-id">  #21</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#21 //
+Type not computed
+
+[0] → #2 CTRL
+[1] → #7 DATA
+[2] → #22 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n22" data-id="22" transform="translate(901,68)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#3</tspan><tspan class="node-id">  #22</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#22 #3
+Type not computed
+
+</title></g><g class="node" id="n23" data-id="23" transform="translate(220,609)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>==</tspan><tspan class="node-id">  #23</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#23 ==
+Type not computed
+
+[0] → #11 CTRL
+[1] → #13 DATA
+[2] → #24 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n24" data-id="24" transform="translate(250,276)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#5</tspan><tspan class="node-id">  #24</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#24 #5
+Type not computed
+
+</title></g><g class="node" id="n25" data-id="25" transform="translate(255,902)" style="opacity: 1;"><path class="box" d="M0,0H240V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="120" y="18"><tspan>If</tspan><tspan class="node-id">  #25</tspan></text><text class="type" text-anchor="middle" y="35" x="120"/><title>#25 If
+Type not computed
+
+[0] → #8 CTRL
+[1] → #23 DATA</title><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><circle class="port" cx="160" cy="-3" r="3" fill="#536477"/><text class="slot" x="80" y="-10" text-anchor="middle">0</text><text class="slot" x="160" y="-10" text-anchor="middle">1</text></g><g class="node" id="n31" data-id="31" transform="translate(372,609)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f =</tspan><tspan class="node-id">  #31</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#31 .f =
+Type not computed
+
+[0] → #11 CTRL
+[1] → #230 MEM
+[2] → #9 DATA
+[3] → #21 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="#536477"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n32" data-id="32" transform="translate(319,1050)" style="opacity: 1;"><path class="box" d="M12,0H108L120,44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Region</tspan><tspan class="node-id">  #32</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#32 Region
+Type not computed
+
+[0] → — DATA
+[1] → #15 CTRL
+[2] → #17 CTRL</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n35" data-id="35" transform="translate(68,609)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>-</tspan><tspan class="node-id">  #35</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#35 -
+Type not computed
+
+[0] → #11 CTRL
+[1] → #13 DATA
+[2] → #36 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n36" data-id="36" transform="translate(98,276)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#1</tspan><tspan class="node-id">  #36</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#36 #1
+Type not computed
+
+</title></g><g class="node" id="n37" data-id="37" transform="translate(583,1218)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Return</tspan><tspan class="node-id">  #37</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#37 Return
+Type not computed
+
+[0] → #12 CTRL
+[1] → #1 MEM
+[2] → #9 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n230" data-id="230" transform="translate(757,483)" style="opacity: 1;"><path class="box" d="M12,0H108L120,22L108,44H12L0,22Z" fill="#f5e4fa"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemPhi_2</tspan><tspan class="node-id">  #230</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#230 MemPhi_2
+Type not computed
+
+[0] → #11 ASSOC
+[1] → #10 MEM
+[2] → #233 MEM</title><circle class="port" cx="-3" cy="22" r="3" fill="#536477"/><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><path class="reg" fill="none" stroke="#b63838" d="M-3,22H-18m4,-3l-4,3l4,3"><title>[0] → #11</title></path><text class="slot" x="-10" y="15" text-anchor="middle">0</text><text class="slot" x="40" y="-10" text-anchor="middle">1</text><text class="slot" x="80" y="-10" text-anchor="middle">2</text></g><g class="node" id="n233" data-id="233" transform="translate(471,1050)" style="opacity: 1;"><path class="box" d="M12,0H108L120,22L108,44H12L0,22Z" fill="#f5e4fa"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemPhi_2</tspan><tspan class="node-id">  #233</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#233 MemPhi_2
+Type not computed
+
+[0] → #32 ASSOC
+[1] → #31 MEM
+[2] → #230 MEM</title><circle class="port" cx="-3" cy="22" r="3" fill="#536477"/><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><path class="reg" fill="none" stroke="#b63838" d="M-3,22H-18m4,-3l-4,3l4,3"><title>[0] → #32</title></path><text class="slot" x="-10" y="15" text-anchor="middle">0</text><text class="slot" x="40" y="-10" text-anchor="middle">1</text><text class="slot" x="80" y="-10" text-anchor="middle">2</text></g></g><g class="region-heads" style="opacity: 1;"><g class="region-head" transform="translate(24,379)"><text class="label" x="26" y="17"><tspan>Loop</tspan><tspan class="node-id">  #11</tspan></text><title>Loop · 16 nodes</title><g class="fold-btn" role="button" tabindex="0" transform="translate(4,4)" aria-label="Fold region #11"><rect width="16" height="16" rx="2"/><text x="8" y="12" text-anchor="middle">−</text><title>Fold region</title></g></g><g class="region-head" transform="translate(243,862)"><text class="label" x="26" y="17"><tspan>If</tspan><tspan class="node-id">  #25</tspan></text><title>If · 5 nodes</title><g class="fold-btn" role="button" tabindex="0" transform="translate(4,4)" aria-label="Fold region #25"><rect width="16" height="16" rx="2"/><text x="8" y="12" text-anchor="middle">−</text><title>Fold region</title></g></g></g><g class="shortcuts" style="opacity: 1;"/><g class="peep-ghosts" pointer-events="none"/></g></svg>
diff --git a/chapter11/docs/graph6.json b/chapter11/docs/graph6.json
new file mode 100644
index 00000000..1c08947a
--- /dev/null
+++ b/chapter11/docs/graph6.json
@@ -0,0 +1,42 @@
+{
+ "ver": 1,
+ "comp": "chapter11/docs/graph6.svg",
+ "step": 1,
+ "roots": [],
+ "scope": 0,
+ "nodes": [
+ {"id": 1, "label": "MemMerge", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 12, "role": "CTRL", "label": null}, {"idx": 1, "def": 6, "role": "MEM", "label": null}, {"idx": 2, "def": 230, "role": "MEM", "label": null}], "proj": null},
+ {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null},
+ {"id": 3, "label": "Stop", "type": null, "kind": "STOP", "edges": [{"idx": 0, "def": 37, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 4, "label": "#0", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 5, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}},
+ {"id": 6, "label": "$mem", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 2, "role": "MEM", "label": null}], "proj": {"par": 2, "idx": 1}},
+ {"id": 7, "label": "arg", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 2, "role": "DATA", "label": null}], "proj": {"par": 2, "idx": 2}},
+ {"id": 8, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 16, "role": "CTRL", "label": null}], "proj": {"par": 16, "idx": 0}},
+ {"id": 9, "label": "new S", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 10, "label": ".f =", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}, {"idx": 1, "def": 6, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}, {"idx": 3, "def": 4, "role": "DATA", "label": null}], "proj": null},
+ {"id": 11, "label": "Loop", "type": null, "kind": "LOOP", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 5, "role": "CTRL", "label": null}, {"idx": 2, "def": 32, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 12, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 16, "role": "CTRL", "label": null}], "proj": {"par": 16, "idx": 1}},
+ {"id": 13, "label": "φ_arg", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 11, "role": "ASSOC", "label": null}, {"idx": 1, "def": 7, "role": "DATA", "label": null}, {"idx": 2, "def": 35, "role": "DATA", "label": null}], "proj": null},
+ {"id": 14, "label": "<", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 11, "role": "CTRL", "label": null}, {"idx": 1, "def": 4, "role": "DATA", "label": null}, {"idx": 2, "def": 13, "role": "DATA", "label": null}], "proj": null},
+ {"id": 15, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 25, "role": "CTRL", "label": null}], "proj": {"par": 25, "idx": 0}},
+ {"id": 16, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 11, "role": "CTRL", "label": null}, {"idx": 1, "def": 14, "role": "DATA", "label": null}], "proj": null},
+ {"id": 17, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 25, "role": "CTRL", "label": null}], "proj": {"par": 25, "idx": 1}},
+ {"id": 21, "label": "//", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 5, "role": "CTRL", "label": null}, {"idx": 1, "def": 7, "role": "DATA", "label": null}, {"idx": 2, "def": 22, "role": "DATA", "label": null}], "proj": null},
+ {"id": 22, "label": "#3", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 23, "label": "==", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 8, "role": "CTRL", "label": null}, {"idx": 1, "def": 13, "role": "DATA", "label": null}, {"idx": 2, "def": 24, "role": "DATA", "label": null}], "proj": null},
+ {"id": 24, "label": "#5", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 25, "label": "If", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 8, "role": "CTRL", "label": null}, {"idx": 1, "def": 23, "role": "DATA", "label": null}], "proj": null},
+ {"id": 31, "label": ".f =", "type": null, "kind": "MEM", "edges": [{"idx": 0, "def": 15, "role": "CTRL", "label": null}, {"idx": 1, "def": 230, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}, {"idx": 3, "def": 21, "role": "DATA", "label": null}], "proj": null},
+ {"id": 32, "label": "Region", "type": null, "kind": "REGION", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 15, "role": "CTRL", "label": null}, {"idx": 2, "def": 17, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 35, "label": "-", "type": null, "kind": "DATA", "edges": [{"idx": 0, "def": 32, "role": "CTRL", "label": null}, {"idx": 1, "def": 13, "role": "DATA", "label": null}, {"idx": 2, "def": 36, "role": "DATA", "label": null}], "proj": null},
+ {"id": 36, "label": "#1", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 37, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 12, "role": "CTRL", "label": null}, {"idx": 1, "def": 1, "role": "MEM", "label": null}, {"idx": 2, "def": 9, "role": "DATA", "label": null}], "proj": null},
+ {"id": 230, "label": "MemPhi_2", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 11, "role": "ASSOC", "label": null}, {"idx": 1, "def": 10, "role": "MEM", "label": null}, {"idx": 2, "def": 233, "role": "MEM", "label": null}], "proj": null},
+ {"id": 233, "label": "MemPhi_2", "type": null, "kind": "PHI", "edges": [{"idx": 0, "def": 32, "role": "ASSOC", "label": null}, {"idx": 1, "def": 31, "role": "MEM", "label": null}, {"idx": 2, "def": 230, "role": "MEM", "label": null}], "proj": null}
+ ],
+ "groups": [
+ {"id": 11, "par": 0, "nodes": [8, 11, 12, 13, 14, 16, 23, 230]},
+ {"id": 25, "par": 11, "nodes": [15, 17, 25, 31, 32, 35, 233]}
+ ]
+}
diff --git a/chapter11/docs/graph6.svg b/chapter11/docs/graph6.svg
index 8b8bb190..8862f25c 100644
--- a/chapter11/docs/graph6.svg
+++ b/chapter11/docs/graph6.svg
@@ -1,471 +1,187 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
- "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 12.2.0 (20241103.1931)
- -->
-<!-- Title: chapter11 Pages: 1 -->
-<svg width="384pt" height="889pt"
- viewBox="0.00 0.00 384.00 889.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 885)">
-<title>chapter11</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-885 380,-885 380,4 -4,4"/>
-<g id="clust1" class="cluster">
-<title>cluster_Nodes</title>
-<polygon fill="none" stroke="black" points="8,-8 8,-873 368,-873 368,-8 8,-8"/>
-</g>
-<!-- Start2 -->
-<g id="node1" class="node">
-<title>Start2</title>
-<polygon fill="yellow" stroke="none" points="172.38,-834.5 172.38,-861 277.62,-861 277.62,-834.5 172.38,-834.5"/>
-<polygon fill="none" stroke="black" points="172.38,-834.5 172.38,-861 277.62,-861 277.62,-834.5 172.38,-834.5"/>
-<text text-anchor="start" x="212.25" y="-842.7" font-family="Times New Roman,serif" font-size="14.00">Start</text>
-<polygon fill="none" stroke="black" points="172.38,-802 172.38,-834.5 277.62,-834.5 277.62,-802 172.38,-802"/>
-<polygon fill="yellow" stroke="none" points="177.38,-807 177.38,-829.5 208.12,-829.5 208.12,-807 177.38,-807"/>
-<polygon fill="none" stroke="black" points="177.38,-807 177.38,-829.5 208.12,-829.5 208.12,-807 177.38,-807"/>
-<text text-anchor="start" x="180.38" y="-813.2" font-family="Times New Roman,serif" font-size="14.00">$ctrl</text>
-<polygon fill="none" stroke="black" points="208.12,-807 208.12,-829.5 249.38,-829.5 249.38,-807 208.12,-807"/>
-<text text-anchor="start" x="211.12" y="-813.2" font-family="Times New Roman,serif" font-size="14.00">$mem</text>
-<polygon fill="none" stroke="black" points="249.38,-807 249.38,-829.5 272.62,-829.5 272.62,-807 249.38,-807"/>
-<text text-anchor="start" x="252.38" y="-813.2" font-family="Times New Roman,serif" font-size="14.00">arg</text>
-</g>
-<!-- MemMerge -->
-<g id="node2" class="node">
-<title>MemMerge</title>
-<polygon fill="none" stroke="black" points="333,-371 251,-371 251,-335 333,-335 333,-371"/>
-<text text-anchor="middle" x="292" y="-347.95" font-family="Times New Roman,serif" font-size="14.00">MemMerge</text>
-</g>
-<!-- MemMerge&#45;&gt;Start2 -->
-<g id="edge43" class="edge">
-<title>MemMerge&#45;&gt;Start2:p1</title>
-<path fill="none" stroke="blue" d="M307.5,-371.34C315.32,-381.11 324.15,-393.96 329,-407 361.8,-495.22 367.07,-526.05 347,-618 331.99,-686.78 323.62,-705.97 281,-762 265.35,-782.58 238.46,-778 230.83,-794.94"/>
-<polygon fill="blue" stroke="blue" points="227.43,-794.04 229.03,-804.51 234.31,-795.33 227.43,-794.04"/>
-<text text-anchor="middle" x="305.25" y="-373.49" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- If16 -->
-<g id="node10" class="node">
-<title>If16</title>
-<polygon fill="yellow" stroke="none" points="236,-443.5 236,-470 312,-470 312,-443.5 236,-443.5"/>
-<polygon fill="none" stroke="black" points="236,-443.5 236,-470 312,-470 312,-443.5 236,-443.5"/>
-<text text-anchor="start" x="269.5" y="-451.7" font-family="Times New Roman,serif" font-size="14.00">If</text>
-<polygon fill="none" stroke="black" points="236,-411 236,-443.5 312,-443.5 312,-411 236,-411"/>
-<polygon fill="yellow" stroke="none" points="241,-416 241,-438.5 272.5,-438.5 272.5,-416 241,-416"/>
-<polygon fill="none" stroke="black" points="241,-416 241,-438.5 272.5,-438.5 272.5,-416 241,-416"/>
-<text text-anchor="start" x="244" y="-422.2" font-family="Times New Roman,serif" font-size="14.00">True</text>
-<polygon fill="yellow" stroke="none" points="272.5,-416 272.5,-438.5 307,-438.5 307,-416 272.5,-416"/>
-<polygon fill="none" stroke="black" points="272.5,-416 272.5,-438.5 307,-438.5 307,-416 272.5,-416"/>
-<text text-anchor="start" x="275.5" y="-422.2" font-family="Times New Roman,serif" font-size="14.00">False</text>
-</g>
-<!-- MemMerge&#45;&gt;If16 -->
-<g id="edge45" class="edge">
-<title>MemMerge&#45;&gt;If16:p1</title>
-<path fill="none" stroke="green" d="M291.02,-371.35C290.56,-380.5 290.08,-392.19 289.86,-403.68"/>
-<polygon fill="green" stroke="green" points="286.37,-403.45 289.77,-413.49 293.36,-403.52 286.37,-403.45"/>
-<text text-anchor="middle" x="288.77" y="-373.5" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Phi_230 -->
-<g id="node16" class="node">
-<title>Phi_230</title>
-<ellipse fill="lightyellow" stroke="black" cx="109" cy="-600" rx="52.89" ry="18"/>
-<text text-anchor="middle" x="109" y="-594.95" font-family="Times New Roman,serif" font-size="14.00">MemPhi_2</text>
-</g>
-<!-- MemMerge&#45;&gt;Phi_230 -->
-<g id="edge44" class="edge">
-<title>MemMerge&#45;&gt;Phi_230</title>
-<path fill="none" stroke="blue" d="M262.46,-371.47C248.23,-380.82 231.57,-393.24 219,-407 195.6,-432.6 205.05,-451.1 179,-474 134.6,-513.03 57.61,-467.89 57,-527"/>
-<text text-anchor="middle" x="260.21" y="-373.62" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Stop3 -->
-<g id="node3" class="node">
-<title>Stop3</title>
-<polygon fill="yellow" stroke="black" points="260,-196 206,-196 206,-160 260,-160 260,-196"/>
-<text text-anchor="middle" x="233" y="-172.95" font-family="Times New Roman,serif" font-size="14.00">Stop</text>
-</g>
-<!-- Return37 -->
-<g id="node22" class="node">
-<title>Return37</title>
-<polygon fill="yellow" stroke="black" points="260,-283.5 206,-283.5 206,-247.5 260,-247.5 260,-283.5"/>
-<text text-anchor="middle" x="233" y="-260.45" font-family="Times New Roman,serif" font-size="14.00">Return</text>
-</g>
-<!-- Stop3&#45;&gt;Return37 -->
-<g id="edge1" class="edge">
-<title>Stop3&#45;&gt;Return37</title>
-<path fill="none" stroke="red" d="M233,-196.3C233,-207.66 233,-222.78 233,-235.9"/>
-<polygon fill="red" stroke="red" points="229.5,-235.71 233,-245.71 236.5,-235.71 229.5,-235.71"/>
-<text text-anchor="middle" x="230.75" y="-198.45" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Con_4 -->
-<g id="node4" class="node">
-<title>Con_4</title>
-<ellipse fill="none" stroke="black" cx="239" cy="-744" rx="27" ry="18"/>
-<text text-anchor="middle" x="239" y="-738.95" font-family="Times New Roman,serif" font-size="14.00">#0</text>
-</g>
-<!-- new9 -->
-<g id="node5" class="node">
-<title>new9</title>
-<ellipse fill="none" stroke="black" cx="140" cy="-744" rx="33.95" ry="18"/>
-<text text-anchor="middle" x="140" y="-738.95" font-family="Times New Roman,serif" font-size="14.00">new S</text>
-</g>
-<!-- new9&#45;&gt;Start2 -->
-<g id="edge2" class="edge">
-<title>new9&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="green" d="M161.46,-758.23C173.32,-767.03 186.56,-779.76 191.11,-795.03"/>
-<polygon fill="green" stroke="green" points="187.59,-795.13 192.53,-804.5 194.51,-794.1 187.59,-795.13"/>
-<text text-anchor="middle" x="163.71" y="-760.38" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Store10 -->
-<g id="node6" class="node">
-<title>Store10</title>
-<ellipse fill="none" stroke="black" cx="166" cy="-672" rx="27" ry="18"/>
-<text text-anchor="middle" x="166" y="-666.95" font-family="Times New Roman,serif" font-size="14.00">.f =</text>
-</g>
-<!-- Store10&#45;&gt;Start2 -->
-<g id="edge3" class="edge">
-<title>Store10&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M172.35,-689.96C175.97,-700.25 180.31,-713.73 183,-726 189.8,-757.02 192.21,-767.77 192.66,-794.78"/>
-<polygon fill="red" stroke="red" points="189.16,-794.51 192.74,-804.49 196.16,-794.46 189.16,-794.51"/>
-<text text-anchor="middle" x="170.1" y="-692.11" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Store10&#45;&gt;Con_4 -->
-<g id="edge6" class="edge">
-<title>Store10&#45;&gt;Con_4</title>
-<path fill="none" stroke="black" d="M180.77,-687.17C190.8,-696.78 204.26,-709.69 215.72,-720.68"/>
-<polygon fill="black" stroke="black" points="213.27,-723.17 222.91,-727.57 218.11,-718.12 213.27,-723.17"/>
-<text text-anchor="middle" x="178.52" y="-689.32" font-family="Helvetica,sans-Serif" font-size="8.00">3</text>
-</g>
-<!-- Store10&#45;&gt;new9 -->
-<g id="edge5" class="edge">
-<title>Store10&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M159.71,-689.95C156.86,-697.6 153.43,-706.84 150.24,-715.44"/>
-<polygon fill="black" stroke="black" points="146.96,-714.2 146.76,-724.79 153.53,-716.64 146.96,-714.2"/>
-<text text-anchor="middle" x="157.46" y="-692.1" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Loop11 -->
-<g id="node7" class="node">
-<title>Loop11</title>
-<polygon fill="yellow" stroke="black" points="338,-618 284,-618 284,-582 338,-582 338,-618"/>
-<text text-anchor="middle" x="311" y="-594.95" font-family="Times New Roman,serif" font-size="14.00">Loop</text>
-</g>
-<!-- Loop11&#45;&gt;Start2 -->
-<g id="edge7" class="edge">
-<title>Loop11&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M311.62,-618.44C311.85,-650.26 308.1,-718.44 275,-762 252.66,-791.4 204.87,-770.45 194.68,-794.8"/>
-<polygon fill="red" stroke="red" points="191.26,-794.06 193.01,-804.51 198.16,-795.25 191.26,-794.06"/>
-<text text-anchor="middle" x="309.37" y="-620.59" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Region32 -->
-<g id="node18" class="node">
-<title>Region32</title>
-<polygon fill="yellow" stroke="black" points="215.5,-124 160.5,-124 160.5,-88 215.5,-88 215.5,-124"/>
-<text text-anchor="middle" x="188" y="-100.95" font-family="Times New Roman,serif" font-size="14.00">Region</text>
-</g>
-<!-- Loop11&#45;&gt;Region32 -->
-<g id="edge8" class="edge">
-<title>Loop11&#45;&gt;Region32</title>
-<path fill="none" stroke="red" d="M317.97,-581.54C334.1,-538.52 370.49,-424.48 342,-335 324.98,-281.54 311.59,-268.53 269,-232 241.84,-208.71 217.32,-225.45 197,-196 184.99,-178.59 183.21,-154.52 184.18,-135.8"/>
-<polygon fill="red" stroke="red" points="187.66,-136.16 185,-125.91 180.68,-135.58 187.66,-136.16"/>
-<text text-anchor="middle" x="315.72" y="-573.94" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Phi_arg13 -->
-<g id="node8" class="node">
-<title>Phi_arg13</title>
-<ellipse fill="lightyellow" stroke="black" cx="213" cy="-600" rx="32.93" ry="18"/>
-<text text-anchor="middle" x="213" y="-594.95" font-family="Times New Roman,serif" font-size="14.00">φ_arg</text>
-</g>
-<!-- Phi_arg13&#45;&gt;Start2 -->
-<g id="edge10" class="edge">
-<title>Phi_arg13&#45;&gt;Start2:p2</title>
-<path fill="none" stroke="black" d="M224.02,-617.05C239.03,-639.99 265.16,-684.02 275,-726 278.65,-741.58 277.45,-746.19 275,-762 272.54,-777.84 265.38,-783.26 262.36,-794.66"/>
-<polygon fill="black" stroke="black" points="258.9,-794.15 261.18,-804.5 265.85,-794.99 258.9,-794.15"/>
-<text text-anchor="middle" x="221.77" y="-619.2" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_arg13&#45;&gt;Loop11 -->
-<g id="edge9" class="edge">
-<title>Phi_arg13&#45;&gt;Loop11</title>
-<path fill="none" stroke="black" stroke-dasharray="1,5" d="M246.3,-600C254.97,-600 263.64,-600 272.31,-600"/>
-<polygon fill="black" stroke="black" points="272.19,-603.5 282.19,-600 272.19,-596.5 272.19,-603.5"/>
-<text text-anchor="middle" x="248.55" y="-592.4" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Sub35 -->
-<g id="node20" class="node">
-<title>Sub35</title>
-<ellipse fill="none" stroke="black" cx="188" cy="-34" rx="27" ry="18"/>
-<text text-anchor="middle" x="188" y="-28.95" font-family="Times New Roman,serif" font-size="14.00">&#45;</text>
-</g>
-<!-- LT14 -->
-<g id="node9" class="node">
-<title>LT14</title>
-<ellipse fill="none" stroke="black" cx="265" cy="-528" rx="27" ry="18"/>
-<text text-anchor="middle" x="265" y="-522.95" font-family="Times New Roman,serif" font-size="14.00">&lt;</text>
-</g>
-<!-- LT14&#45;&gt;Con_4 -->
-<g id="edge13" class="edge">
-<title>LT14&#45;&gt;Con_4</title>
-<path fill="none" stroke="black" d="M263.12,-546.4C261.17,-564.35 257.99,-593.15 255,-618 251.03,-651.04 246.13,-688.95 242.8,-714.27"/>
-<polygon fill="black" stroke="black" points="239.34,-713.75 241.51,-724.12 246.28,-714.66 239.34,-713.75"/>
-<text text-anchor="middle" x="260.87" y="-548.55" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- LT14&#45;&gt;Loop11 -->
-<g id="edge12" class="edge">
-<title>LT14&#45;&gt;Loop11</title>
-<path fill="none" stroke="red" d="M275.44,-544.88C280.73,-552.94 287.31,-562.95 293.36,-572.16"/>
-<polygon fill="red" stroke="red" points="290.39,-574.01 298.81,-580.44 296.24,-570.16 290.39,-574.01"/>
-<text text-anchor="middle" x="277.69" y="-547.03" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- LT14&#45;&gt;Phi_arg13 -->
-<g id="edge14" class="edge">
-<title>LT14&#45;&gt;Phi_arg13</title>
-<path fill="none" stroke="black" d="M253.46,-544.54C247.02,-553.2 238.85,-564.21 231.53,-574.05"/>
-<polygon fill="black" stroke="black" points="228.92,-571.69 225.77,-581.81 234.54,-575.87 228.92,-571.69"/>
-<text text-anchor="middle" x="255.71" y="-546.69" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- If16&#45;&gt;Loop11 -->
-<g id="edge15" class="edge">
-<title>If16&#45;&gt;Loop11</title>
-<path fill="none" stroke="red" d="M288.71,-473.68C293.31,-484.96 297.98,-497.84 301,-510 305.94,-529.86 308.44,-552.83 309.71,-570.45"/>
-<polygon fill="red" stroke="red" points="306.2,-570.42 310.31,-580.19 313.19,-569.99 306.2,-570.42"/>
-<text text-anchor="middle" x="286.46" y="-475.83" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- If16&#45;&gt;LT14 -->
-<g id="edge16" class="edge">
-<title>If16&#45;&gt;LT14</title>
-<path fill="none" stroke="black" d="M270.6,-473.82C269.74,-481.99 268.82,-490.69 267.98,-498.65"/>
-<polygon fill="black" stroke="black" points="264.52,-498.15 266.95,-508.47 271.48,-498.89 264.52,-498.15"/>
-<text text-anchor="middle" x="268.35" y="-475.97" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Div21 -->
-<g id="node11" class="node">
-<title>Div21</title>
-<ellipse fill="none" stroke="black" cx="61" cy="-744" rx="27" ry="18"/>
-<text text-anchor="middle" x="61" y="-738.95" font-family="Times New Roman,serif" font-size="14.00">//</text>
-</g>
-<!-- Div21&#45;&gt;Start2 -->
-<g id="edge17" class="edge">
-<title>Div21&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M73.85,-760.18C91.84,-779.79 126.72,-812.07 165.38,-817.47"/>
-<polygon fill="red" stroke="red" points="164.64,-820.93 174.87,-818.14 165.14,-813.95 164.64,-820.93"/>
-<text text-anchor="middle" x="71.6" y="-762.33" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Div21&#45;&gt;Start2 -->
-<g id="edge18" class="edge">
-<title>Div21&#45;&gt;Start2:p2</title>
-<path fill="none" stroke="black" d="M82.05,-755.71C86.89,-757.96 92.07,-760.19 97,-762 163.97,-786.57 250.88,-736.57 260.18,-794.78"/>
-<polygon fill="black" stroke="black" points="256.67,-794.77 260.89,-804.49 263.65,-794.26 256.67,-794.77"/>
-<text text-anchor="middle" x="84.3" y="-757.86" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Con_22 -->
-<g id="node12" class="node">
-<title>Con_22</title>
-<ellipse fill="none" stroke="black" cx="61" cy="-831.5" rx="27" ry="18"/>
-<text text-anchor="middle" x="61" y="-826.45" font-family="Times New Roman,serif" font-size="14.00">#3</text>
-</g>
-<!-- Div21&#45;&gt;Con_22 -->
-<g id="edge19" class="edge">
-<title>Div21&#45;&gt;Con_22</title>
-<path fill="none" stroke="black" d="M61,-762.3C61,-773.66 61,-788.78 61,-801.9"/>
-<polygon fill="black" stroke="black" points="57.5,-801.71 61,-811.71 64.5,-801.71 57.5,-801.71"/>
-<text text-anchor="middle" x="58.75" y="-764.45" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- EQ23 -->
-<g id="node13" class="node">
-<title>EQ23</title>
-<ellipse fill="none" stroke="black" cx="165" cy="-353" rx="27" ry="18"/>
-<text text-anchor="middle" x="165" y="-347.95" font-family="Times New Roman,serif" font-size="14.00">==</text>
-</g>
-<!-- EQ23&#45;&gt;Phi_arg13 -->
-<g id="edge21" class="edge">
-<title>EQ23&#45;&gt;Phi_arg13</title>
-<path fill="none" stroke="black" d="M169.9,-371.1C172.77,-381.44 176.34,-394.92 179,-407 191.71,-464.72 202.9,-533.02 208.73,-570.62"/>
-<polygon fill="black" stroke="black" points="205.22,-570.85 210.2,-580.2 212.14,-569.78 205.22,-570.85"/>
-<text text-anchor="middle" x="167.65" y="-373.25" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- EQ23&#45;&gt;If16 -->
-<g id="edge20" class="edge">
-<title>EQ23&#45;&gt;If16:p0</title>
-<path fill="none" stroke="red" d="M178.1,-368.82C192.8,-385.21 216.42,-410.75 230.4,-421.83"/>
-<polygon fill="red" stroke="red" points="228.25,-424.63 238.68,-426.51 231.7,-418.54 228.25,-424.63"/>
-<text text-anchor="middle" x="180.35" y="-370.97" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Con_24 -->
-<g id="node14" class="node">
-<title>Con_24</title>
-<ellipse fill="none" stroke="black" cx="143" cy="-440.5" rx="27" ry="18"/>
-<text text-anchor="middle" x="143" y="-435.45" font-family="Times New Roman,serif" font-size="14.00">#5</text>
-</g>
-<!-- EQ23&#45;&gt;Con_24 -->
-<g id="edge22" class="edge">
-<title>EQ23&#45;&gt;Con_24</title>
-<path fill="none" stroke="black" d="M160.65,-370.89C157.69,-382.41 153.69,-397.94 150.25,-411.31"/>
-<polygon fill="black" stroke="black" points="146.89,-410.33 147.79,-420.88 153.67,-412.07 146.89,-410.33"/>
-<text text-anchor="middle" x="158.4" y="-373.04" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- If25 -->
-<g id="node15" class="node">
-<title>If25</title>
-<polygon fill="yellow" stroke="none" points="104,-268.5 104,-295 180,-295 180,-268.5 104,-268.5"/>
-<polygon fill="none" stroke="black" points="104,-268.5 104,-295 180,-295 180,-268.5 104,-268.5"/>
-<text text-anchor="start" x="137.5" y="-276.7" font-family="Times New Roman,serif" font-size="14.00">If</text>
-<polygon fill="none" stroke="black" points="104,-236 104,-268.5 180,-268.5 180,-236 104,-236"/>
-<polygon fill="yellow" stroke="none" points="109,-241 109,-263.5 140.5,-263.5 140.5,-241 109,-241"/>
-<polygon fill="none" stroke="black" points="109,-241 109,-263.5 140.5,-263.5 140.5,-241 109,-241"/>
-<text text-anchor="start" x="112" y="-247.2" font-family="Times New Roman,serif" font-size="14.00">True</text>
-<polygon fill="yellow" stroke="none" points="140.5,-241 140.5,-263.5 175,-263.5 175,-241 140.5,-241"/>
-<polygon fill="none" stroke="black" points="140.5,-241 140.5,-263.5 175,-263.5 175,-241 140.5,-241"/>
-<text text-anchor="start" x="143.5" y="-247.2" font-family="Times New Roman,serif" font-size="14.00">False</text>
-</g>
-<!-- If25&#45;&gt;If16 -->
-<g id="edge23" class="edge">
-<title>If25&#45;&gt;If16:p0</title>
-<path fill="none" stroke="red" d="M170.91,-298.68C180.72,-309.96 191.57,-322.85 201,-335 203.66,-338.43 237.81,-384.19 251.31,-405.07"/>
-<polygon fill="red" stroke="red" points="248.15,-406.58 256.02,-413.67 254.29,-403.22 248.15,-406.58"/>
-<text text-anchor="middle" x="168.66" y="-300.83" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- If25&#45;&gt;EQ23 -->
-<g id="edge24" class="edge">
-<title>If25&#45;&gt;EQ23</title>
-<path fill="none" stroke="black" d="M150.7,-298.82C152.92,-307.08 155.29,-315.9 157.45,-323.93"/>
-<polygon fill="black" stroke="black" points="154.05,-324.76 160.03,-333.51 160.81,-322.94 154.05,-324.76"/>
-<text text-anchor="middle" x="148.45" y="-300.97" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_230&#45;&gt;Store10 -->
-<g id="edge26" class="edge">
-<title>Phi_230&#45;&gt;Store10</title>
-<path fill="none" stroke="blue" d="M122.51,-617.59C129.69,-626.41 138.66,-637.42 146.57,-647.14"/>
-<polygon fill="blue" stroke="blue" points="143.77,-649.24 152.8,-654.79 149.2,-644.82 143.77,-649.24"/>
-<text text-anchor="middle" x="120.26" y="-619.74" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_230&#45;&gt;Loop11 -->
-<g id="edge25" class="edge">
-<title>Phi_230&#45;&gt;Loop11</title>
-<path fill="none" stroke="black" stroke-dasharray="1,5" d="M133.84,-583.77C146.98,-576.14 163.74,-567.89 180,-564 215.01,-555.63 226.74,-552.95 261,-564 268.52,-566.43 275.87,-570.45 282.52,-574.95"/>
-<polygon fill="black" stroke="black" points="280.35,-577.71 290.47,-580.85 284.52,-572.08 280.35,-577.71"/>
-<text text-anchor="middle" x="131.59" y="-576.17" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Phi_233 -->
-<g id="node19" class="node">
-<title>Phi_233</title>
-<ellipse fill="lightyellow" stroke="black" cx="69" cy="-106" rx="52.89" ry="18"/>
-<text text-anchor="middle" x="69" y="-100.95" font-family="Times New Roman,serif" font-size="14.00">MemPhi_2</text>
-</g>
-<!-- Store31 -->
-<g id="node17" class="node">
-<title>Store31</title>
-<ellipse fill="none" stroke="black" cx="58" cy="-178" rx="27" ry="18"/>
-<text text-anchor="middle" x="58" y="-172.95" font-family="Times New Roman,serif" font-size="14.00">.f =</text>
-</g>
-<!-- Store31&#45;&gt;new9 -->
-<g id="edge30" class="edge">
-<title>Store31&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M57,-354C19.45,-421.68 37,-449.6 37,-527 37,-527 37,-527 37,-601 37,-651.78 80.7,-696.66 111.17,-721.77"/>
-<polygon fill="black" stroke="black" points="108.95,-724.48 118.96,-727.98 113.32,-719.01 108.95,-724.48"/>
-<path fill="none" stroke="black" d="M57,-266.5C57.21,-285.5 66.47,-335.53 57,-352"/>
-<path fill="none" stroke="black" d="M57.56,-196.36C57.19,-213.63 56.74,-240.9 57,-264.5"/>
-<text text-anchor="middle" x="54.75" y="-346.4" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Store31&#45;&gt;Div21 -->
-<g id="edge31" class="edge">
-<title>Store31&#45;&gt;Div21</title>
-<path fill="none" stroke="black" d="M51.23,-195.87C39.58,-226.46 17,-293.35 17,-352 17,-352 17,-352 17,-601 17,-641.11 18.86,-652.1 32,-690 35.19,-699.2 39.88,-708.69 44.56,-717.06"/>
-<polygon fill="black" stroke="black" points="41.52,-718.8 49.61,-725.64 47.56,-715.25 41.52,-718.8"/>
-<text text-anchor="middle" x="48.98" y="-198.02" font-family="Helvetica,sans-Serif" font-size="8.00">3</text>
-</g>
-<!-- Store31&#45;&gt;If25 -->
-<g id="edge28" class="edge">
-<title>Store31&#45;&gt;If25:p0</title>
-<path fill="none" stroke="red" d="M61.66,-195.99C66.57,-214.42 77.07,-242.26 96.81,-250.12"/>
-<polygon fill="red" stroke="red" points="96.03,-253.53 106.51,-251.97 97.35,-246.66 96.03,-253.53"/>
-<text text-anchor="middle" x="59.41" y="-198.14" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Store31&#45;&gt;Phi_230 -->
-<g id="edge29" class="edge">
-<title>Store31&#45;&gt;Phi_230</title>
-<path fill="none" stroke="blue" d="M57,-529C56.5,-546.83 67.47,-563.07 79.46,-575.42"/>
-<polygon fill="blue" stroke="blue" points="77.03,-577.93 86.7,-582.27 81.85,-572.85 77.03,-577.93"/>
-<path fill="none" stroke="blue" d="M57,-266.5C69.32,-381.62 60.25,-411.27 57,-527"/>
-<text text-anchor="middle" x="54.75" y="-521.4" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Region32&#45;&gt;If25 -->
-<g id="edge32" class="edge">
-<title>Region32&#45;&gt;If25:p0</title>
-<path fill="none" stroke="red" d="M173.65,-124.25C156.55,-146.45 129.75,-187.13 125.37,-228.59"/>
-<polygon fill="red" stroke="red" points="121.87,-228.31 124.83,-238.49 128.86,-228.69 121.87,-228.31"/>
-<text text-anchor="middle" x="171.4" y="-126.4" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Region32&#45;&gt;If25 -->
-<g id="edge33" class="edge">
-<title>Region32&#45;&gt;If25:p1</title>
-<path fill="none" stroke="red" d="M181.44,-124.35C173.32,-147.27 160.3,-189.33 158.08,-228.71"/>
-<polygon fill="red" stroke="red" points="154.59,-228.39 157.79,-238.49 161.58,-228.59 154.59,-228.39"/>
-<text text-anchor="middle" x="179.19" y="-126.5" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Phi_233&#45;&gt;Phi_230 -->
-<g id="edge36" class="edge">
-<title>Phi_233&#45;&gt;Phi_230</title>
-<path fill="none" stroke="blue" d="M84.51,-133.96C88.4,-142.07 92.02,-151.16 94,-160 97.5,-175.61 98.33,-180.6 94,-196 88.92,-214.05 77.08,-213.95 72,-232 55.48,-290.7 59.98,-384.37 92,-546 93.66,-554.38 96.2,-563.28 98.81,-571.36"/>
-<polygon fill="blue" stroke="blue" points="87.75,-132.6 80.06,-125.32 81.53,-135.81 87.75,-132.6"/>
-<polygon fill="blue" stroke="blue" points="95.44,-572.31 101.98,-580.64 102.06,-570.05 95.44,-572.31"/>
-<text text-anchor="middle" x="77.12" y="-126.12" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Phi_233&#45;&gt;Store31 -->
-<g id="edge35" class="edge">
-<title>Phi_233&#45;&gt;Store31</title>
-<path fill="none" stroke="blue" d="M66.28,-124.3C65.12,-131.68 63.74,-140.48 62.44,-148.75"/>
-<polygon fill="blue" stroke="blue" points="59.02,-147.98 60.92,-158.4 65.93,-149.07 59.02,-147.98"/>
-<text text-anchor="middle" x="64.03" y="-126.45" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Phi_233&#45;&gt;Region32 -->
-<g id="edge34" class="edge">
-<title>Phi_233&#45;&gt;Region32</title>
-<path fill="none" stroke="black" stroke-dasharray="1,5" d="M121.99,-106C130.94,-106 139.88,-106 148.82,-106"/>
-<polygon fill="black" stroke="black" points="148.64,-109.5 158.64,-106 148.64,-102.5 148.64,-109.5"/>
-<text text-anchor="middle" x="124.24" y="-98.4" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Sub35&#45;&gt;Phi_arg13 -->
-<g id="edge38" class="edge">
-<title>Sub35&#45;&gt;Phi_arg13</title>
-<path fill="none" stroke="black" d="M170.02,-59.56C163.96,-68.33 157.37,-78.41 152,-88 143.43,-103.32 90.69,-214.84 87,-232 73.48,-294.79 101.52,-461.34 107,-474 125.1,-515.81 162.03,-554.22 187.15,-577.13"/>
-<polygon fill="black" stroke="black" points="172.77,-61.74 175.68,-51.55 167.05,-57.7 172.77,-61.74"/>
-<polygon fill="black" stroke="black" points="184.57,-579.51 194.36,-583.56 189.22,-574.29 184.57,-579.51"/>
-<text text-anchor="middle" x="174.31" y="-52.47" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Sub35&#45;&gt;Region32 -->
-<g id="edge37" class="edge">
-<title>Sub35&#45;&gt;Region32</title>
-<path fill="none" stroke="red" d="M188,-52.3C188,-59.59 188,-68.27 188,-76.46"/>
-<polygon fill="red" stroke="red" points="184.5,-76.38 188,-86.38 191.5,-76.38 184.5,-76.38"/>
-<text text-anchor="middle" x="185.75" y="-54.45" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Con_36 -->
-<g id="node21" class="node">
-<title>Con_36</title>
-<ellipse fill="none" stroke="black" cx="261" cy="-106" rx="27" ry="18"/>
-<text text-anchor="middle" x="261" y="-100.95" font-family="Times New Roman,serif" font-size="14.00">#1</text>
-</g>
-<!-- Sub35&#45;&gt;Con_36 -->
-<g id="edge39" class="edge">
-<title>Sub35&#45;&gt;Con_36</title>
-<path fill="none" stroke="black" d="M202.77,-49.17C212.8,-58.78 226.26,-71.69 237.72,-82.68"/>
-<polygon fill="black" stroke="black" points="235.27,-85.17 244.91,-89.57 240.11,-80.12 235.27,-85.17"/>
-<text text-anchor="middle" x="200.52" y="-51.32" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Return37&#45;&gt;MemMerge -->
-<g id="edge42" class="edge">
-<title>Return37&#45;&gt;MemMerge</title>
-<path fill="none" stroke="blue" d="M244.94,-283.8C253.18,-295.74 264.29,-311.84 273.64,-325.4"/>
-<polygon fill="blue" stroke="blue" points="270.66,-327.24 279.22,-333.48 276.42,-323.26 270.66,-327.24"/>
-<text text-anchor="middle" x="242.69" y="-285.95" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Return37&#45;&gt;new9 -->
-<g id="edge41" class="edge">
-<title>Return37&#45;&gt;new9</title>
-<path fill="none" stroke="black" d="M216.48,-283.78C210.69,-289.16 203.9,-294.79 197,-299 140.21,-333.67 89.27,-293.82 57,-352"/>
-<text text-anchor="middle" x="214.23" y="-285.93" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Return37&#45;&gt;If16 -->
-<g id="edge40" class="edge">
-<title>Return37&#45;&gt;If16:p1</title>
-<path fill="none" stroke="red" d="M230.82,-283.79C228.88,-305.37 228.21,-342.88 242,-371 252.72,-392.86 279.35,-388.61 287.4,-404.08"/>
-<polygon fill="red" stroke="red" points="283.91,-404.48 289.43,-413.52 290.75,-403.01 283.91,-404.48"/>
-<text text-anchor="middle" x="228.57" y="-285.94" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-</g>
-</svg>
+<svg aria-label="Compiler graph" width="728" height="1808" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 728 1808" style="font-family: sans-serif;"><style>
+ html, body { height:100%; margin:0; font-family:sans-serif; }
+ .viewer { height:100%; display:grid; grid-template-rows:auto minmax(0,1fr) auto; }
+ .source { padding:8px; border-bottom:1px solid #ccc; }
+ #program { width:min(600px,80vw); vertical-align:middle; }
+ #status { margin-top:4px; }
+ #graph { min-height:0; overflow:hidden; position:relative; background:#fafbfc; }
+ #elk { width:100%; height:100%; }
+ #graph svg { display:block; }
+ .tools { display:flex; flex-wrap:wrap; align-items:center; gap:14px; margin-top:8px; font-size:12px; }
+ .hint { color:#616c78; }
+ .ctrl { color:#b63838; } .mem { color:#2867b2; } .data { color:#536477; }
+ .edge { fill:none; stroke-width:1.5; }
+ .edge.CTRL { stroke-width:2; }
+ .edge.ASSOC { stroke-dasharray:4 4; }
+ .edge.PARSER { stroke-dasharray:5 4; }
+ .parser rect { fill:#f6f0ff; stroke:#7956a5; stroke-width:1.5; stroke-dasharray:5 4; }
+ .edge.selected { stroke-width:3.5; }
+ .edge.bundle { stroke-width:4; }
+ .edge.bundle.selected { stroke-width:6; }
+ .edge-hit { fill:none; stroke:transparent; stroke-width:12; vector-effect:non-scaling-stroke; pointer-events:stroke; cursor:pointer; }
+ .edge-jump { fill:transparent; pointer-events:all; cursor:pointer; }
+ .node { cursor:pointer; }
+ .box { stroke:#758191; stroke-width:1; }
+ .node.held .box { stroke-dasharray:5 3; }
+ .node.near .box { stroke:#c18221; stroke-width:2; }
+ .node.focus .box { stroke:#9c4900; stroke-width:3; }
+ .node.selected .box { stroke:#1569b9; stroke-width:3; }
+ .node.folded .box { stroke-width:4; }
+ .node.folding .box { fill:#f4ccd7; }
+ .fold-tag { font-size:9px; font-weight:700; fill:#963751; }
+ .peep-area { fill:#fff3d9; fill-opacity:.8; stroke:#c18221; stroke-width:2; pointer-events:none; }
+ .node.peep-edit .box { stroke:#9c4900; stroke-width:3; }
+ .node.error .box { stroke:#b42318; stroke-width:4; }
+ #event.error { color:#b42318; font-weight:600; white-space:pre-wrap; overflow-wrap:anywhere; }
+ .peep-ghosts { pointer-events:none; }
+ .region-box { stroke:#9da9b8; stroke-width:1.5; }
+ .fold-btn { cursor:pointer; }
+ .fold-btn rect { fill:white; stroke:#596674; }
+ .fold-btn text { font-size:14px; fill:#152330; }
+ .fold-btn:focus rect { stroke:#1569b9; stroke-width:2; }
+ .shortcut { cursor:pointer; }
+ .shortcut path { fill:none; stroke-width:1.5; }
+ .shortcut rect { fill:#fff8ec; stroke:#b63838; stroke-dasharray:3 2; }
+ .shortcut text { font-size:11px; fill:#783030; }
+ .shortcut.selected rect, .shortcut:focus rect { stroke-width:2.5; }
+ .label { font-size:12px; fill:#152330; font-weight:600; }
+ .node-id { font-size:10px; fill:#596674; font-weight:400; }
+ .type { font-size:11px; fill:#455768; }
+ .port { stroke:#536477; stroke-width:1; }
+ .row { stroke:#b6afcf; stroke-width:1; }
+ .bind { font-size:12px; fill:#152330; }
+ .slot { font-size:10px; fill:#364352; paint-order:stroke; stroke:#fafbfc; stroke-width:3; }
+ #detail { position:absolute; top:8px; right:8px; margin:0; padding:12px; max-width:320px;
+ max-height:45%; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere;
+ background:#fffffff2; border:1px solid #bac5d0; border-radius:4px; font-size:12px; }
+ .controls { display:flex; flex-wrap:wrap; justify-content:center; align-items:center; gap:6px; padding:6px; }
+ .button { color:white; background:black; font-size:20px; min-width:30px; }
+ .button:disabled { background:grey; }
+ .count { font-size:20px; min-width:35px; text-align:center; }
+ #N { width:6ch; }
+ #scrub { width:clamp(120px,35vw,600px); }
+ </style><defs><marker id="arrow-CTRL" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#b63838"/></marker><marker id="arrow-DATA" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#536477"/></marker><marker id="arrow-MEM" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#2867b2"/></marker><marker id="arrow-ASSOC" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#9396a3"/></marker><marker id="arrow-PARSER" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#7956a5"/></marker></defs><rect width="100%" height="100%" fill="rgb(250, 251, 252)"/><g><g class="regions" style="opacity: 1;"><g class="region" transform="translate(24,391)"><rect class="region-box" rx="8" width="642" height="1106" fill="#f1f6fc"/></g><g class="region" transform="translate(90,980)"><rect class="region-box" rx="8" width="336" height="460" fill="#f2f7ef"/></g></g><rect class="peep-area" rx="36" style="opacity: 0;"/><g class="edges"><path class="edge CTRL" id="e1i0" d="M282,819 L282,829 L58,829 L58,1522 L99,1522 L99,1550" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#1[0] → #12 · CTRL</title></path><path class="edge MEM" id="e1i1" d="M348,118 L348,128 L684,128 L684,1522 L129,1522 L129,1550" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#1[1] → #6 · MEM</title></path><path class="edge MEM" id="e1i2" d="M486,545 L486,575 L80,575 L80,935 L79,935 L79,1512 L159,1512 L159,1550" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#1[2] → #230 · MEM</title></path><path class="edge CTRL" id="e3i0" d="M88,1707 C88,1731 364,1734 364,1758" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#3[0] → #37 · CTRL</title></path><path class="edge CTRL" id="e9i0" d="M228,118 L228,148 L462,148 L462,166" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#9[0] → #5 · CTRL</title></path><path class="edge CTRL" id="e10i0" d="M228,118 L228,270" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#10[0] → #5 · CTRL</title></path><path class="edge MEM" id="e10i1" d="M348,118 L348,128 L239,128 L239,232 L252,232 L252,270" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#10[1] → #6 · MEM</title></path><path class="edge DATA" id="e10i2" d="M462,222 L462,242 L276,242 L276,270" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#10[2] → #9 · DATA</title></path><path class="edge DATA" id="e10i3" d="M310,222 L310,252 L300,252 L300,270" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#10[3] → #4 · DATA</title></path><path class="edge CTRL" id="e11i1" d="M228,118 L228,148 L182,148 L182,489" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#11[1] → #5 · CTRL</title></path><path class="edge CTRL" id="e11i2" d="M184,1321 L184,1331 L654,1331 L654,464 L212,464 L212,492" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#11[2] → #32 · CTRL</title></path><path class="edge DATA" id="e13i1" d="M468,118 L468,138 L193,138 L193,376 L314,376 L314,489" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#13[1] → #7 · DATA</title></path><path class="edge DATA" id="e13i2" d="M214,1425 L214,1435 L644,1435 L644,472 L354,472 L354,492" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#13[2] → #35 · DATA</title></path><path class="edge CTRL" id="e14i0" d="M182,545 L182,605 L223,605 L223,615" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#14[0] → #11 · CTRL</title></path><path class="edge DATA" id="e14i1" d="M310,222 L310,252 L334,252 L334,356 L556,356 L556,585 L253,585 L253,615" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#14[1] → #4 · DATA</title></path><path class="edge DATA" id="e14i2" d="M334,545 L334,595 L283,595 L283,615" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#14[2] → #13 · DATA</title></path><path class="edge CTRL" id="e16i0" d="M182,545 L182,719" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#16[0] → #11 · CTRL</title></path><path class="edge DATA" id="e16i1" d="M253,671 L253,681 L262,681 L262,719" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#16[1] → #14 · DATA</title></path><path class="edge CTRL" id="e21i0" d="M228,118 L228,148 L584,148 L584,166" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#21[0] → #5 · CTRL</title></path><path class="edge DATA" id="e21i1" d="M468,118 L468,138 L614,138 L614,166" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#21[1] → #7 · DATA</title></path><path class="edge DATA" id="e21i2" d="M644,118 L644,166" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#21[2] → #22 · DATA</title></path><path class="edge CTRL" id="e23i0" d="M162,819 L162,849 L203,849 L203,869" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#23[0] → #8 · CTRL</title></path><path class="edge DATA" id="e23i1" d="M334,545 L334,595 L369,595 L369,849 L233,849 L233,869" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#23[1] → #13 · DATA</title></path><path class="edge DATA" id="e23i2" d="M557,326 L557,336 L578,336 L578,565 L567,565 L567,859 L263,859 L263,869" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#23[2] → #24 · DATA</title></path><path class="edge CTRL" id="e25i0" d="M162,819 L162,935 L204,935 L204,1014" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#25[0] → #8 · CTRL</title></path><path class="edge DATA" id="e25i1" d="M233,925 L233,935 L284,935 L284,1014" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#25[1] → #23 · DATA</title></path><path class="edge CTRL" id="e31i0" d="M184,1114 L184,1134 L249,1134 L249,1164" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#31[0] → #15 · CTRL</title></path><path class="edge MEM" id="e31i1" d="M486,545 L486,575 L578,575 L578,935 L380,935 L380,1134 L273,1134 L273,1164" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#31[1] → #230 · MEM</title></path><path class="edge DATA" id="e31i2" d="M462,222 L462,242 L627,242 L627,336 L589,336 L589,945 L391,945 L391,1144 L297,1144 L297,1164" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#31[2] → #9 · DATA</title></path><path class="edge DATA" id="e31i3" d="M614,222 L614,232 L638,232 L638,346 L600,346 L600,955 L402,955 L402,1154 L321,1154 L321,1164" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#31[3] → #21 · DATA</title></path><path class="edge CTRL" id="e32i1" d="M184,1114 L184,1268" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#32[1] → #15 · CTRL</title></path><path class="edge CTRL" id="e32i2" d="M304,1114 L304,1124 L214,1124 L214,1268" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#32[2] → #17 · CTRL</title></path><path class="edge CTRL" id="e35i0" d="M184,1324 L184,1372" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#35[0] → #32 · CTRL</title></path><path class="edge DATA" id="e35i1" d="M334,545 L334,595 L91,595 L91,935 L102,935 L102,1354 L214,1354 L214,1372" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#35[1] → #13 · DATA</title></path><path class="edge DATA" id="e35i2" d="M405,326 L405,346 L567,346 L567,555 L358,555 L358,839 L113,839 L113,1344 L244,1344 L244,1372" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#35[2] → #36 · DATA</title></path><path class="edge CTRL" id="e37i0" d="M282,819 L282,829 L58,829 L58,1654" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#37[0] → #12 · CTRL</title></path><path class="edge MEM" id="e37i1" d="M129,1606 L129,1616 L88,1616 L88,1654" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#37[1] → #1 · MEM</title></path><path class="edge DATA" id="e37i2" d="M462,222 L462,242 L695,242 L695,1626 L118,1626 L118,1654" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#37[2] → #9 · DATA</title></path><path class="edge MEM" id="e230i1" d="M264,326 L264,366 L466,366 L466,489" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#230[1] → #10 · MEM</title></path><path class="edge MEM" id="e230i2" d="M336,1321 L336,1331 L634,1331 L634,480 L506,480 L506,492" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#230[2] → #233 · MEM</title></path><path class="edge MEM" id="e233i1" d="M285,1220 L285,1230 L316,1230 L316,1268" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#233[1] → #31 · MEM</title></path><path class="edge MEM" id="e233i2" d="M486,545 L486,575 L611,575 L611,965 L413,965 L413,1230 L356,1230 L356,1268" stroke="#2867b2" marker-start="url(#arrow-MEM)" style="opacity: 1;"><title>#233[2] → #230 · MEM</title></path></g><g class="edge-hits"/><g class="parser" style="opacity: 1;"/><g class="nodes"><g class="node" id="n1" data-id="1" transform="translate(69,1556)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemMerge</tspan><tspan class="node-id">  #1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#1 MemMerge
+Type not computed
+
+[0] → #12 CTRL
+[1] → #6 MEM
+[2] → #230 MEM</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n2" data-id="2" transform="translate(168,24)" style="opacity: 1;"><path class="box" d="M0,0H360V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="180" y="18"><tspan>Start</tspan><tspan class="node-id">  #2</tspan></text><text class="type" text-anchor="middle" y="35" x="180"/><title>#2 Start
+Type not computed
+
+</title></g><g class="node" id="n3" data-id="3" transform="translate(328,1758)" style="opacity: 1;"><path class="box" d="M0,0H72V26H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="36" y="17"><tspan>Stop</tspan><tspan class="node-id">  #3</tspan></text><text class="type" text-anchor="middle" y="35" x="36"/><title>#3 Stop
+Type not computed
+
+[0] → #37 CTRL</title><circle class="port" cx="36" cy="0" r="3" fill="#536477"/><text class="slot" x="36" y="-7" text-anchor="middle">0</text></g><g class="node" id="n4" data-id="4" transform="translate(250,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#0</tspan><tspan class="node-id">  #4</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#4 #0
+Type not computed
+
+</title></g><g class="node" id="n5" data-id="5" transform="translate(168,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$ctrl</tspan><tspan class="node-id">  #5/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#5 $ctrl
+Projection 0 of #2
+Type not computed
+
+[0] → #2 CTRL</title></g><g class="node" id="n6" data-id="6" transform="translate(288,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$mem</tspan><tspan class="node-id">  #6/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#6 $mem
+Projection 1 of #2
+Type not computed
+
+[0] → #2 MEM</title></g><g class="node" id="n7" data-id="7" transform="translate(408,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>arg</tspan><tspan class="node-id">  #7/2</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#7 arg
+Projection 2 of #2
+Type not computed
+
+[0] → #2 DATA</title></g><g class="node" id="n8" data-id="8" transform="translate(102,769)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>True</tspan><tspan class="node-id">  #8/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#8 True
+Projection 0 of #16
+Type not computed
+
+[0] → #16 CTRL</title></g><g class="node" id="n9" data-id="9" transform="translate(402,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>new S</tspan><tspan class="node-id">  #9</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#9 new S
+Type not computed
+
+[0] → #5 CTRL</title><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><text class="slot" x="60" y="-10" text-anchor="middle">0</text></g><g class="node" id="n10" data-id="10" transform="translate(204,276)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f =</tspan><tspan class="node-id">  #10</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#10 .f =
+Type not computed
+
+[0] → #5 CTRL
+[1] → #6 MEM
+[2] → #9 DATA
+[3] → #4 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="#536477"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n11" data-id="11" transform="translate(122,495)" style="opacity: 1;"><path class="box" d="M20,0H100Q120,0 120,20V24Q120,44 100,44H20Q0,44 0,24V20Q0,0 20,0Z" fill="#ffe0ab"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Loop</tspan><tspan class="node-id">  #11</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#11 Loop
+Type not computed
+
+[0] → — DATA
+[1] → #5 CTRL
+[2] → #32 CTRL</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n12" data-id="12" transform="translate(222,769)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>False</tspan><tspan class="node-id">  #12/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#12 False
+Projection 1 of #16
+Type not computed
+
+[0] → #16 CTRL</title></g><g class="node" id="n13" data-id="13" transform="translate(274,495)" style="opacity: 1;"><path class="box" d="M12,0H108L120,22L108,44H12L0,22Z" fill="#f5e4fa"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>φ_arg</tspan><tspan class="node-id">  #13</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#13 φ_arg
+Type not computed
+
+[0] → #11 ASSOC
+[1] → #7 DATA
+[2] → #35 DATA</title><circle class="port" cx="-3" cy="22" r="3" fill="#536477"/><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><path class="reg" fill="none" stroke="#b63838" d="M-3,22H-18m4,-3l-4,3l4,3"><title>[0] → #11</title></path><text class="slot" x="-10" y="15" text-anchor="middle">0</text><text class="slot" x="40" y="-10" text-anchor="middle">1</text><text class="slot" x="80" y="-10" text-anchor="middle">2</text></g><g class="node" id="n14" data-id="14" transform="translate(193,621)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>&lt;</tspan><tspan class="node-id">  #14</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#14 &lt;
+Type not computed
+
+[0] → #11 CTRL
+[1] → #4 DATA
+[2] → #13 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n15" data-id="15" transform="translate(124,1064)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>True</tspan><tspan class="node-id">  #15/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#15 True
+Projection 0 of #25
+Type not computed
+
+[0] → #25 CTRL</title></g><g class="node" id="n16" data-id="16" transform="translate(102,725)" style="opacity: 1;"><path class="box" d="M0,0H240V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="120" y="18"><tspan>If</tspan><tspan class="node-id">  #16</tspan></text><text class="type" text-anchor="middle" y="35" x="120"/><title>#16 If
+Type not computed
+
+[0] → #11 CTRL
+[1] → #14 DATA</title><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><circle class="port" cx="160" cy="-3" r="3" fill="#536477"/><text class="slot" x="80" y="-10" text-anchor="middle">0</text><text class="slot" x="160" y="-10" text-anchor="middle">1</text></g><g class="node" id="n17" data-id="17" transform="translate(244,1064)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>False</tspan><tspan class="node-id">  #17/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#17 False
+Projection 1 of #25
+Type not computed
+
+[0] → #25 CTRL</title></g><g class="node" id="n21" data-id="21" transform="translate(554,172)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>//</tspan><tspan class="node-id">  #21</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#21 //
+Type not computed
+
+[0] → #5 CTRL
+[1] → #7 DATA
+[2] → #22 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n22" data-id="22" transform="translate(584,68)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#3</tspan><tspan class="node-id">  #22</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#22 #3
+Type not computed
+
+</title></g><g class="node" id="n23" data-id="23" transform="translate(173,875)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>==</tspan><tspan class="node-id">  #23</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#23 ==
+Type not computed
+
+[0] → #8 CTRL
+[1] → #13 DATA
+[2] → #24 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n24" data-id="24" transform="translate(497,276)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#5</tspan><tspan class="node-id">  #24</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#24 #5
+Type not computed
+
+</title></g><g class="node" id="n25" data-id="25" transform="translate(124,1020)" style="opacity: 1;"><path class="box" d="M0,0H240V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="120" y="18"><tspan>If</tspan><tspan class="node-id">  #25</tspan></text><text class="type" text-anchor="middle" y="35" x="120"/><title>#25 If
+Type not computed
+
+[0] → #8 CTRL
+[1] → #23 DATA</title><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><circle class="port" cx="160" cy="-3" r="3" fill="#536477"/><text class="slot" x="80" y="-10" text-anchor="middle">0</text><text class="slot" x="160" y="-10" text-anchor="middle">1</text></g><g class="node" id="n31" data-id="31" transform="translate(225,1170)" style="opacity: 1;"><path class="box" d="M10,0H110L120,10V34L110,44H10L0,34V10Z" fill="#dcecff"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>.f =</tspan><tspan class="node-id">  #31</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#31 .f =
+Type not computed
+
+[0] → #15 CTRL
+[1] → #230 MEM
+[2] → #9 DATA
+[3] → #21 DATA</title><circle class="port" cx="24" cy="-3" r="3" fill="#536477"/><circle class="port" cx="48" cy="-3" r="3" fill="#536477"/><circle class="port" cx="72" cy="-3" r="3" fill="#536477"/><circle class="port" cx="96" cy="-3" r="3" fill="#536477"/><text class="slot" x="24" y="-10" text-anchor="middle">0</text><text class="slot" x="48" y="-10" text-anchor="middle">1</text><text class="slot" x="72" y="-10" text-anchor="middle">2</text><text class="slot" x="96" y="-10" text-anchor="middle">3</text></g><g class="node" id="n32" data-id="32" transform="translate(124,1274)" style="opacity: 1;"><path class="box" d="M12,0H108L120,44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Region</tspan><tspan class="node-id">  #32</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#32 Region
+Type not computed
+
+[0] → — DATA
+[1] → #15 CTRL
+[2] → #17 CTRL</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n35" data-id="35" transform="translate(154,1378)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>-</tspan><tspan class="node-id">  #35</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#35 -
+Type not computed
+
+[0] → #32 CTRL
+[1] → #13 DATA
+[2] → #36 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n36" data-id="36" transform="translate(345,276)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#1</tspan><tspan class="node-id">  #36</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#36 #1
+Type not computed
+
+</title></g><g class="node" id="n37" data-id="37" transform="translate(28,1660)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Return</tspan><tspan class="node-id">  #37</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#37 Return
+Type not computed
+
+[0] → #12 CTRL
+[1] → #1 MEM
+[2] → #9 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n230" data-id="230" transform="translate(426,495)" style="opacity: 1;"><path class="box" d="M12,0H108L120,22L108,44H12L0,22Z" fill="#f5e4fa"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemPhi_2</tspan><tspan class="node-id">  #230</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#230 MemPhi_2
+Type not computed
+
+[0] → #11 ASSOC
+[1] → #10 MEM
+[2] → #233 MEM</title><circle class="port" cx="-3" cy="22" r="3" fill="#536477"/><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><path class="reg" fill="none" stroke="#b63838" d="M-3,22H-18m4,-3l-4,3l4,3"><title>[0] → #11</title></path><text class="slot" x="-10" y="15" text-anchor="middle">0</text><text class="slot" x="40" y="-10" text-anchor="middle">1</text><text class="slot" x="80" y="-10" text-anchor="middle">2</text></g><g class="node" id="n233" data-id="233" transform="translate(276,1274)" style="opacity: 1;"><path class="box" d="M12,0H108L120,22L108,44H12L0,22Z" fill="#f5e4fa"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>MemPhi_2</tspan><tspan class="node-id">  #233</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#233 MemPhi_2
+Type not computed
+
+[0] → #32 ASSOC
+[1] → #31 MEM
+[2] → #230 MEM</title><circle class="port" cx="-3" cy="22" r="3" fill="#536477"/><circle class="port" cx="40" cy="-3" r="3" fill="#536477"/><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><path class="reg" fill="none" stroke="#b63838" d="M-3,22H-18m4,-3l-4,3l4,3"><title>[0] → #32</title></path><text class="slot" x="-10" y="15" text-anchor="middle">0</text><text class="slot" x="40" y="-10" text-anchor="middle">1</text><text class="slot" x="80" y="-10" text-anchor="middle">2</text></g></g><g class="region-heads" style="opacity: 1;"><g class="region-head" transform="translate(24,391)"><text class="label" x="26" y="17"><tspan>Loop</tspan><tspan class="node-id">  #11</tspan></text><title>Loop · 15 nodes</title><g class="fold-btn" role="button" tabindex="0" transform="translate(4,4)" aria-label="Fold region #11"><rect width="16" height="16" rx="2"/><text x="8" y="12" text-anchor="middle">−</text><title>Fold region</title></g></g><g class="region-head" transform="translate(90,980)"><text class="label" x="26" y="17"><tspan>If</tspan><tspan class="node-id">  #25</tspan></text><title>If · 7 nodes</title><g class="fold-btn" role="button" tabindex="0" transform="translate(4,4)" aria-label="Fold region #25"><rect width="16" height="16" rx="2"/><text x="8" y="12" text-anchor="middle">−</text><title>Fold region</title></g></g></g><g class="shortcuts" style="opacity: 1;"/><g class="peep-ghosts" pointer-events="none"/></g></svg>
diff --git a/chapter11/docs/graph7.json b/chapter11/docs/graph7.json
new file mode 100644
index 00000000..c1c86b07
--- /dev/null
+++ b/chapter11/docs/graph7.json
@@ -0,0 +1,16 @@
+{
+ "ver": 1,
+ "comp": "chapter11/docs/graph7.svg",
+ "step": 1,
+ "roots": [],
+ "scope": 0,
+ "nodes": [
+ {"id": 1, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}},
+ {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null},
+ {"id": 4, "label": "#0", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 8, "label": "Loop", "type": null, "kind": "LOOP", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 1, "role": "CTRL", "label": null}, {"idx": 2, "def": 8, "role": "CTRL", "label": null}], "proj": null}
+ ],
+ "groups": [
+ {"id": 8, "par": 0, "nodes": [8]}
+ ]
+}
diff --git a/chapter11/docs/graph7.svg b/chapter11/docs/graph7.svg
index 854660ec..e83b8d54 100644
--- a/chapter11/docs/graph7.svg
+++ b/chapter11/docs/graph7.svg
@@ -1,54 +1,78 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
- "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.43.0 (0)
- -->
-<!-- Title: chapter11 Pages: 1 -->
-<svg width="184pt" height="176pt"
- viewBox="0.00 0.00 184.00 176.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 172)">
-<title>chapter11</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-172 180,-172 180,4 -4,4"/>
-<g id="clust1" class="cluster">
-<title>cluster_Nodes</title>
-<polygon fill="none" stroke="black" points="8,-8 8,-160 168,-160 168,-8 8,-8"/>
-</g>
-<!-- Start2 -->
-<g id="node1" class="node">
-<title>Start2</title>
-<polygon fill="yellow" stroke="transparent" points="24,-123 24,-148 74,-148 74,-123 24,-123"/>
-<polygon fill="none" stroke="black" points="24,-123 24,-148 74,-148 74,-123 24,-123"/>
-<text text-anchor="start" x="30.5" y="-131.8" font-family="Times,serif" font-size="14.00">Start</text>
-<polygon fill="none" stroke="black" points="24,-92 24,-123 74,-123 74,-92 24,-92"/>
-<polygon fill="yellow" stroke="transparent" points="29,-97 29,-118 69,-118 69,-97 29,-97"/>
-<polygon fill="none" stroke="black" points="29,-97 29,-118 69,-118 69,-97 29,-97"/>
-<text text-anchor="start" x="32" y="-103.8" font-family="Times,serif" font-size="14.00">$ctrl</text>
-</g>
-<!-- Con_4 -->
-<g id="node2" class="node">
-<title>Con_4</title>
-<ellipse fill="none" stroke="black" cx="133" cy="-34" rx="27" ry="18"/>
-<text text-anchor="middle" x="133" y="-30.3" font-family="Times,serif" font-size="14.00">#0</text>
-</g>
-<!-- Loop8 -->
-<g id="node3" class="node">
-<title>Loop8</title>
-<polygon fill="yellow" stroke="black" points="70,-52 16,-52 16,-16 70,-16 70,-52"/>
-<text text-anchor="middle" x="43" y="-30.3" font-family="Times,serif" font-size="14.00">Loop</text>
-</g>
-<!-- Loop8&#45;&gt;Start2 -->
-<g id="edge1" class="edge">
-<title>Loop8&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M45.58,-52.05C46.84,-61.49 48.2,-73.71 48.75,-85.65"/>
-<polygon fill="red" stroke="red" points="45.26,-86.09 49,-96 52.25,-85.92 45.26,-86.09"/>
-<text text-anchor="middle" x="42.58" y="-54.65" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Loop8&#45;&gt;Loop8 -->
-<g id="edge2" class="edge">
-<title>Loop8&#45;&gt;Loop8</title>
-<path fill="none" stroke="red" d="M70.24,-17.89C80.02,-17.54 88,-22.91 88,-34 88,-40.93 84.88,-45.62 80.16,-48.09"/>
-<polygon fill="red" stroke="red" points="79.34,-44.68 70.24,-50.11 80.74,-51.54 79.34,-44.68"/>
-<text text-anchor="middle" x="73.24" y="-11.49" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-</g>
-</svg>
+<svg aria-label="Compiler graph" width="364" height="325" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 364 325" style="font-family: sans-serif;"><style>
+ html, body { height:100%; margin:0; font-family:sans-serif; }
+ .viewer { height:100%; display:grid; grid-template-rows:auto minmax(0,1fr) auto; }
+ .source { padding:8px; border-bottom:1px solid #ccc; }
+ #program { width:min(600px,80vw); vertical-align:middle; }
+ #status { margin-top:4px; }
+ #graph { min-height:0; overflow:hidden; position:relative; background:#fafbfc; }
+ #elk { width:100%; height:100%; }
+ #graph svg { display:block; }
+ .tools { display:flex; flex-wrap:wrap; align-items:center; gap:14px; margin-top:8px; font-size:12px; }
+ .hint { color:#616c78; }
+ .ctrl { color:#b63838; } .mem { color:#2867b2; } .data { color:#536477; }
+ .edge { fill:none; stroke-width:1.5; }
+ .edge.CTRL { stroke-width:2; }
+ .edge.ASSOC { stroke-dasharray:4 4; }
+ .edge.PARSER { stroke-dasharray:5 4; }
+ .parser rect { fill:#f6f0ff; stroke:#7956a5; stroke-width:1.5; stroke-dasharray:5 4; }
+ .edge.selected { stroke-width:3.5; }
+ .edge.bundle { stroke-width:4; }
+ .edge.bundle.selected { stroke-width:6; }
+ .edge-hit { fill:none; stroke:transparent; stroke-width:12; vector-effect:non-scaling-stroke; pointer-events:stroke; cursor:pointer; }
+ .edge-jump { fill:transparent; pointer-events:all; cursor:pointer; }
+ .node { cursor:pointer; }
+ .box { stroke:#758191; stroke-width:1; }
+ .node.held .box { stroke-dasharray:5 3; }
+ .node.near .box { stroke:#c18221; stroke-width:2; }
+ .node.focus .box { stroke:#9c4900; stroke-width:3; }
+ .node.selected .box { stroke:#1569b9; stroke-width:3; }
+ .node.folded .box { stroke-width:4; }
+ .node.folding .box { fill:#f4ccd7; }
+ .fold-tag { font-size:9px; font-weight:700; fill:#963751; }
+ .peep-area { fill:#fff3d9; fill-opacity:.8; stroke:#c18221; stroke-width:2; pointer-events:none; }
+ .node.peep-edit .box { stroke:#9c4900; stroke-width:3; }
+ .node.error .box { stroke:#b42318; stroke-width:4; }
+ #event.error { color:#b42318; font-weight:600; white-space:pre-wrap; overflow-wrap:anywhere; }
+ .peep-ghosts { pointer-events:none; }
+ .region-box { stroke:#9da9b8; stroke-width:1.5; }
+ .fold-btn { cursor:pointer; }
+ .fold-btn rect { fill:white; stroke:#596674; }
+ .fold-btn text { font-size:14px; fill:#152330; }
+ .fold-btn:focus rect { stroke:#1569b9; stroke-width:2; }
+ .shortcut { cursor:pointer; }
+ .shortcut path { fill:none; stroke-width:1.5; }
+ .shortcut rect { fill:#fff8ec; stroke:#b63838; stroke-dasharray:3 2; }
+ .shortcut text { font-size:11px; fill:#783030; }
+ .shortcut.selected rect, .shortcut:focus rect { stroke-width:2.5; }
+ .label { font-size:12px; fill:#152330; font-weight:600; }
+ .node-id { font-size:10px; fill:#596674; font-weight:400; }
+ .type { font-size:11px; fill:#455768; }
+ .port { stroke:#536477; stroke-width:1; }
+ .row { stroke:#b6afcf; stroke-width:1; }
+ .bind { font-size:12px; fill:#152330; }
+ .slot { font-size:10px; fill:#364352; paint-order:stroke; stroke:#fafbfc; stroke-width:3; }
+ #detail { position:absolute; top:8px; right:8px; margin:0; padding:12px; max-width:320px;
+ max-height:45%; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere;
+ background:#fffffff2; border:1px solid #bac5d0; border-radius:4px; font-size:12px; }
+ .controls { display:flex; flex-wrap:wrap; justify-content:center; align-items:center; gap:6px; padding:6px; }
+ .button { color:white; background:black; font-size:20px; min-width:30px; }
+ .button:disabled { background:grey; }
+ .count { font-size:20px; min-width:35px; text-align:center; }
+ #N { width:6ch; }
+ #scrub { width:clamp(120px,35vw,600px); }
+ </style><defs><marker id="arrow-CTRL" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#b63838"/></marker><marker id="arrow-DATA" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#536477"/></marker><marker id="arrow-MEM" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#2867b2"/></marker><marker id="arrow-ASSOC" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#9396a3"/></marker><marker id="arrow-PARSER" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#7956a5"/></marker></defs><rect width="100%" height="100%" fill="rgb(250, 251, 252)"/><g><g class="regions" style="opacity: 1;"><g class="region" transform="translate(164,171)"><rect class="region-box" rx="8" width="176" height="130" fill="#f1f6fc"/></g></g><rect class="peep-area" rx="36" style="opacity: 0;"/><g class="edges"><path class="edge CTRL" id="e8i1" d="M236,118 L236,223" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#8[1] → #1 · CTRL</title></path><path class="edge CTRL" id="e8i2" d="M236,276 L236,286 L328,286 L328,214 L266,214 L266,226" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#8[2] → #8 · CTRL</title></path></g><g class="edge-hits"/><g class="parser" style="opacity: 1;"/><g class="nodes"><g class="node" id="n1" data-id="1" transform="translate(176,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$ctrl</tspan><tspan class="node-id">  #1/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#1 $ctrl
+Projection 0 of #2
+Type not computed
+
+[0] → #2 CTRL</title></g><g class="node" id="n2" data-id="2" transform="translate(176,24)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Start</tspan><tspan class="node-id">  #2</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#2 Start
+Type not computed
+
+</title></g><g class="node" id="n4" data-id="4" transform="translate(24,49)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#0</tspan><tspan class="node-id">  #4</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#4 #0
+Type not computed
+
+</title></g><g class="node" id="n8" data-id="8" transform="translate(176,229)" style="opacity: 1;"><path class="box" d="M20,0H100Q120,0 120,20V24Q120,44 100,44H20Q0,44 0,24V20Q0,0 20,0Z" fill="#ffe0ab"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Loop</tspan><tspan class="node-id">  #8</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#8 Loop
+Type not computed
+
+[0] → — DATA
+[1] → #1 CTRL
+[2] → #8 CTRL</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g></g><g class="region-heads" style="opacity: 1;"><g class="region-head" transform="translate(164,171)"><text class="label" x="26" y="17"><tspan>Loop</tspan><tspan class="node-id">  #8</tspan></text><title>Loop · 1 nodes</title><g class="fold-btn" role="button" tabindex="0" transform="translate(4,4)" aria-label="Fold region #8"><rect width="16" height="16" rx="2"/><text x="8" y="12" text-anchor="middle">−</text><title>Fold region</title></g></g></g><g class="shortcuts" style="opacity: 1;"/><g class="peep-ghosts" pointer-events="none"/></g></svg>
diff --git a/chapter11/docs/graph8.json b/chapter11/docs/graph8.json
new file mode 100644
index 00000000..ab2ef65c
--- /dev/null
+++ b/chapter11/docs/graph8.json
@@ -0,0 +1,21 @@
+{
+ "ver": 1,
+ "comp": "chapter11/docs/graph8.svg",
+ "step": 1,
+ "roots": [],
+ "scope": 0,
+ "nodes": [
+ {"id": 1, "label": "True", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 18, "role": "CTRL", "label": null}], "proj": {"par": 18, "idx": 0}},
+ {"id": 2, "label": "Start", "type": null, "kind": "CTRL", "edges": [], "proj": null},
+ {"id": 3, "label": "Stop", "type": null, "kind": "STOP", "edges": [{"idx": 0, "def": 21, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 4, "label": "#0", "type": null, "kind": "DATA", "edges": [], "proj": null},
+ {"id": 5, "label": "False", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 18, "role": "CTRL", "label": null}], "proj": {"par": 18, "idx": 1}},
+ {"id": 6, "label": "$ctrl", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 2, "role": "CTRL", "label": null}], "proj": {"par": 2, "idx": 0}},
+ {"id": 8, "label": "Loop", "type": null, "kind": "LOOP", "edges": [{"idx": 0, "def": 0, "role": "DATA", "label": null}, {"idx": 1, "def": 6, "role": "CTRL", "label": null}, {"idx": 2, "def": 5, "role": "CTRL", "label": null}], "proj": null},
+ {"id": 18, "label": "Never", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 8, "role": "CTRL", "label": null}, {"idx": 1, "def": 4, "role": "DATA", "label": null}], "proj": null},
+ {"id": 21, "label": "Return", "type": null, "kind": "CTRL", "edges": [{"idx": 0, "def": 1, "role": "CTRL", "label": null}, {"idx": 1, "def": 0, "role": "DATA", "label": null}, {"idx": 2, "def": 4, "role": "DATA", "label": null}], "proj": null}
+ ],
+ "groups": [
+ {"id": 8, "par": 0, "nodes": [1, 5, 8, 18]}
+ ]
+}
diff --git a/chapter11/docs/graph8.svg b/chapter11/docs/graph8.svg
index a89eeeb5..4db46240 100644
--- a/chapter11/docs/graph8.svg
+++ b/chapter11/docs/graph8.svg
@@ -1,115 +1,98 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
- "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 12.2.0 (20241103.1931)
- -->
-<!-- Title: chapter11 Pages: 1 -->
-<svg width="166pt" height="426pt"
- viewBox="0.00 0.00 166.00 426.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 422)">
-<title>chapter11</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-422 162,-422 162,4 -4,4"/>
-<g id="clust1" class="cluster">
-<title>cluster_Nodes</title>
-<polygon fill="none" stroke="black" points="8,-8 8,-410 150,-410 150,-8 8,-8"/>
-</g>
-<!-- Never18 -->
-<g id="node1" class="node">
-<title>Never18</title>
-<polygon fill="yellow" stroke="none" points="24,-196.5 24,-223 100,-223 100,-196.5 24,-196.5"/>
-<polygon fill="none" stroke="black" points="24,-196.5 24,-223 100,-223 100,-196.5 24,-196.5"/>
-<text text-anchor="start" x="45.5" y="-204.7" font-family="Times New Roman,serif" font-size="14.00">Never</text>
-<polygon fill="none" stroke="black" points="24,-164 24,-196.5 100,-196.5 100,-164 24,-164"/>
-<polygon fill="yellow" stroke="none" points="29,-169 29,-191.5 60.5,-191.5 60.5,-169 29,-169"/>
-<polygon fill="none" stroke="black" points="29,-169 29,-191.5 60.5,-191.5 60.5,-169 29,-169"/>
-<text text-anchor="start" x="32" y="-175.2" font-family="Times New Roman,serif" font-size="14.00">True</text>
-<polygon fill="yellow" stroke="none" points="60.5,-169 60.5,-191.5 95,-191.5 95,-169 60.5,-169"/>
-<polygon fill="none" stroke="black" points="60.5,-169 60.5,-191.5 95,-191.5 95,-169 60.5,-169"/>
-<text text-anchor="start" x="63.5" y="-175.2" font-family="Times New Roman,serif" font-size="14.00">False</text>
-</g>
-<!-- Con_4 -->
-<g id="node4" class="node">
-<title>Con_4</title>
-<ellipse fill="none" stroke="black" cx="115" cy="-281" rx="27" ry="18"/>
-<text text-anchor="middle" x="115" y="-275.95" font-family="Times New Roman,serif" font-size="14.00">#0</text>
-</g>
-<!-- Never18&#45;&gt;Con_4 -->
-<g id="edge2" class="edge">
-<title>Never18&#45;&gt;Con_4</title>
-<path fill="none" stroke="black" d="M82.04,-226.82C87.68,-235.93 93.75,-245.71 99.11,-254.37"/>
-<polygon fill="black" stroke="black" points="95.99,-255.97 104.23,-262.63 101.94,-252.28 95.99,-255.97"/>
-<text text-anchor="middle" x="79.79" y="-228.97" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-<!-- Loop8 -->
-<g id="node6" class="node">
-<title>Loop8</title>
-<polygon fill="yellow" stroke="black" points="70,-299 16,-299 16,-263 70,-263 70,-299"/>
-<text text-anchor="middle" x="43" y="-275.95" font-family="Times New Roman,serif" font-size="14.00">Loop</text>
-</g>
-<!-- Never18&#45;&gt;Loop8 -->
-<g id="edge1" class="edge">
-<title>Never18&#45;&gt;Loop8</title>
-<path fill="none" stroke="red" d="M54.82,-226.82C52.98,-235.08 51.02,-243.9 49.24,-251.93"/>
-<polygon fill="red" stroke="red" points="45.87,-250.97 47.11,-261.49 52.7,-252.49 45.87,-250.97"/>
-<text text-anchor="middle" x="52.57" y="-228.97" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Start2 -->
-<g id="node2" class="node">
-<title>Start2</title>
-<polygon fill="yellow" stroke="none" points="23.62,-371.5 23.62,-398 64.38,-398 64.38,-371.5 23.62,-371.5"/>
-<polygon fill="none" stroke="black" points="23.62,-371.5 23.62,-398 64.38,-398 64.38,-371.5 23.62,-371.5"/>
-<text text-anchor="start" x="31.25" y="-379.7" font-family="Times New Roman,serif" font-size="14.00">Start</text>
-<polygon fill="none" stroke="black" points="23.62,-339 23.62,-371.5 64.38,-371.5 64.38,-339 23.62,-339"/>
-<polygon fill="yellow" stroke="none" points="28.62,-344 28.62,-366.5 59.38,-366.5 59.38,-344 28.62,-344"/>
-<polygon fill="none" stroke="black" points="28.62,-344 28.62,-366.5 59.38,-366.5 59.38,-344 28.62,-344"/>
-<text text-anchor="start" x="31.62" y="-350.2" font-family="Times New Roman,serif" font-size="14.00">$ctrl</text>
-</g>
-<!-- Stop3 -->
-<g id="node3" class="node">
-<title>Stop3</title>
-<polygon fill="yellow" stroke="black" points="107,-52 53,-52 53,-16 107,-16 107,-52"/>
-<text text-anchor="middle" x="80" y="-28.95" font-family="Times New Roman,serif" font-size="14.00">Stop</text>
-</g>
-<!-- Return21 -->
-<g id="node5" class="node">
-<title>Return21</title>
-<polygon fill="yellow" stroke="black" points="107,-124 53,-124 53,-88 107,-88 107,-124"/>
-<text text-anchor="middle" x="80" y="-100.95" font-family="Times New Roman,serif" font-size="14.00">Return</text>
-</g>
-<!-- Stop3&#45;&gt;Return21 -->
-<g id="edge3" class="edge">
-<title>Stop3&#45;&gt;Return21</title>
-<path fill="none" stroke="red" d="M80,-52.3C80,-59.59 80,-68.27 80,-76.46"/>
-<polygon fill="red" stroke="red" points="76.5,-76.38 80,-86.38 83.5,-76.38 76.5,-76.38"/>
-<text text-anchor="middle" x="77.75" y="-54.45" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Return21&#45;&gt;Never18 -->
-<g id="edge4" class="edge">
-<title>Return21&#45;&gt;Never18:p0</title>
-<path fill="none" stroke="red" d="M63.41,-124.45C56.41,-133.22 49.19,-144.55 46.19,-156.68"/>
-<polygon fill="red" stroke="red" points="42.73,-156.14 44.94,-166.5 49.68,-157.02 42.73,-156.14"/>
-<text text-anchor="middle" x="61.16" y="-126.6" font-family="Helvetica,sans-Serif" font-size="8.00">0</text>
-</g>
-<!-- Return21&#45;&gt;Con_4 -->
-<g id="edge5" class="edge">
-<title>Return21&#45;&gt;Con_4</title>
-<path fill="none" stroke="black" d="M96.04,-124.15C104.01,-133.88 112.83,-146.73 117,-160 126.51,-190.23 124.01,-226.9 120.42,-251.69"/>
-<polygon fill="black" stroke="black" points="117,-250.9 118.86,-261.33 123.91,-252.02 117,-250.9"/>
-<text text-anchor="middle" x="93.79" y="-126.3" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Loop8&#45;&gt;Never18 -->
-<g id="edge7" class="edge">
-<title>Loop8&#45;&gt;Never18:p1</title>
-<path fill="none" stroke="red" d="M66.89,-262.62C77.59,-253.37 89.1,-241.02 95,-227 100.86,-213.08 109.7,-194.71 106.13,-185.7"/>
-<polygon fill="red" stroke="red" points="107.8,-182.63 97.33,-180.97 104.48,-188.79 107.8,-182.63"/>
-<text text-anchor="middle" x="64.64" y="-255.02" font-family="Helvetica,sans-Serif" font-size="8.00">2</text>
-</g>
-<!-- Loop8&#45;&gt;Start2 -->
-<g id="edge6" class="edge">
-<title>Loop8&#45;&gt;Start2:p0</title>
-<path fill="none" stroke="red" d="M43.44,-299.35C43.64,-308.51 43.85,-320.2 43.95,-331.69"/>
-<polygon fill="red" stroke="red" points="40.45,-331.5 43.99,-341.49 47.45,-331.47 40.45,-331.5"/>
-<text text-anchor="middle" x="41.19" y="-301.5" font-family="Helvetica,sans-Serif" font-size="8.00">1</text>
-</g>
-</g>
-</svg>
+<svg aria-label="Compiler graph" width="431" height="676" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 431 676" style="font-family: sans-serif;"><style>
+ html, body { height:100%; margin:0; font-family:sans-serif; }
+ .viewer { height:100%; display:grid; grid-template-rows:auto minmax(0,1fr) auto; }
+ .source { padding:8px; border-bottom:1px solid #ccc; }
+ #program { width:min(600px,80vw); vertical-align:middle; }
+ #status { margin-top:4px; }
+ #graph { min-height:0; overflow:hidden; position:relative; background:#fafbfc; }
+ #elk { width:100%; height:100%; }
+ #graph svg { display:block; }
+ .tools { display:flex; flex-wrap:wrap; align-items:center; gap:14px; margin-top:8px; font-size:12px; }
+ .hint { color:#616c78; }
+ .ctrl { color:#b63838; } .mem { color:#2867b2; } .data { color:#536477; }
+ .edge { fill:none; stroke-width:1.5; }
+ .edge.CTRL { stroke-width:2; }
+ .edge.ASSOC { stroke-dasharray:4 4; }
+ .edge.PARSER { stroke-dasharray:5 4; }
+ .parser rect { fill:#f6f0ff; stroke:#7956a5; stroke-width:1.5; stroke-dasharray:5 4; }
+ .edge.selected { stroke-width:3.5; }
+ .edge.bundle { stroke-width:4; }
+ .edge.bundle.selected { stroke-width:6; }
+ .edge-hit { fill:none; stroke:transparent; stroke-width:12; vector-effect:non-scaling-stroke; pointer-events:stroke; cursor:pointer; }
+ .edge-jump { fill:transparent; pointer-events:all; cursor:pointer; }
+ .node { cursor:pointer; }
+ .box { stroke:#758191; stroke-width:1; }
+ .node.held .box { stroke-dasharray:5 3; }
+ .node.near .box { stroke:#c18221; stroke-width:2; }
+ .node.focus .box { stroke:#9c4900; stroke-width:3; }
+ .node.selected .box { stroke:#1569b9; stroke-width:3; }
+ .node.folded .box { stroke-width:4; }
+ .node.folding .box { fill:#f4ccd7; }
+ .fold-tag { font-size:9px; font-weight:700; fill:#963751; }
+ .peep-area { fill:#fff3d9; fill-opacity:.8; stroke:#c18221; stroke-width:2; pointer-events:none; }
+ .node.peep-edit .box { stroke:#9c4900; stroke-width:3; }
+ .node.error .box { stroke:#b42318; stroke-width:4; }
+ #event.error { color:#b42318; font-weight:600; white-space:pre-wrap; overflow-wrap:anywhere; }
+ .peep-ghosts { pointer-events:none; }
+ .region-box { stroke:#9da9b8; stroke-width:1.5; }
+ .fold-btn { cursor:pointer; }
+ .fold-btn rect { fill:white; stroke:#596674; }
+ .fold-btn text { font-size:14px; fill:#152330; }
+ .fold-btn:focus rect { stroke:#1569b9; stroke-width:2; }
+ .shortcut { cursor:pointer; }
+ .shortcut path { fill:none; stroke-width:1.5; }
+ .shortcut rect { fill:#fff8ec; stroke:#b63838; stroke-dasharray:3 2; }
+ .shortcut text { font-size:11px; fill:#783030; }
+ .shortcut.selected rect, .shortcut:focus rect { stroke-width:2.5; }
+ .label { font-size:12px; fill:#152330; font-weight:600; }
+ .node-id { font-size:10px; fill:#596674; font-weight:400; }
+ .type { font-size:11px; fill:#455768; }
+ .port { stroke:#536477; stroke-width:1; }
+ .row { stroke:#b6afcf; stroke-width:1; }
+ .bind { font-size:12px; fill:#152330; }
+ .slot { font-size:10px; fill:#364352; paint-order:stroke; stroke:#fafbfc; stroke-width:3; }
+ #detail { position:absolute; top:8px; right:8px; margin:0; padding:12px; max-width:320px;
+ max-height:45%; overflow:auto; white-space:pre-wrap; overflow-wrap:anywhere;
+ background:#fffffff2; border:1px solid #bac5d0; border-radius:4px; font-size:12px; }
+ .controls { display:flex; flex-wrap:wrap; justify-content:center; align-items:center; gap:6px; padding:6px; }
+ .button { color:white; background:black; font-size:20px; min-width:30px; }
+ .button:disabled { background:grey; }
+ .count { font-size:20px; min-width:35px; text-align:center; }
+ #N { width:6ch; }
+ #scrub { width:clamp(120px,35vw,600px); }
+ </style><defs><marker id="arrow-CTRL" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#b63838"/></marker><marker id="arrow-DATA" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#536477"/></marker><marker id="arrow-MEM" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#2867b2"/></marker><marker id="arrow-ASSOC" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#9396a3"/></marker><marker id="arrow-PARSER" viewBox="0 -4 8 8" refX="8" refY="0" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,-4L8,0L0,4Z" fill="#7956a5"/></marker></defs><rect width="100%" height="100%" fill="rgb(250, 251, 252)"/><g><g class="regions" style="opacity: 1;"><g class="region" transform="translate(24,171)"><rect class="region-box" rx="8" width="313" height="298" fill="#f1f6fc"/></g></g><rect class="peep-area" rx="36" style="opacity: 0;"/><g class="edges"><path class="edge CTRL" id="e3i0" d="M126,575 C126,599 215.5,602 215.5,626" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#3[0] → #21 · CTRL</title></path><path class="edge CTRL" id="e8i1" d="M116,118 L116,233" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#8[1] → #6 · CTRL</title></path><path class="edge CTRL" id="e8i2" d="M216,434 L216,444 L325,444 L325,224 L146,224 L146,236" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#8[2] → #5 · CTRL</title></path><path class="edge CTRL" id="e18i0" d="M116,289 L116,337" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#18[0] → #8 · CTRL</title></path><path class="edge DATA" id="e18i1" d="M347,118 L347,128 L302,128 L302,299 L196,299 L196,337" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#18[1] → #4 · DATA</title></path><path class="edge CTRL" id="e21i0" d="M96,437 L96,522" stroke="#b63838" marker-start="url(#arrow-CTRL)" style="opacity: 1;"><title>#21[0] → #1 · CTRL</title></path><path class="edge DATA" id="e21i2" d="M347,118 L347,484 L156,484 L156,522" stroke="#536477" marker-start="url(#arrow-DATA)" style="opacity: 1;"><title>#21[2] → #4 · DATA</title></path></g><g class="edge-hits"/><g class="parser" style="opacity: 1;"/><g class="nodes"><g class="node" id="n1" data-id="1" transform="translate(36,387)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>True</tspan><tspan class="node-id">  #1/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#1 True
+Projection 0 of #18
+Type not computed
+
+[0] → #18 CTRL</title></g><g class="node" id="n2" data-id="2" transform="translate(56,24)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Start</tspan><tspan class="node-id">  #2</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#2 Start
+Type not computed
+
+</title></g><g class="node" id="n3" data-id="3" transform="translate(179.5,626)" style="opacity: 1;"><path class="box" d="M0,0H72V26H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="36" y="17"><tspan>Stop</tspan><tspan class="node-id">  #3</tspan></text><text class="type" text-anchor="middle" y="35" x="36"/><title>#3 Stop
+Type not computed
+
+[0] → #21 CTRL</title><circle class="port" cx="36" cy="0" r="3" fill="#536477"/><text class="slot" x="36" y="-7" text-anchor="middle">0</text></g><g class="node" id="n4" data-id="4" transform="translate(287,68)" style="opacity: 1;"><path class="box" d="M14,0H106Q120,0 120,14V30Q120,44 106,44H14Q0,44 0,30V14Q0,0 14,0Z" fill="#edf3f7"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>#0</tspan><tspan class="node-id">  #4</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#4 #0
+Type not computed
+
+</title></g><g class="node" id="n5" data-id="5" transform="translate(156,387)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>False</tspan><tspan class="node-id">  #5/1</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#5 False
+Projection 1 of #18
+Type not computed
+
+[0] → #18 CTRL</title></g><g class="node" id="n6" data-id="6" transform="translate(56,68)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>$ctrl</tspan><tspan class="node-id">  #6/0</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#6 $ctrl
+Projection 0 of #2
+Type not computed
+
+[0] → #2 CTRL</title></g><g class="node" id="n8" data-id="8" transform="translate(56,239)" style="opacity: 1;"><path class="box" d="M20,0H100Q120,0 120,20V24Q120,44 100,44H20Q0,44 0,24V20Q0,0 20,0Z" fill="#ffe0ab"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Loop</tspan><tspan class="node-id">  #8</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#8 Loop
+Type not computed
+
+[0] → — DATA
+[1] → #6 CTRL
+[2] → #5 CTRL</title><circle class="port" cx="30" cy="-3" r="3" fill="white"/><circle class="port" cx="60" cy="-3" r="3" fill="#536477"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g><g class="node" id="n18" data-id="18" transform="translate(36,343)" style="opacity: 1;"><path class="box" d="M0,0H240V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="120" y="18"><tspan>Never</tspan><tspan class="node-id">  #18</tspan></text><text class="type" text-anchor="middle" y="35" x="120"/><title>#18 Never
+Type not computed
+
+[0] → #8 CTRL
+[1] → #4 DATA</title><circle class="port" cx="80" cy="-3" r="3" fill="#536477"/><circle class="port" cx="160" cy="-3" r="3" fill="#536477"/><text class="slot" x="80" y="-10" text-anchor="middle">0</text><text class="slot" x="160" y="-10" text-anchor="middle">1</text></g><g class="node" id="n21" data-id="21" transform="translate(66,528)" style="opacity: 1;"><path class="box" d="M0,0H120V44H0Z" fill="#fff1c4"/><text class="label" text-anchor="middle" x="60" y="18"><tspan>Return</tspan><tspan class="node-id">  #21</tspan></text><text class="type" text-anchor="middle" y="35" x="60"/><title>#21 Return
+Type not computed
+
+[0] → #1 CTRL
+[1] → — DATA
+[2] → #4 DATA</title><circle class="port" cx="30" cy="-3" r="3" fill="#536477"/><circle class="port" cx="60" cy="-3" r="3" fill="white"/><circle class="port" cx="90" cy="-3" r="3" fill="#536477"/><text class="slot" x="30" y="-10" text-anchor="middle">0</text><text class="slot" x="60" y="-10" text-anchor="middle">1</text><text class="slot" x="90" y="-10" text-anchor="middle">2</text></g></g><g class="region-heads" style="opacity: 1;"><g class="region-head" transform="translate(24,171)"><text class="label" x="26" y="17"><tspan>Loop</tspan><tspan class="node-id">  #8</tspan></text><title>Loop · 4 nodes</title><g class="fold-btn" role="button" tabindex="0" transform="translate(4,4)" aria-label="Fold region #8"><rect width="16" height="16" rx="2"/><text x="8" y="12" text-anchor="middle">−</text><title>Fold region</title></g></g></g><g class="shortcuts" style="opacity: 1;"/><g class="peep-ghosts" pointer-events="none"/></g></svg>