diff --git a/.ghci b/.ghci
--- a/.ghci
+++ b/.ghci
@@ -1,1 +1,1 @@
-:set -isrc-lib:src-exe:src-test:dist/build/autogen -optP-include -optPdist/build/autogen/cabal_macros.h -Wall -fno-warn-tabs
+:set -isrc-lib:src-exe:src-test -Wall -fno-warn-tabs
diff --git a/README.markdown b/README.markdown
--- a/README.markdown
+++ b/README.markdown
@@ -9,7 +9,7 @@
 
 ## Installation
 
-It can be built and installed using [Cabal](https://www.haskell.org/cabal/users-guide/installing-packages.html).
+It can be built and installed using [Cabal](https://www.haskell.org/cabal/users-guide/installing-packages.html) or [The Haskell Tool Stack](https://docs.haskellstack.org/en/stable/README/).
 
 ## Documentation
 
@@ -25,11 +25,10 @@
 
 ## Testing
 
-The test-suite can be run using:
+The test-suite can be run using either of:
 
-    cabal configure --enable-tests;
-    cabal build;
-    cabal test --show-details=always;
+* cabal configure --enable-tests && cabal build && cabal test --show-details=always;
+* stack test;
 
 It's currently only been tested on **Linux**.
 
diff --git a/bishbosh.cabal b/bishbosh.cabal
--- a/bishbosh.cabal
+++ b/bishbosh.cabal
@@ -14,7 +14,7 @@
 -- along with BishBosh.  If not, see <http://www.gnu.org/licenses/>.
 
 Name:		bishbosh
-Version:	0.0.0.7
+Version:	0.0.0.8
 Cabal-version:	>= 1.10
 Copyright:	(C) 2018 Dr. Alistair Ward
 License:	GPL
@@ -60,13 +60,17 @@
     Default:		False
 
 -- Automatically disabled when the required package isn't available.
--- To manually disable, use "runhaskell Setup configure -f -polyparse --verbose"; which may be required to access Parsec's more precise error-messages.
+-- To access Parsec's more precise error-messages, manually disable using one of:
+--	runhaskell Setup configure -f -polyparse --verbose;
+--	stack build --flag 'bishbosh:-polyparse' --cabal-verbose;
 flag polyparse
     Description:	Link with package "polyparse" when available, rather than "parsec".
     Default:		True
 
 -- Automatically disabled when the required package isn't available.
--- To manually disable, use "runhaskell Setup configure -f -hxtrelaxng --verbose", under which circumstances the XML-configuration will be validated against the packaged DTD instead.
+-- To force validation of the XML-configuration against the packaged DTD, manually disable using one of:
+--	runhaskell Setup configure -f -hxtrelaxng --verbose;
+--	stack build --flag 'bishbosh:-hxtrelaxng' --cabal-verbose;
 flag hxtrelaxng
     Description:	Link with package "hxt-relaxng" when available, for more precise specification of the XML-configuration than a traditional DTD.
     Default:		True
@@ -156,11 +160,12 @@
         BishBosh.Model.MoveFrequency
         BishBosh.Model.PositionHashTree
         BishBosh.Model.Result
-        BishBosh.Notation.Coordinate
         BishBosh.Notation.ICCFNumeric
         BishBosh.Notation.MoveNotation
+        BishBosh.Notation.PureCoordinate
         BishBosh.Notation.Smith
         BishBosh.Property.Empty
+        BishBosh.Property.ExtendedPositionDescription
         BishBosh.Property.ForsythEdwards
         BishBosh.Property.Null
         BishBosh.Property.Opposable
@@ -377,9 +382,9 @@
         BishBosh.Test.QuickCheck.Model.GameTree
         BishBosh.Test.QuickCheck.Model.MoveFrequency
         BishBosh.Test.QuickCheck.Model.Result
-        BishBosh.Test.QuickCheck.Notation.Coordinate
         BishBosh.Test.QuickCheck.Notation.ICCFNumeric
         BishBosh.Test.QuickCheck.Notation.MoveNotation
+        BishBosh.Test.QuickCheck.Notation.PureCoordinate
         BishBosh.Test.QuickCheck.Notation.Smith
         BishBosh.Test.QuickCheck.Search.KillerMoves
         BishBosh.Test.QuickCheck.Search.Search
diff --git a/bishbosh.spec b/bishbosh.spec
--- a/bishbosh.spec
+++ b/bishbosh.spec
@@ -24,7 +24,7 @@
 
 Summary:	BishBosh is a chess-game.
 Name:		bishbosh
-Version:	0.0.0.7
+Version:	0.0.0.8
 Release:	1
 License:	GPLv3
 # From '/usr/share/doc/packages/rpm/GROUPS'.
diff --git a/bishbosh.svg b/bishbosh.svg
--- a/bishbosh.svg
+++ b/bishbosh.svg
@@ -1,1527 +1,1827 @@
 <?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.38.0 (20140413.2041)
- -->
-<!-- Title: G Pages: 1 -->
-<svg width="2880pt" height="1705pt"
- viewBox="0.00 0.00 2880.00 1704.64" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(0.593578 0.593578) rotate(0) translate(4 2867.8)">
-<title>G</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-2867.8 4847.93,-2867.8 4847.93,4 -4,4"/>
-<g id="clust1" class="cluster"><title>cluster_0</title>
-<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="14.2806,-21.2724 14.2806,-2746.8 4771.28,-2746.8 4771.28,-21.2724 14.2806,-21.2724"/>
-<text text-anchor="middle" x="2392.78" y="-2731.6" font-family="Times,serif" font-size="14.00">BishBosh</text>
-</g>
-<g id="clust2" class="cluster"><title>cluster_1</title>
-<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="2545.28,-454.698 2545.28,-874.828 3667.28,-874.828 3667.28,-454.698 2545.28,-454.698"/>
-<text text-anchor="middle" x="3106.28" y="-859.628" font-family="Times,serif" font-size="14.00">Attribute</text>
-</g>
-<g id="clust3" class="cluster"><title>cluster_2</title>
-<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="2397.28,-454.698 2397.28,-1265.71 2525.28,-1265.71 2525.28,-454.698 2397.28,-454.698"/>
-<text text-anchor="middle" x="2461.28" y="-1250.51" font-family="Times,serif" font-size="14.00">Cartesian</text>
-</g>
-<g id="clust4" class="cluster"><title>cluster_3</title>
-<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="1605.28,-675.399 1605.28,-1265.71 2036.28,-1265.71 2036.28,-675.399 1605.28,-675.399"/>
-<text text-anchor="middle" x="1820.78" y="-1250.51" font-family="Times,serif" font-size="14.00">Component</text>
-</g>
-<g id="clust5" class="cluster"><title>cluster_4</title>
-<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="269.281,-2148.51 269.281,-2347.94 535.281,-2347.94 535.281,-2148.51 269.281,-2148.51"/>
-<text text-anchor="middle" x="402.281" y="-2332.74" font-family="Times,serif" font-size="14.00">Concurrent</text>
-</g>
-<g id="clust6" class="cluster"><title>cluster_5</title>
-<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="3433.28,-1286.98 3433.28,-2347.94 3759.28,-2347.94 3759.28,-1286.98 3433.28,-1286.98"/>
-<text text-anchor="middle" x="3596.28" y="-2332.74" font-family="Times,serif" font-size="14.00">ContextualNotation</text>
-</g>
-<g id="clust7" class="cluster"><title>cluster_6</title>
-<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="3945.28,-233.997 3945.28,-433.426 4763.28,-433.426 4763.28,-233.997 3945.28,-233.997"/>
-<text text-anchor="middle" x="4354.28" y="-418.226" font-family="Times,serif" font-size="14.00">Data</text>
-</g>
-<g id="clust8" class="cluster"><title>cluster_7</title>
-<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="3133.28,-1507.68 3133.28,-2127.24 3425.28,-2127.24 3425.28,-1507.68 3133.28,-1507.68"/>
-<text text-anchor="middle" x="3279.28" y="-2112.04" font-family="Times,serif" font-size="14.00">Evaluation</text>
-</g>
-<g id="clust9" class="cluster"><title>cluster_8</title>
-<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="3767.28,-675.399 3767.28,-1707.11 4573.28,-1707.11 4573.28,-675.399 3767.28,-675.399"/>
-<text text-anchor="middle" x="4170.28" y="-1691.91" font-family="Times,serif" font-size="14.00">Input</text>
-</g>
-<g id="clust10" class="cluster"><title>cluster_9</title>
-<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="1321.28,-1066.28 1321.28,-1906.54 1567.28,-1906.54 1567.28,-1066.28 1321.28,-1066.28"/>
-<text text-anchor="middle" x="1444.28" y="-1891.34" font-family="Times,serif" font-size="14.00">Model</text>
-</g>
-<g id="clust11" class="cluster"><title>cluster_10</title>
-<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="154.281,-1066.28 154.281,-1486.41 503.281,-1486.41 503.281,-1066.28 154.281,-1066.28"/>
-<text text-anchor="middle" x="328.781" y="-1471.21" font-family="Times,serif" font-size="14.00">Notation</text>
-</g>
-<g id="clust12" class="cluster"><title>cluster_11</title>
-<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="2140.28,-42.5448 2140.28,-433.426 3000.28,-433.426 3000.28,-42.5448 2140.28,-42.5448"/>
-<text text-anchor="middle" x="2570.28" y="-418.226" font-family="Times,serif" font-size="14.00">Property</text>
-</g>
-<g id="clust13" class="cluster"><title>cluster_12</title>
-<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="2044.28,-1066.28 2044.28,-2347.94 2377.28,-2347.94 2377.28,-1066.28 2044.28,-1066.28"/>
-<text text-anchor="middle" x="2210.78" y="-2332.74" font-family="Times,serif" font-size="14.00">Search</text>
-</g>
-<g id="clust14" class="cluster"><title>cluster_13</title>
-<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="543.281,-1066.28 543.281,-2347.94 1313.28,-2347.94 1313.28,-1066.28 543.281,-1066.28"/>
-<text text-anchor="middle" x="928.281" y="-2332.74" font-family="Times,serif" font-size="14.00">State</text>
-</g>
-<g id="clust15" class="cluster"><title>cluster_14</title>
-<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="3705.28,-233.997 3705.28,-654.127 3811.28,-654.127 3811.28,-233.997 3705.28,-233.997"/>
-<text text-anchor="middle" x="3758.28" y="-638.927" font-family="Times,serif" font-size="14.00">Text</text>
-</g>
-<g id="clust16" class="cluster"><title>cluster_15</title>
-<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="3781.28,-1927.81 3781.28,-2547.37 4019.28,-2547.37 4019.28,-1927.81 3781.28,-1927.81"/>
-<text text-anchor="middle" x="3900.28" y="-2532.17" font-family="Times,serif" font-size="14.00">UI</text>
-</g>
-<!-- u4 -->
-<g id="node1" class="node"><title>u4</title>
-<ellipse fill="#bbbbff" stroke="black" stroke-width="0" cx="3310.28" cy="-524.272" rx="67.6881" ry="18"/>
-<text text-anchor="middle" x="3310.28" y="-520.572" font-family="Times,serif" font-size="14.00">PhysicalColour</text>
-</g>
-<!-- u7 -->
-<g id="node2" class="node"><title>u7</title>
-<ellipse fill="#bbbbff" stroke="black" stroke-width="0" cx="2618.28" cy="-524.272" rx="64.9885" ry="18"/>
-<text text-anchor="middle" x="2618.28" y="-520.572" font-family="Times,serif" font-size="14.00">LogicalColour</text>
-</g>
-<!-- u8 -->
-<g id="node68" class="node"><title>u8</title>
-<ellipse fill="#33ff33" stroke="black" stroke-width="0" cx="2490.28" cy="-303.272" rx="71.4873" ry="18"/>
-<text text-anchor="middle" x="2490.28" y="-299.572" font-family="Times,serif" font-size="14.00">ForsythEdwards</text>
-</g>
-<!-- u7&#45;&gt;u8 -->
-<g id="edge7" class="edge"><title>u7&#45;&gt;u8</title>
-<path fill="none" stroke="black" d="M2608.45,-506.451C2586.16,-468.314 2531.67,-375.082 2505.2,-329.794"/>
-<polygon fill="black" stroke="black" points="2508.21,-328.018 2500.15,-321.151 2502.17,-331.55 2508.21,-328.018"/>
-</g>
-<!-- u9 -->
-<g id="node69" class="node"><title>u9</title>
-<ellipse fill="#33ff33" stroke="black" stroke-width="0" cx="2630.28" cy="-303.272" rx="50.0912" ry="18"/>
-<text text-anchor="middle" x="2630.28" y="-299.572" font-family="Times,serif" font-size="14.00">Opposable</text>
-</g>
-<!-- u7&#45;&gt;u9 -->
-<g id="edge8" class="edge"><title>u7&#45;&gt;u9</title>
-<path fill="none" stroke="black" d="M2619.22,-506.088C2621.3,-468.188 2626.29,-377.17 2628.79,-331.449"/>
-<polygon fill="black" stroke="black" points="2632.29,-331.554 2629.34,-321.377 2625.3,-331.171 2632.29,-331.554"/>
-</g>
-<!-- u11 -->
-<g id="node3" class="node"><title>u11</title>
-<ellipse fill="#bbbbff" stroke="black" stroke-width="0" cx="2823.28" cy="-744.272" rx="51.9908" ry="18"/>
-<text text-anchor="middle" x="2823.28" y="-740.572" font-family="Times,serif" font-size="14.00">MoveType</text>
-</g>
-<!-- u12 -->
-<g id="node4" class="node"><title>u12</title>
-<ellipse fill="#bbbbff" stroke="black" stroke-width="0" cx="2731.28" cy="-524.272" rx="29.795" ry="18"/>
-<text text-anchor="middle" x="2731.28" y="-520.572" font-family="Times,serif" font-size="14.00">Rank</text>
-</g>
-<!-- u11&#45;&gt;u12 -->
-<g id="edge9" class="edge"><title>u11&#45;&gt;u12</title>
-<path fill="none" stroke="black" d="M2816.06,-726.166C2800.03,-688.187 2761.39,-596.622 2742.31,-551.417"/>
-<polygon fill="black" stroke="black" points="2745.45,-549.852 2738.34,-542 2739,-552.574 2745.45,-549.852"/>
-</g>
-<!-- u5 -->
-<g id="node97" class="node"><title>u5</title>
-<ellipse fill="#ff3333" stroke="black" stroke-width="0" cx="3758.28" cy="-303.272" rx="44.6926" ry="18"/>
-<text text-anchor="middle" x="3758.28" y="-299.572" font-family="Times,serif" font-size="14.00">ShowList</text>
-</g>
-<!-- u11&#45;&gt;u5 -->
-<g id="edge10" class="edge"><title>u11&#45;&gt;u5</title>
-<path fill="none" stroke="black" d="M2853.21,-729.408C2862.95,-725.33 2873.92,-721.185 2884.28,-718.272 3079.72,-663.305 3654.61,-727.801 3786.28,-573.272 3816.88,-537.366 3782.19,-392.102 3765.86,-331.271"/>
-<polygon fill="black" stroke="black" points="3769.14,-329.997 3763.13,-321.27 3762.38,-331.838 3769.14,-329.997"/>
-</g>
-<!-- u14 -->
-<g id="node5" class="node"><title>u14</title>
-<ellipse fill="#bbbbff" stroke="black" stroke-width="0" cx="3088.28" cy="-744.272" rx="45.4919" ry="18"/>
-<text text-anchor="middle" x="3088.28" y="-740.572" font-family="Times,serif" font-size="14.00">Direction</text>
-</g>
-<!-- u14&#45;&gt;u7 -->
-<g id="edge11" class="edge"><title>u14&#45;&gt;u7</title>
-<path fill="none" stroke="black" d="M3060.05,-729.994C3051.77,-726.156 3042.69,-721.999 3034.28,-718.272 2883.35,-651.361 2838.09,-650.711 2692.28,-573.272 2677.67,-565.511 2662.2,-555.749 2649.21,-547.058"/>
-<polygon fill="black" stroke="black" points="2650.9,-543.97 2640.66,-541.251 2646.97,-549.763 2650.9,-543.97"/>
-</g>
-<!-- u15 -->
-<g id="node33" class="node"><title>u15</title>
-<ellipse fill="#ffff77" stroke="black" stroke-width="0" cx="3997.28" cy="-303.272" rx="44.393" ry="18"/>
-<text text-anchor="middle" x="3997.28" y="-299.572" font-family="Times,serif" font-size="14.00">Ordering</text>
-</g>
-<!-- u14&#45;&gt;u15 -->
-<g id="edge12" class="edge"><title>u14&#45;&gt;u15</title>
-<path fill="none" stroke="black" d="M3114.72,-729.611C3123.34,-725.543 3133.07,-721.354 3142.28,-718.272 3432.44,-621.182 3561.73,-744.542 3815.28,-573.272 3907.43,-511.024 3965.62,-385.03 3987.48,-330.456"/>
-<polygon fill="black" stroke="black" points="3990.74,-331.717 3991.14,-321.129 3984.23,-329.16 3990.74,-331.717"/>
-</g>
-<!-- u16 -->
-<g id="node34" class="node"><title>u16</title>
-<ellipse fill="#ffff77" stroke="black" stroke-width="0" cx="4183.28" cy="-303.272" rx="48.1917" ry="18"/>
-<text text-anchor="middle" x="4183.28" y="-299.572" font-family="Times,serif" font-size="14.00">Exception</text>
-</g>
-<!-- u14&#45;&gt;u16 -->
-<g id="edge13" class="edge"><title>u14&#45;&gt;u16</title>
-<path fill="none" stroke="black" d="M3114.7,-729.541C3123.32,-725.469 3133.05,-721.295 3142.28,-718.272 3451.24,-617.063 3588.51,-753.23 3859.28,-573.272 3892.85,-550.96 3881.74,-526.736 3910.28,-498.272 3992.33,-416.452 4033.84,-422.133 4126.28,-352.272 4136.84,-344.29 4148.07,-335.018 4157.74,-326.764"/>
-<polygon fill="black" stroke="black" points="4160.16,-329.3 4165.45,-320.12 4155.59,-323.997 4160.16,-329.3"/>
-</g>
-<!-- u17 -->
-<g id="node70" class="node"><title>u17</title>
-<ellipse fill="#33ff33" stroke="black" stroke-width="0" cx="2748.28" cy="-303.272" rx="50.0912" ry="18"/>
-<text text-anchor="middle" x="2748.28" y="-299.572" font-family="Times,serif" font-size="14.00">Orientated</text>
-</g>
-<!-- u14&#45;&gt;u17 -->
-<g id="edge14" class="edge"><title>u14&#45;&gt;u17</title>
-<path fill="none" stroke="black" d="M3115.5,-729.78C3186.29,-694.419 3371.76,-599.951 3387.28,-573.272 3404.04,-544.46 3407.77,-524.563 3387.28,-498.272 3223.86,-288.62 3044.9,-471.419 2807.28,-352.272 2794.61,-345.921 2782.2,-336.46 2772.05,-327.612"/>
-<polygon fill="black" stroke="black" points="2774.2,-324.836 2764.44,-320.719 2769.5,-330.025 2774.2,-324.836"/>
-</g>
-<!-- u18 -->
-<g id="node71" class="node"><title>u18</title>
-<ellipse fill="#33ff33" stroke="black" stroke-width="0" cx="2647.28" cy="-111.272" rx="52.7911" ry="18"/>
-<text text-anchor="middle" x="2647.28" y="-107.572" font-family="Times,serif" font-size="14.00">Reflectable</text>
-</g>
-<!-- u14&#45;&gt;u18 -->
-<g id="edge15" class="edge"><title>u14&#45;&gt;u18</title>
-<path fill="none" stroke="black" d="M3116.73,-730.106C3202.23,-690.527 3451.04,-575.221 3452.28,-573.272 3461.11,-559.401 3462.68,-290.014 3452.28,-277.272 3358.05,-161.766 2881.22,-124.887 2709.24,-115.237"/>
-<polygon fill="black" stroke="black" points="2709.26,-111.733 2699.08,-114.679 2708.88,-118.722 2709.26,-111.733"/>
-</g>
-<!-- u19 -->
-<g id="node6" class="node"><title>u19</title>
-<ellipse fill="#bbbbff" stroke="black" stroke-width="0" cx="2653.28" cy="-744.272" rx="100.182" ry="18"/>
-<text text-anchor="middle" x="2653.28" y="-740.572" font-family="Times,serif" font-size="14.00">LogicalColourOfSquare</text>
-</g>
-<!-- u19&#45;&gt;u7 -->
-<g id="edge16" class="edge"><title>u19&#45;&gt;u7</title>
-<path fill="none" stroke="black" d="M2650.53,-726.166C2644.48,-688.439 2629.93,-597.837 2622.62,-552.325"/>
-<polygon fill="black" stroke="black" points="2626.06,-551.618 2621.01,-542.299 2619.14,-552.727 2626.06,-551.618"/>
-</g>
-<!-- u49 -->
-<g id="node7" class="node"><title>u49</title>
-<ellipse fill="#bbbbff" stroke="black" stroke-width="0" cx="3593.28" cy="-744.272" rx="66.0889" ry="18"/>
-<text text-anchor="middle" x="3593.28" y="-740.572" font-family="Times,serif" font-size="14.00">ColourScheme</text>
-</g>
-<!-- u49&#45;&gt;u4 -->
-<g id="edge17" class="edge"><title>u49&#45;&gt;u4</title>
-<path fill="none" stroke="black" d="M3572.01,-726.887C3522,-688.365 3396.88,-591.985 3339.67,-547.91"/>
-<polygon fill="black" stroke="black" points="3341.47,-544.88 3331.41,-541.551 3337.2,-550.426 3341.47,-544.88"/>
-</g>
-<!-- u49&#45;&gt;u16 -->
-<g id="edge18" class="edge"><title>u49&#45;&gt;u16</title>
-<path fill="none" stroke="black" d="M3637.33,-730.766C3711.31,-708.222 3862.77,-655.341 3968.28,-573.272 4060.69,-501.398 4137.52,-382.095 4168.54,-329.969"/>
-<polygon fill="black" stroke="black" points="4171.74,-331.438 4173.79,-321.045 4165.7,-327.888 4171.74,-331.438"/>
-</g>
-<!-- u49&#45;&gt;u5 -->
-<g id="edge19" class="edge"><title>u49&#45;&gt;u5</title>
-<path fill="none" stroke="black" d="M3625.45,-728.498C3674.14,-704.123 3764.71,-650.388 3801.28,-573.272 3840.42,-490.744 3796.03,-379.643 3771.87,-330.047"/>
-<polygon fill="black" stroke="black" points="3774.94,-328.356 3767.34,-320.974 3768.68,-331.484 3774.94,-328.356"/>
-</g>
-<!-- u60 -->
-<g id="node8" class="node"><title>u60</title>
-<ellipse fill="#bbbbff" stroke="black" stroke-width="0" cx="3394.28" cy="-744.272" rx="115.08" ry="18"/>
-<text text-anchor="middle" x="3394.28" y="-740.572" font-family="Times,serif" font-size="14.00">CaptureMoveSortAlgorithm</text>
-</g>
-<!-- u65 -->
-<g id="node9" class="node"><title>u65</title>
-<ellipse fill="#bbbbff" stroke="black" stroke-width="0" cx="2921.28" cy="-524.272" rx="142.175" ry="18"/>
-<text text-anchor="middle" x="2921.28" y="-520.572" font-family="Times,serif" font-size="14.00">WeightedMeanAndCriterionValues</text>
-</g>
-<!-- u40 -->
-<g id="node73" class="node"><title>u40</title>
-<ellipse fill="#33ff33" stroke="black" stroke-width="0" cx="2866.28" cy="-303.272" rx="50.0912" ry="18"/>
-<text text-anchor="middle" x="2866.28" y="-299.572" font-family="Times,serif" font-size="14.00">ShowFloat</text>
-</g>
-<!-- u65&#45;&gt;u40 -->
-<g id="edge20" class="edge"><title>u65&#45;&gt;u40</title>
-<path fill="none" stroke="black" d="M2916.96,-506.088C2907.43,-468.108 2884.49,-376.786 2873.03,-331.16"/>
-<polygon fill="black" stroke="black" points="2876.41,-330.223 2870.58,-321.377 2869.62,-331.929 2876.41,-330.223"/>
-</g>
-<!-- u65&#45;&gt;u5 -->
-<g id="edge21" class="edge"><title>u65&#45;&gt;u5</title>
-<path fill="none" stroke="black" d="M2998.17,-509.102C3183.93,-474.513 3646.47,-386.128 3709.28,-352.272 3720.31,-346.329 3730.54,-337.166 3738.78,-328.432"/>
-<polygon fill="black" stroke="black" points="3741.41,-330.744 3745.47,-320.96 3736.19,-326.075 3741.41,-330.744"/>
-</g>
-<!-- u66 -->
-<g id="node10" class="node"><title>u66</title>
-<ellipse fill="#bbbbff" stroke="black" stroke-width="0" cx="3206.28" cy="-744.272" rx="54.6905" ry="18"/>
-<text text-anchor="middle" x="3206.28" y="-740.572" font-family="Times,serif" font-size="14.00">RankValues</text>
-</g>
-<!-- u66&#45;&gt;u12 -->
-<g id="edge22" class="edge"><title>u66&#45;&gt;u12</title>
-<path fill="none" stroke="black" d="M3172.4,-730.034C3162.68,-726.235 3152.06,-722.088 3142.28,-718.272 2976.97,-653.768 2913.66,-677.826 2770.28,-573.272 2761.43,-566.819 2753.44,-557.889 2747.03,-549.479"/>
-<polygon fill="black" stroke="black" points="2749.86,-547.42 2741.18,-541.354 2744.19,-551.513 2749.86,-547.42"/>
-</g>
-<!-- u66&#45;&gt;u16 -->
-<g id="edge23" class="edge"><title>u66&#45;&gt;u16</title>
-<path fill="none" stroke="black" d="M3238.53,-729.668C3248.59,-725.695 3259.81,-721.546 3270.28,-718.272 3536.26,-635.153 3633.07,-701.88 3880.28,-573.272 3888.45,-569.023 4086.04,-391.696 4157.66,-327.319"/>
-<polygon fill="black" stroke="black" points="4160.26,-329.684 4165.36,-320.395 4155.58,-324.478 4160.26,-329.684"/>
-</g>
-<!-- u67 -->
-<g id="node38" class="node"><title>u67</title>
-<ellipse fill="#ffff77" stroke="black" stroke-width="0" cx="4088.28" cy="-303.272" rx="29.4969" ry="18"/>
-<text text-anchor="middle" x="4088.28" y="-299.572" font-family="Times,serif" font-size="14.00">Num</text>
-</g>
-<!-- u66&#45;&gt;u67 -->
-<g id="edge24" class="edge"><title>u66&#45;&gt;u67</title>
-<path fill="none" stroke="black" d="M3238.9,-729.682C3248.88,-725.753 3259.96,-721.625 3270.28,-718.272 3512.76,-639.535 3603.53,-699.062 3825.28,-573.272 3938.33,-509.148 4034.53,-382.183 4071.78,-328.813"/>
-<polygon fill="black" stroke="black" points="4074.84,-330.534 4077.64,-320.316 4069.08,-326.559 4074.84,-330.534"/>
-</g>
-<!-- u66&#45;&gt;u40 -->
-<g id="edge25" class="edge"><title>u66&#45;&gt;u40</title>
-<path fill="none" stroke="black" d="M3234.18,-728.627C3302.21,-691.022 3466.37,-587.729 3400.28,-498.272 3269.04,-320.636 3120.09,-456.327 2925.28,-352.272 2912.78,-345.596 2900.39,-336.083 2890.22,-327.284"/>
-<polygon fill="black" stroke="black" points="2892.36,-324.505 2882.58,-320.448 2887.7,-329.723 2892.36,-324.505"/>
-</g>
-<!-- u66&#45;&gt;u5 -->
-<g id="edge26" class="edge"><title>u66&#45;&gt;u5</title>
-<path fill="none" stroke="black" d="M3231.5,-728.294C3278.42,-700.043 3381.69,-636.068 3462.28,-573.272 3569.91,-489.411 3686.7,-375.813 3735.18,-327.529"/>
-<polygon fill="black" stroke="black" points="3737.76,-329.898 3742.36,-320.355 3732.81,-324.945 3737.76,-329.898"/>
-</g>
-<!-- u69 -->
-<g id="node11" class="node"><title>u69</title>
-<ellipse fill="#bbbbff" stroke="black" stroke-width="0" cx="2959.28" cy="-744.272" rx="65.7887" ry="18"/>
-<text text-anchor="middle" x="2959.28" y="-740.572" font-family="Times,serif" font-size="14.00">CriterionValue</text>
-</g>
-<!-- u69&#45;&gt;u65 -->
-<g id="edge28" class="edge"><title>u69&#45;&gt;u65</title>
-<path fill="none" stroke="black" d="M2956.3,-726.166C2949.72,-688.439 2933.93,-597.837 2926,-552.325"/>
-<polygon fill="black" stroke="black" points="2929.41,-551.549 2924.25,-542.299 2922.52,-552.752 2929.41,-551.549"/>
-</g>
-<!-- u70 -->
-<g id="node12" class="node"><title>u70</title>
-<ellipse fill="#bbbbff" stroke="black" stroke-width="0" cx="3153.28" cy="-524.272" rx="71.4873" ry="18"/>
-<text text-anchor="middle" x="3153.28" y="-520.572" font-family="Times,serif" font-size="14.00">CriterionWeight</text>
-</g>
-<!-- u69&#45;&gt;u70 -->
-<g id="edge29" class="edge"><title>u69&#45;&gt;u70</title>
-<path fill="none" stroke="black" d="M2974.18,-726.528C3008.25,-688.248 3091.94,-594.205 3131.67,-549.559"/>
-<polygon fill="black" stroke="black" points="3134.3,-551.871 3138.33,-542.074 3129.07,-547.217 3134.3,-551.871"/>
-</g>
-<!-- u21 -->
-<g id="node103" class="node"><title>u21</title>
-<ellipse fill="#ffffbb" stroke="black" stroke-width="0" cx="3218.28" cy="-303.272" rx="33.5952" ry="18"/>
-<text text-anchor="middle" x="3218.28" y="-299.572" font-family="Times,serif" font-size="14.00">Types</text>
-</g>
-<!-- u69&#45;&gt;u21 -->
-<g id="edge27" class="edge"><title>u69&#45;&gt;u21</title>
-<path fill="none" stroke="black" d="M2997.18,-729.533C3099.69,-692.193 3375.59,-590.493 3387.28,-573.272 3449.41,-481.748 3310.45,-368.52 3247.36,-323.775"/>
-<polygon fill="black" stroke="black" points="3249.19,-320.785 3238.99,-317.925 3245.18,-326.522 3249.19,-320.785"/>
-</g>
-<!-- u70&#45;&gt;u16 -->
-<g id="edge30" class="edge"><title>u70&#45;&gt;u16</title>
-<path fill="none" stroke="black" d="M3194.08,-509.305C3206.56,-505.364 3220.4,-501.323 3233.28,-498.272 3624.62,-405.622 3760.9,-520.277 4126.28,-352.272 4139.08,-346.387 4151.3,-336.824 4161.13,-327.777"/>
-<polygon fill="black" stroke="black" points="4163.68,-330.172 4168.45,-320.712 4158.82,-325.133 4163.68,-330.172"/>
-</g>
-<!-- u70&#45;&gt;u67 -->
-<g id="edge31" class="edge"><title>u70&#45;&gt;u67</title>
-<path fill="none" stroke="black" d="M3194.11,-509.424C3206.59,-505.486 3220.42,-501.418 3233.28,-498.272 3591.58,-410.643 3733.71,-541.601 4050.28,-352.272 4059.72,-346.626 4067.74,-337.699 4073.94,-329.068"/>
-<polygon fill="black" stroke="black" points="4076.91,-330.933 4079.53,-320.667 4071.08,-327.058 4076.91,-330.933"/>
-</g>
-<!-- u70&#45;&gt;u5 -->
-<g id="edge32" class="edge"><title>u70&#45;&gt;u5</title>
-<path fill="none" stroke="black" d="M3196.45,-509.737C3208.38,-506.009 3221.33,-501.974 3233.28,-498.272 3444.66,-432.826 3519.07,-465.349 3709.28,-352.272 3719.94,-345.936 3730.03,-336.813 3738.26,-328.219"/>
-<polygon fill="black" stroke="black" points="3741.09,-330.313 3745.25,-320.57 3735.92,-325.59 3741.09,-330.313"/>
-</g>
-<!-- u13 -->
-<g id="node13" class="node"><title>u13</title>
-<ellipse fill="#ffbbbb" stroke="black" stroke-width="0" cx="2461.28" cy="-944.272" rx="55.7903" ry="18"/>
-<text text-anchor="middle" x="2461.28" y="-940.572" font-family="Times,serif" font-size="14.00">Coordinates</text>
-</g>
-<!-- u13&#45;&gt;u14 -->
-<g id="edge33" class="edge"><title>u13&#45;&gt;u14</title>
-<path fill="none" stroke="black" d="M2513.66,-937.848C2618.18,-925.295 2857.71,-887.758 3034.28,-793.272 3046.03,-786.985 3057.33,-777.648 3066.53,-768.876"/>
-<polygon fill="black" stroke="black" points="3069.1,-771.253 3073.72,-761.72 3064.16,-766.29 3069.1,-771.253"/>
-</g>
-<!-- u13&#45;&gt;u19 -->
-<g id="edge34" class="edge"><title>u13&#45;&gt;u19</title>
-<path fill="none" stroke="black" d="M2477.32,-926.732C2511.19,-891.805 2590.13,-810.399 2629.73,-769.554"/>
-<polygon fill="black" stroke="black" points="2632.43,-771.801 2636.88,-762.186 2627.41,-766.928 2632.43,-771.801"/>
-</g>
-<!-- u22 -->
-<g id="node15" class="node"><title>u22</title>
-<ellipse fill="#ffbbbb" stroke="black" stroke-width="0" cx="2452.28" cy="-744.272" rx="42.7926" ry="18"/>
-<text text-anchor="middle" x="2452.28" y="-740.572" font-family="Times,serif" font-size="14.00">Ordinate</text>
-</g>
-<!-- u13&#45;&gt;u22 -->
-<g id="edge35" class="edge"><title>u13&#45;&gt;u22</title>
-<path fill="none" stroke="black" d="M2460.5,-926.048C2458.93,-891.587 2455.4,-813.918 2453.52,-772.496"/>
-<polygon fill="black" stroke="black" points="2457.01,-772.147 2453.06,-762.316 2450.01,-772.465 2457.01,-772.147"/>
-</g>
-<!-- u23 -->
-<g id="node72" class="node"><title>u23</title>
-<ellipse fill="#33ff33" stroke="black" stroke-width="0" cx="2355.28" cy="-303.272" rx="45.4919" ry="18"/>
-<text text-anchor="middle" x="2355.28" y="-299.572" font-family="Times,serif" font-size="14.00">Rotatable</text>
-</g>
-<!-- u13&#45;&gt;u23 -->
-<g id="edge36" class="edge"><title>u13&#45;&gt;u23</title>
-<path fill="none" stroke="black" d="M2452.43,-926.277C2438.68,-899.032 2412.53,-843.529 2400.28,-793.272 2358.34,-621.165 2354.84,-406.3 2355.01,-331.465"/>
-<polygon fill="black" stroke="black" points="2358.51,-331.478 2355.05,-321.461 2351.51,-331.445 2358.51,-331.478"/>
-</g>
-<!-- u13&#45;&gt;u5 -->
-<g id="edge37" class="edge"><title>u13&#45;&gt;u5</title>
-<path fill="none" stroke="black" d="M2467.2,-925.939C2476.44,-898.231 2494.28,-842.106 2504.28,-793.272 2517.53,-728.546 2494.55,-544.981 2541.28,-498.272 2726.28,-313.349 3473.71,-465.983 3709.28,-352.272 3720.73,-346.747 3731.15,-337.485 3739.41,-328.563"/>
-<polygon fill="black" stroke="black" points="3742.14,-330.749 3746.08,-320.912 3736.87,-326.148 3742.14,-330.749"/>
-</g>
-<!-- u20 -->
-<g id="node14" class="node"><title>u20</title>
-<ellipse fill="#ffbbbb" stroke="black" stroke-width="0" cx="2452.28" cy="-524.272" rx="42.7926" ry="18"/>
-<text text-anchor="middle" x="2452.28" y="-520.572" font-family="Times,serif" font-size="14.00">Abscissa</text>
-</g>
-<!-- u20&#45;&gt;u21 -->
-<g id="edge38" class="edge"><title>u20&#45;&gt;u21</title>
-<path fill="none" stroke="black" d="M2479.79,-510.239C2489.04,-506.115 2499.5,-501.734 2509.28,-498.272 2758.1,-410.199 3067.66,-337.807 3177.4,-313.247"/>
-<polygon fill="black" stroke="black" points="3178.38,-316.613 3187.38,-311.021 3176.86,-309.78 3178.38,-316.613"/>
-</g>
-<!-- u22&#45;&gt;u7 -->
-<g id="edge39" class="edge"><title>u22&#45;&gt;u7</title>
-<path fill="none" stroke="black" d="M2464.76,-726.887C2493.59,-689.026 2564.98,-595.273 2599.28,-550.223"/>
-<polygon fill="black" stroke="black" points="2602.16,-552.224 2605.43,-542.148 2596.59,-547.983 2602.16,-552.224"/>
-</g>
-<!-- u22&#45;&gt;u20 -->
-<g id="edge40" class="edge"><title>u22&#45;&gt;u20</title>
-<path fill="none" stroke="black" d="M2452.28,-726.166C2452.28,-688.439 2452.28,-597.837 2452.28,-552.325"/>
-<polygon fill="black" stroke="black" points="2455.78,-552.299 2452.28,-542.299 2448.78,-552.299 2455.78,-552.299"/>
-</g>
-<!-- u24 -->
-<g id="node16" class="node"><title>u24</title>
-<ellipse fill="#ffbbbb" stroke="black" stroke-width="0" cx="2443.28" cy="-1135.27" rx="36.2938" ry="18"/>
-<text text-anchor="middle" x="2443.28" y="-1131.57" font-family="Times,serif" font-size="14.00">Vector</text>
-</g>
-<!-- u24&#45;&gt;u13 -->
-<g id="edge41" class="edge"><title>u24&#45;&gt;u13</title>
-<path fill="none" stroke="black" d="M2444.91,-1117.17C2448.04,-1084.29 2454.92,-1012.03 2458.69,-972.476"/>
-<polygon fill="black" stroke="black" points="2462.18,-972.763 2459.64,-962.476 2455.21,-972.099 2462.18,-972.763"/>
-</g>
-<!-- u10 -->
-<g id="node17" class="node"><title>u10</title>
-<ellipse fill="#bbffff" stroke="black" stroke-width="0" cx="1681.28" cy="-744.272" rx="32.4942" ry="18"/>
-<text text-anchor="middle" x="1681.28" y="-740.572" font-family="Times,serif" font-size="14.00">Move</text>
-</g>
-<!-- u10&#45;&gt;u11 -->
-<g id="edge42" class="edge"><title>u10&#45;&gt;u11</title>
-<path fill="none" stroke="black" d="M1710.78,-752.003C1863.83,-791.445 2567.56,-964.384 2753.28,-859.772 2786.4,-841.12 2805.64,-799.783 2815.3,-771.965"/>
-<polygon fill="black" stroke="black" points="2818.65,-772.988 2818.44,-762.396 2812,-770.81 2818.65,-772.988"/>
-</g>
-<!-- u10&#45;&gt;u24 -->
-<g id="edge43" class="edge"><title>u10&#45;&gt;u24</title>
-<path fill="none" stroke="black" d="M1712.89,-748.918C1804.82,-760.746 2077.34,-804.592 2263.28,-926.272 2338.82,-975.71 2400.96,-1065.57 2428.29,-1109.18"/>
-<polygon fill="black" stroke="black" points="2425.35,-1111.09 2433.58,-1117.75 2431.31,-1107.41 2425.35,-1111.09"/>
-</g>
-<!-- u27 -->
-<g id="node18" class="node"><title>u27</title>
-<ellipse fill="#bbffff" stroke="black" stroke-width="0" cx="1996.28" cy="-944.272" rx="31.6951" ry="18"/>
-<text text-anchor="middle" x="1996.28" y="-940.572" font-family="Times,serif" font-size="14.00">Piece</text>
-</g>
-<!-- u27&#45;&gt;u12 -->
-<g id="edge44" class="edge"><title>u27&#45;&gt;u12</title>
-<path fill="none" stroke="black" d="M2011.09,-927.977C2050.35,-888.202 2161.75,-780.319 2273.28,-718.272 2445.49,-622.474 2530.86,-686.293 2692.28,-573.272 2701.25,-566.991 2709.27,-558.095 2715.66,-549.665"/>
-<polygon fill="black" stroke="black" points="2718.53,-551.676 2721.49,-541.505 2712.83,-547.606 2718.53,-551.676"/>
-</g>
-<!-- u27&#45;&gt;u24 -->
-<g id="edge45" class="edge"><title>u27&#45;&gt;u24</title>
-<path fill="none" stroke="black" d="M2021.05,-955.744C2095.73,-987.32 2318.97,-1081.71 2407.01,-1118.94"/>
-<polygon fill="black" stroke="black" points="2405.75,-1122.2 2416.33,-1122.88 2408.48,-1115.76 2405.75,-1122.2"/>
-</g>
-<!-- u28 -->
-<g id="node19" class="node"><title>u28</title>
-<ellipse fill="#bbffff" stroke="black" stroke-width="0" cx="1681.28" cy="-944.272" rx="67.6881" ry="18"/>
-<text text-anchor="middle" x="1681.28" y="-940.572" font-family="Times,serif" font-size="14.00">QualifiedMove</text>
-</g>
-<!-- u28&#45;&gt;u10 -->
-<g id="edge46" class="edge"><title>u28&#45;&gt;u10</title>
-<path fill="none" stroke="black" d="M1681.28,-926.048C1681.28,-891.587 1681.28,-813.918 1681.28,-772.496"/>
-<polygon fill="black" stroke="black" points="1684.78,-772.316 1681.28,-762.316 1677.78,-772.316 1684.78,-772.316"/>
-</g>
-<!-- u29 -->
-<g id="node20" class="node"><title>u29</title>
-<ellipse fill="#bbffff" stroke="black" stroke-width="0" cx="1736.28" cy="-1135.27" rx="28.6953" ry="18"/>
-<text text-anchor="middle" x="1736.28" y="-1131.57" font-family="Times,serif" font-size="14.00">Turn</text>
-</g>
-<!-- u29&#45;&gt;u28 -->
-<g id="edge47" class="edge"><title>u29&#45;&gt;u28</title>
-<path fill="none" stroke="black" d="M1731.4,-1117.5C1721.84,-1084.66 1700.59,-1011.63 1689.07,-972.04"/>
-<polygon fill="black" stroke="black" points="1692.38,-970.903 1686.23,-962.279 1685.66,-972.859 1692.38,-970.903"/>
-</g>
-<!-- u31 -->
-<g id="node21" class="node"><title>u31</title>
-<ellipse fill="#bbffff" stroke="black" stroke-width="0" cx="1856.28" cy="-944.272" rx="89.8845" ry="18"/>
-<text text-anchor="middle" x="1856.28" y="-940.572" font-family="Times,serif" font-size="14.00">EitherQualifiedMove</text>
-</g>
-<!-- u31&#45;&gt;u10 -->
-<g id="edge48" class="edge"><title>u31&#45;&gt;u10</title>
-<path fill="none" stroke="black" d="M1841.36,-926.391C1810.04,-890.957 1737.41,-808.778 1701.76,-768.446"/>
-<polygon fill="black" stroke="black" points="1704.19,-765.909 1694.95,-760.734 1698.95,-770.545 1704.19,-765.909"/>
-</g>
-<!-- u32 -->
-<g id="node22" class="node"><title>u32</title>
-<ellipse fill="#bbffff" stroke="black" stroke-width="0" cx="1652.28" cy="-1135.27" rx="37.0935" ry="18"/>
-<text text-anchor="middle" x="1652.28" y="-1131.57" font-family="Times,serif" font-size="14.00">Zobrist</text>
-</g>
-<!-- u32&#45;&gt;u12 -->
-<g id="edge49" class="edge"><title>u32&#45;&gt;u12</title>
-<path fill="none" stroke="black" d="M1675.47,-1121.15C1682.71,-1117.2 1690.76,-1112.94 1698.28,-1109.27 1845.9,-1037.33 1893.56,-1041.73 2037.28,-962.272 2205.16,-869.468 2227.41,-814.613 2393.28,-718.272 2520.99,-644.095 2576.52,-664.987 2692.28,-573.272 2700.65,-566.641 2708.4,-557.918 2714.76,-549.729"/>
-<polygon fill="black" stroke="black" points="2717.71,-551.622 2720.83,-541.499 2712.08,-547.463 2717.71,-551.622"/>
-</g>
-<!-- u32&#45;&gt;u13 -->
-<g id="edge50" class="edge"><title>u32&#45;&gt;u13</title>
-<path fill="none" stroke="black" d="M1674.14,-1120.73C1681.58,-1116.58 1690.1,-1112.3 1698.28,-1109.27 1949.34,-1016.27 2267.42,-969.129 2399.48,-952.462"/>
-<polygon fill="black" stroke="black" points="2399.92,-955.934 2409.41,-951.221 2399.06,-948.987 2399.92,-955.934"/>
-</g>
-<!-- u44 -->
-<g id="node23" class="node"><title>u44</title>
-<ellipse fill="#bbffff" stroke="black" stroke-width="0" cx="1949.28" cy="-1135.27" rx="78.7863" ry="18"/>
-<text text-anchor="middle" x="1949.28" y="-1131.57" font-family="Times,serif" font-size="14.00">PieceSquareArray</text>
-</g>
-<!-- u44&#45;&gt;u27 -->
-<g id="edge51" class="edge"><title>u44&#45;&gt;u27</title>
-<path fill="none" stroke="black" d="M1953.53,-1117.17C1961.75,-1084.13 1979.85,-1011.36 1989.65,-971.924"/>
-<polygon fill="black" stroke="black" points="1993.05,-972.753 1992.07,-962.203 1986.26,-971.063 1993.05,-972.753"/>
-</g>
-<!-- u45 -->
-<g id="node35" class="node"><title>u45</title>
-<ellipse fill="#ffff77" stroke="black" stroke-width="0" cx="4362.28" cy="-303.272" rx="28.6953" ry="18"/>
-<text text-anchor="middle" x="4362.28" y="-299.572" font-family="Times,serif" font-size="14.00">Bool</text>
-</g>
-<!-- u44&#45;&gt;u45 -->
-<g id="edge52" class="edge"><title>u44&#45;&gt;u45</title>
-<path fill="none" stroke="black" d="M1995.87,-1120.73C2010.07,-1116.81 2025.76,-1112.67 2040.28,-1109.27 2759.25,-941.126 3002.51,-1106.21 3671.28,-793.272 3719.06,-770.914 3719.94,-748.343 3763.28,-718.272 3868.19,-645.494 3903.92,-642.38 4011.28,-573.272 4154.47,-481.1 4200.61,-469.34 4324.28,-352.272 4331.84,-345.114 4339.18,-336.405 4345.36,-328.38"/>
-<polygon fill="black" stroke="black" points="4348.17,-330.468 4351.34,-320.359 4342.56,-326.284 4348.17,-330.468"/>
-</g>
-<!-- u2 -->
-<g id="node24" class="node"><title>u2</title>
-<ellipse fill="#ffbbff" stroke="black" stroke-width="0" cx="344.281" cy="-2217.27" rx="66.8882" ry="18"/>
-<text text-anchor="middle" x="344.281" y="-2213.57" font-family="Times,serif" font-size="14.00">SignalHandlers</text>
-</g>
-<!-- u3 -->
-<g id="node96" class="node"><title>u3</title>
-<ellipse fill="#ff3333" stroke="black" stroke-width="0" cx="3746.28" cy="-524.272" rx="31.3957" ry="18"/>
-<text text-anchor="middle" x="3746.28" y="-520.572" font-family="Times,serif" font-size="14.00">Show</text>
-</g>
-<!-- u2&#45;&gt;u3 -->
-<g id="edge53" class="edge"><title>u2&#45;&gt;u3</title>
-<path fill="none" stroke="black" d="M331.804,-2199.5C252.035,-2090.12 -174.418,-1471.47 105.281,-1109.27 595.063,-475.026 2910.52,-825.063 3671.28,-573.272 3689.39,-567.279 3707.47,-555.912 3721.33,-545.743"/>
-<polygon fill="black" stroke="black" points="3723.54,-548.462 3729.39,-539.626 3719.31,-542.888 3723.54,-548.462"/>
-</g>
-<!-- u97 -->
-<g id="node25" class="node"><title>u97</title>
-<ellipse fill="#ffbbff" stroke="black" stroke-width="0" cx="478.281" cy="-2217.27" rx="49.2915" ry="18"/>
-<text text-anchor="middle" x="478.281" y="-2213.57" font-family="Times,serif" font-size="14.00">Pondering</text>
-</g>
-<!-- u6 -->
-<g id="node26" class="node"><title>u6</title>
-<ellipse fill="#77ff77" stroke="black" stroke-width="0" cx="3684.28" cy="-1577.27" rx="29.795" ry="18"/>
-<text text-anchor="middle" x="3684.28" y="-1573.57" font-family="Times,serif" font-size="14.00">PGN</text>
-</g>
-<!-- u25 -->
-<g id="node27" class="node"><title>u25</title>
-<ellipse fill="#77ff77" stroke="black" stroke-width="0" cx="3684.28" cy="-1356.27" rx="66.8882" ry="18"/>
-<text text-anchor="middle" x="3684.28" y="-1352.57" font-family="Times,serif" font-size="14.00">PGNComment</text>
-</g>
-<!-- u6&#45;&gt;u25 -->
-<g id="edge54" class="edge"><title>u6&#45;&gt;u25</title>
-<path fill="none" stroke="black" d="M3684.28,-1559.09C3684.28,-1521.19 3684.28,-1430.17 3684.28,-1384.45"/>
-<polygon fill="black" stroke="black" points="3687.78,-1384.38 3684.28,-1374.38 3680.78,-1384.38 3687.78,-1384.38"/>
-</g>
-<!-- u26 -->
-<g id="node28" class="node"><title>u26</title>
-<ellipse fill="#77ff77" stroke="black" stroke-width="0" cx="3520.28" cy="-1356.27" rx="79.0865" ry="18"/>
-<text text-anchor="middle" x="3520.28" y="-1352.57" font-family="Times,serif" font-size="14.00">StandardAlgebraic</text>
-</g>
-<!-- u6&#45;&gt;u26 -->
-<g id="edge55" class="edge"><title>u6&#45;&gt;u26</title>
-<path fill="none" stroke="black" d="M3672.49,-1560.52C3644.34,-1522.93 3573.03,-1427.71 3538.96,-1382.22"/>
-<polygon fill="black" stroke="black" points="3541.66,-1379.98 3532.86,-1374.07 3536.05,-1384.17 3541.66,-1379.98"/>
-</g>
-<!-- u55 -->
-<g id="node36" class="node"><title>u55</title>
-<ellipse fill="#ffff77" stroke="black" stroke-width="0" cx="4448.28" cy="-303.272" rx="38.9931" ry="18"/>
-<text text-anchor="middle" x="4448.28" y="-299.572" font-family="Times,serif" font-size="14.00">Integral</text>
-</g>
-<!-- u6&#45;&gt;u55 -->
-<g id="edge56" class="edge"><title>u6&#45;&gt;u55</title>
-<path fill="none" stroke="black" d="M3709.28,-1567.33C3724.69,-1562.07 3744.95,-1555.63 3763.28,-1551.27 3961.69,-1504.16 4537.05,-1560.52 4669.28,-1405.27 4800.73,-1250.94 4657,-681.988 4571.28,-498.272 4541.12,-433.639 4493.07,-364.63 4466.85,-328.904"/>
-<polygon fill="black" stroke="black" points="4469.44,-326.518 4460.67,-320.561 4463.81,-330.681 4469.44,-326.518"/>
-</g>
-<!-- u30 -->
-<g id="node58" class="node"><title>u30</title>
-<ellipse fill="#77ffff" stroke="black" stroke-width="0" cx="1526.28" cy="-1577.27" rx="33.2948" ry="18"/>
-<text text-anchor="middle" x="1526.28" y="-1573.57" font-family="Times,serif" font-size="14.00">Game</text>
-</g>
-<!-- u26&#45;&gt;u30 -->
-<g id="edge57" class="edge"><title>u26&#45;&gt;u30</title>
-<path fill="none" stroke="black" d="M3450.59,-1364.93C3132.33,-1399.88 1821.62,-1543.84 1568.65,-1571.62"/>
-<polygon fill="black" stroke="black" points="1567.97,-1568.17 1558.41,-1572.74 1568.73,-1575.13 1567.97,-1568.17"/>
-</g>
-<!-- u56 -->
-<g id="node29" class="node"><title>u56</title>
-<ellipse fill="#77ff77" stroke="black" stroke-width="0" cx="3651.28" cy="-1776.27" rx="62.2891" ry="18"/>
-<text text-anchor="middle" x="3651.28" y="-1772.57" font-family="Times,serif" font-size="14.00">PGNDatabase</text>
-</g>
-<!-- u56&#45;&gt;u6 -->
-<g id="edge58" class="edge"><title>u56&#45;&gt;u6</title>
-<path fill="none" stroke="black" d="M3654.15,-1758.13C3659.91,-1723.77 3672.89,-1646.24 3679.79,-1605.1"/>
-<polygon fill="black" stroke="black" points="3683.24,-1605.67 3681.44,-1595.23 3676.34,-1604.51 3683.24,-1605.67"/>
-</g>
-<!-- u57 -->
-<g id="node30" class="node"><title>u57</title>
-<ellipse fill="#77ff77" stroke="black" stroke-width="0" cx="3617.28" cy="-1997.27" rx="90.9839" ry="18"/>
-<text text-anchor="middle" x="3617.28" y="-1993.57" font-family="Times,serif" font-size="14.00">QualifiedMoveForest</text>
-</g>
-<!-- u57&#45;&gt;u56 -->
-<g id="edge59" class="edge"><title>u57&#45;&gt;u56</title>
-<path fill="none" stroke="black" d="M3619.95,-1979.09C3625.83,-1941.19 3639.96,-1850.17 3647.06,-1804.45"/>
-<polygon fill="black" stroke="black" points="3650.55,-1804.8 3648.63,-1794.38 3643.63,-1803.72 3650.55,-1804.8"/>
-</g>
-<!-- u59 -->
-<g id="node62" class="node"><title>u59</title>
-<ellipse fill="#77ffff" stroke="black" stroke-width="0" cx="1508.28" cy="-1776.27" rx="50.8918" ry="18"/>
-<text text-anchor="middle" x="1508.28" y="-1772.57" font-family="Times,serif" font-size="14.00">GameTree</text>
-</g>
-<!-- u57&#45;&gt;u59 -->
-<g id="edge60" class="edge"><title>u57&#45;&gt;u59</title>
-<path fill="none" stroke="black" d="M3545.48,-1986.18C3510.46,-1981.4 3467.71,-1975.77 3429.28,-1971.27 2695.66,-1885.47 1801.74,-1803.65 1566.99,-1782.52"/>
-<polygon fill="black" stroke="black" points="1567.23,-1779.03 1556.96,-1781.62 1566.6,-1786 1567.23,-1779.03"/>
-</g>
-<!-- u95 -->
-<g id="node31" class="node"><title>u95</title>
-<ellipse fill="#77ff77" stroke="black" stroke-width="0" cx="3617.28" cy="-2217.27" rx="133.776" ry="18"/>
-<text text-anchor="middle" x="3617.28" y="-2213.57" font-family="Times,serif" font-size="14.00">PositionHashQualifiedMoveTree</text>
-</g>
-<!-- u95&#45;&gt;u57 -->
-<g id="edge61" class="edge"><title>u95&#45;&gt;u57</title>
-<path fill="none" stroke="black" d="M3617.28,-2199.17C3617.28,-2161.44 3617.28,-2070.84 3617.28,-2025.33"/>
-<polygon fill="black" stroke="black" points="3620.78,-2025.3 3617.28,-2015.3 3613.78,-2025.3 3620.78,-2025.3"/>
-</g>
-<!-- u1 -->
-<g id="node32" class="node"><title>u1</title>
-<ellipse fill="#ffff77" stroke="black" stroke-width="0" cx="4725.28" cy="-303.272" rx="29.795" ry="18"/>
-<text text-anchor="middle" x="4725.28" y="-299.572" font-family="Times,serif" font-size="14.00">Float</text>
-</g>
-<!-- u58 -->
-<g id="node37" class="node"><title>u58</title>
-<ellipse fill="#ffff77" stroke="black" stroke-width="0" cx="4552.28" cy="-303.272" rx="46.5926" ry="18"/>
-<text text-anchor="middle" x="4552.28" y="-299.572" font-family="Times,serif" font-size="14.00">RoseTree</text>
-</g>
-<!-- u81 -->
-<g id="node39" class="node"><title>u81</title>
-<ellipse fill="#ffff77" stroke="black" stroke-width="0" cx="4282.28" cy="-303.272" rx="33.2948" ry="18"/>
-<text text-anchor="middle" x="4282.28" y="-299.572" font-family="Times,serif" font-size="14.00">Either</text>
-</g>
-<!-- u98 -->
-<g id="node40" class="node"><title>u98</title>
-<ellipse fill="#ffff77" stroke="black" stroke-width="0" cx="4647.28" cy="-303.272" rx="30.5947" ry="18"/>
-<text text-anchor="middle" x="4647.28" y="-299.572" font-family="Times,serif" font-size="14.00">Time</text>
-</g>
-<!-- u64 -->
-<g id="node41" class="node"><title>u64</title>
-<ellipse fill="#7777ff" stroke="black" stroke-width="0" cx="3279.28" cy="-1997.27" rx="138.375" ry="18"/>
-<text text-anchor="middle" x="3279.28" y="-1993.57" font-family="Times,serif" font-size="14.00">PositionHashQuantifiedGameTree</text>
-</g>
-<!-- u74 -->
-<g id="node43" class="node"><title>u74</title>
-<ellipse fill="#7777ff" stroke="black" stroke-width="0" cx="3345.28" cy="-1776.27" rx="72.2875" ry="18"/>
-<text text-anchor="middle" x="3345.28" y="-1772.57" font-family="Times,serif" font-size="14.00">QuantifiedGame</text>
-</g>
-<!-- u64&#45;&gt;u74 -->
-<g id="edge62" class="edge"><title>u64&#45;&gt;u74</title>
-<path fill="none" stroke="black" d="M3284.46,-1979.09C3295.91,-1941.11 3323.43,-1849.79 3337.18,-1804.16"/>
-<polygon fill="black" stroke="black" points="3340.59,-1804.96 3340.13,-1794.38 3333.89,-1802.94 3340.59,-1804.96"/>
-</g>
-<!-- u75 -->
-<g id="node47" class="node"><title>u75</title>
-<ellipse fill="#ff7777" stroke="black" stroke-width="0" cx="4029.28" cy="-1356.27" rx="64.189" ry="18"/>
-<text text-anchor="middle" x="4029.28" y="-1352.57" font-family="Times,serif" font-size="14.00">SearchOptions</text>
-</g>
-<!-- u64&#45;&gt;u75 -->
-<g id="edge63" class="edge"><title>u64&#45;&gt;u75</title>
-<path fill="none" stroke="black" d="M3273.29,-1979.2C3251.42,-1913.45 3183.08,-1674.09 3300.28,-1551.27 3506.49,-1335.18 3681.21,-1521.68 3956.28,-1405.27 3971.83,-1398.69 3987.66,-1388.76 4000.58,-1379.63"/>
-<polygon fill="black" stroke="black" points="4003,-1382.21 4009.03,-1373.5 3998.88,-1376.54 4003,-1382.21"/>
-</g>
-<!-- u64&#45;&gt;u59 -->
-<g id="edge64" class="edge"><title>u64&#45;&gt;u59</title>
-<path fill="none" stroke="black" d="M3182.81,-1984.34C2859.58,-1944.37 1820.87,-1815.93 1565.43,-1784.34"/>
-<polygon fill="black" stroke="black" points="1565.62,-1780.84 1555.26,-1783.08 1564.76,-1787.78 1565.62,-1780.84"/>
-</g>
-<!-- u68 -->
-<g id="node42" class="node"><title>u68</title>
-<ellipse fill="#7777ff" stroke="black" stroke-width="0" cx="3345.28" cy="-1577.27" rx="36.2938" ry="18"/>
-<text text-anchor="middle" x="3345.28" y="-1573.57" font-family="Times,serif" font-size="14.00">Fitness</text>
-</g>
-<!-- u72 -->
-<g id="node45" class="node"><title>u72</title>
-<ellipse fill="#ff7777" stroke="black" stroke-width="0" cx="3868.28" cy="-1356.27" rx="78.7863" ry="18"/>
-<text text-anchor="middle" x="3868.28" y="-1352.57" font-family="Times,serif" font-size="14.00">EvaluationOptions</text>
-</g>
-<!-- u68&#45;&gt;u72 -->
-<g id="edge65" class="edge"><title>u68&#45;&gt;u72</title>
-<path fill="none" stroke="black" d="M3372.83,-1565.45C3439.96,-1538.98 3617.21,-1468.51 3763.28,-1405.27 3784.05,-1396.28 3806.93,-1385.88 3826.01,-1377.07"/>
-<polygon fill="black" stroke="black" points="3827.73,-1380.13 3835.33,-1372.75 3824.79,-1373.78 3827.73,-1380.13"/>
-</g>
-<!-- u68&#45;&gt;u30 -->
-<g id="edge66" class="edge"><title>u68&#45;&gt;u30</title>
-<path fill="none" stroke="black" d="M3312.19,-1585C3164.54,-1618.46 2551.18,-1746.8 2049.28,-1692.27 1865.25,-1672.28 1651.1,-1613.82 1565.01,-1588.82"/>
-<polygon fill="black" stroke="black" points="1565.98,-1585.46 1555.4,-1586.01 1564.02,-1592.18 1565.98,-1585.46"/>
-</g>
-<!-- u74&#45;&gt;u68 -->
-<g id="edge67" class="edge"><title>u74&#45;&gt;u68</title>
-<path fill="none" stroke="black" d="M3345.28,-1758.13C3345.28,-1723.93 3345.28,-1646.96 3345.28,-1605.67"/>
-<polygon fill="black" stroke="black" points="3348.78,-1605.51 3345.28,-1595.51 3341.78,-1605.51 3348.78,-1605.51"/>
-</g>
-<!-- u71 -->
-<g id="node44" class="node"><title>u71</title>
-<ellipse fill="#ff7777" stroke="black" stroke-width="0" cx="3845.28" cy="-1135.27" rx="69.5877" ry="18"/>
-<text text-anchor="middle" x="3845.28" y="-1131.57" font-family="Times,serif" font-size="14.00">CriteriaWeights</text>
-</g>
-<!-- u71&#45;&gt;u69 -->
-<g id="edge68" class="edge"><title>u71&#45;&gt;u69</title>
-<path fill="none" stroke="black" d="M3805.79,-1120.41C3686.39,-1077.93 3319.93,-943.319 3034.28,-793.272 3019.49,-785.504 3003.82,-775.741 2990.65,-767.052"/>
-<polygon fill="black" stroke="black" points="2992.24,-763.898 2981.98,-761.245 2988.34,-769.716 2992.24,-763.898"/>
-</g>
-<!-- u72&#45;&gt;u66 -->
-<g id="edge69" class="edge"><title>u72&#45;&gt;u66</title>
-<path fill="none" stroke="black" d="M3850.23,-1338.64C3757.94,-1253.6 3338.99,-867.553 3231.48,-768.493"/>
-<polygon fill="black" stroke="black" points="3233.73,-765.807 3224.01,-761.605 3228.99,-770.955 3233.73,-765.807"/>
-</g>
-<!-- u72&#45;&gt;u44 -->
-<g id="edge70" class="edge"><title>u72&#45;&gt;u44</title>
-<path fill="none" stroke="black" d="M3819.7,-1342.11C3802.05,-1337.75 3781.88,-1333.26 3763.28,-1330.27 3004.47,-1208.49 2777.81,-1400.32 2040.28,-1184.27 2020.03,-1178.34 1999.1,-1167.66 1982.42,-1157.88"/>
-<polygon fill="black" stroke="black" points="1983.99,-1154.74 1973.62,-1152.58 1980.37,-1160.74 1983.99,-1154.74"/>
-</g>
-<!-- u72&#45;&gt;u71 -->
-<g id="edge71" class="edge"><title>u72&#45;&gt;u71</title>
-<path fill="none" stroke="black" d="M3866.48,-1338.09C3862.5,-1300.19 3852.94,-1209.17 3848.13,-1163.45"/>
-<polygon fill="black" stroke="black" points="3851.6,-1162.96 3847.08,-1153.38 3844.64,-1163.69 3851.6,-1162.96"/>
-</g>
-<!-- u73 -->
-<g id="node46" class="node"><title>u73</title>
-<ellipse fill="#ff7777" stroke="black" stroke-width="0" cx="4011.28" cy="-1135.27" rx="77.9862" ry="18"/>
-<text text-anchor="middle" x="4011.28" y="-1131.57" font-family="Times,serif" font-size="14.00">PieceSquareTable</text>
-</g>
-<!-- u72&#45;&gt;u73 -->
-<g id="edge72" class="edge"><title>u72&#45;&gt;u73</title>
-<path fill="none" stroke="black" d="M3879.5,-1338.09C3904.51,-1299.79 3964.94,-1207.24 3994.47,-1162.02"/>
-<polygon fill="black" stroke="black" points="3997.57,-1163.66 4000.11,-1153.38 3991.71,-1159.84 3997.57,-1163.66"/>
-</g>
-<!-- u73&#45;&gt;u12 -->
-<g id="edge73" class="edge"><title>u73&#45;&gt;u12</title>
-<path fill="none" stroke="black" d="M3965.36,-1120.57C3952.14,-1116.76 3937.67,-1112.73 3924.28,-1109.27 3315.02,-952.104 2936.41,-1285.35 2544.28,-793.272 2523.51,-767.204 2531.37,-749.003 2544.28,-718.272 2579.96,-633.378 2630.26,-641.338 2692.28,-573.272 2699.18,-565.696 2706.36,-557.094 2712.65,-549.287"/>
-<polygon fill="black" stroke="black" points="2715.59,-551.218 2719.07,-541.212 2710.11,-546.862 2715.59,-551.218"/>
-</g>
-<!-- u73&#45;&gt;u13 -->
-<g id="edge74" class="edge"><title>u73&#45;&gt;u13</title>
-<path fill="none" stroke="black" d="M3967.82,-1120.23C3954.02,-1116.19 3938.62,-1112.11 3924.28,-1109.27 3390.21,-1003.39 2731.91,-960.161 2525.96,-948.633"/>
-<polygon fill="black" stroke="black" points="2526.1,-945.136 2515.92,-948.076 2525.71,-952.125 2526.1,-945.136"/>
-</g>
-<!-- u73&#45;&gt;u45 -->
-<g id="edge75" class="edge"><title>u73&#45;&gt;u45</title>
-<path fill="none" stroke="black" d="M4037.14,-1118.2C4078.29,-1091.22 4158.3,-1032.8 4200.28,-962.272 4330.23,-743.963 4356.22,-425.744 4361.17,-331.518"/>
-<polygon fill="black" stroke="black" points="4364.67,-331.558 4361.66,-321.4 4357.68,-331.217 4364.67,-331.558"/>
-</g>
-<!-- u73&#45;&gt;u67 -->
-<g id="edge76" class="edge"><title>u73&#45;&gt;u67</title>
-<path fill="none" stroke="black" d="M4038.27,-1118.38C4079.95,-1092.07 4158.4,-1035.06 4189.28,-962.272 4287.17,-731.56 4146.75,-419.577 4101.51,-329.547"/>
-<polygon fill="black" stroke="black" points="4104.62,-327.93 4096.96,-320.604 4098.38,-331.104 4104.62,-327.93"/>
-</g>
-<!-- u73&#45;&gt;u40 -->
-<g id="edge77" class="edge"><title>u73&#45;&gt;u40</title>
-<path fill="none" stroke="black" d="M3973.64,-1119.42C3896.76,-1088.25 3726.18,-1014.62 3693.28,-962.272 3665.81,-918.575 3705.02,-537.331 3671.28,-498.272 3450.43,-242.604 3231.22,-495.597 2925.28,-352.272 2912.26,-346.173 2899.64,-336.577 2889.44,-327.564"/>
-<polygon fill="black" stroke="black" points="2891.54,-324.74 2881.81,-320.538 2886.8,-329.888 2891.54,-324.74"/>
-</g>
-<!-- u75&#45;&gt;u60 -->
-<g id="edge78" class="edge"><title>u75&#45;&gt;u60</title>
-<path fill="none" stroke="black" d="M4000.14,-1340.03C3949.5,-1312.77 3843.32,-1252.13 3766.28,-1184.27 3609.93,-1046.54 3461.41,-841.821 3411.75,-770.704"/>
-<polygon fill="black" stroke="black" points="3414.51,-768.542 3405.93,-762.328 3408.76,-772.537 3414.51,-768.542"/>
-</g>
-<!-- u75&#45;&gt;u10 -->
-<g id="edge79" class="edge"><title>u75&#45;&gt;u10</title>
-<path fill="none" stroke="black" d="M3993.74,-1341.22C3981.98,-1337.08 3968.72,-1332.94 3956.28,-1330.27 3615.21,-1257.03 2647.9,-1422.73 2393.28,-1184.27 2368.64,-1161.2 2400,-1137.36 2381.28,-1109.27 2295.5,-980.569 2221.93,-998.717 2085.28,-926.272 1952.65,-855.962 1787.24,-787.58 1716.27,-759.111"/>
-<polygon fill="black" stroke="black" points="1717.48,-755.825 1706.89,-755.363 1714.88,-762.325 1717.48,-755.825"/>
-</g>
-<!-- u75&#45;&gt;u55 -->
-<g id="edge80" class="edge"><title>u75&#45;&gt;u55</title>
-<path fill="none" stroke="black" d="M4068.39,-1341.85C4079.64,-1338.05 4091.93,-1333.95 4103.28,-1330.27 4311.78,-1262.75 4444.26,-1360.7 4574.28,-1184.27 4779.11,-906.33 4529.73,-442.147 4463.56,-329.475"/>
-<polygon fill="black" stroke="black" points="4466.54,-327.635 4458.43,-320.817 4460.52,-331.204 4466.54,-327.635"/>
-</g>
-<!-- u76 -->
-<g id="node48" class="node"><title>u76</title>
-<ellipse fill="#ff7777" stroke="black" stroke-width="0" cx="4462.28" cy="-1135.27" rx="103.182" ry="18"/>
-<text text-anchor="middle" x="4462.28" y="-1131.57" font-family="Times,serif" font-size="14.00">StandardOpeningOptions</text>
-</g>
-<!-- u75&#45;&gt;u76 -->
-<g id="edge81" class="edge"><title>u75&#45;&gt;u76</title>
-<path fill="none" stroke="black" d="M4059.04,-1340.22C4134.72,-1301.94 4334.62,-1200.84 4421.26,-1157.02"/>
-<polygon fill="black" stroke="black" points="4422.93,-1160.1 4430.27,-1152.46 4419.77,-1153.85 4422.93,-1160.1"/>
-</g>
-<!-- u76&#45;&gt;u45 -->
-<g id="edge82" class="edge"><title>u76&#45;&gt;u45</title>
-<path fill="none" stroke="black" d="M4460.32,-1117.06C4451.86,-1042.97 4417.58,-743.79 4387.28,-498.272 4379.94,-438.762 4370.83,-369.053 4365.89,-331.525"/>
-<polygon fill="black" stroke="black" points="4369.33,-330.849 4364.55,-321.392 4362.39,-331.764 4369.33,-330.849"/>
-</g>
-<!-- u76&#45;&gt;u5 -->
-<g id="edge83" class="edge"><title>u76&#45;&gt;u5</title>
-<path fill="none" stroke="black" d="M4402.6,-1120.51C4236.15,-1081.99 3778.29,-975.066 3768.28,-962.272 3640.58,-799.06 3843.3,-703.463 3814.28,-498.272 3805.6,-436.88 3782.18,-367.715 3768.54,-330.823"/>
-<polygon fill="black" stroke="black" points="3771.75,-329.44 3764.97,-321.306 3765.2,-331.899 3771.75,-329.44"/>
-</g>
-<!-- u77 -->
-<g id="node49" class="node"><title>u77</title>
-<ellipse fill="#ff7777" stroke="black" stroke-width="0" cx="4161.28" cy="-1356.27" rx="49.2915" ry="18"/>
-<text text-anchor="middle" x="4161.28" y="-1352.57" font-family="Times,serif" font-size="14.00">IOOptions</text>
-</g>
-<!-- u79 -->
-<g id="node51" class="node"><title>u79</title>
-<ellipse fill="#ff7777" stroke="black" stroke-width="0" cx="4282.28" cy="-1135.27" rx="58.4896" ry="18"/>
-<text text-anchor="middle" x="4282.28" y="-1131.57" font-family="Times,serif" font-size="14.00">PGNOptions</text>
-</g>
-<!-- u77&#45;&gt;u79 -->
-<g id="edge84" class="edge"><title>u77&#45;&gt;u79</title>
-<path fill="none" stroke="black" d="M4170.57,-1338.45C4191.6,-1300.39 4242.94,-1207.47 4268.02,-1162.08"/>
-<polygon fill="black" stroke="black" points="4271.18,-1163.6 4272.96,-1153.15 4265.06,-1160.21 4271.18,-1163.6"/>
-</g>
-<!-- u80 -->
-<g id="node52" class="node"><title>u80</title>
-<ellipse fill="#ff7777" stroke="black" stroke-width="0" cx="4156.28" cy="-1135.27" rx="49.2915" ry="18"/>
-<text text-anchor="middle" x="4156.28" y="-1131.57" font-family="Times,serif" font-size="14.00">UIOptions</text>
-</g>
-<!-- u77&#45;&gt;u80 -->
-<g id="edge85" class="edge"><title>u77&#45;&gt;u80</title>
-<path fill="none" stroke="black" d="M4160.89,-1338.09C4160.02,-1300.19 4157.94,-1209.17 4156.9,-1163.45"/>
-<polygon fill="black" stroke="black" points="4160.4,-1163.29 4156.67,-1153.38 4153.4,-1163.45 4160.4,-1163.29"/>
-</g>
-<!-- u78 -->
-<g id="node50" class="node"><title>u78</title>
-<ellipse fill="#ff7777" stroke="black" stroke-width="0" cx="3990.28" cy="-744.272" rx="65.7887" ry="18"/>
-<text text-anchor="middle" x="3990.28" y="-740.572" font-family="Times,serif" font-size="14.00">CECPFeatures</text>
-</g>
-<!-- u78&#45;&gt;u16 -->
-<g id="edge86" class="edge"><title>u78&#45;&gt;u16</title>
-<path fill="none" stroke="black" d="M3997.73,-726.332C4027.19,-659.322 4135.72,-412.456 4171.65,-330.737"/>
-<polygon fill="black" stroke="black" points="4174.93,-331.962 4175.75,-321.399 4168.52,-329.145 4174.93,-331.962"/>
-</g>
-<!-- u78&#45;&gt;u45 -->
-<g id="edge87" class="edge"><title>u78&#45;&gt;u45</title>
-<path fill="none" stroke="black" d="M4016.88,-727.798C4061.43,-700.881 4152.05,-641.724 4211.28,-573.272 4279.15,-494.842 4330.74,-381.136 4351.85,-330.407"/>
-<polygon fill="black" stroke="black" points="4355.21,-331.431 4355.77,-320.851 4348.74,-328.772 4355.21,-331.431"/>
-</g>
-<!-- u78&#45;&gt;u5 -->
-<g id="edge88" class="edge"><title>u78&#45;&gt;u5</title>
-<path fill="none" stroke="black" d="M3981.83,-726.244C3961.93,-686.248 3910.39,-583.264 3865.28,-498.272 3833.09,-437.61 3793.75,-367.199 3772.9,-330.144"/>
-<polygon fill="black" stroke="black" points="3775.73,-328.034 3767.77,-321.04 3769.63,-331.471 3775.73,-328.034"/>
-</g>
-<!-- u79&#45;&gt;u6 -->
-<g id="edge89" class="edge"><title>u79&#45;&gt;u6</title>
-<path fill="none" stroke="black" d="M4262.73,-1152.39C4249.64,-1162.58 4231.68,-1175.44 4214.28,-1184.27 4032.8,-1276.36 3919.51,-1181.84 3780.28,-1330.27 3756.68,-1355.43 3771.77,-1372.74 3760.28,-1405.27 3741.58,-1458.25 3713.46,-1517.68 3697.19,-1550.68"/>
-<polygon fill="black" stroke="black" points="3694.05,-1549.13 3692.73,-1559.64 3700.32,-1552.24 3694.05,-1549.13"/>
-</g>
-<!-- u80&#45;&gt;u55 -->
-<g id="edge90" class="edge"><title>u80&#45;&gt;u55</title>
-<path fill="none" stroke="black" d="M4187.6,-1121.29C4239.35,-1098 4341.5,-1043.8 4387.28,-962.272 4508.71,-746.003 4468.55,-425.745 4453.12,-331.37"/>
-<polygon fill="black" stroke="black" points="4456.53,-330.523 4451.42,-321.243 4449.63,-331.685 4456.53,-330.523"/>
-</g>
-<!-- u80&#45;&gt;u81 -->
-<g id="edge91" class="edge"><title>u80&#45;&gt;u81</title>
-<path fill="none" stroke="black" d="M4125.75,-1121C4034.66,-1081.36 3770.94,-966.359 3768.28,-962.272 3759.56,-948.861 3763.44,-941.521 3768.28,-926.272 3814.18,-781.81 4219.03,-376.375 4240.28,-352.272 4247.27,-344.342 4254.89,-335.651 4261.69,-327.87"/>
-<polygon fill="black" stroke="black" points="4264.75,-329.695 4268.69,-319.862 4259.47,-325.089 4264.75,-329.695"/>
-</g>
-<!-- u82 -->
-<g id="node53" class="node"><title>u82</title>
-<ellipse fill="#ff7777" stroke="black" stroke-width="0" cx="3841.28" cy="-944.272" rx="63.8893" ry="18"/>
-<text text-anchor="middle" x="3841.28" y="-940.572" font-family="Times,serif" font-size="14.00">CECPOptions</text>
-</g>
-<!-- u80&#45;&gt;u82 -->
-<g id="edge92" class="edge"><title>u80&#45;&gt;u82</title>
-<path fill="none" stroke="black" d="M4131.83,-1119.6C4076.3,-1086.28 3940.56,-1004.84 3876.22,-966.233"/>
-<polygon fill="black" stroke="black" points="3877.63,-963.002 3867.26,-960.859 3874.03,-969.005 3877.63,-963.002"/>
-</g>
-<!-- u83 -->
-<g id="node54" class="node"><title>u83</title>
-<ellipse fill="#ff7777" stroke="black" stroke-width="0" cx="4107.28" cy="-944.272" rx="73.387" ry="18"/>
-<text text-anchor="middle" x="4107.28" y="-940.572" font-family="Times,serif" font-size="14.00">NativeUIOptions</text>
-</g>
-<!-- u80&#45;&gt;u83 -->
-<g id="edge93" class="edge"><title>u80&#45;&gt;u83</title>
-<path fill="none" stroke="black" d="M4151.85,-1117.17C4143.3,-1084.22 4124.51,-1011.73 4114.27,-972.223"/>
-<polygon fill="black" stroke="black" points="4117.64,-971.277 4111.74,-962.476 4110.86,-973.034 4117.64,-971.277"/>
-</g>
-<!-- u84 -->
-<g id="node55" class="node"><title>u84</title>
-<ellipse fill="#ff7777" stroke="black" stroke-width="0" cx="3969.28" cy="-944.272" rx="46.5926" ry="18"/>
-<text text-anchor="middle" x="3969.28" y="-940.572" font-family="Times,serif" font-size="14.00">Verbosity</text>
-</g>
-<!-- u80&#45;&gt;u84 -->
-<g id="edge94" class="edge"><title>u80&#45;&gt;u84</title>
-<path fill="none" stroke="black" d="M4140.34,-1118.16C4107.22,-1084.68 4030.85,-1007.5 3992.35,-968.593"/>
-<polygon fill="black" stroke="black" points="3994.71,-965.993 3985.18,-961.346 3989.73,-970.916 3994.71,-965.993"/>
-</g>
-<!-- u36 -->
-<g id="node64" class="node"><title>u36</title>
-<ellipse fill="#ff77ff" stroke="black" stroke-width="0" cx="430.281" cy="-1356.27" rx="64.9885" ry="18"/>
-<text text-anchor="middle" x="430.281" y="-1352.57" font-family="Times,serif" font-size="14.00">MoveNotation</text>
-</g>
-<!-- u80&#45;&gt;u36 -->
-<g id="edge95" class="edge"><title>u80&#45;&gt;u36</title>
-<path fill="none" stroke="black" d="M4141.87,-1152.87C4131.11,-1163.98 4115.37,-1177.72 4098.28,-1184.27 3359.2,-1467.68 1323.82,-1225.13 539.281,-1330.27 521.345,-1332.68 502.02,-1336.64 484.696,-1340.72"/>
-<polygon fill="black" stroke="black" points="483.652,-1337.37 474.752,-1343.12 485.294,-1344.17 483.652,-1337.37"/>
-</g>
-<!-- u62 -->
-<g id="node76" class="node"><title>u62</title>
-<ellipse fill="#33ff33" stroke="black" stroke-width="0" cx="2963.28" cy="-303.272" rx="28.6953" ry="18"/>
-<text text-anchor="middle" x="2963.28" y="-299.572" font-family="Times,serif" font-size="14.00">Tree</text>
-</g>
-<!-- u80&#45;&gt;u62 -->
-<g id="edge96" class="edge"><title>u80&#45;&gt;u62</title>
-<path fill="none" stroke="black" d="M4125.61,-1120.96C4116.8,-1117.16 4107.17,-1113.03 4098.28,-1109.27 3940.98,-1042.81 3847.09,-1097.87 3743.28,-962.272 3727.48,-941.634 3700.9,-517.379 3683.28,-498.272 3471.65,-268.812 3255.84,-525.671 2996.28,-352.272 2987.88,-346.662 2981.01,-338.123 2975.76,-329.795"/>
-<polygon fill="black" stroke="black" points="2978.72,-327.914 2970.7,-320.989 2972.65,-331.403 2978.72,-327.914"/>
-</g>
-<!-- u82&#45;&gt;u78 -->
-<g id="edge97" class="edge"><title>u82&#45;&gt;u78</title>
-<path fill="none" stroke="black" d="M3853.98,-926.391C3880.27,-891.467 3940.72,-811.137 3971.51,-770.215"/>
-<polygon fill="black" stroke="black" points="3974.39,-772.206 3977.61,-762.111 3968.8,-767.997 3974.39,-772.206"/>
-</g>
-<!-- u83&#45;&gt;u49 -->
-<g id="edge98" class="edge"><title>u83&#45;&gt;u49</title>
-<path fill="none" stroke="black" d="M4069.48,-928.713C3977.05,-893.104 3739.78,-801.707 3639.32,-763.008"/>
-<polygon fill="black" stroke="black" points="3640.34,-759.65 3629.75,-759.321 3637.82,-766.182 3640.34,-759.65"/>
-</g>
-<!-- u85 -->
-<g id="node56" class="node"><title>u85</title>
-<ellipse fill="#ff7777" stroke="black" stroke-width="0" cx="4029.28" cy="-1577.27" rx="39.7935" ry="18"/>
-<text text-anchor="middle" x="4029.28" y="-1573.57" font-family="Times,serif" font-size="14.00">Options</text>
-</g>
-<!-- u85&#45;&gt;u72 -->
-<g id="edge99" class="edge"><title>u85&#45;&gt;u72</title>
-<path fill="none" stroke="black" d="M4017.18,-1559.81C3989.22,-1521.78 3919.98,-1427.59 3886.71,-1382.34"/>
-<polygon fill="black" stroke="black" points="3889.49,-1380.21 3880.74,-1374.23 3883.85,-1384.36 3889.49,-1380.21"/>
-</g>
-<!-- u85&#45;&gt;u75 -->
-<g id="edge100" class="edge"><title>u85&#45;&gt;u75</title>
-<path fill="none" stroke="black" d="M4029.28,-1559.09C4029.28,-1521.19 4029.28,-1430.17 4029.28,-1384.45"/>
-<polygon fill="black" stroke="black" points="4032.78,-1384.38 4029.28,-1374.38 4025.78,-1384.38 4032.78,-1384.38"/>
-</g>
-<!-- u85&#45;&gt;u77 -->
-<g id="edge101" class="edge"><title>u85&#45;&gt;u77</title>
-<path fill="none" stroke="black" d="M4039.2,-1559.81C4062.09,-1521.84 4118.7,-1427.92 4146.03,-1382.57"/>
-<polygon fill="black" stroke="black" points="4149.08,-1384.3 4151.24,-1373.92 4143.08,-1380.68 4149.08,-1384.3"/>
-</g>
-<!-- u93 -->
-<g id="node57" class="node"><title>u93</title>
-<ellipse fill="#ff7777" stroke="black" stroke-width="0" cx="4473.28" cy="-1577.27" rx="91.784" ry="18"/>
-<text text-anchor="middle" x="4473.28" y="-1573.57" font-family="Times,serif" font-size="14.00">CommandLineOption</text>
-</g>
-<!-- u93&#45;&gt;u16 -->
-<g id="edge102" class="edge"><title>u93&#45;&gt;u16</title>
-<path fill="none" stroke="black" d="M4495.81,-1559.63C4530.98,-1532.1 4597.65,-1473.32 4624.28,-1405.27 4679.93,-1263.06 4686.59,-848.776 4607.28,-718.272 4545.69,-616.927 4469.81,-654.369 4383.28,-573.272 4300.53,-495.724 4227.87,-380.366 4197.89,-329.696"/>
-<polygon fill="black" stroke="black" points="4200.88,-327.866 4192.8,-321.012 4194.84,-331.408 4200.88,-327.866"/>
-</g>
-<!-- u34 -->
-<g id="node60" class="node"><title>u34</title>
-<ellipse fill="#77ffff" stroke="black" stroke-width="0" cx="1452.28" cy="-1356.27" rx="105.082" ry="18"/>
-<text text-anchor="middle" x="1452.28" y="-1352.57" font-family="Times,serif" font-size="14.00">GameTerminationReason</text>
-</g>
-<!-- u30&#45;&gt;u34 -->
-<g id="edge103" class="edge"><title>u30&#45;&gt;u34</title>
-<path fill="none" stroke="black" d="M1520.6,-1559.45C1507.82,-1521.65 1476.75,-1429.7 1461.31,-1383.99"/>
-<polygon fill="black" stroke="black" points="1464.6,-1382.81 1458.09,-1374.45 1457.97,-1385.05 1464.6,-1382.81"/>
-</g>
-<!-- u30&#45;&gt;u36 -->
-<g id="edge104" class="edge"><title>u30&#45;&gt;u36</title>
-<path fill="none" stroke="black" d="M1506.55,-1562.41C1499.77,-1558.23 1491.95,-1554.03 1484.28,-1551.27 1084.35,-1407.51 947.234,-1524.37 539.281,-1405.27 514.839,-1398.14 488.691,-1386.76 468.133,-1376.87"/>
-<polygon fill="black" stroke="black" points="469.628,-1373.71 459.107,-1372.46 466.551,-1380 469.628,-1373.71"/>
-</g>
-<!-- u53 -->
-<g id="node92" class="node"><title>u53</title>
-<ellipse fill="#3333ff" stroke="black" stroke-width="0" cx="1220.28" cy="-1997.27" rx="85.2851" ry="18"/>
-<text text-anchor="middle" x="1220.28" y="-1993.57" font-family="Times,serif" font-size="14.00">InstancesByPosition</text>
-</g>
-<!-- u30&#45;&gt;u53 -->
-<g id="edge105" class="edge"><title>u30&#45;&gt;u53</title>
-<path fill="none" stroke="black" d="M1512.81,-1593.96C1480.78,-1631.35 1400.85,-1725.09 1376.28,-1758.27 1320.97,-1832.96 1262.71,-1926.4 1235.7,-1970.7"/>
-<polygon fill="black" stroke="black" points="1232.63,-1969.02 1230.43,-1979.38 1238.61,-1972.65 1232.63,-1969.02"/>
-</g>
-<!-- u54 -->
-<g id="node93" class="node"><title>u54</title>
-<ellipse fill="#3333ff" stroke="black" stroke-width="0" cx="846.281" cy="-2217.27" rx="40.8928" ry="18"/>
-<text text-anchor="middle" x="846.281" y="-2213.57" font-family="Times,serif" font-size="14.00">Position</text>
-</g>
-<!-- u30&#45;&gt;u54 -->
-<g id="edge106" class="edge"><title>u30&#45;&gt;u54</title>
-<path fill="none" stroke="black" d="M1518.97,-1594.87C1482.72,-1677.15 1323.56,-2037.68 1314.28,-2046.27 1192.16,-2159.35 989.015,-2198.5 895.795,-2210.96"/>
-<polygon fill="black" stroke="black" points="895.255,-2207.5 885.785,-2212.25 896.15,-2214.44 895.255,-2207.5"/>
-</g>
-<!-- u33 -->
-<g id="node59" class="node"><title>u33</title>
-<ellipse fill="#77ffff" stroke="black" stroke-width="0" cx="1478.28" cy="-1135.27" rx="57.3905" ry="18"/>
-<text text-anchor="middle" x="1478.28" y="-1131.57" font-family="Times,serif" font-size="14.00">DrawReason</text>
-</g>
-<!-- u33&#45;&gt;u10 -->
-<g id="edge107" class="edge"><title>u33&#45;&gt;u10</title>
-<path fill="none" stroke="black" d="M1487.13,-1117.31C1519.2,-1055.87 1629.37,-844.751 1667.87,-770.971"/>
-<polygon fill="black" stroke="black" points="1671.09,-772.374 1672.61,-761.89 1664.88,-769.136 1671.09,-772.374"/>
-</g>
-<!-- u34&#45;&gt;u33 -->
-<g id="edge108" class="edge"><title>u34&#45;&gt;u33</title>
-<path fill="none" stroke="black" d="M1454.32,-1338.09C1458.82,-1300.19 1469.63,-1209.17 1475.05,-1163.45"/>
-<polygon fill="black" stroke="black" points="1478.55,-1163.72 1476.25,-1153.38 1471.6,-1162.89 1478.55,-1163.72"/>
-</g>
-<!-- u35 -->
-<g id="node61" class="node"><title>u35</title>
-<ellipse fill="#77ffff" stroke="black" stroke-width="0" cx="1368.28" cy="-1135.27" rx="33.5952" ry="18"/>
-<text text-anchor="middle" x="1368.28" y="-1131.57" font-family="Times,serif" font-size="14.00">Result</text>
-</g>
-<!-- u34&#45;&gt;u35 -->
-<g id="edge109" class="edge"><title>u34&#45;&gt;u35</title>
-<path fill="none" stroke="black" d="M1445.69,-1338.09C1431.05,-1299.93 1395.77,-1207.95 1378.35,-1162.54"/>
-<polygon fill="black" stroke="black" points="1381.58,-1161.16 1374.73,-1153.08 1375.04,-1163.67 1381.58,-1161.16"/>
-</g>
-<!-- u35&#45;&gt;u7 -->
-<g id="edge110" class="edge"><title>u35&#45;&gt;u7</title>
-<path fill="none" stroke="black" d="M1372.15,-1117.2C1387.74,-1052.63 1452.44,-821.771 1601.28,-718.272 1944.01,-479.946 2133.66,-706.49 2529.28,-573.272 2548.93,-566.655 2569.4,-555.924 2585.74,-546.286"/>
-<polygon fill="black" stroke="black" points="2587.62,-549.242 2594.37,-541.076 2584,-543.251 2587.62,-549.242"/>
-</g>
-<!-- u59&#45;&gt;u60 -->
-<g id="edge111" class="edge"><title>u59&#45;&gt;u60</title>
-<path fill="none" stroke="black" d="M1553.75,-1768.17C1742.86,-1738.76 2485.81,-1624.73 3099.28,-1551.27 3263.13,-1531.65 4466.48,-1527.56 4577.28,-1405.27 4621.45,-1356.53 4619.46,-1159.75 4577.28,-1109.27 4341.56,-827.164 4107.97,-1090.1 3763.28,-962.272 3627.79,-912.026 3485.25,-812.925 3424.53,-768.167"/>
-<polygon fill="black" stroke="black" points="3426.29,-765.116 3416.17,-761.97 3422.12,-770.738 3426.29,-765.116"/>
-</g>
-<!-- u59&#45;&gt;u58 -->
-<g id="edge112" class="edge"><title>u59&#45;&gt;u58</title>
-<path fill="none" stroke="black" d="M1557.94,-1772.53C1781.72,-1759.83 2697.54,-1704 2973.28,-1626.27 3047.33,-1605.4 3055.2,-1572.03 3129.28,-1551.27 3447.72,-1462.04 4375.31,-1637.98 4610.28,-1405.27 4718.86,-1297.73 4663.61,-869.454 4641.28,-718.272 4619.5,-570.842 4576.41,-397.306 4559.41,-331.453"/>
-<polygon fill="black" stroke="black" points="4562.72,-330.279 4556.82,-321.479 4555.95,-332.037 4562.72,-330.279"/>
-</g>
-<!-- u59&#45;&gt;u30 -->
-<g id="edge113" class="edge"><title>u59&#45;&gt;u30</title>
-<path fill="none" stroke="black" d="M1509.85,-1758.13C1512.97,-1723.93 1520,-1646.96 1523.78,-1605.67"/>
-<polygon fill="black" stroke="black" points="1527.28,-1605.79 1524.71,-1595.51 1520.31,-1605.15 1527.28,-1605.79"/>
-</g>
-<!-- u61 -->
-<g id="node63" class="node"><title>u61</title>
-<ellipse fill="#77ffff" stroke="black" stroke-width="0" cx="1402.28" cy="-1577.27" rx="72.5877" ry="18"/>
-<text text-anchor="middle" x="1402.28" y="-1573.57" font-family="Times,serif" font-size="14.00">MoveFrequency</text>
-</g>
-<!-- u59&#45;&gt;u61 -->
-<g id="edge114" class="edge"><title>u59&#45;&gt;u61</title>
-<path fill="none" stroke="black" d="M1499.24,-1758.48C1480.71,-1724.03 1438.29,-1645.2 1416.21,-1604.17"/>
-<polygon fill="black" stroke="black" points="1419.27,-1602.45 1411.45,-1595.31 1413.1,-1605.77 1419.27,-1602.45"/>
-</g>
-<!-- u59&#45;&gt;u62 -->
-<g id="edge115" class="edge"><title>u59&#45;&gt;u62</title>
-<path fill="none" stroke="black" d="M1557.61,-1771.96C1731.19,-1759.83 2329.57,-1713.85 2816.28,-1626.27 2952.82,-1601.7 2982.56,-1574.82 3119.28,-1551.27 3444.32,-1495.28 4374.83,-1649.69 4596.28,-1405.27 4640.79,-1356.14 4604.43,-752.604 4577.28,-718.272 4467.95,-580.03 3986.94,-538.237 3815.28,-498.272 3455.17,-414.433 3307.07,-552.561 2996.28,-352.272 2987.79,-346.801 2980.9,-338.293 2975.66,-329.95"/>
-<polygon fill="black" stroke="black" points="2978.61,-328.064 2970.62,-321.114 2972.53,-331.534 2978.61,-328.064"/>
-</g>
-<!-- u61&#45;&gt;u10 -->
-<g id="edge116" class="edge"><title>u61&#45;&gt;u10</title>
-<path fill="none" stroke="black" d="M1360.25,-1562.45C1346.66,-1558.37 1331.44,-1554.22 1317.28,-1551.27 1061.41,-1498 323.236,-1601.21 150.281,-1405.27 128.516,-1380.62 128.592,-1134 150.281,-1109.27 481.066,-732.191 854.484,-1244.32 1269.28,-962.272 1284.42,-951.981 1275.87,-938.724 1289.28,-926.272 1395.67,-827.528 1565.4,-774.606 1641.77,-754.682"/>
-<polygon fill="black" stroke="black" points="1643.09,-757.957 1651.91,-752.089 1641.36,-751.176 1643.09,-757.957"/>
-</g>
-<!-- u41 -->
-<g id="node74" class="node"><title>u41</title>
-<ellipse fill="#33ff33" stroke="black" stroke-width="0" cx="2256.28" cy="-303.272" rx="35.9954" ry="18"/>
-<text text-anchor="middle" x="2256.28" y="-299.572" font-family="Times,serif" font-size="14.00">Empty</text>
-</g>
-<!-- u61&#45;&gt;u41 -->
-<g id="edge117" class="edge"><title>u61&#45;&gt;u41</title>
-<path fill="none" stroke="black" d="M1426.82,-1560.16C1465.12,-1533.36 1537.68,-1475.57 1566.28,-1405.27 1571.3,-1392.95 1570.1,-939.577 1570.28,-926.272 1571.56,-833.82 1559.41,-809.53 1574.28,-718.272 1590.77,-617.133 1568.95,-568.812 1643.28,-498.272 1832.35,-318.849 1987,-485.078 2211.28,-352.272 2221.41,-346.274 2230.68,-337.326 2238.13,-328.775"/>
-<polygon fill="black" stroke="black" points="2241.04,-330.751 2244.7,-320.808 2235.64,-326.3 2241.04,-330.751"/>
-</g>
-<!-- u42 -->
-<g id="node75" class="node"><title>u42</title>
-<ellipse fill="#33ff33" stroke="black" stroke-width="0" cx="2175.28" cy="-303.272" rx="27" ry="18"/>
-<text text-anchor="middle" x="2175.28" y="-299.572" font-family="Times,serif" font-size="14.00">Null</text>
-</g>
-<!-- u61&#45;&gt;u42 -->
-<g id="edge118" class="edge"><title>u61&#45;&gt;u42</title>
-<path fill="none" stroke="black" d="M1360.25,-1562.43C1346.66,-1558.36 1331.44,-1554.21 1317.28,-1551.27 1057.69,-1497.47 323.373,-1590.06 133.281,-1405.27 59.1384,-1333.2 63.2806,-1048.67 63.2806,-945.272 63.2806,-945.272 63.2806,-945.272 63.2806,-743.272 63.2806,-301.653 1855.77,-301.138 2138.06,-303.795"/>
-<polygon fill="black" stroke="black" points="2138.16,-307.296 2148.19,-303.898 2138.23,-300.297 2138.16,-307.296"/>
-</g>
-<!-- u36&#45;&gt;u29 -->
-<g id="edge119" class="edge"><title>u36&#45;&gt;u29</title>
-<path fill="none" stroke="black" d="M476.481,-1343.6C495.799,-1339 518.539,-1333.95 539.281,-1330.27 1050.5,-1239.68 1245.99,-1439.19 1698.28,-1184.27 1707.86,-1178.87 1715.91,-1169.99 1722.09,-1161.33"/>
-<polygon fill="black" stroke="black" points="1725.08,-1163.16 1727.65,-1152.88 1719.23,-1159.31 1725.08,-1163.16"/>
-</g>
-<!-- u36&#45;&gt;u31 -->
-<g id="edge120" class="edge"><title>u36&#45;&gt;u31</title>
-<path fill="none" stroke="black" d="M437.747,-1338.12C461.94,-1282.58 536.763,-1111.13 539.281,-1109.27 758.645,-947.015 1488.33,-1001.94 1758.28,-962.272 1765.97,-961.143 1773.98,-959.885 1781.97,-958.579"/>
-<polygon fill="black" stroke="black" points="1782.75,-961.997 1792.04,-956.905 1781.61,-955.091 1782.75,-961.997"/>
-</g>
-<!-- u37 -->
-<g id="node65" class="node"><title>u37</title>
-<ellipse fill="#ff77ff" stroke="black" stroke-width="0" cx="214.281" cy="-1135.27" rx="51.9908" ry="18"/>
-<text text-anchor="middle" x="214.281" y="-1131.57" font-family="Times,serif" font-size="14.00">Coordinate</text>
-</g>
-<!-- u36&#45;&gt;u37 -->
-<g id="edge121" class="edge"><title>u36&#45;&gt;u37</title>
-<path fill="none" stroke="black" d="M414.046,-1338.81C376.112,-1300.35 281.555,-1204.48 237.523,-1159.84"/>
-<polygon fill="black" stroke="black" points="239.924,-1157.29 230.409,-1152.63 234.94,-1162.2 239.924,-1157.29"/>
-</g>
-<!-- u38 -->
-<g id="node66" class="node"><title>u38</title>
-<ellipse fill="#ff77ff" stroke="black" stroke-width="0" cx="348.281" cy="-1135.27" rx="64.189" ry="18"/>
-<text text-anchor="middle" x="348.281" y="-1131.57" font-family="Times,serif" font-size="14.00">ICCFNumeric</text>
-</g>
-<!-- u36&#45;&gt;u38 -->
-<g id="edge122" class="edge"><title>u36&#45;&gt;u38</title>
-<path fill="none" stroke="black" d="M423.846,-1338.09C409.595,-1300.03 375.288,-1208.4 358.241,-1162.87"/>
-<polygon fill="black" stroke="black" points="361.47,-1161.51 354.685,-1153.38 354.914,-1163.97 361.47,-1161.51"/>
-</g>
-<!-- u39 -->
-<g id="node67" class="node"><title>u39</title>
-<ellipse fill="#ff77ff" stroke="black" stroke-width="0" cx="463.281" cy="-1135.27" rx="32.4942" ry="18"/>
-<text text-anchor="middle" x="463.281" y="-1131.57" font-family="Times,serif" font-size="14.00">Smith</text>
-</g>
-<!-- u36&#45;&gt;u39 -->
-<g id="edge123" class="edge"><title>u36&#45;&gt;u39</title>
-<path fill="none" stroke="black" d="M432.87,-1338.09C438.581,-1300.19 452.296,-1209.17 459.185,-1163.45"/>
-<polygon fill="black" stroke="black" points="462.674,-1163.79 460.703,-1153.38 455.752,-1162.74 462.674,-1163.79"/>
-</g>
-<!-- u36&#45;&gt;u40 -->
-<g id="edge124" class="edge"><title>u36&#45;&gt;u40</title>
-<path fill="none" stroke="black" d="M390.854,-1341.91C297.07,-1308.03 74.2451,-1214 153.281,-1109.27 522.717,-619.728 2263.4,-635.701 2807.28,-352.272 2819.85,-345.724 2832.25,-336.231 2842.41,-327.413"/>
-<polygon fill="black" stroke="black" points="2844.94,-329.842 2850.04,-320.555 2840.26,-324.635 2844.94,-329.842"/>
-</g>
-<!-- u37&#45;&gt;u10 -->
-<g id="edge125" class="edge"><title>u37&#45;&gt;u10</title>
-<path fill="none" stroke="black" d="M243.868,-1120.44C253.687,-1116.32 264.791,-1112.14 275.281,-1109.27 714.587,-989.362 914.429,-1220.84 1289.28,-962.272 1304.35,-951.88 1295.99,-938.859 1309.28,-926.272 1409.76,-831.105 1569.73,-776.657 1642.71,-755.546"/>
-<polygon fill="black" stroke="black" points="1643.76,-758.888 1652.42,-752.788 1641.84,-752.155 1643.76,-758.888"/>
-</g>
-<!-- u38&#45;&gt;u10 -->
-<g id="edge126" class="edge"><title>u38&#45;&gt;u10</title>
-<path fill="none" stroke="black" d="M385.198,-1120.49C396.935,-1116.47 410.046,-1112.33 422.281,-1109.27 809.945,-1012.34 962.53,-1160.88 1309.28,-962.272 1327.35,-951.921 1323.1,-939.391 1339.28,-926.272 1438.79,-845.574 1579.83,-784.661 1645.31,-758.84"/>
-<polygon fill="black" stroke="black" points="1646.74,-762.04 1654.78,-755.143 1644.19,-755.519 1646.74,-762.04"/>
-</g>
-<!-- u39&#45;&gt;u28 -->
-<g id="edge127" class="edge"><title>u39&#45;&gt;u28</title>
-<path fill="none" stroke="black" d="M487.933,-1123.45C500.162,-1118.47 515.278,-1112.87 529.281,-1109.27 927.479,-1006.85 1420.66,-963.627 1606.11,-950.21"/>
-<polygon fill="black" stroke="black" points="1606.57,-953.686 1616.3,-949.48 1606.07,-946.703 1606.57,-953.686"/>
-</g>
-<!-- u23&#45;&gt;u18 -->
-<g id="edge128" class="edge"><title>u23&#45;&gt;u18</title>
-<path fill="none" stroke="black" d="M2378.19,-287.363C2429.86,-253.746 2555.55,-171.962 2615.04,-133.249"/>
-<polygon fill="black" stroke="black" points="2617.19,-136.028 2623.66,-127.64 2613.37,-130.16 2617.19,-136.028"/>
-</g>
-<!-- u86 -->
-<g id="node77" class="node"><title>u86</title>
-<ellipse fill="#bbff77" stroke="black" stroke-width="0" cx="2271.28" cy="-1776.27" rx="53.8905" ry="18"/>
-<text text-anchor="middle" x="2271.28" y="-1772.57" font-family="Times,serif" font-size="14.00">SearchState</text>
-</g>
-<!-- u86&#45;&gt;u64 -->
-<g id="edge129" class="edge"><title>u86&#45;&gt;u64</title>
-<path fill="none" stroke="black" d="M2315.11,-1786.79C2471.2,-1820.71 3001.33,-1935.89 3201.71,-1979.42"/>
-<polygon fill="black" stroke="black" points="3201.06,-1982.86 3211.58,-1981.56 3202.55,-1976.02 3201.06,-1982.86"/>
-</g>
-<!-- u87 -->
-<g id="node78" class="node"><title>u87</title>
-<ellipse fill="#bbff77" stroke="black" stroke-width="0" cx="2253.28" cy="-1577.27" rx="83.3857" ry="18"/>
-<text text-anchor="middle" x="2253.28" y="-1573.57" font-family="Times,serif" font-size="14.00">DynamicMoveData</text>
-</g>
-<!-- u86&#45;&gt;u87 -->
-<g id="edge130" class="edge"><title>u86&#45;&gt;u87</title>
-<path fill="none" stroke="black" d="M2269.71,-1758.13C2266.59,-1723.93 2259.56,-1646.96 2255.78,-1605.67"/>
-<polygon fill="black" stroke="black" points="2259.25,-1605.15 2254.86,-1595.51 2252.28,-1605.79 2259.25,-1605.15"/>
-</g>
-<!-- u87&#45;&gt;u29 -->
-<g id="edge131" class="edge"><title>u87&#45;&gt;u29</title>
-<path fill="none" stroke="black" d="M2233.11,-1559.63C2196.26,-1529.18 2115.62,-1462.38 2048.28,-1405.27 1940.07,-1313.5 1812.2,-1202.42 1760.13,-1157.07"/>
-<polygon fill="black" stroke="black" points="1762.28,-1154.3 1752.44,-1150.37 1757.68,-1159.58 1762.28,-1154.3"/>
-</g>
-<!-- u87&#45;&gt;u75 -->
-<g id="edge132" class="edge"><title>u87&#45;&gt;u75</title>
-<path fill="none" stroke="black" d="M2334.53,-1573.24C2630.71,-1561.42 3651.03,-1513.55 3956.28,-1405.27 3972.7,-1399.45 3989.08,-1389.19 4002.15,-1379.65"/>
-<polygon fill="black" stroke="black" points="4004.36,-1382.36 4010.23,-1373.53 4000.14,-1376.78 4004.36,-1382.36"/>
-</g>
-<!-- u89 -->
-<g id="node80" class="node"><title>u89</title>
-<ellipse fill="#bbff77" stroke="black" stroke-width="0" cx="2114.28" cy="-1356.27" rx="57.3905" ry="18"/>
-<text text-anchor="middle" x="2114.28" y="-1352.57" font-family="Times,serif" font-size="14.00">KillerMoves</text>
-</g>
-<!-- u87&#45;&gt;u89 -->
-<g id="edge133" class="edge"><title>u87&#45;&gt;u89</title>
-<path fill="none" stroke="black" d="M2242.37,-1559.09C2218,-1520.69 2159.04,-1427.79 2130.41,-1382.68"/>
-<polygon fill="black" stroke="black" points="2133.26,-1380.64 2124.95,-1374.08 2127.35,-1384.39 2133.26,-1380.64"/>
-</g>
-<!-- u90 -->
-<g id="node81" class="node"><title>u90</title>
-<ellipse fill="#bbff77" stroke="black" stroke-width="0" cx="2253.28" cy="-1356.27" rx="63.8893" ry="18"/>
-<text text-anchor="middle" x="2253.28" y="-1352.57" font-family="Times,serif" font-size="14.00">Transpositions</text>
-</g>
-<!-- u87&#45;&gt;u90 -->
-<g id="edge134" class="edge"><title>u87&#45;&gt;u90</title>
-<path fill="none" stroke="black" d="M2253.28,-1559.09C2253.28,-1521.19 2253.28,-1430.17 2253.28,-1384.45"/>
-<polygon fill="black" stroke="black" points="2256.78,-1384.38 2253.28,-1374.38 2249.78,-1384.38 2256.78,-1384.38"/>
-</g>
-<!-- u88 -->
-<g id="node79" class="node"><title>u88</title>
-<ellipse fill="#bbff77" stroke="black" stroke-width="0" cx="2120.28" cy="-1135.27" rx="67.6881" ry="18"/>
-<text text-anchor="middle" x="2120.28" y="-1131.57" font-family="Times,serif" font-size="14.00">EphemeralData</text>
-</g>
-<!-- u88&#45;&gt;u10 -->
-<g id="edge135" class="edge"><title>u88&#45;&gt;u10</title>
-<path fill="none" stroke="black" d="M2117.63,-1117.01C2110.88,-1078.35 2089.72,-983.693 2037.28,-926.272 1947.71,-828.186 1792.83,-775.54 1720.55,-755.255"/>
-<polygon fill="black" stroke="black" points="1721.07,-751.769 1710.5,-752.496 1719.22,-758.52 1721.07,-751.769"/>
-</g>
-<!-- u89&#45;&gt;u41 -->
-<g id="edge136" class="edge"><title>u89&#45;&gt;u41</title>
-<path fill="none" stroke="black" d="M2065.02,-1346.88C1944.58,-1325.27 1640.66,-1263.79 1581.28,-1184.27 1565.79,-1163.53 1575.51,-742.967 1583.28,-718.272 1618.3,-607.037 1632.98,-568.235 1726.28,-498.272 1906.38,-363.222 2019.96,-470.897 2211.28,-352.272 2221.29,-346.069 2230.53,-337.08 2238,-328.555"/>
-<polygon fill="black" stroke="black" points="2240.89,-330.556 2244.59,-320.629 2235.51,-326.081 2240.89,-330.556"/>
-</g>
-<!-- u89&#45;&gt;u88 -->
-<g id="edge137" class="edge"><title>u89&#45;&gt;u88</title>
-<path fill="none" stroke="black" d="M2114.75,-1338.09C2115.79,-1300.19 2118.28,-1209.17 2119.54,-1163.45"/>
-<polygon fill="black" stroke="black" points="2123.04,-1163.47 2119.81,-1153.38 2116.04,-1163.28 2123.04,-1163.47"/>
-</g>
-<!-- u90&#45;&gt;u41 -->
-<g id="edge138" class="edge"><title>u90&#45;&gt;u41</title>
-<path fill="none" stroke="black" d="M2215.58,-1341.7C2204.29,-1337.81 2191.84,-1333.7 2180.28,-1330.27 1925.86,-1254.77 1764.39,-1393.62 1601.28,-1184.27 1569.46,-1143.43 1575.77,-763.329 1601.28,-718.272 1757.06,-443.144 1965.25,-550.838 2211.28,-352.272 2220.17,-345.096 2228.99,-336.199 2236.42,-328.022"/>
-<polygon fill="black" stroke="black" points="2239.09,-330.292 2243.09,-320.483 2233.85,-325.654 2239.09,-330.292"/>
-</g>
-<!-- u90&#45;&gt;u88 -->
-<g id="edge139" class="edge"><title>u90&#45;&gt;u88</title>
-<path fill="none" stroke="black" d="M2243.07,-1338.45C2219.9,-1300.31 2163.28,-1207.08 2135.78,-1161.79"/>
-<polygon fill="black" stroke="black" points="2138.71,-1159.88 2130.53,-1153.15 2132.73,-1163.51 2138.71,-1159.88"/>
-</g>
-<!-- u91 -->
-<g id="node82" class="node"><title>u91</title>
-<ellipse fill="#bbff77" stroke="black" stroke-width="0" cx="2287.28" cy="-1135.27" rx="81.7856" ry="18"/>
-<text text-anchor="middle" x="2287.28" y="-1131.57" font-family="Times,serif" font-size="14.00">TranspositionValue</text>
-</g>
-<!-- u90&#45;&gt;u91 -->
-<g id="edge140" class="edge"><title>u90&#45;&gt;u91</title>
-<path fill="none" stroke="black" d="M2255.95,-1338.09C2261.83,-1300.19 2275.96,-1209.17 2283.06,-1163.45"/>
-<polygon fill="black" stroke="black" points="2286.55,-1163.8 2284.63,-1153.38 2279.63,-1162.72 2286.55,-1163.8"/>
-</g>
-<!-- u91&#45;&gt;u10 -->
-<g id="edge141" class="edge"><title>u91&#45;&gt;u10</title>
-<path fill="none" stroke="black" d="M2271.73,-1117.42C2236.19,-1079.59 2145.13,-986.539 2055.28,-926.272 1939.66,-848.718 1785.79,-785.222 1717.07,-758.669"/>
-<polygon fill="black" stroke="black" points="1718.15,-755.336 1707.56,-755.022 1715.64,-761.872 1718.15,-755.336"/>
-</g>
-<!-- u99 -->
-<g id="node83" class="node"><title>u99</title>
-<ellipse fill="#bbff77" stroke="black" stroke-width="0" cx="2333.28" cy="-2217.27" rx="35.9954" ry="18"/>
-<text text-anchor="middle" x="2333.28" y="-2213.57" font-family="Times,serif" font-size="14.00">Search</text>
-</g>
-<!-- u100 -->
-<g id="node84" class="node"><title>u100</title>
-<ellipse fill="#bbff77" stroke="black" stroke-width="0" cx="2307.28" cy="-1997.27" rx="49.2915" ry="18"/>
-<text text-anchor="middle" x="2307.28" y="-1993.57" font-family="Times,serif" font-size="14.00">AlphaBeta</text>
-</g>
-<!-- u99&#45;&gt;u100 -->
-<g id="edge142" class="edge"><title>u99&#45;&gt;u100</title>
-<path fill="none" stroke="black" d="M2331.24,-2199.17C2326.74,-2161.44 2315.94,-2070.84 2310.51,-2025.33"/>
-<polygon fill="black" stroke="black" points="2313.97,-2024.81 2309.31,-2015.3 2307.02,-2025.64 2313.97,-2024.81"/>
-</g>
-<!-- u100&#45;&gt;u86 -->
-<g id="edge143" class="edge"><title>u100&#45;&gt;u86</title>
-<path fill="none" stroke="black" d="M2304.46,-1979.09C2298.23,-1941.19 2283.26,-1850.17 2275.75,-1804.45"/>
-<polygon fill="black" stroke="black" points="2279.17,-1803.68 2274.09,-1794.38 2272.26,-1804.81 2279.17,-1803.68"/>
-</g>
-<!-- u43 -->
-<g id="node85" class="node"><title>u43</title>
-<ellipse fill="#3333ff" stroke="black" stroke-width="0" cx="796.281" cy="-1776.27" rx="33.2948" ry="18"/>
-<text text-anchor="middle" x="796.281" y="-1772.57" font-family="Times,serif" font-size="14.00">Board</text>
-</g>
-<!-- u47 -->
-<g id="node87" class="node"><title>u47</title>
-<ellipse fill="#3333ff" stroke="black" stroke-width="0" cx="870.281" cy="-1577.27" rx="150.273" ry="18"/>
-<text text-anchor="middle" x="870.281" y="-1573.57" font-family="Times,serif" font-size="14.00">CoordinatesByRankByLogicalColour</text>
-</g>
-<!-- u43&#45;&gt;u47 -->
-<g id="edge144" class="edge"><title>u43&#45;&gt;u47</title>
-<path fill="none" stroke="black" d="M802.59,-1758.48C815.473,-1724.18 844.891,-1645.86 860.358,-1604.69"/>
-<polygon fill="black" stroke="black" points="863.642,-1605.9 863.882,-1595.31 857.089,-1603.44 863.642,-1605.9"/>
-</g>
-<!-- u46 -->
-<g id="node86" class="node"><title>u46</title>
-<ellipse fill="#3333ff" stroke="black" stroke-width="0" cx="1256.28" cy="-1135.27" rx="37.0935" ry="18"/>
-<text text-anchor="middle" x="1256.28" y="-1131.57" font-family="Times,serif" font-size="14.00">Censor</text>
-</g>
-<!-- u46&#45;&gt;u27 -->
-<g id="edge145" class="edge"><title>u46&#45;&gt;u27</title>
-<path fill="none" stroke="black" d="M1279.91,-1121.26C1288.36,-1117 1298.08,-1112.52 1307.28,-1109.27 1585.75,-1010.95 1673.87,-1051.82 1955.28,-962.272 1957.57,-961.543 1959.92,-960.739 1962.26,-959.889"/>
-<polygon fill="black" stroke="black" points="1963.74,-963.07 1971.82,-956.211 1961.23,-956.537 1963.74,-963.07"/>
-</g>
-<!-- u48 -->
-<g id="node88" class="node"><title>u48</title>
-<ellipse fill="#3333ff" stroke="black" stroke-width="0" cx="1192.28" cy="-1356.27" rx="113.18" ry="18"/>
-<text text-anchor="middle" x="1192.28" y="-1352.57" font-family="Times,serif" font-size="14.00">MaybePieceByCoordinates</text>
-</g>
-<!-- u47&#45;&gt;u48 -->
-<g id="edge146" class="edge"><title>u47&#45;&gt;u48</title>
-<path fill="none" stroke="black" d="M895.013,-1559.45C952.398,-1520.42 1094.62,-1423.69 1159.31,-1379.7"/>
-<polygon fill="black" stroke="black" points="1161.6,-1382.37 1167.9,-1373.85 1157.67,-1376.58 1161.6,-1382.37"/>
-</g>
-<!-- u48&#45;&gt;u49 -->
-<g id="edge147" class="edge"><title>u48&#45;&gt;u49</title>
-<path fill="none" stroke="black" d="M1206.55,-1338.04C1230.24,-1308.5 1277.52,-1245.46 1302.28,-1184.27 1315.03,-1152.76 1292.9,-1132.96 1317.28,-1109.27 1404.26,-1024.77 2273.25,-943.564 2393.28,-926.272 2891.62,-854.485 3044.21,-962.835 3518.28,-793.272 3534.88,-787.336 3551.57,-777.165 3564.98,-767.71"/>
-<polygon fill="black" stroke="black" points="3567.27,-770.373 3573.28,-761.651 3563.14,-764.718 3567.27,-770.373"/>
-</g>
-<!-- u48&#45;&gt;u10 -->
-<g id="edge148" class="edge"><title>u48&#45;&gt;u10</title>
-<path fill="none" stroke="black" d="M1189.04,-1338.16C1181.99,-1296.21 1169.04,-1186.04 1210.28,-1109.27 1262.63,-1011.82 1556.84,-822.783 1651.76,-763.506"/>
-<polygon fill="black" stroke="black" points="1653.67,-766.44 1660.31,-758.182 1649.97,-760.498 1653.67,-766.44"/>
-</g>
-<!-- u48&#45;&gt;u32 -->
-<g id="edge149" class="edge"><title>u48&#45;&gt;u32</title>
-<path fill="none" stroke="black" d="M1231.42,-1339.31C1300.95,-1310.58 1450.07,-1247.28 1571.28,-1184.27 1588.34,-1175.41 1606.81,-1164.56 1621.81,-1155.42"/>
-<polygon fill="black" stroke="black" points="1623.97,-1158.2 1630.65,-1149.98 1620.3,-1152.24 1623.97,-1158.2"/>
-</g>
-<!-- u48&#45;&gt;u44 -->
-<g id="edge150" class="edge"><title>u48&#45;&gt;u44</title>
-<path fill="none" stroke="black" d="M1244.31,-1340.22C1381.16,-1300.63 1750.34,-1193.82 1892.45,-1152.71"/>
-<polygon fill="black" stroke="black" points="1893.65,-1156.01 1902.29,-1149.87 1891.71,-1149.28 1893.65,-1156.01"/>
-</g>
-<!-- u48&#45;&gt;u41 -->
-<g id="edge151" class="edge"><title>u48&#45;&gt;u41</title>
-<path fill="none" stroke="black" d="M1107.78,-1344.28C926.032,-1315.4 514.281,-1219.7 514.281,-945.272 514.281,-945.272 514.281,-945.272 514.281,-743.272 514.281,-436.622 862.198,-574.275 1159.28,-498.272 1616.59,-381.28 1792.1,-569.317 2211.28,-352.272 2222,-346.723 2231.53,-337.578 2239.04,-328.751"/>
-<polygon fill="black" stroke="black" points="2241.84,-330.849 2245.33,-320.846 2236.37,-326.488 2241.84,-330.849"/>
-</g>
-<!-- u48&#45;&gt;u46 -->
-<g id="edge152" class="edge"><title>u48&#45;&gt;u46</title>
-<path fill="none" stroke="black" d="M1197.3,-1338.09C1208.4,-1300.11 1235.09,-1208.79 1248.42,-1163.16"/>
-<polygon fill="black" stroke="black" points="1251.84,-1163.96 1251.28,-1153.38 1245.12,-1161.99 1251.84,-1163.96"/>
-</g>
-<!-- u50 -->
-<g id="node89" class="node"><title>u50</title>
-<ellipse fill="#3333ff" stroke="black" stroke-width="0" cx="689.281" cy="-1997.27" rx="137.576" ry="18"/>
-<text text-anchor="middle" x="689.281" y="-1993.57" font-family="Times,serif" font-size="14.00">CastleableRooksByLogicalColour</text>
-</g>
-<!-- u50&#45;&gt;u29 -->
-<g id="edge153" class="edge"><title>u50&#45;&gt;u29</title>
-<path fill="none" stroke="black" d="M771.419,-1982.82C984.797,-1947.53 1542.16,-1853.15 1571.28,-1825.27 1765.87,-1638.97 1748.27,-1267.13 1739.13,-1163.59"/>
-<polygon fill="black" stroke="black" points="1742.59,-1162.99 1738.17,-1153.36 1735.62,-1163.64 1742.59,-1162.99"/>
-</g>
-<!-- u50&#45;&gt;u43 -->
-<g id="edge154" class="edge"><title>u50&#45;&gt;u43</title>
-<path fill="none" stroke="black" d="M697.677,-1979.09C716.403,-1940.76 761.671,-1848.11 783.75,-1802.92"/>
-<polygon fill="black" stroke="black" points="786.971,-1804.3 788.216,-1793.78 780.682,-1801.23 786.971,-1804.3"/>
-</g>
-<!-- u51 -->
-<g id="node90" class="node"><title>u51</title>
-<ellipse fill="#3333ff" stroke="black" stroke-width="0" cx="648.281" cy="-1776.27" rx="96.6831" ry="18"/>
-<text text-anchor="middle" x="648.281" y="-1772.57" font-family="Times,serif" font-size="14.00">TurnsByLogicalColour</text>
-</g>
-<!-- u50&#45;&gt;u51 -->
-<g id="edge155" class="edge"><title>u50&#45;&gt;u51</title>
-<path fill="none" stroke="black" d="M686.063,-1979.09C678.968,-1941.19 661.928,-1850.17 653.369,-1804.45"/>
-<polygon fill="black" stroke="black" points="656.763,-1803.56 651.483,-1794.38 649.883,-1804.85 656.763,-1803.56"/>
-</g>
-<!-- u51&#45;&gt;u10 -->
-<g id="edge156" class="edge"><title>u51&#45;&gt;u10</title>
-<path fill="none" stroke="black" d="M605.086,-1760.12C500.645,-1720.84 235.522,-1604.62 133.281,-1405.27 103.262,-1346.74 89.912,-1158.73 133.281,-1109.27 463.128,-733.128 835.626,-1243.65 1249.28,-962.272 1264.41,-951.978 1255.75,-938.598 1269.28,-926.272 1381.76,-823.809 1561.55,-772.491 1641.14,-753.801"/>
-<polygon fill="black" stroke="black" points="1642.27,-757.131 1651.23,-751.479 1640.7,-750.309 1642.27,-757.131"/>
-</g>
-<!-- u51&#45;&gt;u41 -->
-<g id="edge157" class="edge"><title>u51&#45;&gt;u41</title>
-<path fill="none" stroke="black" d="M579.706,-1763.47C494.671,-1745.94 348.912,-1706.12 250.281,-1626.27 4.41424,-1427.22 43.2806,-1261.61 43.2806,-945.272 43.2806,-945.272 43.2806,-945.272 43.2806,-743.272 43.2806,-475.266 334.888,-565.673 594.281,-498.272 1292.68,-316.8 1562.74,-668.636 2211.28,-352.272 2222.28,-346.904 2231.96,-337.617 2239.5,-328.633"/>
-<polygon fill="black" stroke="black" points="2242.38,-330.622 2245.79,-320.589 2236.87,-326.309 2242.38,-330.622"/>
-</g>
-<!-- u51&#45;&gt;u42 -->
-<g id="edge158" class="edge"><title>u51&#45;&gt;u42</title>
-<path fill="none" stroke="black" d="M571.336,-1765.28C431.925,-1745.6 145.725,-1697.46 78.2806,-1626.27 -5.64588,-1537.69 23.2806,-1479.3 23.2806,-1357.27 23.2806,-1357.27 23.2806,-1357.27 23.2806,-743.272 23.2806,-634.18 -37.7179,-576.538 38.2806,-498.272 190.82,-341.183 1865.63,-309.005 2137.96,-304.799"/>
-<polygon fill="black" stroke="black" points="2138.17,-308.296 2148.11,-304.645 2138.06,-301.297 2138.17,-308.296"/>
-</g>
-<!-- u52 -->
-<g id="node91" class="node"><title>u52</title>
-<ellipse fill="#3333ff" stroke="black" stroke-width="0" cx="1192.28" cy="-1577.27" rx="79.8859" ry="18"/>
-<text text-anchor="middle" x="1192.28" y="-1573.57" font-family="Times,serif" font-size="14.00">EnPassantAbscissa</text>
-</g>
-<!-- u52&#45;&gt;u29 -->
-<g id="edge159" class="edge"><title>u52&#45;&gt;u29</title>
-<path fill="none" stroke="black" d="M1243.94,-1563.53C1322.32,-1542.05 1472.57,-1492.24 1571.28,-1405.27 1651.44,-1334.65 1705.22,-1215.54 1726.29,-1162.78"/>
-<polygon fill="black" stroke="black" points="1729.68,-1163.74 1730.07,-1153.15 1723.16,-1161.18 1729.68,-1163.74"/>
-</g>
-<!-- u52&#45;&gt;u48 -->
-<g id="edge160" class="edge"><title>u52&#45;&gt;u48</title>
-<path fill="none" stroke="black" d="M1192.28,-1559.09C1192.28,-1521.19 1192.28,-1430.17 1192.28,-1384.45"/>
-<polygon fill="black" stroke="black" points="1195.78,-1384.38 1192.28,-1374.38 1188.78,-1384.38 1195.78,-1384.38"/>
-</g>
-<!-- u53&#45;&gt;u43 -->
-<g id="edge161" class="edge"><title>u53&#45;&gt;u43</title>
-<path fill="none" stroke="black" d="M1189.45,-1980.35C1111.62,-1940.15 907.798,-1834.87 828.5,-1793.91"/>
-<polygon fill="black" stroke="black" points="829.954,-1790.73 819.463,-1789.25 826.742,-1796.95 829.954,-1790.73"/>
-</g>
-<!-- u54&#45;&gt;u50 -->
-<g id="edge162" class="edge"><title>u54&#45;&gt;u50</title>
-<path fill="none" stroke="black" d="M834.48,-2199.89C807.337,-2162.2 740.305,-2069.12 707.693,-2023.84"/>
-<polygon fill="black" stroke="black" points="710.336,-2021.52 701.651,-2015.45 704.655,-2025.61 710.336,-2021.52"/>
-</g>
-<!-- u54&#45;&gt;u52 -->
-<g id="edge163" class="edge"><title>u54&#45;&gt;u52</title>
-<path fill="none" stroke="black" d="M843.281,-2199.16C836.857,-2158.11 824.78,-2051.52 856.281,-1971.27 922.474,-1802.65 1093.09,-1655.67 1162.37,-1600.99"/>
-<polygon fill="black" stroke="black" points="1164.59,-1603.7 1170.31,-1594.78 1160.27,-1598.19 1164.59,-1603.7"/>
-</g>
-<!-- u63 -->
-<g id="node94" class="node"><title>u63</title>
-<ellipse fill="#3333ff" stroke="black" stroke-width="0" cx="1260.28" cy="-2217.27" rx="45.4919" ry="18"/>
-<text text-anchor="middle" x="1260.28" y="-2213.57" font-family="Times,serif" font-size="14.00">PlayState</text>
-</g>
-<!-- u63&#45;&gt;u85 -->
-<g id="edge164" class="edge"><title>u63&#45;&gt;u85</title>
-<path fill="none" stroke="black" d="M1279.16,-2200.62C1362.26,-2132.8 1706.12,-1863 2040.28,-1758.27 2773.15,-1528.59 3001.49,-1723.93 3763.28,-1626.27 3841.39,-1616.26 3931.4,-1598.75 3984.14,-1587.87"/>
-<polygon fill="black" stroke="black" points="3985.1,-1591.25 3994.18,-1585.79 3983.67,-1584.39 3985.1,-1591.25"/>
-</g>
-<!-- u63&#45;&gt;u86 -->
-<g id="edge165" class="edge"><title>u63&#45;&gt;u86</title>
-<path fill="none" stroke="black" d="M1301.83,-2209.63C1403.4,-2192.38 1670.93,-2140.78 1875.28,-2046.27 2026.22,-1976.47 2183.12,-1851.45 2244.46,-1800.17"/>
-<polygon fill="black" stroke="black" points="2247.07,-1802.55 2252.47,-1793.44 2242.57,-1797.19 2247.07,-1802.55"/>
-</g>
-<!-- u92 -->
-<g id="node95" class="node"><title>u92</title>
-<ellipse fill="#3333ff" stroke="black" stroke-width="0" cx="991.281" cy="-1997.27" rx="126.178" ry="18"/>
-<text text-anchor="middle" x="991.281" y="-1993.57" font-family="Times,serif" font-size="14.00">ApplicationTerminationReason</text>
-</g>
-<!-- u63&#45;&gt;u92 -->
-<g id="edge166" class="edge"><title>u63&#45;&gt;u92</title>
-<path fill="none" stroke="black" d="M1240.93,-2200.59C1194.3,-2162.8 1075.46,-2066.49 1020.27,-2021.76"/>
-<polygon fill="black" stroke="black" points="1022.26,-2018.87 1012.29,-2015.3 1017.85,-2024.31 1022.26,-2018.87"/>
-</g>
-<!-- u3&#45;&gt;u4 -->
-<g id="edge167" class="edge"><title>u3&#45;&gt;u4</title>
-<path fill="none" stroke="black" d="M3714.99,-524.272C3606.05,-524.272 3497.12,-524.272 3388.18,-524.272"/>
-<polygon fill="black" stroke="black" points="3387.98,-520.773 3377.98,-524.272 3387.98,-527.773 3387.98,-520.773"/>
-</g>
-<!-- u3&#45;&gt;u5 -->
-<g id="edge168" class="edge"><title>u3&#45;&gt;u5</title>
-<path fill="none" stroke="black" d="M3747.22,-506.088C3749.3,-468.188 3754.29,-377.17 3756.79,-331.449"/>
-<polygon fill="black" stroke="black" points="3760.29,-331.554 3757.34,-321.377 3753.3,-331.171 3760.29,-331.554"/>
-</g>
-<!-- u96 -->
-<g id="node98" class="node"><title>u96</title>
-<ellipse fill="#77bbff" stroke="black" stroke-width="0" cx="3823.28" cy="-2417.27" rx="34.394" ry="18"/>
-<text text-anchor="middle" x="3823.28" y="-2413.57" font-family="Times,serif" font-size="14.00">CECP</text>
-</g>
-<!-- u96&#45;&gt;u97 -->
-<g id="edge169" class="edge"><title>u96&#45;&gt;u97</title>
-<path fill="none" stroke="black" d="M3788.88,-2415.98C3458.95,-2412.96 859.811,-2385.52 539.281,-2266.27 525.19,-2261.03 511.796,-2251.24 501.167,-2241.86"/>
-<polygon fill="black" stroke="black" points="503.324,-2239.09 493.613,-2234.86 498.563,-2244.22 503.324,-2239.09"/>
-</g>
-<!-- u96&#45;&gt;u95 -->
-<g id="edge170" class="edge"><title>u96&#45;&gt;u95</title>
-<path fill="none" stroke="black" d="M3807.46,-2401.06C3771.82,-2366.81 3685.03,-2283.39 3642.13,-2242.15"/>
-<polygon fill="black" stroke="black" points="3644.53,-2239.61 3634.89,-2235.2 3639.68,-2244.65 3644.53,-2239.61"/>
-</g>
-<!-- u96&#45;&gt;u98 -->
-<g id="edge171" class="edge"><title>u96&#45;&gt;u98</title>
-<path fill="none" stroke="black" d="M3849.79,-2405.77C4000.47,-2345.91 4742.28,-2048.66 4742.28,-1998.27 4742.28,-1998.27 4742.28,-1998.27 4742.28,-743.272 4742.28,-583.432 4681.38,-398.111 4657.1,-330.588"/>
-<polygon fill="black" stroke="black" points="4660.37,-329.342 4653.66,-321.14 4653.79,-331.735 4660.37,-329.342"/>
-</g>
-<!-- u96&#45;&gt;u99 -->
-<g id="edge172" class="edge"><title>u96&#45;&gt;u99</title>
-<path fill="none" stroke="black" d="M3790.07,-2411.86C3595.11,-2385.95 2600.29,-2253.75 2377.56,-2224.16"/>
-<polygon fill="black" stroke="black" points="2377.92,-2220.67 2367.54,-2222.83 2377,-2227.61 2377.92,-2220.67"/>
-</g>
-<!-- u96&#45;&gt;u63 -->
-<g id="edge173" class="edge"><title>u96&#45;&gt;u63</title>
-<path fill="none" stroke="black" d="M3789.46,-2413.66C3515.26,-2392.48 1657.4,-2248.95 1314.6,-2222.47"/>
-<polygon fill="black" stroke="black" points="1314.68,-2218.96 1304.44,-2221.68 1314.14,-2225.94 1314.68,-2218.96"/>
-</g>
-<!-- u101 -->
-<g id="node99" class="node"><title>u101</title>
-<ellipse fill="#77bbff" stroke="black" stroke-width="0" cx="3902.28" cy="-2217.27" rx="50.0912" ry="18"/>
-<text text-anchor="middle" x="3902.28" y="-2213.57" font-family="Times,serif" font-size="14.00">Command</text>
-</g>
-<!-- u96&#45;&gt;u101 -->
-<g id="edge174" class="edge"><title>u96&#45;&gt;u101</title>
-<path fill="none" stroke="black" d="M3830.02,-2399.39C3843.8,-2364.83 3875.33,-2285.81 3891.81,-2244.51"/>
-<polygon fill="black" stroke="black" points="3895.11,-2245.7 3895.56,-2235.11 3888.61,-2243.1 3895.11,-2245.7"/>
-</g>
-<!-- u101&#45;&gt;u85 -->
-<g id="edge175" class="edge"><title>u101&#45;&gt;u85</title>
-<path fill="none" stroke="black" d="M3918.87,-2199.81C3946.17,-2171.44 3999.59,-2110.19 4020.28,-2046.27 4072.05,-1886.32 4046.02,-1679.26 4034.13,-1605.68"/>
-<polygon fill="black" stroke="black" points="4037.52,-1604.72 4032.42,-1595.43 4030.61,-1605.87 4037.52,-1604.72"/>
-</g>
-<!-- u102 -->
-<g id="node100" class="node"><title>u102</title>
-<ellipse fill="#77bbff" stroke="black" stroke-width="0" cx="3843.28" cy="-1997.27" rx="53.8905" ry="18"/>
-<text text-anchor="middle" x="3843.28" y="-1993.57" font-family="Times,serif" font-size="14.00">PrintObject</text>
-</g>
-<!-- u101&#45;&gt;u102 -->
-<g id="edge176" class="edge"><title>u101&#45;&gt;u102</title>
-<path fill="none" stroke="black" d="M3897.65,-2199.17C3887.42,-2161.36 3862.82,-2070.45 3850.52,-2025.04"/>
-<polygon fill="black" stroke="black" points="3853.88,-2024.04 3847.89,-2015.3 3847.12,-2025.87 3853.88,-2024.04"/>
-</g>
-<!-- u103 -->
-<g id="node101" class="node"><title>u103</title>
-<ellipse fill="#77bbff" stroke="black" stroke-width="0" cx="3963.28" cy="-1997.27" rx="48.1917" ry="18"/>
-<text text-anchor="middle" x="3963.28" y="-1993.57" font-family="Times,serif" font-size="14.00">SetObject</text>
-</g>
-<!-- u101&#45;&gt;u103 -->
-<g id="edge177" class="edge"><title>u101&#45;&gt;u103</title>
-<path fill="none" stroke="black" d="M3907.07,-2199.17C3917.65,-2161.36 3943.08,-2070.45 3955.79,-2025.04"/>
-<polygon fill="black" stroke="black" points="3959.19,-2025.87 3958.52,-2015.3 3952.45,-2023.99 3959.19,-2025.87"/>
-</g>
-<!-- u103&#45;&gt;u75 -->
-<g id="edge178" class="edge"><title>u103&#45;&gt;u75</title>
-<path fill="none" stroke="black" d="M3962.66,-1979.18C3960.75,-1919.73 3956.52,-1716.57 3980.28,-1551.27 3989.02,-1490.46 4009.08,-1421.07 4020.64,-1383.99"/>
-<polygon fill="black" stroke="black" points="4023.98,-1385.01 4023.66,-1374.42 4017.31,-1382.9 4023.98,-1385.01"/>
-</g>
-<!-- u104 -->
-<g id="node102" class="node"><title>u104</title>
-<ellipse fill="#77bbff" stroke="black" stroke-width="0" cx="3902.28" cy="-2417.27" rx="27" ry="18"/>
-<text text-anchor="middle" x="3902.28" y="-2413.57" font-family="Times,serif" font-size="14.00">Raw</text>
-</g>
-<!-- u104&#45;&gt;u97 -->
-<g id="edge179" class="edge"><title>u104&#45;&gt;u97</title>
-<path fill="none" stroke="black" d="M3882.25,-2405.08C3877.18,-2402.74 3871.65,-2400.59 3866.28,-2399.27 3147.66,-2222.98 1233.5,-2522.3 539.281,-2266.27 525.175,-2261.07 511.779,-2251.29 501.153,-2241.9"/>
-<polygon fill="black" stroke="black" points="503.31,-2239.13 493.601,-2234.89 498.545,-2244.26 503.31,-2239.13"/>
-</g>
-<!-- u104&#45;&gt;u95 -->
-<g id="edge180" class="edge"><title>u104&#45;&gt;u95</title>
-<path fill="none" stroke="black" d="M3884.02,-2403.59C3836.83,-2370.8 3710.32,-2282.91 3650.06,-2241.05"/>
-<polygon fill="black" stroke="black" points="3651.88,-2238.05 3641.67,-2235.22 3647.88,-2243.8 3651.88,-2238.05"/>
-</g>
-<!-- u104&#45;&gt;u98 -->
-<g id="edge181" class="edge"><title>u104&#45;&gt;u98</title>
-<path fill="none" stroke="black" d="M3929.33,-2415.78C4061.27,-2412.74 4635.44,-2392.38 4747.28,-2266.27 4786.86,-2221.65 4762.28,-2057.92 4762.28,-1998.27 4762.28,-1998.27 4762.28,-1998.27 4762.28,-743.272 4762.28,-634.18 4776.23,-603.455 4747.28,-498.272 4729.38,-433.211 4687.99,-364.788 4664.46,-329.165"/>
-<polygon fill="black" stroke="black" points="4667.08,-326.788 4658.6,-320.426 4661.26,-330.683 4667.08,-326.788"/>
-</g>
-<!-- u104&#45;&gt;u99 -->
-<g id="edge182" class="edge"><title>u104&#45;&gt;u99</title>
-<path fill="none" stroke="black" d="M3881.79,-2405.2C3876.83,-2402.92 3871.46,-2400.76 3866.28,-2399.27 3296.79,-2235.91 2567.67,-2219.72 2379.3,-2218.34"/>
-<polygon fill="black" stroke="black" points="2379.23,-2214.84 2369.21,-2218.27 2379.18,-2221.84 2379.23,-2214.84"/>
-</g>
-<!-- u104&#45;&gt;u63 -->
-<g id="edge183" class="edge"><title>u104&#45;&gt;u63</title>
-<path fill="none" stroke="black" d="M3882.22,-2405.2C3877.15,-2402.85 3871.63,-2400.67 3866.28,-2399.27 3802.2,-2382.55 1684.64,-2245.6 1315.04,-2221.79"/>
-<polygon fill="black" stroke="black" points="1315.07,-2218.29 1304.86,-2221.14 1314.62,-2225.27 1315.07,-2218.29"/>
-</g>
-<!-- u104&#45;&gt;u3 -->
-<g id="edge184" class="edge"><title>u104&#45;&gt;u3</title>
-<path fill="none" stroke="black" d="M3894.28,-2399.72C3860.21,-2328.19 3731.25,-2045.93 3780.28,-1971.27 3992.18,-1648.65 4351.75,-1939.51 4577.28,-1626.27 4695.18,-1462.52 4709.74,-870.483 4577.28,-718.272 4349.82,-456.898 4128.84,-711.888 3811.28,-573.272 3796.28,-566.724 3781.45,-556.174 3769.75,-546.63"/>
-<polygon fill="black" stroke="black" points="3771.73,-543.715 3761.83,-539.93 3767.21,-549.06 3771.73,-543.715"/>
-</g>
-<!-- u104&#45;&gt;u101 -->
-<g id="edge185" class="edge"><title>u104&#45;&gt;u101</title>
-<path fill="none" stroke="black" d="M3902.28,-2399.05C3902.28,-2364.59 3902.28,-2286.92 3902.28,-2245.5"/>
-<polygon fill="black" stroke="black" points="3905.78,-2245.32 3902.28,-2235.32 3898.78,-2245.32 3905.78,-2245.32"/>
-</g>
-<!-- u94 -->
-<g id="node104" class="node"><title>u94</title>
-<ellipse fill="#ffffbb" stroke="black" stroke-width="0" cx="3902.28" cy="-2616.27" rx="27.0966" ry="18"/>
-<text text-anchor="middle" x="3902.28" y="-2612.57" font-family="Times,serif" font-size="14.00">Play</text>
-</g>
-<!-- u94&#45;&gt;u96 -->
-<g id="edge5" class="edge"><title>u94&#45;&gt;u96</title>
-<path fill="none" stroke="black" d="M3895.55,-2598.48C3881.76,-2564.09 3850.23,-2485.47 3833.75,-2444.38"/>
-<polygon fill="black" stroke="black" points="3836.97,-2443 3830,-2435.03 3830.47,-2445.61 3836.97,-2443"/>
-</g>
-<!-- u94&#45;&gt;u104 -->
-<g id="edge6" class="edge"><title>u94&#45;&gt;u104</title>
-<path fill="none" stroke="black" d="M3902.28,-2598.13C3902.28,-2563.93 3902.28,-2486.96 3902.28,-2445.67"/>
-<polygon fill="black" stroke="black" points="3905.78,-2445.51 3902.28,-2435.51 3898.78,-2445.51 3905.78,-2445.51"/>
-</g>
-<!-- u0 -->
-<g id="node105" class="node"><title>u0</title>
-<ellipse fill="#bbffbb" stroke="black" stroke-width="0" cx="4346.28" cy="-2816.27" rx="29.795" ry="18"/>
-<text text-anchor="middle" x="4346.28" y="-2812.57" font-family="Times,serif" font-size="14.00">Main</text>
-</g>
-<!-- u0&#45;&gt;u2 -->
-<g id="edge2" class="edge"><title>u0&#45;&gt;u2</title>
-<path fill="none" stroke="black" d="M4316.2,-2815.24C4118.05,-2814.61 2980.06,-2804.81 2067.28,-2665.27 1322.76,-2551.45 1113.85,-2559.92 420.281,-2266.27 404.248,-2259.48 387.756,-2249.5 374.249,-2240.39"/>
-<polygon fill="black" stroke="black" points="376.055,-2237.38 365.84,-2234.57 372.073,-2243.14 376.055,-2237.38"/>
-</g>
-<!-- u0&#45;&gt;u1 -->
-<g id="edge3" class="edge"><title>u0&#45;&gt;u1</title>
-<path fill="none" stroke="black" d="M4376.23,-2815.78C4459.67,-2815.41 4695.8,-2801.8 4805.28,-2665.27 4874.28,-2579.23 4829.28,-2528.57 4829.28,-2418.27 4829.28,-2418.27 4829.28,-2418.27 4829.28,-743.272 4829.28,-582.724 4762.61,-397.828 4736.03,-330.504"/>
-<polygon fill="black" stroke="black" points="4739.22,-329.073 4732.27,-321.085 4732.72,-331.67 4739.22,-329.073"/>
-</g>
-<!-- u0&#45;&gt;u93 -->
-<g id="edge4" class="edge"><title>u0&#45;&gt;u93</title>
-<path fill="none" stroke="black" d="M4376.27,-2815.19C4456.44,-2813.18 4676.38,-2795.49 4775.28,-2665.27 4841.82,-2577.67 4791.28,-2528.28 4791.28,-2418.27 4791.28,-2418.27 4791.28,-2418.27 4791.28,-1996.27 4791.28,-1810.64 4590.17,-1655.91 4507.82,-1600.32"/>
-<polygon fill="black" stroke="black" points="4509.57,-1597.28 4499.3,-1594.64 4505.68,-1603.1 4509.57,-1597.28"/>
-</g>
-<!-- u0&#45;&gt;u94 -->
-<g id="edge1" class="edge"><title>u0&#45;&gt;u94</title>
-<path fill="none" stroke="black" d="M4323.03,-2804.91C4248.89,-2771.84 4017.94,-2668.85 3933.56,-2631.22"/>
-<polygon fill="black" stroke="black" points="3934.8,-2627.94 3924.24,-2627.07 3931.95,-2634.34 3934.8,-2627.94"/>
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: G Pages: 1 -->
+<svg width="2880pt" height="1723pt"
+ viewBox="0.00 0.00 2880.00 1722.91" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(.7167 .7167) rotate(0) translate(4 2399.8)">
+<title>G</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-2399.8 4014.1679,-2399.8 4014.1679,4 -4,4"/>
+<g id="clust1" class="cluster">
+<title>cluster_0</title>
+<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="16.1679,-17.7961 16.1679,-2297.9214 3952.1679,-2297.9214 3952.1679,-17.7961 16.1679,-17.7961"/>
+<text text-anchor="middle" x="1984.1679" y="-2282.7214" font-family="Times,serif" font-size="14.00" fill="#000000">BishBosh</text>
+</g>
+<g id="clust2" class="cluster">
+<title>cluster_1</title>
+<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="1561.1679,-380.3916 1561.1679,-731.8646 2648.1679,-731.8646 2648.1679,-380.3916 1561.1679,-380.3916"/>
+<text text-anchor="middle" x="2104.6679" y="-716.6646" font-family="Times,serif" font-size="14.00" fill="#000000">Attribute</text>
+</g>
+<g id="clust3" class="cluster">
+<title>cluster_2</title>
+<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="1399.1679,-380.3916 1399.1679,-1058.868 1521.1679,-1058.868 1521.1679,-380.3916 1399.1679,-380.3916"/>
+<text text-anchor="middle" x="1460.1679" y="-1043.668" font-family="Times,serif" font-size="14.00" fill="#000000">Cartesian</text>
+</g>
+<g id="clust4" class="cluster">
+<title>cluster_3</title>
+<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="2768.1679,-565.0262 2768.1679,-1058.868 3180.1679,-1058.868 3180.1679,-565.0262 2768.1679,-565.0262"/>
+<text text-anchor="middle" x="2974.1679" y="-1043.668" font-family="Times,serif" font-size="14.00" fill="#000000">Component</text>
+</g>
+<g id="clust5" class="cluster">
+<title>cluster_4</title>
+<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="36.1679,-1797.4061 36.1679,-1964.2446 146.1679,-1964.2446 146.1679,-1797.4061 36.1679,-1797.4061"/>
+<text text-anchor="middle" x="91.1679" y="-1949.0446" font-family="Times,serif" font-size="14.00" fill="#000000">Concurrent</text>
+</g>
+<g id="clust6" class="cluster">
+<title>cluster_5</title>
+<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="166.1679,-1076.6641 166.1679,-1964.2446 481.1679,-1964.2446 481.1679,-1076.6641 166.1679,-1076.6641"/>
+<text text-anchor="middle" x="323.6679" y="-1949.0446" font-family="Times,serif" font-size="14.00" fill="#000000">ContextualNotation</text>
+</g>
+<g id="clust7" class="cluster">
+<title>cluster_6</title>
+<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="544.1679,-195.7571 544.1679,-362.5955 1239.1679,-362.5955 1239.1679,-195.7571 544.1679,-195.7571"/>
+<text text-anchor="middle" x="891.6679" y="-347.3955" font-family="Times,serif" font-size="14.00" fill="#000000">Data</text>
+</g>
+<g id="clust8" class="cluster">
+<title>cluster_7</title>
+<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="1335.1679,-1261.2986 1335.1679,-1779.61 1615.1679,-1779.61 1615.1679,-1261.2986 1335.1679,-1261.2986"/>
+<text text-anchor="middle" x="1475.1679" y="-1764.41" font-family="Times,serif" font-size="14.00" fill="#000000">Evaluation</text>
+</g>
+<g id="clust9" class="cluster">
+<title>cluster_8</title>
+<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="541.1679,-565.0262 541.1679,-1428.137 1319.1679,-1428.137 1319.1679,-565.0262 541.1679,-565.0262"/>
+<text text-anchor="middle" x="930.1679" y="-1412.937" font-family="Times,serif" font-size="14.00" fill="#000000">Input</text>
+</g>
+<g id="clust10" class="cluster">
+<title>cluster_9</title>
+<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="2524.1679,-892.0295 2524.1679,-1594.9755 2760.1679,-1594.9755 2760.1679,-892.0295 2524.1679,-892.0295"/>
+<text text-anchor="middle" x="2642.1679" y="-1579.7755" font-family="Times,serif" font-size="14.00" fill="#000000">Model</text>
+</g>
+<g id="clust11" class="cluster">
+<title>cluster_10</title>
+<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="2113.1679,-892.0295 2113.1679,-1243.5025 2484.1679,-1243.5025 2484.1679,-892.0295 2113.1679,-892.0295"/>
+<text text-anchor="middle" x="2298.6679" y="-1228.3025" font-family="Times,serif" font-size="14.00" fill="#000000">Notation</text>
+</g>
+<g id="clust12" class="cluster">
+<title>cluster_11</title>
+<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="1594.1679,-35.5922 1594.1679,-362.5955 2427.1679,-362.5955 2427.1679,-35.5922 1594.1679,-35.5922"/>
+<text text-anchor="middle" x="2010.6679" y="-347.3955" font-family="Times,serif" font-size="14.00" fill="#000000">Property</text>
+</g>
+<g id="clust13" class="cluster">
+<title>cluster_12</title>
+<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="1623.1679,-892.0295 1623.1679,-1964.2446 1947.1679,-1964.2446 1947.1679,-892.0295 1623.1679,-892.0295"/>
+<text text-anchor="middle" x="1785.1679" y="-1949.0446" font-family="Times,serif" font-size="14.00" fill="#000000">Search</text>
+</g>
+<g id="clust14" class="cluster">
+<title>cluster_13</title>
+<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="3188.1679,-892.0295 3188.1679,-1964.2446 3932.1679,-1964.2446 3932.1679,-892.0295 3188.1679,-892.0295"/>
+<text text-anchor="middle" x="3560.1679" y="-1949.0446" font-family="Times,serif" font-size="14.00" fill="#000000">State</text>
+</g>
+<g id="clust15" class="cluster">
+<title>cluster_14</title>
+<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="2868.1679,-195.7571 2868.1679,-547.2301 3052.1679,-547.2301 3052.1679,-195.7571 2868.1679,-195.7571"/>
+<text text-anchor="middle" x="2960.1679" y="-532.0301" font-family="Times,serif" font-size="14.00" fill="#000000">Text</text>
+</g>
+<g id="clust16" class="cluster">
+<title>cluster_15</title>
+<polygon fill="#000000" fill-opacity="0.058824" stroke="#000000" stroke-opacity="0.058824" points="577.1679,-1612.7716 577.1679,-2131.083 805.1679,-2131.083 805.1679,-1612.7716 577.1679,-1612.7716"/>
+<text text-anchor="middle" x="691.1679" y="-2115.883" font-family="Times,serif" font-size="14.00" fill="#000000">UI</text>
+</g>
+<!-- u3 -->
+<g id="node1" class="node">
+<title>u3</title>
+<ellipse fill="#bbbbff" stroke="#000000" stroke-width="0" cx="2284.1679" cy="-437.7961" rx="61.99" ry="18"/>
+<text text-anchor="middle" x="2284.1679" y="-434.0961" font-family="Times,serif" font-size="14.00" fill="#000000">LogicalColour</text>
+</g>
+<!-- u5 -->
+<g id="node67" class="node">
+<title>u5</title>
+<ellipse fill="#33ff33" stroke="#000000" stroke-width="0" cx="2192.1679" cy="-253.7961" rx="68.4888" ry="18"/>
+<text text-anchor="middle" x="2192.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">ForsythEdwards</text>
+</g>
+<!-- u3&#45;&gt;u5 -->
+<g id="edge6" class="edge">
+<title>u3&#45;&gt;u5</title>
+<path fill="none" stroke="#000000" d="M2275.179,-419.8184C2258.9648,-387.39 2224.7408,-318.9419 2205.6896,-280.8396"/>
+<polygon fill="#000000" stroke="#000000" points="2208.7959,-279.2258 2201.1932,-271.8468 2202.5349,-282.3563 2208.7959,-279.2258"/>
+</g>
+<!-- u6 -->
+<g id="node68" class="node">
+<title>u6</title>
+<ellipse fill="#33ff33" stroke="#000000" stroke-width="0" cx="2058.1679" cy="-253.7961" rx="48.1917" ry="18"/>
+<text text-anchor="middle" x="2058.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Opposable</text>
+</g>
+<!-- u3&#45;&gt;u6 -->
+<g id="edge7" class="edge">
+<title>u3&#45;&gt;u6</title>
+<path fill="none" stroke="#000000" d="M2262.3577,-420.7818C2229.9665,-395.4215 2167.3559,-346.0485 2115.1679,-302.7961 2105.1988,-294.534 2094.3951,-285.3157 2084.9012,-277.1236"/>
+<polygon fill="#000000" stroke="#000000" points="2087.1327,-274.4262 2077.2814,-270.5271 2082.5511,-279.7185 2087.1327,-274.4262"/>
+</g>
+<!-- u8 -->
+<g id="node2" class="node">
+<title>u8</title>
+<ellipse fill="#bbbbff" stroke="#000000" stroke-width="0" cx="2591.1679" cy="-622.7961" rx="48.9926" ry="18"/>
+<text text-anchor="middle" x="2591.1679" y="-619.0961" font-family="Times,serif" font-size="14.00" fill="#000000">MoveType</text>
+</g>
+<!-- u9 -->
+<g id="node3" class="node">
+<title>u9</title>
+<ellipse fill="#bbbbff" stroke="#000000" stroke-width="0" cx="2609.1679" cy="-437.7961" rx="29.4969" ry="18"/>
+<text text-anchor="middle" x="2609.1679" y="-434.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Rank</text>
+</g>
+<!-- u8&#45;&gt;u9 -->
+<g id="edge8" class="edge">
+<title>u8&#45;&gt;u9</title>
+<path fill="none" stroke="#000000" d="M2592.9265,-604.7207C2596.072,-572.3924 2602.6817,-504.4598 2606.4269,-465.9671"/>
+<polygon fill="#000000" stroke="#000000" points="2609.9171,-466.2369 2607.402,-455.9449 2602.95,-465.5589 2609.9171,-466.2369"/>
+</g>
+<!-- u10 -->
+<g id="node95" class="node">
+<title>u10</title>
+<ellipse fill="#ff3333" stroke="#000000" stroke-width="0" cx="2920.1679" cy="-253.7961" rx="44.393" ry="18"/>
+<text text-anchor="middle" x="2920.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">ShowList</text>
+</g>
+<!-- u8&#45;&gt;u10 -->
+<g id="edge9" class="edge">
+<title>u8&#45;&gt;u10</title>
+<path fill="none" stroke="#000000" d="M2611.422,-606.2641C2639.5383,-582.415 2690.5021,-535.8109 2722.1679,-486.7961 2741.6496,-456.6407 2731.9474,-441.4613 2752.1679,-411.7961 2790.6866,-355.2857 2852.5941,-303.8468 2889.5322,-275.8689"/>
+<polygon fill="#000000" stroke="#000000" points="2891.9989,-278.3946 2897.9097,-269.6018 2887.8058,-272.7894 2891.9989,-278.3946"/>
+</g>
+<!-- u12 -->
+<g id="node4" class="node">
+<title>u12</title>
+<ellipse fill="#bbbbff" stroke="#000000" stroke-width="0" cx="1856.1679" cy="-622.7961" rx="44.393" ry="18"/>
+<text text-anchor="middle" x="1856.1679" y="-619.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Direction</text>
+</g>
+<!-- u12&#45;&gt;u3 -->
+<g id="edge10" class="edge">
+<title>u12&#45;&gt;u3</title>
+<path fill="none" stroke="#000000" d="M1883.686,-608.5908C1891.8082,-604.5908 1900.7721,-600.3619 1909.1679,-596.7961 2041.4184,-540.6274 2085.4321,-552.5891 2213.1679,-486.7961 2227.4477,-479.441 2242.2242,-469.6484 2254.5748,-460.7516"/>
+<polygon fill="#000000" stroke="#000000" points="2256.7183,-463.5199 2262.7018,-454.7764 2252.5718,-457.8801 2256.7183,-463.5199"/>
+</g>
+<!-- u13 -->
+<g id="node32" class="node">
+<title>u13</title>
+<ellipse fill="#ffff77" stroke="#000000" stroke-width="0" cx="1034.1679" cy="-253.7961" rx="46.2923" ry="18"/>
+<text text-anchor="middle" x="1034.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Exception</text>
+</g>
+<!-- u12&#45;&gt;u13 -->
+<g id="edge11" class="edge">
+<title>u12&#45;&gt;u13</title>
+<path fill="none" stroke="#000000" d="M1829.5591,-608.2451C1821.0102,-604.0472 1811.3679,-599.7957 1802.1679,-596.7961 1544.8263,-512.8932 1429.2489,-635.6307 1203.1679,-486.7961 1169.7062,-464.7675 1176.3394,-444.4766 1153.1679,-411.7961 1119.3987,-364.1691 1077.9972,-310.115 1053.9952,-279.177"/>
+<polygon fill="#000000" stroke="#000000" points="1056.6082,-276.8356 1047.7076,-271.0884 1051.0816,-281.1317 1056.6082,-276.8356"/>
+</g>
+<!-- u14 -->
+<g id="node69" class="node">
+<title>u14</title>
+<ellipse fill="#33ff33" stroke="#000000" stroke-width="0" cx="1828.1679" cy="-253.7961" rx="48.1917" ry="18"/>
+<text text-anchor="middle" x="1828.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Orientated</text>
+</g>
+<!-- u12&#45;&gt;u14 -->
+<g id="edge12" class="edge">
+<title>u12&#45;&gt;u14</title>
+<path fill="none" stroke="#000000" d="M1837.3882,-606.1723C1812.2962,-582.5659 1769.0378,-536.6286 1752.1679,-486.7961 1726.7032,-411.5756 1778.7667,-322.1878 1808.8471,-279.2734"/>
+<polygon fill="#000000" stroke="#000000" points="1811.7354,-281.2516 1814.7186,-271.0854 1806.0468,-277.1724 1811.7354,-281.2516"/>
+</g>
+<!-- u15 -->
+<g id="node70" class="node">
+<title>u15</title>
+<ellipse fill="#33ff33" stroke="#000000" stroke-width="0" cx="1685.1679" cy="-93.7961" rx="50.0912" ry="18"/>
+<text text-anchor="middle" x="1685.1679" y="-90.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Reflectable</text>
+</g>
+<!-- u12&#45;&gt;u15 -->
+<g id="edge13" class="edge">
+<title>u12&#45;&gt;u15</title>
+<path fill="none" stroke="#000000" d="M1829.5419,-608.2974C1820.9922,-604.1019 1811.3538,-599.8386 1802.1679,-596.7961 1557.6596,-515.8108 1397.1047,-685.4607 1233.1679,-486.7961 1211.9521,-461.0861 1231.1857,-445.0704 1233.1679,-411.7961 1233.7801,-401.5193 1248.5841,-235.7108 1255.1679,-227.7961 1303.5615,-169.6191 1524.5848,-122.8136 1629.5325,-103.4409"/>
+<polygon fill="#000000" stroke="#000000" points="1630.412,-106.8382 1639.6199,-101.5974 1629.1536,-99.9523 1630.412,-106.8382"/>
+</g>
+<!-- u16 -->
+<g id="node5" class="node">
+<title>u16</title>
+<ellipse fill="#bbbbff" stroke="#000000" stroke-width="0" cx="2284.1679" cy="-622.7961" rx="95.5831" ry="18"/>
+<text text-anchor="middle" x="2284.1679" y="-619.0961" font-family="Times,serif" font-size="14.00" fill="#000000">LogicalColourOfSquare</text>
+</g>
+<!-- u16&#45;&gt;u3 -->
+<g id="edge14" class="edge">
+<title>u16&#45;&gt;u3</title>
+<path fill="none" stroke="#000000" d="M2284.1679,-604.7207C2284.1679,-572.3924 2284.1679,-504.4598 2284.1679,-465.9671"/>
+<polygon fill="#000000" stroke="#000000" points="2287.668,-465.9449 2284.1679,-455.9449 2280.668,-465.9449 2287.668,-465.9449"/>
+</g>
+<!-- u46 -->
+<g id="node6" class="node">
+<title>u46</title>
+<ellipse fill="#bbbbff" stroke="#000000" stroke-width="0" cx="2461.1679" cy="-622.7961" rx="63.8893" ry="18"/>
+<text text-anchor="middle" x="2461.1679" y="-619.0961" font-family="Times,serif" font-size="14.00" fill="#000000">ColourScheme</text>
+</g>
+<!-- u47 -->
+<g id="node7" class="node">
+<title>u47</title>
+<ellipse fill="#bbbbff" stroke="#000000" stroke-width="0" cx="2479.1679" cy="-437.7961" rx="64.9885" ry="18"/>
+<text text-anchor="middle" x="2479.1679" y="-434.0961" font-family="Times,serif" font-size="14.00" fill="#000000">PhysicalColour</text>
+</g>
+<!-- u46&#45;&gt;u47 -->
+<g id="edge15" class="edge">
+<title>u46&#45;&gt;u47</title>
+<path fill="none" stroke="#000000" d="M2462.9265,-604.7207C2466.072,-572.3924 2472.6817,-504.4598 2476.4269,-465.9671"/>
+<polygon fill="#000000" stroke="#000000" points="2479.9171,-466.2369 2477.402,-455.9449 2472.95,-465.5589 2479.9171,-466.2369"/>
+</g>
+<!-- u46&#45;&gt;u13 -->
+<g id="edge16" class="edge">
+<title>u46&#45;&gt;u13</title>
+<path fill="none" stroke="#000000" d="M2425.0436,-607.8644C2413.7256,-603.7007 2401.0772,-599.5642 2389.1679,-596.7961 1956.2339,-496.1683 1806.3927,-655.4729 1395.1679,-486.7961 1345.3977,-466.3813 1345.3829,-440.9411 1300.1679,-411.7961 1211.45,-354.6098 1176.146,-362.5952 1089.1679,-302.7961 1078.4651,-295.4377 1067.5979,-286.2057 1058.3812,-277.7447"/>
+<polygon fill="#000000" stroke="#000000" points="1060.7531,-275.1707 1051.0673,-270.8769 1055.9614,-280.2737 1060.7531,-275.1707"/>
+</g>
+<!-- u46&#45;&gt;u10 -->
+<g id="edge17" class="edge">
+<title>u46&#45;&gt;u10</title>
+<path fill="none" stroke="#000000" d="M2495.3928,-607.5346C2555.0082,-580.3189 2674.2276,-522.8848 2702.1679,-486.7961 2723.287,-459.5178 2703.2925,-440.6724 2722.1679,-411.7961 2763.7013,-348.2564 2839.2406,-298.571 2884.047,-272.9434"/>
+<polygon fill="#000000" stroke="#000000" points="2885.8488,-275.9457 2892.8488,-267.9926 2882.4171,-269.8446 2885.8488,-275.9457"/>
+</g>
+<!-- u58 -->
+<g id="node8" class="node">
+<title>u58</title>
+<ellipse fill="#bbbbff" stroke="#000000" stroke-width="0" cx="1681.1679" cy="-622.7961" rx="112.3801" ry="18"/>
+<text text-anchor="middle" x="1681.1679" y="-619.0961" font-family="Times,serif" font-size="14.00" fill="#000000">CaptureMoveSortAlgorithm</text>
+</g>
+<!-- u73 -->
+<g id="node9" class="node">
+<title>u73</title>
+<ellipse fill="#bbbbff" stroke="#000000" stroke-width="0" cx="2117.1679" cy="-622.7961" rx="53.0913" ry="18"/>
+<text text-anchor="middle" x="2117.1679" y="-619.0961" font-family="Times,serif" font-size="14.00" fill="#000000">RankValues</text>
+</g>
+<!-- u73&#45;&gt;u9 -->
+<g id="edge18" class="edge">
+<title>u73&#45;&gt;u9</title>
+<path fill="none" stroke="#000000" d="M2149.7221,-608.3459C2159.1393,-604.3841 2169.4898,-600.2366 2179.1679,-596.7961 2342.4214,-538.7596 2401.3188,-570.2335 2553.1679,-486.7961 2565.6751,-479.9237 2577.8158,-469.8582 2587.5773,-460.6351"/>
+<polygon fill="#000000" stroke="#000000" points="2590.168,-462.9966 2594.8574,-453.4961 2585.2669,-457.9987 2590.168,-462.9966"/>
+</g>
+<!-- u73&#45;&gt;u13 -->
+<g id="edge19" class="edge">
+<title>u73&#45;&gt;u13</title>
+<path fill="none" stroke="#000000" d="M2086.1503,-608.0765C2076.4078,-603.9213 2065.4957,-599.7364 2055.1679,-596.7961 1755.6527,-511.5247 1653.0005,-600.7153 1363.1679,-486.7961 1235.2214,-436.5065 1109.9345,-326.2246 1058.5454,-277.6134"/>
+<polygon fill="#000000" stroke="#000000" points="1060.8771,-275.0006 1051.2252,-270.6311 1056.0456,-280.0659 1060.8771,-275.0006"/>
+</g>
+<!-- u74 -->
+<g id="node37" class="node">
+<title>u74</title>
+<ellipse fill="#ffff77" stroke="#000000" stroke-width="0" cx="1127.1679" cy="-253.7961" rx="28.6953" ry="18"/>
+<text text-anchor="middle" x="1127.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Num</text>
+</g>
+<!-- u73&#45;&gt;u74 -->
+<g id="edge20" class="edge">
+<title>u73&#45;&gt;u74</title>
+<path fill="none" stroke="#000000" d="M2086.1366,-608.1242C2076.3935,-603.971 2065.4846,-599.7752 2055.1679,-596.7961 1769.4614,-514.2952 1666.8366,-607.7535 1395.1679,-486.7961 1275.2603,-433.4086 1255.7715,-396.8005 1164.1679,-302.7961 1157.0655,-295.5076 1150.1147,-286.8406 1144.1902,-278.837"/>
+<polygon fill="#000000" stroke="#000000" points="1146.8836,-276.5873 1138.2057,-270.5091 1141.1991,-280.6723 1146.8836,-276.5873"/>
+</g>
+<!-- u37 -->
+<g id="node72" class="node">
+<title>u37</title>
+<ellipse fill="#33ff33" stroke="#000000" stroke-width="0" cx="1943.1679" cy="-253.7961" rx="48.9926" ry="18"/>
+<text text-anchor="middle" x="1943.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">ShowFloat</text>
+</g>
+<!-- u73&#45;&gt;u37 -->
+<g id="edge21" class="edge">
+<title>u73&#45;&gt;u37</title>
+<path fill="none" stroke="#000000" d="M2083.7852,-608.5648C2074.5407,-604.6872 2064.4862,-600.5284 2055.1679,-596.7961 1927.9724,-545.8506 1844.8706,-599.6518 1767.1679,-486.7961 1748.2647,-459.341 1753.5874,-442.2376 1767.1679,-411.7961 1771.1791,-402.8046 1867.9949,-318.5782 1916.2858,-276.9125"/>
+<polygon fill="#000000" stroke="#000000" points="1918.5864,-279.5502 1923.8754,-270.3699 1914.0159,-274.2483 1918.5864,-279.5502"/>
+</g>
+<!-- u73&#45;&gt;u10 -->
+<g id="edge22" class="edge">
+<title>u73&#45;&gt;u10</title>
+<path fill="none" stroke="#000000" d="M2148.9638,-608.2694C2158.5474,-604.217 2169.1765,-600.0403 2179.1679,-596.7961 2382.3912,-530.8083 2468.9652,-604.6856 2647.1679,-486.7961 2681.6425,-463.9895 2672.8575,-440.943 2702.1679,-411.7961 2760.1526,-354.1347 2840.6953,-301.4945 2885.8843,-273.9416"/>
+<polygon fill="#000000" stroke="#000000" points="2887.955,-276.7798 2894.7017,-268.6108 2884.3333,-270.7894 2887.955,-276.7798"/>
+</g>
+<!-- u76 -->
+<g id="node10" class="node">
+<title>u76</title>
+<ellipse fill="#bbbbff" stroke="#000000" stroke-width="0" cx="1982.1679" cy="-622.7961" rx="63.8893" ry="18"/>
+<text text-anchor="middle" x="1982.1679" y="-619.0961" font-family="Times,serif" font-size="14.00" fill="#000000">CriterionValue</text>
+</g>
+<!-- u77 -->
+<g id="node11" class="node">
+<title>u77</title>
+<ellipse fill="#bbbbff" stroke="#000000" stroke-width="0" cx="1845.1679" cy="-437.7961" rx="68.7879" ry="18"/>
+<text text-anchor="middle" x="1845.1679" y="-434.0961" font-family="Times,serif" font-size="14.00" fill="#000000">CriterionWeight</text>
+</g>
+<!-- u76&#45;&gt;u77 -->
+<g id="edge24" class="edge">
+<title>u76&#45;&gt;u77</title>
+<path fill="none" stroke="#000000" d="M1969.0317,-605.0575C1944.6866,-572.1828 1892.4748,-501.6778 1864.2372,-463.5467"/>
+<polygon fill="#000000" stroke="#000000" points="1867.0282,-461.4344 1858.2642,-455.481 1861.4028,-465.6003 1867.0282,-461.4344"/>
+</g>
+<!-- u78 -->
+<g id="node12" class="node">
+<title>u78</title>
+<ellipse fill="#bbbbff" stroke="#000000" stroke-width="0" cx="2068.1679" cy="-437.7961" rx="136.4758" ry="18"/>
+<text text-anchor="middle" x="2068.1679" y="-434.0961" font-family="Times,serif" font-size="14.00" fill="#000000">WeightedMeanAndCriterionValues</text>
+</g>
+<!-- u76&#45;&gt;u78 -->
+<g id="edge25" class="edge">
+<title>u76&#45;&gt;u78</title>
+<path fill="none" stroke="#000000" d="M1990.5705,-604.7207C2005.663,-572.2542 2037.4485,-503.8785 2055.3008,-465.4752"/>
+<polygon fill="#000000" stroke="#000000" points="2058.6895,-466.4884 2059.7311,-455.9449 2052.3418,-463.5376 2058.6895,-466.4884"/>
+</g>
+<!-- u18 -->
+<g id="node103" class="node">
+<title>u18</title>
+<ellipse fill="#ffffbb" stroke="#000000" stroke-width="0" cx="1375.1679" cy="-253.7961" rx="31.3957" ry="18"/>
+<text text-anchor="middle" x="1375.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Types</text>
+</g>
+<!-- u76&#45;&gt;u18 -->
+<g id="edge23" class="edge">
+<title>u76&#45;&gt;u18</title>
+<path fill="none" stroke="#000000" d="M1944.208,-608.2114C1933.0194,-604.2031 1920.6867,-600.0647 1909.1679,-596.7961 1684.4237,-533.0227 1549.7022,-661.9992 1395.1679,-486.7961 1344.4827,-429.3319 1357.6594,-329.9628 1368.0849,-281.7054"/>
+<polygon fill="#000000" stroke="#000000" points="1371.5616,-282.2016 1370.3743,-271.6735 1364.737,-280.6441 1371.5616,-282.2016"/>
+</g>
+<!-- u77&#45;&gt;u13 -->
+<g id="edge26" class="edge">
+<title>u77&#45;&gt;u13</title>
+<path fill="none" stroke="#000000" d="M1781.4547,-430.9348C1622.4288,-413.0969 1212.014,-362.4772 1089.1679,-302.7961 1076.9461,-296.8585 1065.3952,-287.409 1056.0636,-278.3855"/>
+<polygon fill="#000000" stroke="#000000" points="1058.2921,-275.6603 1048.781,-270.9924 1053.3052,-280.5727 1058.2921,-275.6603"/>
+</g>
+<!-- u77&#45;&gt;u74 -->
+<g id="edge27" class="edge">
+<title>u77&#45;&gt;u74</title>
+<path fill="none" stroke="#000000" d="M1781.37,-431.002C1632.5902,-414.2397 1267.4447,-367.5267 1164.1679,-302.7961 1155.185,-297.1659 1147.5974,-288.515 1141.6768,-280.0401"/>
+<polygon fill="#000000" stroke="#000000" points="1144.4759,-277.9221 1136.1216,-271.4061 1138.5891,-281.7097 1144.4759,-277.9221"/>
+</g>
+<!-- u77&#45;&gt;u10 -->
+<g id="edge28" class="edge">
+<title>u77&#45;&gt;u10</title>
+<path fill="none" stroke="#000000" d="M1885.2821,-423.0206C1897.3421,-418.9611 1910.6877,-414.8431 1923.1679,-411.7961 2278.132,-325.1338 2716.2228,-274.8308 2866.5863,-259.1462"/>
+<polygon fill="#000000" stroke="#000000" points="2867.3241,-262.5886 2876.9102,-258.0767 2866.6027,-255.6258 2867.3241,-262.5886"/>
+</g>
+<!-- u78&#45;&gt;u37 -->
+<g id="edge29" class="edge">
+<title>u78&#45;&gt;u37</title>
+<path fill="none" stroke="#000000" d="M2055.9547,-419.8184C2033.7175,-387.0852 1986.5481,-317.6518 1960.8153,-279.7732"/>
+<polygon fill="#000000" stroke="#000000" points="1963.5782,-277.6117 1955.0636,-271.3067 1957.788,-281.5453 1963.5782,-277.6117"/>
+</g>
+<!-- u78&#45;&gt;u10 -->
+<g id="edge30" class="edge">
+<title>u78&#45;&gt;u10</title>
+<path fill="none" stroke="#000000" d="M2139.3435,-422.4248C2307.6778,-386.071 2726.9247,-295.5294 2870.7908,-264.4597"/>
+<polygon fill="#000000" stroke="#000000" points="2871.6302,-267.8592 2880.666,-262.327 2870.1525,-261.0169 2871.6302,-267.8592"/>
+</g>
+<!-- u11 -->
+<g id="node13" class="node">
+<title>u11</title>
+<ellipse fill="#ffbbbb" stroke="#000000" stroke-width="0" cx="1460.1679" cy="-789.7961" rx="53.0913" ry="18"/>
+<text text-anchor="middle" x="1460.1679" y="-786.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Coordinates</text>
+</g>
+<!-- u11&#45;&gt;u12 -->
+<g id="edge31" class="edge">
+<title>u11&#45;&gt;u12</title>
+<path fill="none" stroke="#000000" d="M1505.5596,-780.3244C1573.5244,-764.8172 1704.2073,-729.7953 1802.1679,-671.7961 1813.4015,-665.145 1824.3474,-655.9011 1833.4144,-647.2325"/>
+<polygon fill="#000000" stroke="#000000" points="1835.9156,-649.6814 1840.5539,-640.1558 1830.9877,-644.7099 1835.9156,-649.6814"/>
+</g>
+<!-- u11&#45;&gt;u16 -->
+<g id="edge32" class="edge">
+<title>u11&#45;&gt;u16</title>
+<path fill="none" stroke="#000000" d="M1507.8318,-781.7286C1526.3531,-778.6066 1547.7479,-775.0161 1567.1679,-771.7961 1839.0627,-726.7131 1915.8131,-753.0585 2179.1679,-671.7961 2201.4685,-664.9149 2225.1211,-654.2071 2244.3203,-644.5543"/>
+<polygon fill="#000000" stroke="#000000" points="2246.0581,-647.5966 2253.3621,-639.9218 2242.8663,-641.3667 2246.0581,-647.5966"/>
+</g>
+<!-- u19 -->
+<g id="node15" class="node">
+<title>u19</title>
+<ellipse fill="#ffbbbb" stroke="#000000" stroke-width="0" cx="1449.1679" cy="-622.7961" rx="41.6928" ry="18"/>
+<text text-anchor="middle" x="1449.1679" y="-619.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Ordinate</text>
+</g>
+<!-- u11&#45;&gt;u19 -->
+<g id="edge33" class="edge">
+<title>u11&#45;&gt;u19</title>
+<path fill="none" stroke="#000000" d="M1458.9697,-771.6063C1457.0604,-742.6195 1453.3122,-685.7153 1451.0445,-651.2877"/>
+<polygon fill="#000000" stroke="#000000" points="1454.5143,-650.7118 1450.3645,-640.9635 1447.5294,-651.172 1454.5143,-650.7118"/>
+</g>
+<!-- u20 -->
+<g id="node71" class="node">
+<title>u20</title>
+<ellipse fill="#33ff33" stroke="#000000" stroke-width="0" cx="1718.1679" cy="-253.7961" rx="44.393" ry="18"/>
+<text text-anchor="middle" x="1718.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Rotatable</text>
+</g>
+<!-- u11&#45;&gt;u20 -->
+<g id="edge34" class="edge">
+<title>u11&#45;&gt;u20</title>
+<path fill="none" stroke="#000000" d="M1467.7406,-771.7697C1476.9894,-748.9361 1492.3631,-708.1738 1500.1679,-671.7961 1512.344,-615.0433 1497.2097,-462.6634 1525.1679,-411.7961 1563.151,-342.6893 1605.0515,-353.8304 1665.1679,-302.7961 1674.6255,-294.7673 1684.6945,-285.6202 1693.4875,-277.4206"/>
+<polygon fill="#000000" stroke="#000000" points="1695.9496,-279.9098 1700.8389,-270.5106 1691.1553,-274.8093 1695.9496,-279.9098"/>
+</g>
+<!-- u11&#45;&gt;u10 -->
+<g id="edge35" class="edge">
+<title>u11&#45;&gt;u10</title>
+<path fill="none" stroke="#000000" d="M1513.1886,-787.2589C1731.4809,-776.4492 2553.8642,-732.022 2652.1679,-671.7961 2691.7511,-647.5454 2854.4596,-368.1714 2905.0715,-280.1704"/>
+<polygon fill="#000000" stroke="#000000" points="2908.2007,-281.7494 2910.1461,-271.3347 2902.1306,-278.2631 2908.2007,-281.7494"/>
+</g>
+<!-- u17 -->
+<g id="node14" class="node">
+<title>u17</title>
+<ellipse fill="#ffbbbb" stroke="#000000" stroke-width="0" cx="1449.1679" cy="-437.7961" rx="42.4939" ry="18"/>
+<text text-anchor="middle" x="1449.1679" y="-434.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Abscissa</text>
+</g>
+<!-- u17&#45;&gt;u18 -->
+<g id="edge36" class="edge">
+<title>u17&#45;&gt;u18</title>
+<path fill="none" stroke="#000000" d="M1441.9377,-419.8184C1428.9177,-387.4444 1401.4601,-319.1714 1386.1213,-281.0316"/>
+<polygon fill="#000000" stroke="#000000" points="1389.297,-279.5477 1382.3184,-271.5759 1382.8025,-282.1597 1389.297,-279.5477"/>
+</g>
+<!-- u19&#45;&gt;u3 -->
+<g id="edge37" class="edge">
+<title>u19&#45;&gt;u3</title>
+<path fill="none" stroke="#000000" d="M1485.027,-613.4959C1505.9801,-608.2292 1532.9801,-601.7292 1557.1679,-596.7961 1846.8309,-537.7192 1939.1941,-597.8507 2213.1679,-486.7961 2228.5052,-480.5791 2243.8304,-470.5998 2256.2963,-461.2644"/>
+<polygon fill="#000000" stroke="#000000" points="2258.6737,-463.85 2264.4348,-454.9584 2254.3863,-458.3166 2258.6737,-463.85"/>
+</g>
+<!-- u19&#45;&gt;u17 -->
+<g id="edge38" class="edge">
+<title>u19&#45;&gt;u17</title>
+<path fill="none" stroke="#000000" d="M1449.1679,-604.7207C1449.1679,-572.3924 1449.1679,-504.4598 1449.1679,-465.9671"/>
+<polygon fill="#000000" stroke="#000000" points="1452.668,-465.9449 1449.1679,-455.9449 1445.668,-465.9449 1452.668,-465.9449"/>
+</g>
+<!-- u21 -->
+<g id="node16" class="node">
+<title>u21</title>
+<ellipse fill="#ffbbbb" stroke="#000000" stroke-width="0" cx="1479.1679" cy="-949.7961" rx="34.394" ry="18"/>
+<text text-anchor="middle" x="1479.1679" y="-946.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Vector</text>
+</g>
+<!-- u21&#45;&gt;u11 -->
+<g id="edge39" class="edge">
+<title>u21&#45;&gt;u11</title>
+<path fill="none" stroke="#000000" d="M1477.0252,-931.7531C1473.7468,-904.1448 1467.4561,-851.1707 1463.5553,-818.3216"/>
+<polygon fill="#000000" stroke="#000000" points="1466.9867,-817.5361 1462.3318,-808.0187 1460.0355,-818.3616 1466.9867,-817.5361"/>
+</g>
+<!-- u7 -->
+<g id="node17" class="node">
+<title>u7</title>
+<ellipse fill="#bbffff" stroke="#000000" stroke-width="0" cx="2810.1679" cy="-622.7961" rx="31.6951" ry="18"/>
+<text text-anchor="middle" x="2810.1679" y="-619.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Move</text>
+</g>
+<!-- u7&#45;&gt;u8 -->
+<g id="edge40" class="edge">
+<title>u7&#45;&gt;u8</title>
+<path fill="none" stroke="#000000" d="M2778.2482,-622.7961C2735.5639,-622.7961 2692.8797,-622.7961 2650.1954,-622.7961"/>
+<polygon fill="#000000" stroke="#000000" points="2649.9296,-619.2962 2639.9296,-622.7961 2649.9295,-626.2962 2649.9296,-619.2962"/>
+</g>
+<!-- u7&#45;&gt;u21 -->
+<g id="edge41" class="edge">
+<title>u7&#45;&gt;u21</title>
+<path fill="none" stroke="#000000" d="M2789.9206,-636.9464C2773.0702,-648.064 2748.0596,-663.0792 2724.1679,-671.7961 2493.2298,-756.0541 2392.404,-647.7493 2180.1679,-771.7961 2162.1866,-782.3057 2168.0719,-797.1554 2150.1679,-807.7961 1923.0593,-942.7711 1823.6698,-860.5244 1567.1679,-923.7961 1551.0543,-927.7708 1533.482,-932.8164 1518.3068,-937.4029"/>
+<polygon fill="#000000" stroke="#000000" points="1517.2592,-934.0632 1508.72,-940.3348 1519.3064,-940.7572 1517.2592,-934.0632"/>
+</g>
+<!-- u24 -->
+<g id="node18" class="node">
+<title>u24</title>
+<ellipse fill="#bbffff" stroke="#000000" stroke-width="0" cx="3142.1679" cy="-789.7961" rx="29.795" ry="18"/>
+<text text-anchor="middle" x="3142.1679" y="-786.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Piece</text>
+</g>
+<!-- u24&#45;&gt;u9 -->
+<g id="edge42" class="edge">
+<title>u24&#45;&gt;u9</title>
+<path fill="none" stroke="#000000" d="M3122.215,-776.2181C3075.2893,-744.3609 2954.1197,-662.542 2851.1679,-596.7961 2772.4697,-546.5387 2748.9153,-539.9849 2672.1679,-486.7961 2659.5531,-478.0536 2646.0604,-467.7032 2634.811,-458.773"/>
+<polygon fill="#000000" stroke="#000000" points="2636.6897,-455.7933 2626.6976,-452.2709 2632.3122,-461.2557 2636.6897,-455.7933"/>
+</g>
+<!-- u24&#45;&gt;u21 -->
+<g id="edge43" class="edge">
+<title>u24&#45;&gt;u21</title>
+<path fill="none" stroke="#000000" d="M3119.5722,-801.8568C3114.3169,-804.1977 3108.6518,-806.3654 3103.1679,-807.7961 2463.0281,-974.8067 2275.0828,-837.4995 1619.1679,-923.7961 1586.0244,-928.1567 1548.8326,-935.165 1521.117,-940.8072"/>
+<polygon fill="#000000" stroke="#000000" points="1520.0748,-937.4484 1510.9868,-942.8944 1521.4874,-944.3043 1520.0748,-937.4484"/>
+</g>
+<!-- u25 -->
+<g id="node19" class="node">
+<title>u25</title>
+<ellipse fill="#bbffff" stroke="#000000" stroke-width="0" cx="2840.1679" cy="-789.7961" rx="64.189" ry="18"/>
+<text text-anchor="middle" x="2840.1679" y="-786.0961" font-family="Times,serif" font-size="14.00" fill="#000000">QualifiedMove</text>
+</g>
+<!-- u25&#45;&gt;u7 -->
+<g id="edge44" class="edge">
+<title>u25&#45;&gt;u7</title>
+<path fill="none" stroke="#000000" d="M2836.9002,-771.6063C2831.6567,-742.4174 2821.3279,-684.9205 2815.1573,-650.5709"/>
+<polygon fill="#000000" stroke="#000000" points="2818.5991,-649.9343 2813.3861,-640.7107 2811.7094,-651.1721 2818.5991,-649.9343"/>
+</g>
+<!-- u26 -->
+<g id="node20" class="node">
+<title>u26</title>
+<ellipse fill="#bbffff" stroke="#000000" stroke-width="0" cx="2840.1679" cy="-949.7961" rx="27.8951" ry="18"/>
+<text text-anchor="middle" x="2840.1679" y="-946.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Turn</text>
+</g>
+<!-- u26&#45;&gt;u25 -->
+<g id="edge45" class="edge">
+<title>u26&#45;&gt;u25</title>
+<path fill="none" stroke="#000000" d="M2840.1679,-931.7531C2840.1679,-904.1448 2840.1679,-851.1707 2840.1679,-818.3216"/>
+<polygon fill="#000000" stroke="#000000" points="2843.668,-818.0186 2840.1679,-808.0187 2836.668,-818.0187 2843.668,-818.0186"/>
+</g>
+<!-- u28 -->
+<g id="node21" class="node">
+<title>u28</title>
+<ellipse fill="#bbffff" stroke="#000000" stroke-width="0" cx="3008.1679" cy="-789.7961" rx="85.5853" ry="18"/>
+<text text-anchor="middle" x="3008.1679" y="-786.0961" font-family="Times,serif" font-size="14.00" fill="#000000">EitherQualifiedMove</text>
+</g>
+<!-- u28&#45;&gt;u7 -->
+<g id="edge46" class="edge">
+<title>u28&#45;&gt;u7</title>
+<path fill="none" stroke="#000000" d="M2987.3526,-772.2398C2950.8472,-741.4499 2875.4015,-677.8164 2835.7668,-644.3872"/>
+<polygon fill="#000000" stroke="#000000" points="2838.0102,-641.7006 2828.1095,-637.9287 2833.497,-647.0515 2838.0102,-641.7006"/>
+</g>
+<!-- u29 -->
+<g id="node22" class="node">
+<title>u29</title>
+<ellipse fill="#bbffff" stroke="#000000" stroke-width="0" cx="2965.1679" cy="-949.7961" rx="36.2938" ry="18"/>
+<text text-anchor="middle" x="2965.1679" y="-946.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Zobrist</text>
+</g>
+<!-- u29&#45;&gt;u9 -->
+<g id="edge47" class="edge">
+<title>u29&#45;&gt;u9</title>
+<path fill="none" stroke="#000000" d="M2989.2236,-936.1998C3052.019,-900.706 3216.0659,-807.971 3216.1679,-807.7961 3224.2284,-793.9748 3224.1767,-785.6474 3216.1679,-771.7961 3079.5435,-535.5024 2905.5166,-628.3916 2672.1679,-486.7961 2658.8226,-478.6982 2645.0225,-468.2384 2633.7523,-459.0636"/>
+<polygon fill="#000000" stroke="#000000" points="2635.9669,-456.3531 2626.0357,-452.6622 2631.4976,-461.7407 2635.9669,-456.3531"/>
+</g>
+<!-- u29&#45;&gt;u11 -->
+<g id="edge48" class="edge">
+<title>u29&#45;&gt;u11</title>
+<path fill="none" stroke="#000000" d="M2935.3835,-939.4361C2918.5021,-933.9604 2896.8763,-927.6024 2877.1679,-923.7961 2360.8702,-824.0823 1723.8034,-797.5518 1523.4959,-791.4373"/>
+<polygon fill="#000000" stroke="#000000" points="1523.5469,-787.9374 1513.4467,-791.1366 1523.3375,-794.9342 1523.5469,-787.9374"/>
+</g>
+<!-- u41 -->
+<g id="node23" class="node">
+<title>u41</title>
+<ellipse fill="#bbffff" stroke="#000000" stroke-width="0" cx="3095.1679" cy="-949.7961" rx="75.2868" ry="18"/>
+<text text-anchor="middle" x="3095.1679" y="-946.0961" font-family="Times,serif" font-size="14.00" fill="#000000">PieceSquareArray</text>
+</g>
+<!-- u41&#45;&gt;u24 -->
+<g id="edge49" class="edge">
+<title>u41&#45;&gt;u24</title>
+<path fill="none" stroke="#000000" d="M3100.468,-931.7531C3108.6565,-903.8773 3124.4413,-850.1417 3134.0673,-817.3724"/>
+<polygon fill="#000000" stroke="#000000" points="3137.4984,-818.1101 3136.9588,-807.529 3130.7822,-816.1372 3137.4984,-818.1101"/>
+</g>
+<!-- u42 -->
+<g id="node33" class="node">
+<title>u42</title>
+<ellipse fill="#ffff77" stroke="#000000" stroke-width="0" cx="942.1679" cy="-253.7961" rx="27.8951" ry="18"/>
+<text text-anchor="middle" x="942.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Bool</text>
+</g>
+<!-- u41&#45;&gt;u42 -->
+<g id="edge50" class="edge">
+<title>u41&#45;&gt;u42</title>
+<path fill="none" stroke="#000000" d="M3122.9998,-933.0002C3168.0545,-903.4553 3249.4991,-838.9257 3224.1679,-771.7961 3187.5902,-674.8626 3154.9115,-656.3993 3070.1679,-596.7961 2961.4819,-520.3535 2912.7088,-542.7065 2792.1679,-486.7961 2728.1324,-457.0946 2720.0376,-431.1974 2652.1679,-411.7961 2293.9506,-309.3959 1307.094,-479.6289 979.1679,-302.7961 969.5977,-297.6354 961.7799,-288.8083 955.8373,-280.0557"/>
+<polygon fill="#000000" stroke="#000000" points="958.7616,-278.1298 950.5244,-271.4665 952.8084,-281.8122 958.7616,-278.1298"/>
+</g>
+<!-- u97 -->
+<g id="node24" class="node">
+<title>u97</title>
+<ellipse fill="#ffbbff" stroke="#000000" stroke-width="0" cx="91.1679" cy="-1854.7961" rx="47.3916" ry="18"/>
+<text text-anchor="middle" x="91.1679" y="-1851.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Pondering</text>
+</g>
+<!-- u2 -->
+<g id="node25" class="node">
+<title>u2</title>
+<ellipse fill="#77ff77" stroke="#000000" stroke-width="0" cx="238.1679" cy="-1318.7961" rx="28.6953" ry="18"/>
+<text text-anchor="middle" x="238.1679" y="-1315.0961" font-family="Times,serif" font-size="14.00" fill="#000000">PGN</text>
+</g>
+<!-- u22 -->
+<g id="node26" class="node">
+<title>u22</title>
+<ellipse fill="#77ff77" stroke="#000000" stroke-width="0" cx="238.1679" cy="-1134.7961" rx="63.8893" ry="18"/>
+<text text-anchor="middle" x="238.1679" y="-1131.0961" font-family="Times,serif" font-size="14.00" fill="#000000">PGNComment</text>
+</g>
+<!-- u2&#45;&gt;u22 -->
+<g id="edge51" class="edge">
+<title>u2&#45;&gt;u22</title>
+<path fill="none" stroke="#000000" d="M238.1679,-1300.4808C238.1679,-1268.3804 238.1679,-1201.7408 238.1679,-1163.4783"/>
+<polygon fill="#000000" stroke="#000000" points="241.668,-1163.0373 238.1679,-1153.0373 234.668,-1163.0374 241.668,-1163.0373"/>
+</g>
+<!-- u23 -->
+<g id="node27" class="node">
+<title>u23</title>
+<ellipse fill="#77ff77" stroke="#000000" stroke-width="0" cx="396.1679" cy="-1134.7961" rx="76.8869" ry="18"/>
+<text text-anchor="middle" x="396.1679" y="-1131.0961" font-family="Times,serif" font-size="14.00" fill="#000000">StandardAlgebraic</text>
+</g>
+<!-- u2&#45;&gt;u23 -->
+<g id="edge52" class="edge">
+<title>u2&#45;&gt;u23</title>
+<path fill="none" stroke="#000000" d="M251.9129,-1302.7892C279.3895,-1270.7912 341.2884,-1198.7063 374.3625,-1160.1897"/>
+<polygon fill="#000000" stroke="#000000" points="377.1005,-1162.3736 380.9599,-1152.5066 371.7898,-1157.8132 377.1005,-1162.3736"/>
+</g>
+<!-- u53 -->
+<g id="node34" class="node">
+<title>u53</title>
+<ellipse fill="#ffff77" stroke="#000000" stroke-width="0" cx="775.1679" cy="-253.7961" rx="38.1938" ry="18"/>
+<text text-anchor="middle" x="775.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Integral</text>
+</g>
+<!-- u2&#45;&gt;u53 -->
+<g id="edge53" class="edge">
+<title>u2&#45;&gt;u53</title>
+<path fill="none" stroke="#000000" d="M222.9202,-1303.4447C200.7816,-1280.0007 160.5924,-1232.8099 144.1679,-1183.7961 111.099,-1085.1125 135.1679,-1053.873 135.1679,-949.7961 135.1679,-949.7961 135.1679,-949.7961 135.1679,-622.7961 135.1679,-323.7065 488.2786,-482.7587 727.1679,-302.7961 736.6348,-295.6643 745.9961,-286.6713 753.9029,-278.3423"/>
+<polygon fill="#000000" stroke="#000000" points="756.5111,-280.6768 760.7166,-270.9523 751.3647,-275.9317 756.5111,-280.6768"/>
+</g>
+<!-- u27 -->
+<g id="node56" class="node">
+<title>u27</title>
+<ellipse fill="#77ffff" stroke="#000000" stroke-width="0" cx="2720.1679" cy="-1318.7961" rx="32.4942" ry="18"/>
+<text text-anchor="middle" x="2720.1679" y="-1315.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Game</text>
+</g>
+<!-- u23&#45;&gt;u27 -->
+<g id="edge54" class="edge">
+<title>u23&#45;&gt;u27</title>
+<path fill="none" stroke="#000000" d="M432.7781,-1150.7425C460.7835,-1162.1417 500.6675,-1176.6759 537.1679,-1183.7961 1004.9663,-1275.0504 2224.9801,-1148.3101 2679.1679,-1292.7961 2683.6256,-1294.2142 2688.0776,-1296.2394 2692.3167,-1298.5419"/>
+<polygon fill="#000000" stroke="#000000" points="2690.8079,-1301.7196 2701.1765,-1303.8972 2694.4289,-1295.7289 2690.8079,-1301.7196"/>
+</g>
+<!-- u54 -->
+<g id="node28" class="node">
+<title>u54</title>
+<ellipse fill="#77ff77" stroke="#000000" stroke-width="0" cx="292.1679" cy="-1485.7961" rx="60.3893" ry="18"/>
+<text text-anchor="middle" x="292.1679" y="-1482.0961" font-family="Times,serif" font-size="14.00" fill="#000000">PGNDatabase</text>
+</g>
+<!-- u54&#45;&gt;u2 -->
+<g id="edge55" class="edge">
+<title>u54&#45;&gt;u2</title>
+<path fill="none" stroke="#000000" d="M286.2861,-1467.6063C276.823,-1438.3408 258.1583,-1380.6185 247.0616,-1346.3009"/>
+<polygon fill="#000000" stroke="#000000" points="250.2863,-1344.8975 243.8793,-1336.4594 243.6259,-1347.0512 250.2863,-1344.8975"/>
+</g>
+<!-- u55 -->
+<g id="node29" class="node">
+<title>u55</title>
+<ellipse fill="#77ff77" stroke="#000000" stroke-width="0" cx="346.1679" cy="-1670.7961" rx="86.3847" ry="18"/>
+<text text-anchor="middle" x="346.1679" y="-1667.0961" font-family="Times,serif" font-size="14.00" fill="#000000">QualifiedMoveForest</text>
+</g>
+<!-- u55&#45;&gt;u54 -->
+<g id="edge56" class="edge">
+<title>u55&#45;&gt;u54</title>
+<path fill="none" stroke="#000000" d="M340.8918,-1652.7207C331.4554,-1620.3924 311.6264,-1552.4598 300.3907,-1513.9671"/>
+<polygon fill="#000000" stroke="#000000" points="303.6272,-1512.5636 297.4653,-1503.9449 296.9076,-1514.525 303.6272,-1512.5636"/>
+</g>
+<!-- u57 -->
+<g id="node60" class="node">
+<title>u57</title>
+<ellipse fill="#77ffff" stroke="#000000" stroke-width="0" cx="2580.1679" cy="-1485.7961" rx="48.1917" ry="18"/>
+<text text-anchor="middle" x="2580.1679" y="-1482.0961" font-family="Times,serif" font-size="14.00" fill="#000000">GameTree</text>
+</g>
+<!-- u55&#45;&gt;u57 -->
+<g id="edge57" class="edge">
+<title>u55&#45;&gt;u57</title>
+<path fill="none" stroke="#000000" d="M420.7329,-1661.5905C464.993,-1656.2924 522.2352,-1649.7289 573.1679,-1644.7961 672.8725,-1635.1397 2203.7642,-1515.2488 2522.3594,-1490.3184"/>
+<polygon fill="#000000" stroke="#000000" points="2523.0457,-1493.7755 2532.7422,-1489.5059 2522.4996,-1486.7968 2523.0457,-1493.7755"/>
+</g>
+<!-- u83 -->
+<g id="node30" class="node">
+<title>u83</title>
+<ellipse fill="#77ff77" stroke="#000000" stroke-width="0" cx="346.1679" cy="-1854.7961" rx="126.978" ry="18"/>
+<text text-anchor="middle" x="346.1679" y="-1851.0961" font-family="Times,serif" font-size="14.00" fill="#000000">PositionHashQualifiedMoveTree</text>
+</g>
+<!-- u83&#45;&gt;u55 -->
+<g id="edge58" class="edge">
+<title>u83&#45;&gt;u55</title>
+<path fill="none" stroke="#000000" d="M346.1679,-1836.4808C346.1679,-1804.3804 346.1679,-1737.7408 346.1679,-1699.4783"/>
+<polygon fill="#000000" stroke="#000000" points="349.668,-1699.0373 346.1679,-1689.0373 342.668,-1699.0374 349.668,-1699.0373"/>
+</g>
+<!-- u1 -->
+<g id="node31" class="node">
+<title>u1</title>
+<ellipse fill="#ffff77" stroke="#000000" stroke-width="0" cx="1202.1679" cy="-253.7961" rx="28.6953" ry="18"/>
+<text text-anchor="middle" x="1202.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Float</text>
+</g>
+<!-- u56 -->
+<g id="node35" class="node">
+<title>u56</title>
+<ellipse fill="#ffff77" stroke="#000000" stroke-width="0" cx="674.1679" cy="-253.7961" rx="44.393" ry="18"/>
+<text text-anchor="middle" x="674.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">RoseTree</text>
+</g>
+<!-- u67 -->
+<g id="node36" class="node">
+<title>u67</title>
+<ellipse fill="#ffff77" stroke="#000000" stroke-width="0" cx="864.1679" cy="-253.7961" rx="32.4942" ry="18"/>
+<text text-anchor="middle" x="864.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Either</text>
+</g>
+<!-- u98 -->
+<g id="node38" class="node">
+<title>u98</title>
+<ellipse fill="#ffff77" stroke="#000000" stroke-width="0" cx="582.1679" cy="-253.7961" rx="29.795" ry="18"/>
+<text text-anchor="middle" x="582.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Time</text>
+</g>
+<!-- u85 -->
+<g id="node39" class="node">
+<title>u85</title>
+<ellipse fill="#7777ff" stroke="#000000" stroke-width="0" cx="1475.1679" cy="-1670.7961" rx="131.8766" ry="18"/>
+<text text-anchor="middle" x="1475.1679" y="-1667.0961" font-family="Times,serif" font-size="14.00" fill="#000000">PositionHashQuantifiedGameTree</text>
+</g>
+<!-- u87 -->
+<g id="node41" class="node">
+<title>u87</title>
+<ellipse fill="#7777ff" stroke="#000000" stroke-width="0" cx="1475.1679" cy="-1485.7961" rx="69.5877" ry="18"/>
+<text text-anchor="middle" x="1475.1679" y="-1482.0961" font-family="Times,serif" font-size="14.00" fill="#000000">QuantifiedGame</text>
+</g>
+<!-- u85&#45;&gt;u87 -->
+<g id="edge59" class="edge">
+<title>u85&#45;&gt;u87</title>
+<path fill="none" stroke="#000000" d="M1475.1679,-1652.7207C1475.1679,-1620.3924 1475.1679,-1552.4598 1475.1679,-1513.9671"/>
+<polygon fill="#000000" stroke="#000000" points="1478.668,-1513.9449 1475.1679,-1503.9449 1471.668,-1513.9449 1478.668,-1513.9449"/>
+</g>
+<!-- u80 -->
+<g id="node54" class="node">
+<title>u80</title>
+<ellipse fill="#ff7777" stroke="#000000" stroke-width="0" cx="1077.1679" cy="-1134.7961" rx="62.2891" ry="18"/>
+<text text-anchor="middle" x="1077.1679" y="-1131.0961" font-family="Times,serif" font-size="14.00" fill="#000000">SearchOptions</text>
+</g>
+<!-- u85&#45;&gt;u80 -->
+<g id="edge60" class="edge">
+<title>u85&#45;&gt;u80</title>
+<path fill="none" stroke="#000000" d="M1461.6976,-1652.6553C1402.575,-1573.0328 1165.9213,-1254.3233 1096.4398,-1160.7503"/>
+<polygon fill="#000000" stroke="#000000" points="1099.2034,-1158.6012 1090.4318,-1152.6591 1093.5834,-1162.7743 1099.2034,-1158.6012"/>
+</g>
+<!-- u85&#45;&gt;u57 -->
+<g id="edge61" class="edge">
+<title>u85&#45;&gt;u57</title>
+<path fill="none" stroke="#000000" d="M1553.9787,-1656.351C1575.1379,-1652.5317 1598.0155,-1648.4553 1619.1679,-1644.7961 1963.7443,-1585.1863 2378.6821,-1518.1333 2525.4817,-1494.556"/>
+<polygon fill="#000000" stroke="#000000" points="2526.2645,-1497.9752 2535.5832,-1492.9342 2525.1548,-1491.0637 2526.2645,-1497.9752"/>
+</g>
+<!-- u86 -->
+<g id="node40" class="node">
+<title>u86</title>
+<ellipse fill="#7777ff" stroke="#000000" stroke-width="0" cx="1475.1679" cy="-1318.7961" rx="35.9954" ry="18"/>
+<text text-anchor="middle" x="1475.1679" y="-1315.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Fitness</text>
+</g>
+<!-- u72 -->
+<g id="node51" class="node">
+<title>u72</title>
+<ellipse fill="#ff7777" stroke="#000000" stroke-width="0" cx="1234.1679" cy="-1134.7961" rx="76.8869" ry="18"/>
+<text text-anchor="middle" x="1234.1679" y="-1131.0961" font-family="Times,serif" font-size="14.00" fill="#000000">EvaluationOptions</text>
+</g>
+<!-- u86&#45;&gt;u72 -->
+<g id="edge62" class="edge">
+<title>u86&#45;&gt;u72</title>
+<path fill="none" stroke="#000000" d="M1455.4458,-1303.7386C1413.5755,-1271.7712 1315.5263,-1196.9121 1265.1895,-1158.4806"/>
+<polygon fill="#000000" stroke="#000000" points="1267.0247,-1155.4783 1256.9525,-1152.1918 1262.7768,-1161.0421 1267.0247,-1155.4783"/>
+</g>
+<!-- u86&#45;&gt;u27 -->
+<g id="edge63" class="edge">
+<title>u86&#45;&gt;u27</title>
+<path fill="none" stroke="#000000" d="M1492.2867,-1334.7422C1518.9105,-1358.33 1572.944,-1401.4877 1628.1679,-1417.7961 1739.205,-1450.587 2571.5589,-1478.4654 2670.1679,-1417.7961 2695.168,-1402.4148 2708.1237,-1370.2474 2714.5145,-1346.7394"/>
+<polygon fill="#000000" stroke="#000000" points="2717.9312,-1347.5027 2716.9382,-1336.9545 2711.1365,-1345.8196 2717.9312,-1347.5027"/>
+</g>
+<!-- u87&#45;&gt;u86 -->
+<g id="edge64" class="edge">
+<title>u87&#45;&gt;u86</title>
+<path fill="none" stroke="#000000" d="M1475.1679,-1467.6063C1475.1679,-1438.6195 1475.1679,-1381.7153 1475.1679,-1347.2877"/>
+<polygon fill="#000000" stroke="#000000" points="1478.668,-1346.9635 1475.1679,-1336.9635 1471.668,-1346.9635 1478.668,-1346.9635"/>
+</g>
+<!-- u61 -->
+<g id="node42" class="node">
+<title>u61</title>
+<ellipse fill="#ff7777" stroke="#000000" stroke-width="0" cx="786.1679" cy="-1318.7961" rx="89.0842" ry="18"/>
+<text text-anchor="middle" x="786.1679" y="-1315.0961" font-family="Times,serif" font-size="14.00" fill="#000000">CommandLineOption</text>
+</g>
+<!-- u61&#45;&gt;u13 -->
+<g id="edge65" class="edge">
+<title>u61&#45;&gt;u13</title>
+<path fill="none" stroke="#000000" d="M757.4476,-1301.7255C677.5679,-1251.7987 460.8881,-1098.4992 496.1679,-923.7961 510.6772,-851.9468 520.6255,-833.5152 560.1679,-771.7961 631.6612,-660.2067 923.6603,-364.4814 1010.0085,-277.9204"/>
+<polygon fill="#000000" stroke="#000000" points="1012.6638,-280.2146 1017.2531,-270.6653 1007.7104,-275.2685 1012.6638,-280.2146"/>
+</g>
+<!-- u62 -->
+<g id="node43" class="node">
+<title>u62</title>
+<ellipse fill="#ff7777" stroke="#000000" stroke-width="0" cx="949.1679" cy="-1134.7961" rx="48.1917" ry="18"/>
+<text text-anchor="middle" x="949.1679" y="-1131.0961" font-family="Times,serif" font-size="14.00" fill="#000000">IOOptions</text>
+</g>
+<!-- u64 -->
+<g id="node45" class="node">
+<title>u64</title>
+<ellipse fill="#ff7777" stroke="#000000" stroke-width="0" cx="1102.1679" cy="-949.7961" rx="55.7903" ry="18"/>
+<text text-anchor="middle" x="1102.1679" y="-946.0961" font-family="Times,serif" font-size="14.00" fill="#000000">PGNOptions</text>
+</g>
+<!-- u62&#45;&gt;u64 -->
+<g id="edge66" class="edge">
+<title>u62&#45;&gt;u64</title>
+<path fill="none" stroke="#000000" d="M963.5617,-1117.3917C990.6719,-1084.6115 1049.413,-1013.5847 1081.0204,-975.3666"/>
+<polygon fill="#000000" stroke="#000000" points="1084.0248,-977.2257 1087.7008,-967.289 1078.6305,-972.7645 1084.0248,-977.2257"/>
+</g>
+<!-- u66 -->
+<g id="node46" class="node">
+<title>u66</title>
+<ellipse fill="#ff7777" stroke="#000000" stroke-width="0" cx="597.1679" cy="-949.7961" rx="48.1917" ry="18"/>
+<text text-anchor="middle" x="597.1679" y="-946.0961" font-family="Times,serif" font-size="14.00" fill="#000000">UIOptions</text>
+</g>
+<!-- u62&#45;&gt;u66 -->
+<g id="edge67" class="edge">
+<title>u62&#45;&gt;u66</title>
+<path fill="none" stroke="#000000" d="M913.9366,-1122.2282C856.9167,-1101.099 741.9476,-1055.187 654.1679,-998.7961 643.0169,-991.6326 631.7424,-982.4407 622.1973,-973.9574"/>
+<polygon fill="#000000" stroke="#000000" points="624.3756,-971.2072 614.627,-967.0582 619.6605,-976.381 624.3756,-971.2072"/>
+</g>
+<!-- u63 -->
+<g id="node44" class="node">
+<title>u63</title>
+<ellipse fill="#ff7777" stroke="#000000" stroke-width="0" cx="896.1679" cy="-622.7961" rx="62.2891" ry="18"/>
+<text text-anchor="middle" x="896.1679" y="-619.0961" font-family="Times,serif" font-size="14.00" fill="#000000">CECPFeatures</text>
+</g>
+<!-- u63&#45;&gt;u13 -->
+<g id="edge68" class="edge">
+<title>u63&#45;&gt;u13</title>
+<path fill="none" stroke="#000000" d="M902.9173,-604.7487C925.2502,-545.0325 996.8577,-353.5602 1023.7927,-281.5383"/>
+<polygon fill="#000000" stroke="#000000" points="1027.2067,-282.4013 1027.4314,-271.8088 1020.6502,-279.9492 1027.2067,-282.4013"/>
+</g>
+<!-- u63&#45;&gt;u42 -->
+<g id="edge69" class="edge">
+<title>u63&#45;&gt;u42</title>
+<path fill="none" stroke="#000000" d="M898.4177,-604.7487C905.8467,-545.1549 929.6334,-354.3444 938.6541,-281.9826"/>
+<polygon fill="#000000" stroke="#000000" points="942.1584,-282.165 939.9224,-271.8088 935.2121,-281.299 942.1584,-282.165"/>
+</g>
+<!-- u63&#45;&gt;u10 -->
+<g id="edge70" class="edge">
+<title>u63&#45;&gt;u10</title>
+<path fill="none" stroke="#000000" d="M947.5263,-612.3999C1023.5067,-595.3007 1168.1795,-556.0382 1273.1679,-486.7961 1311.2312,-461.6925 1302.3084,-432.0327 1343.1679,-411.7961 1560.9132,-303.9527 2189.3903,-327.0208 2431.1679,-302.7961 2589.5933,-286.9228 2776.8895,-268.1541 2866.7834,-259.1458"/>
+<polygon fill="#000000" stroke="#000000" points="2867.3941,-262.6022 2876.9952,-258.1225 2866.696,-255.6371 2867.3941,-262.6022"/>
+</g>
+<!-- u64&#45;&gt;u2 -->
+<g id="edge71" class="edge">
+<title>u64&#45;&gt;u2</title>
+<path fill="none" stroke="#000000" d="M1084.7183,-966.9946C1072.4604,-977.991 1055.1062,-991.512 1037.1679,-998.7961 856.2046,-1072.2784 294.3441,-962.3009 165.1679,-1108.7961 116.5846,-1163.893 180.5796,-1253.1286 216.6195,-1295.2953"/>
+<polygon fill="#000000" stroke="#000000" points="214.1998,-1297.8457 223.4131,-1303.077 219.473,-1293.2421 214.1998,-1297.8457"/>
+</g>
+<!-- u65 -->
+<g id="node96" class="node">
+<title>u65</title>
+<ellipse fill="#ff3333" stroke="#000000" stroke-width="0" cx="2920.1679" cy="-437.7961" rx="44.393" ry="18"/>
+<text text-anchor="middle" x="2920.1679" y="-434.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Encoding</text>
+</g>
+<!-- u64&#45;&gt;u65 -->
+<g id="edge72" class="edge">
+<title>u64&#45;&gt;u65</title>
+<path fill="none" stroke="#000000" d="M1134.546,-934.9373C1144.5203,-930.8266 1155.6481,-926.7015 1166.1679,-923.7961 1492.1394,-833.7683 1584.539,-863.0612 1918.1679,-807.7961 1960.9158,-800.715 2647.7406,-691.818 2686.1679,-671.7961 2692.6745,-668.4059 2837.8624,-521.3596 2896.21,-462.1349"/>
+<polygon fill="#000000" stroke="#000000" points="2898.9997,-464.2903 2903.5234,-454.7098 2894.0125,-459.3782 2898.9997,-464.2903"/>
+</g>
+<!-- u66&#45;&gt;u53 -->
+<g id="edge73" class="edge">
+<title>u66&#45;&gt;u53</title>
+<path fill="none" stroke="#000000" d="M588.6084,-931.8775C574.3686,-899.8059 548.4779,-830.4551 560.1679,-771.7961 599.8609,-572.6209 717.5982,-354.1388 759.855,-280.0308"/>
+<polygon fill="#000000" stroke="#000000" points="762.9081,-281.7423 764.8507,-271.3271 756.8371,-278.2577 762.9081,-281.7423"/>
+</g>
+<!-- u66&#45;&gt;u67 -->
+<g id="edge74" class="edge">
+<title>u66&#45;&gt;u67</title>
+<path fill="none" stroke="#000000" d="M627.1614,-935.6186C635.8201,-931.6611 645.3203,-927.4477 654.1679,-923.7961 791.304,-867.1961 882.4293,-929.5715 967.1679,-807.7961 1028.0166,-720.352 910.7818,-380.7209 874.4322,-281.2902"/>
+<polygon fill="#000000" stroke="#000000" points="877.6261,-279.8346 870.8884,-271.6581 871.0566,-282.2516 877.6261,-279.8346"/>
+</g>
+<!-- u68 -->
+<g id="node47" class="node">
+<title>u68</title>
+<ellipse fill="#ff7777" stroke="#000000" stroke-width="0" cx="737.1679" cy="-789.7961" rx="60.3893" ry="18"/>
+<text text-anchor="middle" x="737.1679" y="-786.0961" font-family="Times,serif" font-size="14.00" fill="#000000">CECPOptions</text>
+</g>
+<!-- u66&#45;&gt;u68 -->
+<g id="edge75" class="edge">
+<title>u66&#45;&gt;u68</title>
+<path fill="none" stroke="#000000" d="M612.1503,-932.6733C636.8611,-904.4323 686.2826,-847.9507 715.0324,-815.0937"/>
+<polygon fill="#000000" stroke="#000000" points="717.9177,-817.1114 721.8687,-807.2808 712.6496,-812.5018 717.9177,-817.1114"/>
+</g>
+<!-- u69 -->
+<g id="node48" class="node">
+<title>u69</title>
+<ellipse fill="#ff7777" stroke="#000000" stroke-width="0" cx="887.1679" cy="-789.7961" rx="71.4873" ry="18"/>
+<text text-anchor="middle" x="887.1679" y="-786.0961" font-family="Times,serif" font-size="14.00" fill="#000000">NativeUIOptions</text>
+</g>
+<!-- u66&#45;&gt;u69 -->
+<g id="edge76" class="edge">
+<title>u66&#45;&gt;u69</title>
+<path fill="none" stroke="#000000" d="M624.1899,-934.8874C675.8154,-906.4044 788.6299,-844.1619 848.3297,-811.2241"/>
+<polygon fill="#000000" stroke="#000000" points="850.0233,-814.2871 857.0883,-806.3917 846.6417,-808.158 850.0233,-814.2871"/>
+</g>
+<!-- u70 -->
+<g id="node49" class="node">
+<title>u70</title>
+<ellipse fill="#ff7777" stroke="#000000" stroke-width="0" cx="614.1679" cy="-789.7961" rx="44.6926" ry="18"/>
+<text text-anchor="middle" x="614.1679" y="-786.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Verbosity</text>
+</g>
+<!-- u66&#45;&gt;u70 -->
+<g id="edge77" class="edge">
+<title>u66&#45;&gt;u70</title>
+<path fill="none" stroke="#000000" d="M599.0849,-931.7531C602.0183,-904.1448 607.6468,-851.1707 611.137,-818.3216"/>
+<polygon fill="#000000" stroke="#000000" points="614.6555,-818.3325 612.2317,-808.0187 607.6947,-817.5929 614.6555,-818.3325"/>
+</g>
+<!-- u33 -->
+<g id="node62" class="node">
+<title>u33</title>
+<ellipse fill="#ff77ff" stroke="#000000" stroke-width="0" cx="2373.1679" cy="-1134.7961" rx="62.2891" ry="18"/>
+<text text-anchor="middle" x="2373.1679" y="-1131.0961" font-family="Times,serif" font-size="14.00" fill="#000000">MoveNotation</text>
+</g>
+<!-- u66&#45;&gt;u33 -->
+<g id="edge78" class="edge">
+<title>u66&#45;&gt;u33</title>
+<path fill="none" stroke="#000000" d="M611.738,-967.019C622.2779,-978.1763 637.5426,-991.8744 654.1679,-998.7961 731.4521,-1030.9724 1986.3579,-1110.768 2301.7066,-1130.3863"/>
+<polygon fill="#000000" stroke="#000000" points="2301.8872,-1133.9042 2312.0851,-1131.0314 2302.3215,-1126.9177 2301.8872,-1133.9042"/>
+</g>
+<!-- u60 -->
+<g id="node75" class="node">
+<title>u60</title>
+<ellipse fill="#33ff33" stroke="#000000" stroke-width="0" cx="1629.1679" cy="-253.7961" rx="27" ry="18"/>
+<text text-anchor="middle" x="1629.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Tree</text>
+</g>
+<!-- u66&#45;&gt;u60 -->
+<g id="edge79" class="edge">
+<title>u66&#45;&gt;u60</title>
+<path fill="none" stroke="#000000" d="M627.1354,-935.555C635.7937,-931.5966 645.3002,-927.3985 654.1679,-923.7961 795.8721,-866.2297 850.7094,-892.3439 978.1679,-807.7961 1139.6358,-700.6886 1179.9487,-656.661 1273.1679,-486.7961 1289.7649,-456.5527 1269.8023,-437.1767 1293.1679,-411.7961 1390.6662,-305.8893 1485.781,-392.7482 1598.1679,-302.7961 1605.7052,-296.7633 1611.946,-288.3735 1616.8037,-280.2395"/>
+<polygon fill="#000000" stroke="#000000" points="1619.9636,-281.756 1621.696,-271.3038 1613.8236,-278.3944 1619.9636,-281.756"/>
+</g>
+<!-- u68&#45;&gt;u63 -->
+<g id="edge80" class="edge">
+<title>u68&#45;&gt;u63</title>
+<path fill="none" stroke="#000000" d="M753.8831,-772.2398C782.2732,-742.4213 839.9916,-681.7988 872.5147,-647.6393"/>
+<polygon fill="#000000" stroke="#000000" points="875.0773,-650.0236 879.438,-640.3677 870.0076,-645.1968 875.0773,-650.0236"/>
+</g>
+<!-- u69&#45;&gt;u46 -->
+<g id="edge81" class="edge">
+<title>u69&#45;&gt;u46</title>
+<path fill="none" stroke="#000000" d="M957.4854,-786.3996C1235.9751,-772.6586 2253.059,-719.6335 2389.1679,-671.7961 2405.316,-666.1206 2421.2616,-655.883 2434.0263,-646.2279"/>
+<polygon fill="#000000" stroke="#000000" points="2436.2248,-648.9516 2441.9253,-640.0209 2431.8998,-643.4475 2436.2248,-648.9516"/>
+</g>
+<!-- u71 -->
+<g id="node50" class="node">
+<title>u71</title>
+<ellipse fill="#ff7777" stroke="#000000" stroke-width="0" cx="1077.1679" cy="-1318.7961" rx="38.1938" ry="18"/>
+<text text-anchor="middle" x="1077.1679" y="-1315.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Options</text>
+</g>
+<!-- u71&#45;&gt;u62 -->
+<g id="edge82" class="edge">
+<title>u71&#45;&gt;u62</title>
+<path fill="none" stroke="#000000" d="M1065.1259,-1301.4858C1042.5984,-1269.1025 993.9641,-1199.1907 967.3978,-1161.0016"/>
+<polygon fill="#000000" stroke="#000000" points="970.0426,-1158.6746 961.4587,-1152.4642 964.2962,-1162.672 970.0426,-1158.6746"/>
+</g>
+<!-- u71&#45;&gt;u72 -->
+<g id="edge83" class="edge">
+<title>u71&#45;&gt;u72</title>
+<path fill="none" stroke="#000000" d="M1091.6566,-1301.8156C1119.367,-1269.3398 1180.0047,-1198.274 1212.5325,-1160.1522"/>
+<polygon fill="#000000" stroke="#000000" points="1215.1965,-1162.4222 1219.0249,-1152.5432 1209.8715,-1157.8786 1215.1965,-1162.4222"/>
+</g>
+<!-- u71&#45;&gt;u80 -->
+<g id="edge84" class="edge">
+<title>u71&#45;&gt;u80</title>
+<path fill="none" stroke="#000000" d="M1077.1679,-1300.4808C1077.1679,-1268.3804 1077.1679,-1201.7408 1077.1679,-1163.4783"/>
+<polygon fill="#000000" stroke="#000000" points="1080.668,-1163.0373 1077.1679,-1153.0373 1073.668,-1163.0374 1080.668,-1163.0373"/>
+</g>
+<!-- u72&#45;&gt;u73 -->
+<g id="edge85" class="edge">
+<title>u72&#45;&gt;u73</title>
+<path fill="none" stroke="#000000" d="M1278.2976,-1120.0389C1339.3632,-1098.5245 1451.756,-1054.9223 1537.1679,-998.7961 1578.4432,-971.6731 1579.3315,-952.9915 1619.1679,-923.7961 1799.6932,-791.4918 1869.9957,-797.5144 2055.1679,-671.7961 2066.7218,-663.9519 2078.8897,-654.5988 2089.3567,-646.177"/>
+<polygon fill="#000000" stroke="#000000" points="2091.8015,-648.6997 2097.3421,-639.6691 2087.3792,-643.2735 2091.8015,-648.6997"/>
+</g>
+<!-- u72&#45;&gt;u41 -->
+<g id="edge86" class="edge">
+<title>u72&#45;&gt;u41</title>
+<path fill="none" stroke="#000000" d="M1307.711,-1129.6102C1637.8517,-1106.2746 2968.7698,-1011.5877 3010.1679,-998.7961 3028.9417,-992.9952 3048.0558,-982.4724 3063.3914,-972.6611"/>
+<polygon fill="#000000" stroke="#000000" points="3065.5367,-975.4388 3071.9529,-967.0077 3061.6795,-969.5974 3065.5367,-975.4388"/>
+</g>
+<!-- u75 -->
+<g id="node52" class="node">
+<title>u75</title>
+<ellipse fill="#ff7777" stroke="#000000" stroke-width="0" cx="1243.1679" cy="-949.7961" rx="67.6881" ry="18"/>
+<text text-anchor="middle" x="1243.1679" y="-946.0961" font-family="Times,serif" font-size="14.00" fill="#000000">CriteriaWeights</text>
+</g>
+<!-- u72&#45;&gt;u75 -->
+<g id="edge87" class="edge">
+<title>u72&#45;&gt;u75</title>
+<path fill="none" stroke="#000000" d="M1235.0472,-1116.7207C1236.6199,-1084.3924 1239.9248,-1016.4598 1241.7974,-977.9671"/>
+<polygon fill="#000000" stroke="#000000" points="1245.2948,-978.1032 1242.2849,-967.9449 1238.3031,-977.763 1245.2948,-978.1032"/>
+</g>
+<!-- u79 -->
+<g id="node53" class="node">
+<title>u79</title>
+<ellipse fill="#ff7777" stroke="#000000" stroke-width="0" cx="955.1679" cy="-949.7961" rx="73.387" ry="18"/>
+<text text-anchor="middle" x="955.1679" y="-946.0961" font-family="Times,serif" font-size="14.00" fill="#000000">PieceSquareTable</text>
+</g>
+<!-- u72&#45;&gt;u79 -->
+<g id="edge88" class="edge">
+<title>u72&#45;&gt;u79</title>
+<path fill="none" stroke="#000000" d="M1208.4203,-1117.7233C1157.9687,-1084.2698 1046.0962,-1010.0891 989.4522,-972.5294"/>
+<polygon fill="#000000" stroke="#000000" points="991.1217,-969.4369 980.8532,-966.8276 987.2532,-975.2709 991.1217,-969.4369"/>
+</g>
+<!-- u75&#45;&gt;u76 -->
+<g id="edge89" class="edge">
+<title>u75&#45;&gt;u76</title>
+<path fill="none" stroke="#000000" d="M1261.175,-932.3937C1287.4241,-906.5453 1337.0016,-855.8745 1373.1679,-807.7961 1384.4399,-792.8113 1379.7685,-782.4949 1395.1679,-771.7961 1586.2953,-639.0087 1694.0626,-760.6325 1909.1679,-671.7961 1924.6427,-665.4051 1940.2583,-655.4952 1953.053,-646.2551"/>
+<polygon fill="#000000" stroke="#000000" points="1955.4972,-648.7987 1961.4239,-640.0166 1951.3142,-643.1859 1955.4972,-648.7987"/>
+</g>
+<!-- u79&#45;&gt;u9 -->
+<g id="edge90" class="edge">
+<title>u79&#45;&gt;u9</title>
+<path fill="none" stroke="#000000" d="M997.385,-935.0599C1010.0648,-931.0016 1024.0839,-926.8742 1037.1679,-923.7961 1059.2264,-918.6066 2634.4336,-689.0127 2649.1679,-671.7961 2700.5446,-611.7638 2652.535,-510.4084 2625.1854,-463.293"/>
+<polygon fill="#000000" stroke="#000000" points="2628.1473,-461.4261 2620.0265,-454.6215 2622.1314,-465.0051 2628.1473,-461.4261"/>
+</g>
+<!-- u79&#45;&gt;u11 -->
+<g id="edge91" class="edge">
+<title>u79&#45;&gt;u11</title>
+<path fill="none" stroke="#000000" d="M1000.2806,-935.4897C1012.2696,-931.6884 1025.209,-927.5862 1037.1679,-923.7961 1172.7312,-880.8322 1332.7426,-830.1516 1411.4495,-805.2248"/>
+<polygon fill="#000000" stroke="#000000" points="1412.6173,-808.5264 1421.0938,-802.1704 1410.5038,-801.853 1412.6173,-808.5264"/>
+</g>
+<!-- u79&#45;&gt;u42 -->
+<g id="edge92" class="edge">
+<title>u79&#45;&gt;u42</title>
+<path fill="none" stroke="#000000" d="M963.1686,-931.883C974.5151,-905.3984 994.7293,-853.9429 1002.1679,-807.7961 1030.1763,-634.039 1033.9303,-584.9063 1002.1679,-411.7961 993.3283,-363.619 970.5041,-311.0891 955.6924,-280.3688"/>
+<polygon fill="#000000" stroke="#000000" points="958.7386,-278.6314 951.1928,-271.1942 952.4538,-281.7138 958.7386,-278.6314"/>
+</g>
+<!-- u79&#45;&gt;u74 -->
+<g id="edge93" class="edge">
+<title>u79&#45;&gt;u74</title>
+<path fill="none" stroke="#000000" d="M963.071,-931.7221C974.5017,-905.0372 995.7457,-853.3346 1009.1679,-807.7961 1067.571,-609.6466 1109.5807,-363.6556 1122.7754,-281.7628"/>
+<polygon fill="#000000" stroke="#000000" points="1126.2545,-282.171 1124.3772,-271.7439 1119.3423,-281.0658 1126.2545,-282.171"/>
+</g>
+<!-- u79&#45;&gt;u37 -->
+<g id="edge94" class="edge">
+<title>u79&#45;&gt;u37</title>
+<path fill="none" stroke="#000000" d="M964.0567,-931.8022C1002.9637,-855.0549 1166.5799,-552.5987 1395.1679,-411.7961 1585.1242,-294.7893 1685.276,-401.8782 1885.1679,-302.7961 1897.6557,-296.6062 1909.7221,-287.1705 1919.585,-278.2262"/>
+<polygon fill="#000000" stroke="#000000" points="1922.1243,-280.6422 1926.9884,-271.2298 1917.3163,-275.5546 1922.1243,-280.6422"/>
+</g>
+<!-- u80&#45;&gt;u58 -->
+<g id="edge95" class="edge">
+<title>u80&#45;&gt;u58</title>
+<path fill="none" stroke="#000000" d="M1114.956,-1120.4245C1125.6428,-1116.5058 1137.3181,-1112.3611 1148.1679,-1108.7961 1313.9883,-1054.3114 1413.8288,-1133.2156 1525.1679,-998.7961 1557.4967,-959.7655 1526.7557,-818.1845 1547.1679,-771.7961 1570.0317,-719.836 1618.1888,-673.58 1650.1071,-646.8662"/>
+<polygon fill="#000000" stroke="#000000" points="1652.3442,-649.5579 1657.8467,-640.504 1647.8991,-644.1504 1652.3442,-649.5579"/>
+</g>
+<!-- u80&#45;&gt;u7 -->
+<g id="edge96" class="edge">
+<title>u80&#45;&gt;u7</title>
+<path fill="none" stroke="#000000" d="M1114.9368,-1120.3655C1125.6233,-1116.4462 1137.3034,-1112.3159 1148.1679,-1108.7961 1319.0899,-1053.4213 1380.2067,-1086.2255 1537.1679,-998.7961 1580.3152,-974.7625 1575.2275,-946.3472 1619.1679,-923.7961 1841.8146,-809.529 1968.7817,-956.3632 2170.1679,-807.7961 2184.8969,-796.9302 2175.3182,-782.4966 2190.1679,-771.7961 2386.0655,-630.6347 2497.473,-754.9337 2724.1679,-671.7961 2744.3143,-664.4076 2765.2691,-652.5681 2781.4501,-642.3779"/>
+<polygon fill="#000000" stroke="#000000" points="2783.4024,-645.2836 2789.9129,-636.9251 2779.611,-639.3993 2783.4024,-645.2836"/>
+</g>
+<!-- u80&#45;&gt;u53 -->
+<g id="edge97" class="edge">
+<title>u80&#45;&gt;u53</title>
+<path fill="none" stroke="#000000" d="M1039.8643,-1120.1887C1029.0798,-1116.2245 1017.2325,-1112.115 1006.1679,-1108.7961 802.3372,-1047.6552 672.2312,-1165.6626 540.1679,-998.7961 353.9263,-763.4736 665.2266,-378.3447 753.0944,-278.2051"/>
+<polygon fill="#000000" stroke="#000000" points="755.9549,-280.254 759.9591,-270.445 750.7119,-275.6159 755.9549,-280.254"/>
+</g>
+<!-- u81 -->
+<g id="node55" class="node">
+<title>u81</title>
+<ellipse fill="#ff7777" stroke="#000000" stroke-width="0" cx="763.1679" cy="-949.7961" rx="100.1823" ry="18"/>
+<text text-anchor="middle" x="763.1679" y="-946.0961" font-family="Times,serif" font-size="14.00" fill="#000000">StandardOpeningOptions</text>
+</g>
+<!-- u80&#45;&gt;u81 -->
+<g id="edge98" class="edge">
+<title>u80&#45;&gt;u81</title>
+<path fill="none" stroke="#000000" d="M1049.5777,-1118.5407C993.3787,-1085.4299 865.5412,-1010.1116 801.3861,-972.3132"/>
+<polygon fill="#000000" stroke="#000000" points="802.7913,-969.0788 792.3988,-967.0181 799.2379,-975.1099 802.7913,-969.0788"/>
+</g>
+<!-- u81&#45;&gt;u42 -->
+<g id="edge99" class="edge">
+<title>u81&#45;&gt;u42</title>
+<path fill="none" stroke="#000000" d="M812.0215,-933.9909C864.8314,-913.9745 946.2521,-873.8889 982.1679,-807.7961 1032.2006,-715.725 968.4542,-380.7051 948.0548,-281.596"/>
+<polygon fill="#000000" stroke="#000000" points="951.4652,-280.8045 946.0051,-271.725 944.6114,-282.2277 951.4652,-280.8045"/>
+</g>
+<!-- u81&#45;&gt;u10 -->
+<g id="edge100" class="edge">
+<title>u81&#45;&gt;u10</title>
+<path fill="none" stroke="#000000" d="M795.5633,-932.7073C843.0837,-907.2496 933.9818,-857.0607 1007.1679,-807.7961 1089.174,-752.5944 1112.3586,-740.7765 1183.1679,-671.7961 1236.5679,-619.7752 1329.5657,-447.2092 1395.1679,-411.7961 1403.4834,-407.3072 2598.3668,-286.3211 2866.9753,-259.1696"/>
+<polygon fill="#000000" stroke="#000000" points="2867.6425,-262.6201 2877.2399,-258.1322 2866.9386,-255.6556 2867.6425,-262.6201"/>
+</g>
+<!-- u31 -->
+<g id="node58" class="node">
+<title>u31</title>
+<ellipse fill="#77ffff" stroke="#000000" stroke-width="0" cx="2650.1679" cy="-1134.7961" rx="102.0819" ry="18"/>
+<text text-anchor="middle" x="2650.1679" y="-1131.0961" font-family="Times,serif" font-size="14.00" fill="#000000">GameTerminationReason</text>
+</g>
+<!-- u27&#45;&gt;u31 -->
+<g id="edge101" class="edge">
+<title>u27&#45;&gt;u31</title>
+<path fill="none" stroke="#000000" d="M2713.456,-1301.1534C2701.2365,-1269.0337 2675.2769,-1200.797 2660.6869,-1162.446"/>
+<polygon fill="#000000" stroke="#000000" points="2663.8928,-1161.0298 2657.0658,-1152.9278 2657.3503,-1163.5188 2663.8928,-1161.0298"/>
+</g>
+<!-- u27&#45;&gt;u33 -->
+<g id="edge102" class="edge">
+<title>u27&#45;&gt;u33</title>
+<path fill="none" stroke="#000000" d="M2699.1069,-1304.9391C2692.7684,-1300.9054 2685.7476,-1296.5712 2679.1679,-1292.7961 2586.3771,-1239.5577 2473.8113,-1183.5549 2414.4429,-1154.6596"/>
+<polygon fill="#000000" stroke="#000000" points="2415.9069,-1151.4797 2405.3825,-1150.2594 2412.8488,-1157.7764 2415.9069,-1151.4797"/>
+</g>
+<!-- u51 -->
+<g id="node91" class="node">
+<title>u51</title>
+<ellipse fill="#3333ff" stroke="#000000" stroke-width="0" cx="3561.1679" cy="-1670.7961" rx="82.5854" ry="18"/>
+<text text-anchor="middle" x="3561.1679" y="-1667.0961" font-family="Times,serif" font-size="14.00" fill="#000000">InstancesByPosition</text>
+</g>
+<!-- u27&#45;&gt;u51 -->
+<g id="edge103" class="edge">
+<title>u27&#45;&gt;u51</title>
+<path fill="none" stroke="#000000" d="M2746.2668,-1329.7198C2865.2838,-1379.5343 3357.4715,-1585.5391 3513.495,-1650.8427"/>
+<polygon fill="#000000" stroke="#000000" points="3512.2705,-1654.1243 3522.8465,-1654.7567 3514.9732,-1647.6671 3512.2705,-1654.1243"/>
+</g>
+<!-- u52 -->
+<g id="node92" class="node">
+<title>u52</title>
+<ellipse fill="#3333ff" stroke="#000000" stroke-width="0" cx="3459.1679" cy="-1854.7961" rx="39.7935" ry="18"/>
+<text text-anchor="middle" x="3459.1679" y="-1851.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Position</text>
+</g>
+<!-- u27&#45;&gt;u52 -->
+<g id="edge104" class="edge">
+<title>u27&#45;&gt;u52</title>
+<path fill="none" stroke="#000000" d="M2735.9206,-1334.9632C2792.7159,-1392.6468 2993.8465,-1591.7229 3187.1679,-1719.7961 3265.1123,-1771.4334 3365.6047,-1816.3166 3419.9947,-1839.0208"/>
+<polygon fill="#000000" stroke="#000000" points="3418.7,-1842.2729 3429.2782,-1842.8672 3421.3794,-1835.806 3418.7,-1842.2729"/>
+</g>
+<!-- u30 -->
+<g id="node57" class="node">
+<title>u30</title>
+<ellipse fill="#77ffff" stroke="#000000" stroke-width="0" cx="2612.1679" cy="-949.7961" rx="55.7903" ry="18"/>
+<text text-anchor="middle" x="2612.1679" y="-946.0961" font-family="Times,serif" font-size="14.00" fill="#000000">DrawReason</text>
+</g>
+<!-- u30&#45;&gt;u7 -->
+<g id="edge105" class="edge">
+<title>u30&#45;&gt;u7</title>
+<path fill="none" stroke="#000000" d="M2623.0952,-931.7494C2656.2445,-877.0028 2755.7589,-712.6532 2794.4961,-648.6783"/>
+<polygon fill="#000000" stroke="#000000" points="2797.5696,-650.3597 2799.7552,-639.9927 2791.5817,-646.7339 2797.5696,-650.3597"/>
+</g>
+<!-- u31&#45;&gt;u30 -->
+<g id="edge106" class="edge">
+<title>u31&#45;&gt;u30</title>
+<path fill="none" stroke="#000000" d="M2646.4551,-1116.7207C2639.8147,-1084.3924 2625.8609,-1016.4598 2617.9543,-977.9671"/>
+<polygon fill="#000000" stroke="#000000" points="2621.3363,-977.0361 2615.8957,-967.9449 2614.4794,-978.4446 2621.3363,-977.0361"/>
+</g>
+<!-- u32 -->
+<g id="node59" class="node">
+<title>u32</title>
+<ellipse fill="#77ffff" stroke="#000000" stroke-width="0" cx="2719.1679" cy="-949.7961" rx="33.2948" ry="18"/>
+<text text-anchor="middle" x="2719.1679" y="-946.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Result</text>
+</g>
+<!-- u31&#45;&gt;u32 -->
+<g id="edge107" class="edge">
+<title>u31&#45;&gt;u32</title>
+<path fill="none" stroke="#000000" d="M2656.9095,-1116.7207C2669.0497,-1084.1708 2694.6521,-1015.5267 2708.9545,-977.1796"/>
+<polygon fill="#000000" stroke="#000000" points="2712.2851,-978.2652 2712.5004,-967.6725 2705.7265,-975.8189 2712.2851,-978.2652"/>
+</g>
+<!-- u32&#45;&gt;u3 -->
+<g id="edge108" class="edge">
+<title>u32&#45;&gt;u3</title>
+<path fill="none" stroke="#000000" d="M2740.5672,-935.9446C2747.8532,-931.6357 2756.1787,-927.1428 2764.1679,-923.7961 2942.7845,-848.9729 3066.8682,-961.8844 3184.1679,-807.7961 3198.3685,-789.1418 3199.543,-614.4949 3184.1679,-596.7961 3069.5132,-464.814 2574.0062,-532.1678 2405.1679,-486.7961 2377.9726,-479.488 2348.6724,-467.7311 2325.7167,-457.5655"/>
+<polygon fill="#000000" stroke="#000000" points="2326.8472,-454.2362 2316.2917,-453.3238 2323.9744,-460.6195 2326.8472,-454.2362"/>
+</g>
+<!-- u57&#45;&gt;u58 -->
+<g id="edge109" class="edge">
+<title>u57&#45;&gt;u58</title>
+<path fill="none" stroke="#000000" d="M2532.0862,-1483.9254C2227.0272,-1471.9474 572.5861,-1405.3191 537.1679,-1367.7961 503.3046,-1331.9205 504.9309,-961.1399 537.1679,-923.7961 652.5404,-790.1469 1160.9123,-877.4098 1323.1679,-807.7961 1347.0258,-797.5602 1347.1007,-785.4715 1369.1679,-771.7961 1456.2824,-717.8096 1565.9758,-669.5585 1629.382,-643.4059"/>
+<polygon fill="#000000" stroke="#000000" points="1630.8474,-646.5879 1638.7716,-639.5552 1628.1913,-640.1114 1630.8474,-646.5879"/>
+</g>
+<!-- u57&#45;&gt;u56 -->
+<g id="edge110" class="edge">
+<title>u57&#45;&gt;u56</title>
+<path fill="none" stroke="#000000" d="M2532.0534,-1484.2607C2195.7538,-1473.4313 208.9269,-1407.8205 162.1679,-1367.7961 81.9125,-1299.0999 115.1679,-1240.4375 115.1679,-1134.7961 115.1679,-1134.7961 115.1679,-1134.7961 115.1679,-622.7961 115.1679,-524.9275 107.2933,-479.2873 178.1679,-411.7961 325.0036,-271.9699 442.6222,-398.8874 621.1679,-302.7961 632.7198,-296.579 643.6869,-287.2525 652.6156,-278.3993"/>
+<polygon fill="#000000" stroke="#000000" points="655.1818,-280.7803 659.6043,-271.1527 650.1432,-275.921 655.1818,-280.7803"/>
+</g>
+<!-- u57&#45;&gt;u27 -->
+<g id="edge111" class="edge">
+<title>u57&#45;&gt;u27</title>
+<path fill="none" stroke="#000000" d="M2594.603,-1468.6051C2613.8863,-1445.6369 2649.1134,-1403.6667 2679.1679,-1367.7961 2685.9353,-1359.719 2693.3262,-1350.8888 2699.9459,-1342.9767"/>
+<polygon fill="#000000" stroke="#000000" points="2702.7748,-1345.0498 2706.5066,-1335.1339 2697.4057,-1340.5584 2702.7748,-1345.0498"/>
+</g>
+<!-- u59 -->
+<g id="node61" class="node">
+<title>u59</title>
+<ellipse fill="#77ffff" stroke="#000000" stroke-width="0" cx="2601.1679" cy="-1318.7961" rx="68.7879" ry="18"/>
+<text text-anchor="middle" x="2601.1679" y="-1315.0961" font-family="Times,serif" font-size="14.00" fill="#000000">MoveFrequency</text>
+</g>
+<!-- u57&#45;&gt;u59 -->
+<g id="edge112" class="edge">
+<title>u57&#45;&gt;u59</title>
+<path fill="none" stroke="#000000" d="M2582.4552,-1467.6063C2586.1002,-1438.6195 2593.2559,-1381.7153 2597.5851,-1347.2877"/>
+<polygon fill="#000000" stroke="#000000" points="2601.1082,-1347.3221 2598.8833,-1336.9635 2594.1629,-1346.4487 2601.1082,-1347.3221"/>
+</g>
+<!-- u57&#45;&gt;u60 -->
+<g id="edge113" class="edge">
+<title>u57&#45;&gt;u60</title>
+<path fill="none" stroke="#000000" d="M2532.0895,-1483.931C2225.2028,-1471.9195 551.9609,-1404.7971 515.1679,-1367.7961 480.3505,-1332.782 493.0903,-973.0786 496.1679,-923.7961 505.2967,-777.6096 441.4038,-707.6251 537.1679,-596.7961 617.1489,-504.233 1499.9381,-375.7058 1598.1679,-302.7961 1605.9201,-297.0421 1612.2147,-288.7222 1617.0558,-280.5665"/>
+<polygon fill="#000000" stroke="#000000" points="1620.2393,-282.037 1621.9042,-271.5738 1614.0777,-278.715 1620.2393,-282.037"/>
+</g>
+<!-- u59&#45;&gt;u7 -->
+<g id="edge114" class="edge">
+<title>u59&#45;&gt;u7</title>
+<path fill="none" stroke="#000000" d="M2589.8849,-1300.9033C2574.8248,-1275.8563 2548.919,-1228.3926 2539.1679,-1183.7961 2527.6925,-1131.3137 2530.9423,-964.3408 2547.1679,-923.7961 2560.6397,-890.1324 2727.4152,-710.8065 2788.194,-646.1002"/>
+<polygon fill="#000000" stroke="#000000" points="2790.7627,-648.4777 2795.0632,-638.7949 2785.6631,-643.6825 2790.7627,-648.4777"/>
+</g>
+<!-- u38 -->
+<g id="node73" class="node">
+<title>u38</title>
+<ellipse fill="#33ff33" stroke="#000000" stroke-width="0" cx="2313.1679" cy="-253.7961" rx="34.394" ry="18"/>
+<text text-anchor="middle" x="2313.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Empty</text>
+</g>
+<!-- u59&#45;&gt;u38 -->
+<g id="edge115" class="edge">
+<title>u59&#45;&gt;u38</title>
+<path fill="none" stroke="#000000" d="M2536.8991,-1312.2658C2407.8976,-1297.692 2124.8155,-1257.8313 2067.1679,-1183.7961 2045.8126,-1156.3702 2017.0043,-1025.636 2068.1679,-923.7961 2118.6069,-823.3983 2168.828,-820.3145 2270.1679,-771.7961 2433.5067,-693.5945 2553.9329,-814.7011 2665.1679,-671.7961 2695.6734,-632.6052 2707.9306,-486.0601 2652.1679,-411.7961 2567.9903,-299.6896 2471.7401,-382.1484 2356.1679,-302.7961 2346.8345,-296.3878 2338.2297,-287.506 2331.2092,-279.0623"/>
+<polygon fill="#000000" stroke="#000000" points="2333.9384,-276.8709 2324.9915,-271.196 2328.4467,-281.2116 2333.9384,-276.8709"/>
+</g>
+<!-- u39 -->
+<g id="node74" class="node">
+<title>u39</title>
+<ellipse fill="#33ff33" stroke="#000000" stroke-width="0" cx="2392.1679" cy="-253.7961" rx="27" ry="18"/>
+<text text-anchor="middle" x="2392.1679" y="-250.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Null</text>
+</g>
+<!-- u59&#45;&gt;u39 -->
+<g id="edge116" class="edge">
+<title>u59&#45;&gt;u39</title>
+<path fill="none" stroke="#000000" d="M2538.6702,-1311.025C2418.2678,-1294.6337 2161.4001,-1252.291 2109.1679,-1183.7961 2039.0974,-1091.9091 2050.7689,-1023.5089 2109.1679,-923.7961 2178.9584,-804.6328 2253.2575,-826.2422 2380.1679,-771.7961 2518.6634,-712.3798 2592.4304,-772.9201 2704.1679,-671.7961 2770.3279,-611.9203 2764.4838,-574.2578 2782.1679,-486.7961 2788.7739,-454.1239 2800.7945,-439.4395 2782.1679,-411.7961 2700.9056,-291.1968 2510.2097,-262.617 2429.4034,-255.8698"/>
+<polygon fill="#000000" stroke="#000000" points="2429.4423,-252.3625 2419.2036,-255.0866 2428.9063,-259.342 2429.4423,-252.3625"/>
+</g>
+<!-- u33&#45;&gt;u26 -->
+<g id="edge117" class="edge">
+<title>u33&#45;&gt;u26</title>
+<path fill="none" stroke="#000000" d="M2419.4367,-1122.58C2494.0925,-1102.023 2644.8196,-1056.9937 2764.1679,-998.7961 2781.2287,-990.4767 2799.1266,-979.0858 2813.2654,-969.3804"/>
+<polygon fill="#000000" stroke="#000000" points="2815.3491,-972.1943 2821.5419,-963.5978 2811.3399,-966.4561 2815.3491,-972.1943"/>
+</g>
+<!-- u33&#45;&gt;u28 -->
+<g id="edge118" class="edge">
+<title>u33&#45;&gt;u28</title>
+<path fill="none" stroke="#000000" d="M2389.9342,-1117.4379C2413.319,-1092.6073 2456.1195,-1044.8445 2485.1679,-998.7961 2504.7936,-967.6848 2492.0592,-947.5235 2520.1679,-923.7961 2552.5242,-896.4831 2812.8819,-834.3178 2939.5023,-805.2793"/>
+<polygon fill="#000000" stroke="#000000" points="2940.5206,-808.6368 2949.4879,-802.9944 2938.9591,-801.8132 2940.5206,-808.6368"/>
+</g>
+<!-- u34 -->
+<g id="node63" class="node">
+<title>u34</title>
+<ellipse fill="#ff77ff" stroke="#000000" stroke-width="0" cx="2332.1679" cy="-949.7961" rx="61.99" ry="18"/>
+<text text-anchor="middle" x="2332.1679" y="-946.0961" font-family="Times,serif" font-size="14.00" fill="#000000">ICCFNumeric</text>
+</g>
+<!-- u33&#45;&gt;u34 -->
+<g id="edge119" class="edge">
+<title>u33&#45;&gt;u34</title>
+<path fill="none" stroke="#000000" d="M2369.162,-1116.7207C2361.9973,-1084.3924 2346.942,-1016.4598 2338.4112,-977.9671"/>
+<polygon fill="#000000" stroke="#000000" points="2341.7709,-976.9507 2336.19,-967.9449 2334.9367,-978.4653 2341.7709,-976.9507"/>
+</g>
+<!-- u35 -->
+<g id="node64" class="node">
+<title>u35</title>
+<ellipse fill="#ff77ff" stroke="#000000" stroke-width="0" cx="2187.1679" cy="-949.7961" rx="65.7887" ry="18"/>
+<text text-anchor="middle" x="2187.1679" y="-946.0961" font-family="Times,serif" font-size="14.00" fill="#000000">PureCoordinate</text>
+</g>
+<!-- u33&#45;&gt;u35 -->
+<g id="edge120" class="edge">
+<title>u33&#45;&gt;u35</title>
+<path fill="none" stroke="#000000" d="M2355.6694,-1117.3917C2322.435,-1084.336 2250.0984,-1012.3883 2211.9149,-974.4101"/>
+<polygon fill="#000000" stroke="#000000" points="2214.3136,-971.8594 2204.7553,-967.289 2209.3772,-976.8225 2214.3136,-971.8594"/>
+</g>
+<!-- u36 -->
+<g id="node65" class="node">
+<title>u36</title>
+<ellipse fill="#ff77ff" stroke="#000000" stroke-width="0" cx="2444.1679" cy="-949.7961" rx="32.4942" ry="18"/>
+<text text-anchor="middle" x="2444.1679" y="-946.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Smith</text>
+</g>
+<!-- u33&#45;&gt;u36 -->
+<g id="edge121" class="edge">
+<title>u33&#45;&gt;u36</title>
+<path fill="none" stroke="#000000" d="M2380.1049,-1116.7207C2392.597,-1084.1708 2418.9415,-1015.5267 2433.6585,-977.1796"/>
+<polygon fill="#000000" stroke="#000000" points="2436.9917,-978.2627 2437.3072,-967.6725 2430.4565,-975.7545 2436.9917,-978.2627"/>
+</g>
+<!-- u33&#45;&gt;u37 -->
+<g id="edge122" class="edge">
+<title>u33&#45;&gt;u37</title>
+<path fill="none" stroke="#000000" d="M2321.4849,-1124.6147C2259.3037,-1109.2934 2157.6121,-1073.7194 2112.1679,-998.7961 2094.8811,-970.2956 2095.3906,-952.5995 2112.1679,-923.7961 2181.0899,-805.4704 2255.5104,-828.4681 2380.1679,-771.7961 2502.3698,-716.2404 2587.5353,-781.3084 2665.1679,-671.7961 2696.2193,-627.9934 2709.2804,-474.6562 2652.1679,-411.7961 2454.8943,-194.6699 2267.3699,-426.0728 2001.1679,-302.7961 1988.3317,-296.8517 1976.0653,-287.2807 1966.1466,-278.1681"/>
+<polygon fill="#000000" stroke="#000000" points="1968.3636,-275.4444 1958.7293,-271.0363 1963.5119,-280.4903 1968.3636,-275.4444"/>
+</g>
+<!-- u34&#45;&gt;u7 -->
+<g id="edge123" class="edge">
+<title>u34&#45;&gt;u7</title>
+<path fill="none" stroke="#000000" d="M2343.4577,-932.0131C2366.7451,-896.6738 2423.5476,-817.1194 2490.1679,-771.7961 2597.3501,-698.8776 2655.9794,-743.2132 2764.1679,-671.7961 2774.1583,-665.2013 2783.5291,-656.0226 2791.1724,-647.3902"/>
+<polygon fill="#000000" stroke="#000000" points="2793.8869,-649.6006 2797.6744,-639.7059 2788.5431,-645.0791 2793.8869,-649.6006"/>
+</g>
+<!-- u35&#45;&gt;u7 -->
+<g id="edge124" class="edge">
+<title>u35&#45;&gt;u7</title>
+<path fill="none" stroke="#000000" d="M2207.565,-932.4858C2249.51,-897.651 2349.5516,-818.4393 2445.1679,-771.7961 2578.7069,-706.6535 2638.3114,-750.767 2764.1679,-671.7961 2774.3078,-665.4336 2783.7083,-656.301 2791.3336,-647.6405"/>
+<polygon fill="#000000" stroke="#000000" points="2794.0686,-649.8259 2797.8075,-639.9127 2788.7027,-645.3306 2794.0686,-649.8259"/>
+</g>
+<!-- u36&#45;&gt;u25 -->
+<g id="edge125" class="edge">
+<title>u36&#45;&gt;u25</title>
+<path fill="none" stroke="#000000" d="M2470.4572,-939.1741C2536.5077,-912.4871 2710.096,-842.3504 2793.767,-808.5439"/>
+<polygon fill="#000000" stroke="#000000" points="2795.3099,-811.6955 2803.2705,-804.7041 2792.6875,-805.2052 2795.3099,-811.6955"/>
+</g>
+<!-- u4 -->
+<g id="node66" class="node">
+<title>u4</title>
+<ellipse fill="#33ff33" stroke="#000000" stroke-width="0" cx="2192.1679" cy="-93.7961" rx="114.2798" ry="18"/>
+<text text-anchor="middle" x="2192.1679" y="-90.0961" font-family="Times,serif" font-size="14.00" fill="#000000">ExtendedPositionDescription</text>
+</g>
+<!-- u5&#45;&gt;u4 -->
+<g id="edge126" class="edge">
+<title>u5&#45;&gt;u4</title>
+<path fill="none" stroke="#000000" d="M2192.1679,-235.7531C2192.1679,-208.1448 2192.1679,-155.1707 2192.1679,-122.3216"/>
+<polygon fill="#000000" stroke="#000000" points="2195.668,-122.0186 2192.1679,-112.0187 2188.668,-122.0187 2195.668,-122.0186"/>
+</g>
+<!-- u20&#45;&gt;u15 -->
+<g id="edge127" class="edge">
+<title>u20&#45;&gt;u15</title>
+<path fill="none" stroke="#000000" d="M1714.4465,-235.7531C1708.7275,-208.0247 1697.7313,-154.7096 1690.9631,-121.8943"/>
+<polygon fill="#000000" stroke="#000000" points="1694.3742,-121.1055 1688.9263,-112.0187 1687.5185,-122.5195 1694.3742,-121.1055"/>
+</g>
+<!-- u84 -->
+<g id="node76" class="node">
+<title>u84</title>
+<ellipse fill="#bbff77" stroke="#000000" stroke-width="0" cx="1697.1679" cy="-1485.7961" rx="51.9908" ry="18"/>
+<text text-anchor="middle" x="1697.1679" y="-1482.0961" font-family="Times,serif" font-size="14.00" fill="#000000">SearchState</text>
+</g>
+<!-- u84&#45;&gt;u85 -->
+<g id="edge128" class="edge">
+<title>u84&#45;&gt;u85</title>
+<path fill="none" stroke="#000000" d="M1677.0031,-1502.6001C1637.6541,-1535.3909 1550.485,-1608.0318 1504.6483,-1646.229"/>
+<polygon fill="#000000" stroke="#000000" points="1502.2999,-1643.63 1496.8584,-1652.7207 1506.7813,-1649.0076 1502.2999,-1643.63"/>
+</g>
+<!-- u88 -->
+<g id="node77" class="node">
+<title>u88</title>
+<ellipse fill="#bbff77" stroke="#000000" stroke-width="0" cx="1712.1679" cy="-1318.7961" rx="81.4863" ry="18"/>
+<text text-anchor="middle" x="1712.1679" y="-1315.0961" font-family="Times,serif" font-size="14.00" fill="#000000">DynamicMoveData</text>
+</g>
+<!-- u84&#45;&gt;u88 -->
+<g id="edge129" class="edge">
+<title>u84&#45;&gt;u88</title>
+<path fill="none" stroke="#000000" d="M1698.8017,-1467.6063C1701.4053,-1438.6195 1706.5164,-1381.7153 1709.6087,-1347.2877"/>
+<polygon fill="#000000" stroke="#000000" points="1713.1273,-1347.2366 1710.5361,-1336.9635 1706.1554,-1346.6103 1713.1273,-1347.2366"/>
+</g>
+<!-- u88&#45;&gt;u26 -->
+<g id="edge130" class="edge">
+<title>u88&#45;&gt;u26</title>
+<path fill="none" stroke="#000000" d="M1791.2746,-1314.4723C1966.6037,-1303.4257 2380.8394,-1268.8065 2488.1679,-1183.7961 2516.5767,-1161.2946 2494.8027,-1134.6803 2520.1679,-1108.7961 2603.4257,-1023.8346 2659.6668,-1055.6279 2764.1679,-998.7961 2780.8427,-989.7277 2798.7192,-978.2953 2812.9428,-968.7546"/>
+<polygon fill="#000000" stroke="#000000" points="2814.9728,-971.607 2821.2836,-963.0968 2811.0432,-965.814 2814.9728,-971.607"/>
+</g>
+<!-- u88&#45;&gt;u80 -->
+<g id="edge131" class="edge">
+<title>u88&#45;&gt;u80</title>
+<path fill="none" stroke="#000000" d="M1662.5666,-1304.4817C1648.5675,-1300.5636 1633.2999,-1296.4048 1619.1679,-1292.7961 1410.9825,-1239.6345 1344.7301,-1270.575 1148.1679,-1183.7961 1133.2508,-1177.2105 1118.1799,-1167.3637 1105.7842,-1158.2207"/>
+<polygon fill="#000000" stroke="#000000" points="1107.7447,-1155.3147 1097.6646,-1152.0522 1103.5101,-1160.8886 1107.7447,-1155.3147"/>
+</g>
+<!-- u90 -->
+<g id="node79" class="node">
+<title>u90</title>
+<ellipse fill="#bbff77" stroke="#000000" stroke-width="0" cx="1687.1679" cy="-1134.7961" rx="55.7903" ry="18"/>
+<text text-anchor="middle" x="1687.1679" y="-1131.0961" font-family="Times,serif" font-size="14.00" fill="#000000">KillerMoves</text>
+</g>
+<!-- u88&#45;&gt;u90 -->
+<g id="edge132" class="edge">
+<title>u88&#45;&gt;u90</title>
+<path fill="none" stroke="#000000" d="M1709.6794,-1300.4808C1705.2992,-1268.2426 1696.1858,-1201.1682 1690.9982,-1162.9872"/>
+<polygon fill="#000000" stroke="#000000" points="1694.4608,-1162.4751 1689.6463,-1153.0373 1687.5246,-1163.4175 1694.4608,-1162.4751"/>
+</g>
+<!-- u91 -->
+<g id="node80" class="node">
+<title>u91</title>
+<ellipse fill="#bbff77" stroke="#000000" stroke-width="0" cx="1823.1679" cy="-1134.7961" rx="61.99" ry="18"/>
+<text text-anchor="middle" x="1823.1679" y="-1131.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Transpositions</text>
+</g>
+<!-- u88&#45;&gt;u91 -->
+<g id="edge133" class="edge">
+<title>u88&#45;&gt;u91</title>
+<path fill="none" stroke="#000000" d="M1723.0131,-1300.8184C1742.6262,-1268.3067 1784.0804,-1199.5897 1807.0305,-1161.5464"/>
+<polygon fill="#000000" stroke="#000000" points="1810.2734,-1162.9464 1812.442,-1152.5759 1804.2796,-1159.3306 1810.2734,-1162.9464"/>
+</g>
+<!-- u89 -->
+<g id="node78" class="node">
+<title>u89</title>
+<ellipse fill="#bbff77" stroke="#000000" stroke-width="0" cx="1697.1679" cy="-949.7961" rx="65.7887" ry="18"/>
+<text text-anchor="middle" x="1697.1679" y="-946.0961" font-family="Times,serif" font-size="14.00" fill="#000000">EphemeralData</text>
+</g>
+<!-- u89&#45;&gt;u7 -->
+<g id="edge134" class="edge">
+<title>u89&#45;&gt;u7</title>
+<path fill="none" stroke="#000000" d="M1737.1043,-935.4289C1748.3933,-931.5103 1760.7217,-927.3644 1772.1679,-923.7961 1956.2297,-866.4149 2008.1287,-871.3029 2190.1679,-807.7961 2228.9046,-794.2822 2236.0956,-784.3069 2275.1679,-771.7961 2469.875,-709.4513 2533.4488,-745.4437 2724.1679,-671.7961 2744.1857,-664.0661 2765.1374,-652.2182 2781.3489,-642.1091"/>
+<polygon fill="#000000" stroke="#000000" points="2783.2754,-645.0317 2789.8315,-636.709 2779.5162,-639.1267 2783.2754,-645.0317"/>
+</g>
+<!-- u90&#45;&gt;u38 -->
+<g id="edge135" class="edge">
+<title>u90&#45;&gt;u38</title>
+<path fill="none" stroke="#000000" d="M1672.0174,-1117.2467C1651.581,-1092.5663 1615.6213,-1045.3888 1597.1679,-998.7961 1512.7629,-785.6843 1538.8834,-715.9839 1535.1679,-486.7961 1534.6275,-453.4671 1513.3975,-437.0382 1535.1679,-411.7961 1750.5638,-162.0515 1978.6834,-458.9582 2269.1679,-302.7961 2279.6536,-297.159 2288.8886,-288.0012 2296.1557,-279.1193"/>
+<polygon fill="#000000" stroke="#000000" points="2298.9574,-281.2173 2302.2556,-271.1489 2293.3985,-276.9629 2298.9574,-281.2173"/>
+</g>
+<!-- u90&#45;&gt;u89 -->
+<g id="edge136" class="edge">
+<title>u90&#45;&gt;u89</title>
+<path fill="none" stroke="#000000" d="M1688.1449,-1116.7207C1689.8924,-1084.3924 1693.5644,-1016.4598 1695.6451,-977.9671"/>
+<polygon fill="#000000" stroke="#000000" points="1699.1419,-978.1193 1696.1868,-967.9449 1692.1521,-977.7414 1699.1419,-978.1193"/>
+</g>
+<!-- u91&#45;&gt;u38 -->
+<g id="edge137" class="edge">
+<title>u91&#45;&gt;u38</title>
+<path fill="none" stroke="#000000" d="M1784.5381,-1120.5203C1737.4683,-1100.9105 1659.6015,-1060.8484 1622.1679,-998.7961 1569.7389,-911.8868 1621.7967,-870.2615 1597.1679,-771.7961 1585.5526,-725.3586 1566.2201,-718.8005 1557.1679,-671.7961 1546.2416,-615.0608 1519.5308,-455.6335 1557.1679,-411.7961 1765.7049,-168.9046 1987.5401,-455.0122 2269.1679,-302.7961 2279.6409,-297.1355 2288.8736,-287.9733 2296.1423,-279.0945"/>
+<polygon fill="#000000" stroke="#000000" points="2298.9417,-281.1955 2302.2447,-271.1286 2293.3849,-276.9385 2298.9417,-281.1955"/>
+</g>
+<!-- u91&#45;&gt;u89 -->
+<g id="edge138" class="edge">
+<title>u91&#45;&gt;u89</title>
+<path fill="none" stroke="#000000" d="M1811.0864,-1117.0575C1788.8472,-1084.4046 1741.3234,-1014.6277 1715.2349,-976.3231"/>
+<polygon fill="#000000" stroke="#000000" points="1717.9199,-974.0477 1709.3978,-967.7528 1712.1343,-977.9882 1717.9199,-974.0477"/>
+</g>
+<!-- u92 -->
+<g id="node81" class="node">
+<title>u92</title>
+<ellipse fill="#bbff77" stroke="#000000" stroke-width="0" cx="1860.1679" cy="-949.7961" rx="79.0865" ry="18"/>
+<text text-anchor="middle" x="1860.1679" y="-946.0961" font-family="Times,serif" font-size="14.00" fill="#000000">TranspositionValue</text>
+</g>
+<!-- u91&#45;&gt;u92 -->
+<g id="edge139" class="edge">
+<title>u91&#45;&gt;u92</title>
+<path fill="none" stroke="#000000" d="M1826.7829,-1116.7207C1833.2486,-1084.3924 1846.8351,-1016.4598 1854.5337,-977.9671"/>
+<polygon fill="#000000" stroke="#000000" points="1858.0089,-978.4371 1856.5381,-967.9449 1851.1448,-977.0643 1858.0089,-978.4371"/>
+</g>
+<!-- u92&#45;&gt;u7 -->
+<g id="edge140" class="edge">
+<title>u92&#45;&gt;u7</title>
+<path fill="none" stroke="#000000" d="M1902.7473,-934.4623C1991.2317,-902.7653 2201.6243,-828.2714 2380.1679,-771.7961 2531.9725,-723.7786 2577.5431,-733.8567 2724.1679,-671.7961 2743.7956,-663.4884 2764.5916,-651.7287 2780.8165,-641.8121"/>
+<polygon fill="#000000" stroke="#000000" points="2782.6769,-644.7767 2789.3235,-636.5261 2778.9824,-638.8311 2782.6769,-644.7767"/>
+</g>
+<!-- u99 -->
+<g id="node82" class="node">
+<title>u99</title>
+<ellipse fill="#bbff77" stroke="#000000" stroke-width="0" cx="1665.1679" cy="-1854.7961" rx="34.394" ry="18"/>
+<text text-anchor="middle" x="1665.1679" y="-1851.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Search</text>
+</g>
+<!-- u100 -->
+<g id="node83" class="node">
+<title>u100</title>
+<ellipse fill="#bbff77" stroke="#000000" stroke-width="0" cx="1681.1679" cy="-1670.7961" rx="48.1917" ry="18"/>
+<text text-anchor="middle" x="1681.1679" y="-1667.0961" font-family="Times,serif" font-size="14.00" fill="#000000">AlphaBeta</text>
+</g>
+<!-- u99&#45;&gt;u100 -->
+<g id="edge141" class="edge">
+<title>u99&#45;&gt;u100</title>
+<path fill="none" stroke="#000000" d="M1666.7605,-1836.4808C1669.5518,-1804.3804 1675.3466,-1737.7408 1678.6738,-1699.4783"/>
+<polygon fill="#000000" stroke="#000000" points="1682.2021,-1699.303 1679.5817,-1689.0373 1675.2284,-1698.6965 1682.2021,-1699.303"/>
+</g>
+<!-- u100&#45;&gt;u84 -->
+<g id="edge142" class="edge">
+<title>u100&#45;&gt;u84</title>
+<path fill="none" stroke="#000000" d="M1682.7311,-1652.7207C1685.5271,-1620.3924 1691.4023,-1552.4598 1694.7314,-1513.9671"/>
+<polygon fill="#000000" stroke="#000000" points="1698.2235,-1514.2093 1695.5982,-1503.9449 1691.2495,-1513.6061 1698.2235,-1514.2093"/>
+</g>
+<!-- u40 -->
+<g id="node84" class="node">
+<title>u40</title>
+<ellipse fill="#3333ff" stroke="#000000" stroke-width="0" cx="3524.1679" cy="-1485.7961" rx="32.4942" ry="18"/>
+<text text-anchor="middle" x="3524.1679" y="-1482.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Board</text>
+</g>
+<!-- u44 -->
+<g id="node86" class="node">
+<title>u44</title>
+<ellipse fill="#3333ff" stroke="#000000" stroke-width="0" cx="3514.1679" cy="-1318.7961" rx="143.7746" ry="18"/>
+<text text-anchor="middle" x="3514.1679" y="-1315.0961" font-family="Times,serif" font-size="14.00" fill="#000000">CoordinatesByRankByLogicalColour</text>
+</g>
+<!-- u40&#45;&gt;u44 -->
+<g id="edge143" class="edge">
+<title>u40&#45;&gt;u44</title>
+<path fill="none" stroke="#000000" d="M3523.0786,-1467.6063C3521.3429,-1438.6195 3517.9355,-1381.7153 3515.8739,-1347.2877"/>
+<polygon fill="#000000" stroke="#000000" points="3519.3473,-1346.7364 3515.2557,-1336.9635 3512.3598,-1347.1549 3519.3473,-1346.7364"/>
+</g>
+<!-- u43 -->
+<g id="node85" class="node">
+<title>u43</title>
+<ellipse fill="#3333ff" stroke="#000000" stroke-width="0" cx="3244.1679" cy="-949.7961" rx="35.9954" ry="18"/>
+<text text-anchor="middle" x="3244.1679" y="-946.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Censor</text>
+</g>
+<!-- u43&#45;&gt;u24 -->
+<g id="edge144" class="edge">
+<title>u43&#45;&gt;u24</title>
+<path fill="none" stroke="#000000" d="M3233.0579,-932.3687C3215.0291,-904.0882 3179.3185,-848.0716 3158.4283,-815.3027"/>
+<polygon fill="#000000" stroke="#000000" points="3161.2831,-813.2698 3152.9562,-806.719 3155.3805,-817.0328 3161.2831,-813.2698"/>
+</g>
+<!-- u45 -->
+<g id="node87" class="node">
+<title>u45</title>
+<ellipse fill="#3333ff" stroke="#000000" stroke-width="0" cx="3343.1679" cy="-1134.7961" rx="107.4815" ry="18"/>
+<text text-anchor="middle" x="3343.1679" y="-1131.0961" font-family="Times,serif" font-size="14.00" fill="#000000">MaybePieceByCoordinates</text>
+</g>
+<!-- u44&#45;&gt;u45 -->
+<g id="edge145" class="edge">
+<title>u44&#45;&gt;u45</title>
+<path fill="none" stroke="#000000" d="M3497.4603,-1300.8184C3466.94,-1267.9778 3402.0883,-1198.1959 3366.9641,-1160.4014"/>
+<polygon fill="#000000" stroke="#000000" points="3369.3146,-1157.7893 3359.9432,-1152.8468 3364.187,-1162.5546 3369.3146,-1157.7893"/>
+</g>
+<!-- u45&#45;&gt;u46 -->
+<g id="edge146" class="edge">
+<title>u45&#45;&gt;u46</title>
+<path fill="none" stroke="#000000" d="M3337.3872,-1116.4457C3329.3127,-1090.4364 3314.4898,-1041.2819 3304.1679,-998.7961 3296.1426,-965.7635 3303.5422,-954.6009 3289.1679,-923.7961 3261.2261,-863.9156 3227.7765,-865.8247 3196.1679,-807.7961 3188.1003,-792.9853 3197.0593,-782.6706 3184.1679,-771.7961 2960.416,-583.0523 2805.5539,-779.0105 2533.1679,-671.7961 2517.6211,-665.6767 2502.081,-655.7107 2489.4384,-646.3589"/>
+<polygon fill="#000000" stroke="#000000" points="2491.2515,-643.339 2481.1842,-640.0376 2486.9954,-648.8965 2491.2515,-643.339"/>
+</g>
+<!-- u45&#45;&gt;u7 -->
+<g id="edge147" class="edge">
+<title>u45&#45;&gt;u7</title>
+<path fill="none" stroke="#000000" d="M3342.4337,-1116.5389C3340.3654,-1079.0008 3332.6189,-991.0397 3304.1679,-923.7961 3271.8759,-847.4745 3261.5997,-822.653 3196.1679,-771.7961 3087.5601,-687.3807 2925.4538,-645.8836 2850.6546,-630.3305"/>
+<polygon fill="#000000" stroke="#000000" points="2851.191,-626.8681 2840.6942,-628.3063 2849.7968,-633.7278 2851.191,-626.8681"/>
+</g>
+<!-- u45&#45;&gt;u29 -->
+<g id="edge148" class="edge">
+<title>u45&#45;&gt;u29</title>
+<path fill="none" stroke="#000000" d="M3285.774,-1119.4805C3216.5212,-1099.2273 3098.5174,-1058.9248 3011.1679,-998.7961 3001.5537,-992.178 2992.4295,-983.2504 2984.8803,-974.8287"/>
+<polygon fill="#000000" stroke="#000000" points="2987.3299,-972.3088 2978.1604,-967.0011 2982.0186,-976.8685 2987.3299,-972.3088"/>
+</g>
+<!-- u45&#45;&gt;u41 -->
+<g id="edge149" class="edge">
+<title>u45&#45;&gt;u41</title>
+<path fill="none" stroke="#000000" d="M3319.3886,-1117.0575C3274.3488,-1083.4593 3176.6193,-1010.5562 3126.3768,-973.077"/>
+<polygon fill="#000000" stroke="#000000" points="3128.2615,-970.1164 3118.1532,-966.9425 3124.076,-975.7272 3128.2615,-970.1164"/>
+</g>
+<!-- u45&#45;&gt;u38 -->
+<g id="edge150" class="edge">
+<title>u45&#45;&gt;u38</title>
+<path fill="none" stroke="#000000" d="M3343.9502,-1116.5604C3346.1598,-1040.0967 3343.873,-742.5541 3184.1679,-596.7961 3063.1035,-486.3044 2963.3573,-585.0526 2832.1679,-486.7961 2800.1026,-462.7803 2814.8511,-434.9638 2782.1679,-411.7961 2622.7291,-298.7772 2522.7271,-405.0311 2356.1679,-302.7961 2346.3727,-296.7838 2337.5826,-287.8314 2330.5413,-279.2173"/>
+<polygon fill="#000000" stroke="#000000" points="2333.2219,-276.9615 2324.3506,-271.1692 2327.6735,-281.2295 2333.2219,-276.9615"/>
+</g>
+<!-- u45&#45;&gt;u43 -->
+<g id="edge151" class="edge">
+<title>u45&#45;&gt;u43</title>
+<path fill="none" stroke="#000000" d="M3333.4951,-1116.7207C3315.9575,-1083.9485 3278.8399,-1014.5873 3258.4035,-976.3981"/>
+<polygon fill="#000000" stroke="#000000" points="3261.3935,-974.5674 3253.5893,-967.4018 3255.2217,-977.8702 3261.3935,-974.5674"/>
+</g>
+<!-- u48 -->
+<g id="node88" class="node">
+<title>u48</title>
+<ellipse fill="#3333ff" stroke="#000000" stroke-width="0" cx="3793.1679" cy="-1670.7961" rx="131.077" ry="18"/>
+<text text-anchor="middle" x="3793.1679" y="-1667.0961" font-family="Times,serif" font-size="14.00" fill="#000000">CastleableRooksByLogicalColour</text>
+</g>
+<!-- u48&#45;&gt;u26 -->
+<g id="edge152" class="edge">
+<title>u48&#45;&gt;u26</title>
+<path fill="none" stroke="#000000" d="M3793.6592,-1652.5559C3794.2386,-1589.8951 3786.7506,-1382.3817 3667.1679,-1292.7961 3505.9288,-1172.0036 3413.3076,-1260.873 3227.1679,-1183.7961 3081.9716,-1123.6731 2927.2464,-1014.5202 2866.6522,-969.7599"/>
+<polygon fill="#000000" stroke="#000000" points="2868.5224,-966.7892 2858.4075,-963.6367 2864.3488,-972.4089 2868.5224,-966.7892"/>
+</g>
+<!-- u48&#45;&gt;u40 -->
+<g id="edge153" class="edge">
+<title>u48&#45;&gt;u40</title>
+<path fill="none" stroke="#000000" d="M3755.9437,-1653.4911C3708.6377,-1630.4478 3625.8472,-1586.5253 3565.1679,-1534.7961 3556.9378,-1527.78 3549.0295,-1519.0005 3542.3917,-1510.8186"/>
+<polygon fill="#000000" stroke="#000000" points="3545.1321,-1508.6411 3536.2126,-1502.9233 3539.6196,-1512.9554 3545.1321,-1508.6411"/>
+</g>
+<!-- u49 -->
+<g id="node89" class="node">
+<title>u49</title>
+<ellipse fill="#3333ff" stroke="#000000" stroke-width="0" cx="3667.1679" cy="-1485.7961" rx="92.8835" ry="18"/>
+<text text-anchor="middle" x="3667.1679" y="-1482.0961" font-family="Times,serif" font-size="14.00" fill="#000000">TurnsByLogicalColour</text>
+</g>
+<!-- u48&#45;&gt;u49 -->
+<g id="edge154" class="edge">
+<title>u48&#45;&gt;u49</title>
+<path fill="none" stroke="#000000" d="M3780.857,-1652.7207C3758.4992,-1619.8938 3711.1382,-1550.3557 3685.1559,-1512.2072"/>
+<polygon fill="#000000" stroke="#000000" points="3687.8652,-1509.9674 3679.3431,-1503.6725 3682.0796,-1513.9079 3687.8652,-1509.9674"/>
+</g>
+<!-- u49&#45;&gt;u7 -->
+<g id="edge155" class="edge">
+<title>u49&#45;&gt;u7</title>
+<path fill="none" stroke="#000000" d="M3671.1868,-1467.7768C3678.1421,-1432.7567 3689.6432,-1353.6119 3667.1679,-1292.7961 3561.5051,-1006.8846 3471.8242,-945.2361 3221.1679,-771.7961 3100.6587,-688.4106 2928.1329,-646.0486 2850.6065,-630.2625"/>
+<polygon fill="#000000" stroke="#000000" points="2851.2437,-626.8207 2840.752,-628.2956 2849.8735,-633.6853 2851.2437,-626.8207"/>
+</g>
+<!-- u49&#45;&gt;u38 -->
+<g id="edge156" class="edge">
+<title>u49&#45;&gt;u38</title>
+<path fill="none" stroke="#000000" d="M3671.0181,-1467.7914C3677.7417,-1433.4472 3689.8462,-1356.3374 3678.1679,-1292.7961 3611.1867,-928.3559 3523.8501,-807.6796 3219.1679,-596.7961 3083.3488,-502.79 2997.3912,-584.4459 2864.1679,-486.7961 2831.4533,-462.8171 2845.654,-434.6853 2812.1679,-411.7961 2640.14,-294.2076 2534.6172,-410.3902 2356.1679,-302.7961 2346.3254,-296.8617 2337.5254,-287.9253 2330.4896,-279.3023"/>
+<polygon fill="#000000" stroke="#000000" points="2333.1699,-277.0459 2324.308,-271.2392 2327.6146,-281.3048 2333.1699,-277.0459"/>
+</g>
+<!-- u49&#45;&gt;u39 -->
+<g id="edge157" class="edge">
+<title>u49&#45;&gt;u39</title>
+<path fill="none" stroke="#000000" d="M3597.9228,-1473.6164C3471.216,-1450.6411 3212.6471,-1400.2976 3187.1679,-1367.7961 3164.2261,-1338.5315 3103.3183,-1554.4157 3199.1679,-923.7961 3209.5417,-855.5436 3240.1988,-840.2393 3231.1679,-771.7961 3220.6329,-691.9541 3239.1242,-655.6648 3184.1679,-596.7961 3081.5415,-486.8638 2991.1856,-567.318 2864.1679,-486.7961 2824.8809,-461.8905 2829.8723,-437.5977 2791.1679,-411.7961 2669.7453,-330.8521 2500.5554,-281.2784 2427.7716,-262.4554"/>
+<polygon fill="#000000" stroke="#000000" points="2428.3044,-258.9793 2417.7497,-259.9013 2426.5756,-265.7625 2428.3044,-258.9793"/>
+</g>
+<!-- u50 -->
+<g id="node90" class="node">
+<title>u50</title>
+<ellipse fill="#3333ff" stroke="#000000" stroke-width="0" cx="3274.1679" cy="-1318.7961" rx="77.9862" ry="18"/>
+<text text-anchor="middle" x="3274.1679" y="-1315.0961" font-family="Times,serif" font-size="14.00" fill="#000000">EnPassantAbscissa</text>
+</g>
+<!-- u50&#45;&gt;u26 -->
+<g id="edge158" class="edge">
+<title>u50&#45;&gt;u26</title>
+<path fill="none" stroke="#000000" d="M3253.5271,-1301.2467C3181.6871,-1240.1661 2942.7444,-1037.0098 2864.91,-970.8327"/>
+<polygon fill="#000000" stroke="#000000" points="2866.9451,-967.9688 2857.0594,-964.1578 2862.4108,-973.3018 2866.9451,-967.9688"/>
+</g>
+<!-- u50&#45;&gt;u45 -->
+<g id="edge159" class="edge">
+<title>u50&#45;&gt;u45</title>
+<path fill="none" stroke="#000000" d="M3280.9095,-1300.8184C3293.0186,-1268.5274 3318.5209,-1200.5213 3332.8443,-1162.3256"/>
+<polygon fill="#000000" stroke="#000000" points="3336.1647,-1163.439 3336.3989,-1152.8468 3329.6104,-1160.9811 3336.1647,-1163.439"/>
+</g>
+<!-- u51&#45;&gt;u40 -->
+<g id="edge160" class="edge">
+<title>u51&#45;&gt;u40</title>
+<path fill="none" stroke="#000000" d="M3557.5528,-1652.7207C3551.0871,-1620.3924 3537.5006,-1552.4598 3529.8021,-1513.9671"/>
+<polygon fill="#000000" stroke="#000000" points="3533.1909,-1513.0643 3527.7976,-1503.9449 3526.3268,-1514.4371 3533.1909,-1513.0643"/>
+</g>
+<!-- u52&#45;&gt;u48 -->
+<g id="edge161" class="edge">
+<title>u52&#45;&gt;u48</title>
+<path fill="none" stroke="#000000" d="M3484.5463,-1840.8152C3542.0221,-1809.1519 3682.5483,-1731.7362 3752.3892,-1693.261"/>
+<polygon fill="#000000" stroke="#000000" points="3754.2849,-1696.2127 3761.3549,-1688.3218 3750.9072,-1690.0815 3754.2849,-1696.2127"/>
+</g>
+<!-- u52&#45;&gt;u50 -->
+<g id="edge162" class="edge">
+<title>u52&#45;&gt;u50</title>
+<path fill="none" stroke="#000000" d="M3460.9468,-1836.6761C3463.9999,-1799.7712 3468.2093,-1713.5654 3449.1679,-1644.7961 3415.7187,-1523.9927 3331.5829,-1397.9392 3293.4674,-1344.8297"/>
+<polygon fill="#000000" stroke="#000000" points="3296.2457,-1342.6989 3287.5463,-1336.6516 3290.5758,-1346.8041 3296.2457,-1342.6989"/>
+</g>
+<!-- u93 -->
+<g id="node93" class="node">
+<title>u93</title>
+<ellipse fill="#3333ff" stroke="#000000" stroke-width="0" cx="3240.1679" cy="-1854.7961" rx="44.393" ry="18"/>
+<text text-anchor="middle" x="3240.1679" y="-1851.0961" font-family="Times,serif" font-size="14.00" fill="#000000">PlayState</text>
+</g>
+<!-- u93&#45;&gt;u71 -->
+<g id="edge163" class="edge">
+<title>u93&#45;&gt;u71</title>
+<path fill="none" stroke="#000000" d="M3195.5966,-1854.0325C2923.857,-1849.0648 1496.2566,-1818.3929 1331.1679,-1719.7961 1184.1966,-1632.0197 1108.4992,-1422.6599 1085.1781,-1346.8283"/>
+<polygon fill="#000000" stroke="#000000" points="1088.466,-1345.6082 1082.233,-1337.0409 1081.7629,-1347.6253 1088.466,-1345.6082"/>
+</g>
+<!-- u93&#45;&gt;u84 -->
+<g id="edge164" class="edge">
+<title>u93&#45;&gt;u84</title>
+<path fill="none" stroke="#000000" d="M3202.0261,-1845.6747C2993.5163,-1795.8107 1992.1192,-1556.3321 1749.9688,-1498.4232"/>
+<polygon fill="#000000" stroke="#000000" points="1750.5488,-1494.9632 1740.0089,-1496.0413 1748.9206,-1501.7713 1750.5488,-1494.9632"/>
+</g>
+<!-- u94 -->
+<g id="node94" class="node">
+<title>u94</title>
+<ellipse fill="#3333ff" stroke="#000000" stroke-width="0" cx="3318.1679" cy="-1670.7961" rx="121.5784" ry="18"/>
+<text text-anchor="middle" x="3318.1679" y="-1667.0961" font-family="Times,serif" font-size="14.00" fill="#000000">ApplicationTerminationReason</text>
+</g>
+<!-- u93&#45;&gt;u94 -->
+<g id="edge165" class="edge">
+<title>u93&#45;&gt;u94</title>
+<path fill="none" stroke="#000000" d="M3247.7888,-1836.8184C3261.4774,-1804.5274 3290.3061,-1736.5213 3306.4978,-1698.3256"/>
+<polygon fill="#000000" stroke="#000000" points="3309.8354,-1699.4197 3310.5159,-1688.8468 3303.3905,-1696.6877 3309.8354,-1699.4197"/>
+</g>
+<!-- u95 -->
+<g id="node97" class="node">
+<title>u95</title>
+<ellipse fill="#ff3333" stroke="#000000" stroke-width="0" cx="3013.1679" cy="-437.7961" rx="30.5947" ry="18"/>
+<text text-anchor="middle" x="3013.1679" y="-434.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Show</text>
+</g>
+<!-- u95&#45;&gt;u47 -->
+<g id="edge166" class="edge">
+<title>u95&#45;&gt;u47</title>
+<path fill="none" stroke="#000000" d="M3010.572,-455.9894C3006.0044,-480.401 2994.0007,-522.8737 2964.1679,-541.7961 2892.1075,-587.5026 2658.7645,-575.0277 2580.1679,-541.7961 2543.0488,-526.1017 2512.8508,-489.3537 2495.4376,-464.0288"/>
+<polygon fill="#000000" stroke="#000000" points="2498.2792,-461.9814 2489.8211,-455.6008 2492.4541,-465.8632 2498.2792,-461.9814"/>
+</g>
+<!-- u95&#45;&gt;u10 -->
+<g id="edge167" class="edge">
+<title>u95&#45;&gt;u10</title>
+<path fill="none" stroke="#000000" d="M3004.4186,-420.4858C2988.1201,-388.2392 2953.013,-318.78 2933.6582,-280.4867"/>
+<polygon fill="#000000" stroke="#000000" points="2936.7326,-278.8102 2929.0979,-271.4642 2930.4852,-281.9679 2936.7326,-278.8102"/>
+</g>
+<!-- u96 -->
+<g id="node98" class="node">
+<title>u96</title>
+<ellipse fill="#77bbff" stroke="#000000" stroke-width="0" cx="683.1679" cy="-2021.7961" rx="32.4942" ry="18"/>
+<text text-anchor="middle" x="683.1679" y="-2018.0961" font-family="Times,serif" font-size="14.00" fill="#000000">CECP</text>
+</g>
+<!-- u96&#45;&gt;u97 -->
+<g id="edge168" class="edge">
+<title>u96&#45;&gt;u97</title>
+<path fill="none" stroke="#000000" d="M650.6933,-2019.712C565.0796,-2013.161 327.7465,-1988.1134 152.1679,-1903.7961 138.8972,-1897.4232 125.9303,-1887.6645 115.3884,-1878.5288"/>
+<polygon fill="#000000" stroke="#000000" points="117.609,-1875.8186 107.8347,-1871.7305 112.9263,-1881.0217 117.609,-1875.8186"/>
+</g>
+<!-- u96&#45;&gt;u83 -->
+<g id="edge169" class="edge">
+<title>u96&#45;&gt;u83</title>
+<path fill="none" stroke="#000000" d="M658.9316,-2009.7859C602.6741,-1981.9075 462.5492,-1912.4688 390.4969,-1876.7633"/>
+<polygon fill="#000000" stroke="#000000" points="391.7316,-1873.469 381.2173,-1872.1648 388.6234,-1879.7412 391.7316,-1873.469"/>
+</g>
+<!-- u96&#45;&gt;u98 -->
+<g id="edge170" class="edge">
+<title>u96&#45;&gt;u98</title>
+<path fill="none" stroke="#000000" d="M650.6236,-2021.0639C530.3992,-2017.6199 114.0369,-1998.8988 32.1679,-1903.7961 -35.4232,-1825.2793 25.1679,-1774.3984 25.1679,-1670.7961 25.1679,-1670.7961 25.1679,-1670.7961 25.1679,-622.7961 25.1679,-524.6694 21.196,-481.5938 90.1679,-411.7961 155.7045,-345.4746 439.1791,-282.688 543.4718,-261.4202"/>
+<polygon fill="#000000" stroke="#000000" points="544.4598,-264.7912 553.567,-259.3774 543.0714,-257.9303 544.4598,-264.7912"/>
+</g>
+<!-- u96&#45;&gt;u99 -->
+<g id="edge171" class="edge">
+<title>u96&#45;&gt;u99</title>
+<path fill="none" stroke="#000000" d="M707.939,-2009.7086C713.2042,-2007.4849 718.7971,-2005.3717 724.1679,-2003.7961 1060.2199,-1905.2083 1484.0947,-1867.7751 1620.6351,-1857.7773"/>
+<polygon fill="#000000" stroke="#000000" points="1620.9923,-1861.2607 1630.7149,-1857.0512 1620.4892,-1854.2788 1620.9923,-1861.2607"/>
+</g>
+<!-- u96&#45;&gt;u93 -->
+<g id="edge172" class="edge">
+<title>u96&#45;&gt;u93</title>
+<path fill="none" stroke="#000000" d="M707.3908,-2009.4817C712.79,-2007.216 718.5753,-2005.1435 724.1679,-2003.7961 971.198,-1944.2801 2841.3162,-1870.0988 3185.7367,-1856.8636"/>
+<polygon fill="#000000" stroke="#000000" points="3186.0882,-1860.3528 3195.9467,-1856.4719 3185.8198,-1853.3579 3186.0882,-1860.3528"/>
+</g>
+<!-- u101 -->
+<g id="node99" class="node">
+<title>u101</title>
+<ellipse fill="#77bbff" stroke="#000000" stroke-width="0" cx="749.1679" cy="-1854.7961" rx="48.1917" ry="18"/>
+<text text-anchor="middle" x="749.1679" y="-1851.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Command</text>
+</g>
+<!-- u96&#45;&gt;u101 -->
+<g id="edge173" class="edge">
+<title>u96&#45;&gt;u101</title>
+<path fill="none" stroke="#000000" d="M690.231,-2003.9242C701.7626,-1974.7458 724.709,-1916.6844 738.3184,-1882.2485"/>
+<polygon fill="#000000" stroke="#000000" points="741.6352,-1883.3784 742.0557,-1872.7919 735.1252,-1880.8056 741.6352,-1883.3784"/>
+</g>
+<!-- u101&#45;&gt;u71 -->
+<g id="edge174" class="edge">
+<title>u101&#45;&gt;u71</title>
+<path fill="none" stroke="#000000" d="M760.081,-1836.9624C808.4902,-1757.8547 1003.9566,-1438.4341 1061.2881,-1344.7459"/>
+<polygon fill="#000000" stroke="#000000" points="1064.3111,-1346.5113 1066.5454,-1336.1547 1058.3404,-1342.8575 1064.3111,-1346.5113"/>
+</g>
+<!-- u102 -->
+<g id="node100" class="node">
+<title>u102</title>
+<ellipse fill="#77bbff" stroke="#000000" stroke-width="0" cx="637.1679" cy="-1670.7961" rx="51.9908" ry="18"/>
+<text text-anchor="middle" x="637.1679" y="-1667.0961" font-family="Times,serif" font-size="14.00" fill="#000000">PrintObject</text>
+</g>
+<!-- u101&#45;&gt;u102 -->
+<g id="edge175" class="edge">
+<title>u101&#45;&gt;u102</title>
+<path fill="none" stroke="#000000" d="M738.4288,-1837.1534C718.744,-1804.814 676.7733,-1735.8622 653.522,-1697.6636"/>
+<polygon fill="#000000" stroke="#000000" points="656.2282,-1695.3779 648.0389,-1688.6557 650.2488,-1699.0176 656.2282,-1695.3779"/>
+</g>
+<!-- u103 -->
+<g id="node101" class="node">
+<title>u103</title>
+<ellipse fill="#77bbff" stroke="#000000" stroke-width="0" cx="752.1679" cy="-1670.7961" rx="45.4919" ry="18"/>
+<text text-anchor="middle" x="752.1679" y="-1667.0961" font-family="Times,serif" font-size="14.00" fill="#000000">SetObject</text>
+</g>
+<!-- u101&#45;&gt;u103 -->
+<g id="edge176" class="edge">
+<title>u101&#45;&gt;u103</title>
+<path fill="none" stroke="#000000" d="M749.4665,-1836.4808C749.9899,-1804.3804 751.0764,-1737.7408 751.7002,-1699.4783"/>
+<polygon fill="#000000" stroke="#000000" points="755.2069,-1699.0931 751.8704,-1689.0373 748.2078,-1698.9789 755.2069,-1699.0931"/>
+</g>
+<!-- u103&#45;&gt;u80 -->
+<g id="edge177" class="edge">
+<title>u103&#45;&gt;u80</title>
+<path fill="none" stroke="#000000" d="M740.8796,-1652.9703C705.7237,-1594.9696 605.3738,-1408.6979 688.1679,-1292.7961 775.0129,-1171.2234 872.7703,-1251.0795 1006.1679,-1183.7961 1020.5096,-1176.5624 1035.2961,-1166.7895 1047.6375,-1157.8746"/>
+<polygon fill="#000000" stroke="#000000" points="1049.789,-1160.6367 1055.7554,-1151.8816 1045.6315,-1155.0051 1049.789,-1160.6367"/>
+</g>
+<!-- u104 -->
+<g id="node102" class="node">
+<title>u104</title>
+<ellipse fill="#77bbff" stroke="#000000" stroke-width="0" cx="760.1679" cy="-2021.7961" rx="27" ry="18"/>
+<text text-anchor="middle" x="760.1679" y="-2018.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Raw</text>
+</g>
+<!-- u104&#45;&gt;u97 -->
+<g id="edge178" class="edge">
+<title>u104&#45;&gt;u97</title>
+<path fill="none" stroke="#000000" d="M739.2833,-2010.0789C734.4335,-2007.7201 729.2117,-2005.4584 724.1679,-2003.7961 479.0584,-1923.0148 387.2968,-2010.185 152.1679,-1903.7961 138.7554,-1897.7274 125.7668,-1888.0153 115.2469,-1878.8322"/>
+<polygon fill="#000000" stroke="#000000" points="117.4696,-1876.1227 107.7173,-1871.9821 112.759,-1881.3005 117.4696,-1876.1227"/>
+</g>
+<!-- u104&#45;&gt;u83 -->
+<g id="edge179" class="edge">
+<title>u104&#45;&gt;u83</title>
+<path fill="none" stroke="#000000" d="M738.6136,-2010.6326C733.8906,-2008.2952 728.8903,-2005.9025 724.1679,-2003.7961 611.6509,-1953.608 476.715,-1902.5464 402.3253,-1875.1646"/>
+<polygon fill="#000000" stroke="#000000" points="403.2727,-1871.784 392.6791,-1871.6218 400.8594,-1878.3549 403.2727,-1871.784"/>
+</g>
+<!-- u104&#45;&gt;u98 -->
+<g id="edge180" class="edge">
+<title>u104&#45;&gt;u98</title>
+<path fill="none" stroke="#000000" d="M739.2795,-2010.0902C734.43,-2007.7308 729.2091,-2005.466 724.1679,-2003.7961 483.3354,-1924.0215 334.4741,-2090.0078 162.1679,-1903.7961 152.0064,-1892.8147 110.3529,-1382.7106 109.1679,-1367.7961 100.9511,-1264.3797 95.1679,-1238.5384 95.1679,-1134.7961 95.1679,-1134.7961 95.1679,-1134.7961 95.1679,-622.7961 95.1679,-528.1962 63.273,-485.02 123.1679,-411.7961 178.3103,-344.3823 443.6066,-282.8331 543.7709,-261.6217"/>
+<polygon fill="#000000" stroke="#000000" points="544.7005,-265.0029 553.768,-259.5228 543.2622,-258.1522 544.7005,-265.0029"/>
+</g>
+<!-- u104&#45;&gt;u99 -->
+<g id="edge181" class="edge">
+<title>u104&#45;&gt;u99</title>
+<path fill="none" stroke="#000000" d="M786.2767,-2016.9782C912.9134,-1993.6099 1463.5422,-1892.0022 1622.2252,-1862.7203"/>
+<polygon fill="#000000" stroke="#000000" points="1623.3339,-1866.0749 1632.5327,-1860.8183 1622.0636,-1859.1911 1623.3339,-1866.0749"/>
+</g>
+<!-- u104&#45;&gt;u93 -->
+<g id="edge182" class="edge">
+<title>u104&#45;&gt;u93</title>
+<path fill="none" stroke="#000000" d="M787.1742,-2019.9775C1030.8407,-2003.5693 2848.955,-1881.1399 3186.371,-1858.4187"/>
+<polygon fill="#000000" stroke="#000000" points="3186.6356,-1861.9089 3196.3778,-1857.7449 3186.1652,-1854.9247 3186.6356,-1861.9089"/>
+</g>
+<!-- u104&#45;&gt;u95 -->
+<g id="edge183" class="edge">
+<title>u104&#45;&gt;u95</title>
+<path fill="none" stroke="#000000" d="M787.5708,-2021.2986C1094.49,-2015.6656 3877.3965,-1962.9864 3936.1679,-1903.7961 3972.6665,-1867.0373 3943.1679,-1722.5972 3943.1679,-1670.7961 3943.1679,-1670.7961 3943.1679,-1670.7961 3943.1679,-789.7961 3943.1679,-596.3054 3230.1212,-471.7804 3052.749,-443.7977"/>
+<polygon fill="#000000" stroke="#000000" points="3053.2174,-440.3285 3042.7966,-442.2406 3052.1353,-447.2444 3053.2174,-440.3285"/>
+</g>
+<!-- u104&#45;&gt;u101 -->
+<g id="edge184" class="edge">
+<title>u104&#45;&gt;u101</title>
+<path fill="none" stroke="#000000" d="M758.9697,-2003.6063C757.0604,-1974.6195 753.3122,-1917.7153 751.0445,-1883.2877"/>
+<polygon fill="#000000" stroke="#000000" points="754.5143,-1882.7118 750.3645,-1872.9635 747.5294,-1883.172 754.5143,-1882.7118"/>
+</g>
+<!-- u82 -->
+<g id="node104" class="node">
+<title>u82</title>
+<ellipse fill="#ffffbb" stroke="#000000" stroke-width="0" cx="760.1679" cy="-2188.7961" rx="27" ry="18"/>
+<text text-anchor="middle" x="760.1679" y="-2185.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Play</text>
+</g>
+<!-- u82&#45;&gt;u96 -->
+<g id="edge4" class="edge">
+<title>u82&#45;&gt;u96</title>
+<path fill="none" stroke="#000000" d="M752.2175,-2171.5532C738.8231,-2142.503 711.6601,-2083.591 695.6858,-2048.9455"/>
+<polygon fill="#000000" stroke="#000000" points="698.6719,-2047.0628 691.3063,-2039.4471 692.3151,-2049.9938 698.6719,-2047.0628"/>
+</g>
+<!-- u82&#45;&gt;u104 -->
+<g id="edge5" class="edge">
+<title>u82&#45;&gt;u104</title>
+<path fill="none" stroke="#000000" d="M760.1679,-2170.6063C760.1679,-2141.6195 760.1679,-2084.7153 760.1679,-2050.2877"/>
+<polygon fill="#000000" stroke="#000000" points="763.668,-2049.9635 760.1679,-2039.9635 756.668,-2049.9635 763.668,-2049.9635"/>
+</g>
+<!-- u0 -->
+<g id="node105" class="node">
+<title>u0</title>
+<ellipse fill="#bbffbb" stroke="#000000" stroke-width="0" cx="3972.1679" cy="-2355.7961" rx="29.795" ry="18"/>
+<text text-anchor="middle" x="3972.1679" y="-2352.0961" font-family="Times,serif" font-size="14.00" fill="#000000">Main</text>
+</g>
+<!-- u0&#45;&gt;u1 -->
+<g id="edge2" class="edge">
+<title>u0&#45;&gt;u1</title>
+<path fill="none" stroke="#000000" d="M3975.6747,-2337.7756C3985.0819,-2287.8092 4010.1679,-2143.1853 4010.1679,-2021.7961 4010.1679,-2021.7961 4010.1679,-2021.7961 4010.1679,-622.7961 4010.1679,-188.5493 3486.2427,-471.8452 3056.1679,-411.7961 2855.4197,-383.7667 1411.1773,-403.3254 1235.1679,-302.7961 1226.1784,-297.6617 1219.1475,-288.9585 1213.9283,-280.299"/>
+<polygon fill="#000000" stroke="#000000" points="1216.9743,-278.5735 1209.1389,-271.442 1210.8168,-281.9032 1216.9743,-278.5735"/>
+</g>
+<!-- u0&#45;&gt;u61 -->
+<g id="edge3" class="edge">
+<title>u0&#45;&gt;u61</title>
+<path fill="none" stroke="#000000" d="M3972.1679,-2337.6936C3972.1679,-2287.5175 3972.1679,-2142.4072 3972.1679,-2021.7961 3972.1679,-2021.7961 3972.1679,-2021.7961 3972.1679,-1670.7961 3972.1679,-1579.1661 4005.3667,-1527.8592 3936.1679,-1467.7961 3814.1731,-1361.9072 1190.6168,-1386.5394 1030.1679,-1367.7961 969.3421,-1360.6906 901.0752,-1346.433 852.2519,-1335.1209"/>
+<polygon fill="#000000" stroke="#000000" points="852.981,-1331.697 842.4468,-1332.8281 851.3872,-1338.5132 852.981,-1331.697"/>
+</g>
+<!-- u0&#45;&gt;u82 -->
+<g id="edge1" class="edge">
+<title>u0&#45;&gt;u82</title>
+<path fill="none" stroke="#000000" d="M3942.1694,-2354.2364C3638.9948,-2338.4736 1133.0187,-2208.1816 797.2993,-2190.7267"/>
+<polygon fill="#000000" stroke="#000000" points="797.3043,-2187.2223 787.136,-2190.1982 796.9408,-2194.2128 797.3043,-2187.2223"/>
 </g>
 </g>
 </svg>
diff --git a/changelog.markdown b/changelog.markdown
--- a/changelog.markdown
+++ b/changelog.markdown
@@ -24,3 +24,7 @@
 ## 0.0.0.7
 Rewrote function **BishBosh.Data.RoseTree.countTerminalNodes** in accordance with the suggestions of David Feuer.
 Amended function **BishBosh.State.EnPassantAbscissa.mkMaybeEnPassantAbscissa** to guard against exposing one's King after En-passant capture.
+
+## 0.0.0.8
+Corrected the parsing of FEN when an Enpassant-destination defined on file **b** was erroneously interpreted as a bishop in the previous **CastleableRooks** field.
+Added parent class **BishBosh.Property.ExtendedPositionDescription.EPD** for **Property.ForsythEdwards.FEN**, for which the latter typically has a default implementation of both methods.
diff --git a/config/CECP/bishbosh_black.xml b/config/CECP/bishbosh_black.xml
--- a/config/CECP/bishbosh_black.xml
+++ b/config/CECP/bishbosh_black.xml
@@ -63,7 +63,7 @@
 -->
 		</pgnOptions>
 		<persistence filePath="/dev/null" automatic="False"/>	<!-- replace *nix-specific path with 'nul' in Windows ? -->
-		<uiOptions moveNotation="Coordinate" verbosity="Silent">
+		<uiOptions moveNotation="PureCoordinate" verbosity="Silent">
 			<cecpOptions/>
 		</uiOptions>
 	</ioOptions>
diff --git a/config/bishbosh.dtd b/config/bishbosh.dtd
--- a/config/bishbosh.dtd
+++ b/config/bishbosh.dtd
@@ -109,7 +109,7 @@
 			>
 		<!ELEMENT uiOptions ((nativeUIOptions | cecpOptions)?)>
 			<!ATTLIST uiOptions
-				moveNotation	(Coordinate | ICCFNumeric | Smith)	#IMPLIED
+				moveNotation	(ICCFNumeric | PureCoordinate | Smith)	#IMPLIED
 				printMoveTree	CDATA					#IMPLIED
 				nDecimalDigits	CDATA					#IMPLIED
 				verbosity	(Silent | Normal | Verbose | Deafening)	#IMPLIED
diff --git a/config/bishbosh.rng b/config/bishbosh.rng
--- a/config/bishbosh.rng
+++ b/config/bishbosh.rng
@@ -183,8 +183,8 @@
 							<optional>
 								<attribute name="moveNotation">
 									<choice>
-										<value>Coordinate</value>
 										<value>ICCFNumeric</value>
+										<value>PureCoordinate</value>
 										<value>Smith</value>
 									</choice>
 								</attribute>
diff --git a/man/man1/bishbosh.1 b/man/man1/bishbosh.1
--- a/man/man1/bishbosh.1
+++ b/man/man1/bishbosh.1
@@ -93,7 +93,7 @@
 Command	Arguments	Description
 =======	=========	===========
 :hint		Request a move-suggestion.
-:print	object	Print the value of one of "\fBboard\fR", "\fBconfiguration\fR", "\fBFEN\fR", "\fBgame\fR", "\fBhelp\fR", "\fBmoves\fR", "\fBPGN\fR".
+:print	object	Print the value of one of "\fBboard\fR", "\fBconfiguration\fR", "\fBEPD\fR", "\fBFEN\fR", "\fBgame\fR", "\fBhelp\fR", "\fBmoves\fR", "\fBPGN\fR".
 :quit		Exit the application. The current game-state will be saved, provided \fBpersistence\fR (see "\fBpgnOptions\fR" in \fBsection-5\fR of the man-pages) hasn't been disabled.
 :resign		Resign the game.
 :restart		Start a new game.
diff --git a/man/man5/bishbosh.5 b/man/man5/bishbosh.5
--- a/man/man5/bishbosh.5
+++ b/man/man5/bishbosh.5
@@ -176,7 +176,7 @@
 .P
 "\fBioOptions\fR" has a sub-section "\fBuiOptions\fR", which defines the user-interface.
 .IP \(bu
-\fBmoveNotation\fR (\fBCoordinate\fR|\fBICCFNumeric\fR|\fBSmith\fR), defaulting to "\fBSmith\fR"; <\fBhttps://en.wikipedia.org/wiki/Chess_notation\fR>. The expected syntax used to define a move.
+\fBmoveNotation\fR (\fBICCFNumeric\fR|\fBPureCoordinate\fR|\fBSmith\fR), defaulting to "\fBSmith\fR"; <\fBhttps://en.wikipedia.org/wiki/Chess_notation\fR>. The expected syntax used to define a move.
 This application also understands \fBStandard Algebraic\fR notation, but it is only used to read the PGN-databases used to define standard openings.
 .IP \(bu
 \fBprintMoveTree\fR \fIInt\fR.
diff --git a/src-exe/BishBosh/State/PlayState.hs b/src-exe/BishBosh/State/PlayState.hs
--- a/src-exe/BishBosh/State/PlayState.hs
+++ b/src-exe/BishBosh/State/PlayState.hs
@@ -188,7 +188,7 @@
  ) => Model.Game.Game x y -> Transformation column criterionValue criterionWeight pieceSquareValue positionHash rankValue row weightedMean x y
 updateWithManualMove game playState@MkPlayState { getSearchState = searchState }	= setPositionHashQuantifiedGameTree (
 	Data.Maybe.fromMaybe (
-		Control.Exception.throw $ Data.Exception.mkIncompatibleData "BishBosh.State.PlayState.updateWithManualMove:\tData.RoseTree.reduce failed."
+		Control.Exception.throw $ Data.Exception.mkIncompatibleData "BishBosh.State.PlayState.updateWithManualMove:\tEvaluation.PositionHashQuantifiedGameTree.reduce failed."
 	) . Evaluation.PositionHashQuantifiedGameTree.reduce (
 		(
 			== Data.Maybe.fromMaybe (
diff --git a/src-exe/BishBosh/UI/CECP.hs b/src-exe/BishBosh/UI/CECP.hs
--- a/src-exe/BishBosh/UI/CECP.hs
+++ b/src-exe/BishBosh/UI/CECP.hs
@@ -71,6 +71,7 @@
 import qualified	BishBosh.Model.Game						as Model.Game
 import qualified	BishBosh.Model.GameTerminationReason				as Model.GameTerminationReason
 import qualified	BishBosh.Notation.MoveNotation					as Notation.MoveNotation
+import qualified	BishBosh.Property.ExtendedPositionDescription			as Property.ExtendedPositionDescription
 import qualified	BishBosh.Property.ForsythEdwards				as Property.ForsythEdwards
 import qualified	BishBosh.Property.ShowFloat					as Property.ShowFloat
 import qualified	BishBosh.Search.Search						as Search.Search
@@ -203,8 +204,6 @@
 	Integral		x,
 	Integral		y,
 	Ord			positionHash,
-	Read			x,
-	Read			y,
 	Real			criterionValue,
 	Real			criterionWeight,
 	Real			pieceSquareValue,
@@ -285,6 +284,7 @@
 				putStrLn . tellUser =<< case printObject of
 					UI.PrintObject.Board		-> return {-to IO-monad-} . show $ Model.Game.getBoard game
 					UI.PrintObject.Configuration	-> return {-to IO-monad-} $ Property.ShowFloat.showsFloatToN nDecimalDigits options "."
+					UI.PrintObject.EPD		-> return {-to IO-monad-} $ Property.ExtendedPositionDescription.showEPD game
 					UI.PrintObject.FEN		-> return {-to IO-monad-} $ Property.ForsythEdwards.showFEN game
 					UI.PrintObject.Game		-> return {-to IO-monad-} $ show game
 					UI.PrintObject.Help		-> return {-to IO-monad-} . showString "USAGE: " . showString UI.Command.printTag . showChar ' ' $ Text.ShowList.showsDelimitedList (showChar '|') (showChar '(') (showChar ')') (map shows UI.PrintObject.range) ""
@@ -1066,8 +1066,6 @@
 	Integral		x,
 	Integral		y,
 	Ord			positionHash,
-	Read			x,
-	Read			y,
 	Real			criterionValue,
 	Real			criterionWeight,
 	Real			pieceSquareValue,
diff --git a/src-exe/BishBosh/UI/Raw.hs b/src-exe/BishBosh/UI/Raw.hs
--- a/src-exe/BishBosh/UI/Raw.hs
+++ b/src-exe/BishBosh/UI/Raw.hs
@@ -51,6 +51,7 @@
 import qualified	BishBosh.Input.UIOptions					as Input.UIOptions
 import qualified	BishBosh.Model.Game						as Model.Game
 import qualified	BishBosh.Notation.MoveNotation					as Notation.MoveNotation
+import qualified	BishBosh.Property.ExtendedPositionDescription			as Property.ExtendedPositionDescription
 import qualified	BishBosh.Property.ForsythEdwards				as Property.ForsythEdwards
 import qualified	BishBosh.Property.ShowFloat					as Property.ShowFloat
 import qualified	BishBosh.Search.Search						as Search.Search
@@ -193,6 +194,7 @@
 			case printObject of
 				UI.PrintObject.Board		-> putStrLn $ show2D game
 				UI.PrintObject.Configuration	-> putStrLn $ Property.ShowFloat.showsFloatToN nDecimalDigits options "."
+				UI.PrintObject.EPD		-> putStrLn $ Property.ExtendedPositionDescription.showEPD game
 				UI.PrintObject.FEN		-> putStrLn $ Property.ForsythEdwards.showFEN game
 				UI.PrintObject.Game		-> print game
 				UI.PrintObject.Help		-> putStrLn . showString "Enter either a move in " . shows moveNotation $ showString "-notation, or:\n" UI.Command.usageMessage
diff --git a/src-lib/BishBosh/Attribute/LogicalColour.hs b/src-lib/BishBosh/Attribute/LogicalColour.hs
--- a/src-lib/BishBosh/Attribute/LogicalColour.hs
+++ b/src-lib/BishBosh/Attribute/LogicalColour.hs
@@ -44,8 +44,9 @@
 --	isWhite
 ) where
 
-import qualified	BishBosh.Property.ForsythEdwards	as Property.ForsythEdwards
-import qualified	BishBosh.Property.Opposable		as Property.Opposable
+import qualified	BishBosh.Property.ExtendedPositionDescription	as Property.ExtendedPositionDescription
+import qualified	BishBosh.Property.ForsythEdwards		as Property.ForsythEdwards
+import qualified	BishBosh.Property.Opposable			as Property.Opposable
 import qualified	Control.DeepSeq
 import qualified	Control.Exception
 import qualified	Data.Array.IArray
@@ -93,16 +94,20 @@
 	getOpposite Black	= White
 	getOpposite _		= Black
 
-instance Property.ForsythEdwards.ReadsFEN LogicalColour where
-	readsFEN s	= case Data.List.Extra.trimStart s of
+instance Property.ExtendedPositionDescription.ReadsEPD LogicalColour where
+	readsEPD s	= case Data.List.Extra.trimStart s of
 		'b' : remainder	-> [(Black, remainder)]
 		'w' : remainder	-> [(White, remainder)]
 		_		-> []
 
-instance Property.ForsythEdwards.ShowsFEN LogicalColour where
-	showsFEN logicalColour	= showChar $ case logicalColour of
+instance Property.ExtendedPositionDescription.ShowsEPD LogicalColour where
+	showsEPD logicalColour	= showChar $ case logicalColour of
 		Black	-> 'b'
 		White	-> 'w'
+
+instance Property.ForsythEdwards.ReadsFEN LogicalColour
+
+instance Property.ForsythEdwards.ShowsFEN LogicalColour
 
 -- | Whether the specified /logical colour/ is @Black@.
 isBlack :: LogicalColour -> Bool
diff --git a/src-lib/BishBosh/Component/Piece.hs b/src-lib/BishBosh/Component/Piece.hs
--- a/src-lib/BishBosh/Component/Piece.hs
+++ b/src-lib/BishBosh/Component/Piece.hs
@@ -73,16 +73,17 @@
 
 import			Control.Arrow((&&&), (***))
 import			Data.Array.IArray((!))
-import qualified	BishBosh.Attribute.Direction		as Attribute.Direction
-import qualified	BishBosh.Attribute.LogicalColour	as Attribute.LogicalColour
-import qualified	BishBosh.Attribute.Rank			as Attribute.Rank
-import qualified	BishBosh.Cartesian.Abscissa		as Cartesian.Abscissa
-import qualified	BishBosh.Cartesian.Coordinates		as Cartesian.Coordinates
-import qualified	BishBosh.Cartesian.Ordinate		as Cartesian.Ordinate
-import qualified	BishBosh.Cartesian.Vector		as Cartesian.Vector
-import qualified	BishBosh.Property.ForsythEdwards	as Property.ForsythEdwards
-import qualified	BishBosh.Property.Opposable		as Property.Opposable
-import qualified	BishBosh.Types				as T
+import qualified	BishBosh.Attribute.Direction			as Attribute.Direction
+import qualified	BishBosh.Attribute.LogicalColour		as Attribute.LogicalColour
+import qualified	BishBosh.Attribute.Rank				as Attribute.Rank
+import qualified	BishBosh.Cartesian.Abscissa			as Cartesian.Abscissa
+import qualified	BishBosh.Cartesian.Coordinates			as Cartesian.Coordinates
+import qualified	BishBosh.Cartesian.Ordinate			as Cartesian.Ordinate
+import qualified	BishBosh.Cartesian.Vector			as Cartesian.Vector
+import qualified	BishBosh.Property.ExtendedPositionDescription	as Property.ExtendedPositionDescription
+import qualified	BishBosh.Property.ForsythEdwards		as Property.ForsythEdwards
+import qualified	BishBosh.Property.Opposable			as Property.Opposable
+import qualified	BishBosh.Types					as T
 import qualified	Control.DeepSeq
 import qualified	Control.Exception
 import qualified	Data.Array.IArray
@@ -90,7 +91,7 @@
 import qualified	Data.List.Extra
 import qualified	Data.Map
 import qualified	Data.Maybe
-import qualified	Text.XML.HXT.Arrow.Pickle		as HXT
+import qualified	Text.XML.HXT.Arrow.Pickle			as HXT
 import qualified	Text.XML.HXT.Arrow.Pickle.Schema
 
 -- | Used to qualify XML.
@@ -130,8 +131,8 @@
 instance Show Piece where
 	showsPrec _	= Property.ForsythEdwards.showsFEN
 
-instance Property.ForsythEdwards.ReadsFEN Piece where
-	readsFEN s	= case Data.List.Extra.trimStart s of
+instance Property.ExtendedPositionDescription.ReadsEPD Piece where
+	readsEPD s	= case Data.List.Extra.trimStart s of
 		c : remainder	-> (
 			MkPiece (
 				if Data.Char.isUpper c
@@ -141,12 +142,16 @@
 		 ) `map` reads [c]
 		_		-> []	-- No parse.
 
-instance Property.ForsythEdwards.ShowsFEN Piece where
-	showsFEN piece@MkPiece { getRank = rank }	= showString . map (
+instance Property.ExtendedPositionDescription.ShowsEPD Piece where
+	showsEPD piece@MkPiece { getRank = rank }	= showString . map (
 		if isBlack piece
 			then Data.Char.toLower	-- Only required for independence from the specific implementation of Read for Rank.
 			else Data.Char.toUpper
 	 ) $ show rank
+
+instance Property.ForsythEdwards.ReadsFEN Piece
+
+instance Property.ForsythEdwards.ShowsFEN Piece
 
 instance HXT.XmlPickler Piece where
 	xpickle	= HXT.xpWrap (read, show) . HXT.xpAttr tag . HXT.xpTextDT . Text.XML.HXT.Arrow.Pickle.Schema.scEnum $ map show range
diff --git a/src-lib/BishBosh/ContextualNotation/StandardAlgebraic.hs b/src-lib/BishBosh/ContextualNotation/StandardAlgebraic.hs
--- a/src-lib/BishBosh/ContextualNotation/StandardAlgebraic.hs
+++ b/src-lib/BishBosh/ContextualNotation/StandardAlgebraic.hs
@@ -42,24 +42,13 @@
 --	longCastleToken,
 --	shortCastleToken,
 --	moveSuffixAnnotations,
---	xMin,
---	yMin,
---	xMax,
---	yMax,
---	xOrigin,
---	yOrigin,
 -- * Functions
---	encode,
-	showsCoordinates,
 	showsTurn,
 	showTurn,
 	showsMove,
 	showMove,
 	movePiece,
 --	rankParser,
---	abscissaParser,
---	ordinateParser,
---	coordinatesParser,
 --	captureParser,
 --	moveSuffixAnnotationParser,
 	parser,
@@ -67,18 +56,13 @@
 	toRank,
 -- ** Constructors
 	fromQualifiedMove
--- ** Predicates
---	inXRange,
---	inYRange
 ) where
 
-import			Control.Arrow((&&&), (***))
+import			Control.Arrow((&&&))
 import			Data.Array.IArray((!))
 import qualified	BishBosh.Attribute.MoveType		as Attribute.MoveType
 import qualified	BishBosh.Attribute.Rank			as Attribute.Rank
-import qualified	BishBosh.Cartesian.Abscissa		as Cartesian.Abscissa
 import qualified	BishBosh.Cartesian.Coordinates		as Cartesian.Coordinates
-import qualified	BishBosh.Cartesian.Ordinate		as Cartesian.Ordinate
 import qualified	BishBosh.Component.Move			as Component.Move
 import qualified	BishBosh.Component.Piece		as Component.Piece
 import qualified	BishBosh.Component.QualifiedMove	as Component.QualifiedMove
@@ -86,6 +70,7 @@
 import qualified	BishBosh.Data.Exception			as Data.Exception
 import qualified	BishBosh.Model.Game			as Model.Game
 import qualified	BishBosh.Model.GameTerminationReason	as Model.GameTerminationReason
+import qualified	BishBosh.Notation.PureCoordinate	as Notation.PureCoordinate
 import qualified	BishBosh.Property.ForsythEdwards	as Property.ForsythEdwards
 import qualified	BishBosh.State.Board			as State.Board
 import qualified	BishBosh.State.MaybePieceByCoordinates	as State.MaybePieceByCoordinates
@@ -151,32 +136,6 @@
 moveSuffixAnnotations :: String
 moveSuffixAnnotations	= "!?"
 
--- | The minimum permissible values for /x/ & /y/ coordinates.
-min' :: (Char, Char)
-xMin, yMin :: Char
-min'@(xMin, yMin)	= ('a', '1')
-
--- | The origin of the coordinate-system.
-origin :: (Int, Int)
-xOrigin, yOrigin :: Int
-origin@(xOrigin, yOrigin)	= Data.Char.ord *** Data.Char.ord $ min'
-
--- | The maximum permissible values for /x/ & /y/ coordinates.
-xMax, yMax :: Char
-(xMax, yMax)	= Data.Char.chr . (
-	+ pred {-fence-post-} (fromIntegral Cartesian.Abscissa.xLength)
- ) *** Data.Char.chr . (
-	+ pred {-fence-post-} (fromIntegral Cartesian.Ordinate.yLength)
- ) $ origin
-
--- | Whether the specified character is a valid abscissa.
-inXRange :: Char -> Bool
-inXRange	= uncurry (&&) . ((>= xMin) &&& (<= xMax))
-
--- | Whether the specified character is a valid ordinate.
-inYRange :: Char -> Bool
-inYRange	= uncurry (&&) . ((>= yMin) &&& (<= yMax))
-
 -- | Defines a /move/, to enable i/o in /StandardAlgebraic/-notation.
 newtype StandardAlgebraic x y	= MkStandardAlgebraic {
 	getQualifiedMove	:: Component.QualifiedMove.QualifiedMove x y
@@ -186,14 +145,6 @@
 fromQualifiedMove :: Component.QualifiedMove.QualifiedMove x y -> StandardAlgebraic x y
 fromQualifiedMove	= MkStandardAlgebraic
 
--- | Encodes the ordinate & abscissa.
-encode :: (Enum x, Enum y) => Cartesian.Coordinates.Coordinates x y -> (ShowS, ShowS)
-encode	= showChar . Data.Char.chr . (+ (xOrigin - Cartesian.Abscissa.xOrigin)) . fromEnum . Cartesian.Coordinates.getX &&& showChar . Data.Char.chr . (+ (yOrigin - Cartesian.Ordinate.yOrigin)) . fromEnum . Cartesian.Coordinates.getY
-
--- | Shows the specified /coordinates/.
-showsCoordinates :: (Enum x, Enum y) => Cartesian.Coordinates.Coordinates x y -> ShowS
-showsCoordinates	= uncurry (.) . encode
-
 -- | Whether en-passant moves are tagged, or implicit.
 type ExplicitEnPassant	= Bool
 
@@ -254,7 +205,7 @@
 				else checkFlag
 			else id
 	)
-	| otherwise	= Control.Exception.throw . Data.Exception.mkSearchFailure . showString "BishBosh.ContextualNotation.StandardAlgebraic.showsTurn:\tno piece exists at " . showsCoordinates source . showString "; " $ Property.ForsythEdwards.showsFEN game "."
+	| otherwise	= Control.Exception.throw . Data.Exception.mkSearchFailure . showString "BishBosh.ContextualNotation.StandardAlgebraic.showsTurn:\tno piece exists at " . Notation.PureCoordinate.showsCoordinates source . showString "; " $ Property.ForsythEdwards.showsFEN game "."
 	where
 		((source, destination), moveType)	= (Component.Move.getSource &&& Component.Move.getDestination) . Component.QualifiedMove.getMove &&& Component.QualifiedMove.getMoveType $ Component.Turn.getQualifiedMove turn
 		board					= Model.Game.getBoard game
@@ -268,8 +219,8 @@
 
 		showsCapture, showsX, showsY, showsDestination :: ShowS
 		showsCapture		= showChar captureFlag
-		(showsX, showsY)	= encode source
-		showsDestination	= showsCoordinates destination
+		(showsX, showsY)	= Notation.PureCoordinate.encode source
+		showsDestination	= Notation.PureCoordinate.showsCoordinates destination
 
 		game'	= Model.Game.takeTurn turn game
 
@@ -342,34 +293,6 @@
 rankParser :: Text.Poly.TextParser Attribute.Rank.Rank
 rankParser	= toRank `fmap` Poly.satisfyMsg (`elem` map fromRank Attribute.Rank.pieces) Attribute.Rank.tag
 
--- | Parse an /x/-coordinate.
-abscissaParser :: Enum x => Text.Poly.TextParser x
-{-# SPECIALISE abscissaParser :: Text.Poly.TextParser T.X #-}
-abscissaParser	= (
-	toEnum . (+ (Cartesian.Abscissa.xOrigin - xOrigin)) . Data.Char.ord
- ) `fmap` Poly.satisfyMsg inXRange "Abscissa"
-
--- | Parse a /y/-coordinate.
-ordinateParser :: Enum y => Text.Poly.TextParser y
-{-# SPECIALISE ordinateParser :: Text.Poly.TextParser T.Y #-}
-ordinateParser	= (
-	toEnum . (+ (Cartesian.Ordinate.yOrigin - yOrigin)) . Data.Char.ord
- ) `fmap` Poly.satisfyMsg inYRange "Ordinate"
-
--- | Parse a pair of /coordinates/.
-coordinatesParser :: (
-	Enum	x,
-	Enum	y,
-	Ord	x,
-	Ord	y
- ) => Text.Poly.TextParser (Cartesian.Coordinates.Coordinates x y)
-{-# SPECIALISE coordinatesParser :: Text.Poly.TextParser (Cartesian.Coordinates.Coordinates T.X T.Y) #-}
-coordinatesParser	= do
-	x	<- abscissaParser
-	y	<- ordinateParser
-
-	return {-to Parser-monad-} $ Cartesian.Coordinates.mkCoordinates x y
-
 -- | Parse the flag which denotes capture.
 captureParser :: Text.Poly.TextParser Char
 captureParser	= Poly.satisfyMsg (== captureFlag) "Capture"
@@ -378,30 +301,6 @@
 rankParser :: Parsec.Parser Attribute.Rank.Rank
 rankParser	= toRank <$> Parsec.oneOf (map fromRank Attribute.Rank.pieces) <?> Attribute.Rank.tag
 
--- | Parse an /x/-coordinate.
-abscissaParser :: Enum x => Parsec.Parser x
-{-# SPECIALISE abscissaParser :: Parsec.Parser T.X #-}
-abscissaParser	= (
-	toEnum . (+ (Cartesian.Abscissa.xOrigin - xOrigin)) . Data.Char.ord
- ) <$> Parsec.satisfy inXRange <?> "Abscissa"
-
--- | Parse a /y/-coordinate.
-ordinateParser :: Enum y => Parsec.Parser y
-{-# SPECIALISE ordinateParser :: Parsec.Parser T.X #-}
-ordinateParser	= (
-	toEnum . (+ (Cartesian.Ordinate.yOrigin - yOrigin)) . Data.Char.ord
- ) <$> Parsec.satisfy inYRange <?> "Ordinate"
-
--- | Parse a pair of /coordinates/.
-coordinatesParser :: (
-	Enum	x,
-	Enum	y,
-	Ord	x,
-	Ord	y
- ) => Parsec.Parser (Cartesian.Coordinates.Coordinates x y)
-{-# SPECIALISE coordinatesParser :: Parsec.Parser (Cartesian.Coordinates.Coordinates T.X T.Y) #-}
-coordinatesParser	= Cartesian.Coordinates.mkCoordinates <$> abscissaParser <*> ordinateParser
-
 -- | Parse the flag which denotes capture.
 captureParser :: Parsec.Parser ()
 captureParser	= Control.Monad.void (Parsec.char captureFlag <?> "Capture")
@@ -461,7 +360,7 @@
 						(
 							"Pawn-advance",
 							do
-								destination	<- coordinatesParser
+								destination	<- Notation.PureCoordinate.coordinatesParser
 
 								Data.Maybe.maybe (
 									do
@@ -480,9 +379,9 @@
 						), (
 							"Pawn-capture",
 							do
-								x		<- abscissaParser
+								x		<- Notation.PureCoordinate.abscissaParser
 								_		<- captureParser
-								destination	<- Poly.commit coordinatesParser
+								destination	<- Poly.commit Notation.PureCoordinate.coordinatesParser
 
 								let maybeDestinationRank	= getMaybeRank destination
 
@@ -532,8 +431,8 @@
 						(
 							"Fully qualified move",	-- N.B. this scenario occurs when there are identical pieces on both the same row & the same column, as the intended attacker; i.e. after a promotion.
 							do
-								source		<- coordinatesParser
-								destination	<- Control.Applicative.optional captureParser >> coordinatesParser
+								source		<- Notation.PureCoordinate.coordinatesParser
+								destination	<- Control.Applicative.optional captureParser >> Notation.PureCoordinate.coordinatesParser
 
 								return {-to Parser-monad-} . Component.QualifiedMove.mkQualifiedMove (Component.Move.mkMove source destination) $ mkNormalMoveType destination
 						), (
@@ -544,22 +443,22 @@
 										"Abscissa qualification",
 										(
 											\x -> filter $ (== x) . Cartesian.Coordinates.getX
-										) `fmap` abscissaParser
+										) `fmap` Notation.PureCoordinate.abscissaParser
 									), (
 										"Ordinate qualification",
 										(
 											\y -> filter $ (== y) . Cartesian.Coordinates.getY
-										) `fmap` ordinateParser
+										) `fmap` Notation.PureCoordinate.ordinateParser
 									)
 								 ] -- Build a filter from the source-qualifier.
 
-								destination	<- Control.Applicative.optional captureParser >> coordinatesParser
+								destination	<- Control.Applicative.optional captureParser >> Notation.PureCoordinate.coordinatesParser
 
 								resolveQualifiedMove destination . sourceFilter $ findAttacksBy destination
 						), (
 							"Unqualified move",	-- The most likely scenario, where the intended attacker is unambiguous.
 							Poly.commit $ do
-								destination	<- Control.Applicative.optional captureParser >> coordinatesParser
+								destination	<- Control.Applicative.optional captureParser >> Notation.PureCoordinate.coordinatesParser
 
 								resolveQualifiedMove destination $ findAttacksBy destination
 						)
@@ -616,7 +515,7 @@
 					promotionParser	= (Parsec.char promotionFlag <?> "Promotion") >> rankParser
 				in Parsec.try (
 					do
-						destination	<- coordinatesParser	<?> "Destination"
+						destination	<- Notation.PureCoordinate.coordinatesParser	<?> "Destination"
 
 						Data.Maybe.maybe (
 							fail . showString "Failed to locate any " . shows piece . showString " which can advance to " $ shows destination "."
@@ -630,8 +529,8 @@
 							>>= Cartesian.Coordinates.maybeRetreat nextLogicalColour
 						 ) $ Just destination
 				) <|> do
-					x		<- abscissaParser <* captureParser
-					destination	<- coordinatesParser	<?> "Destination"
+					x		<- Notation.PureCoordinate.abscissaParser <* captureParser
+					destination	<- Notation.PureCoordinate.coordinatesParser	<?> "Destination"
 
 					let maybeDestinationRank	= getMaybeRank destination
 
@@ -669,33 +568,33 @@
 						 ] -- List-comprehension.
 				in Parsec.choice [
 					Parsec.try $ do -- N.B. this scenario occurs when there are identical pieces on both the same row & the same column, as the intended attacker; i.e. after a promotion.
-						source		<- coordinatesParser	<?> "Source"
+						source		<- Notation.PureCoordinate.coordinatesParser	<?> "Source"
 
 						Parsec.optional captureParser		<?> "Optional capture"
 
-						destination	<- coordinatesParser	<?> "Destination"
+						destination	<- Notation.PureCoordinate.coordinatesParser	<?> "Destination"
 
 						return {-to ParsecT-monad-} . Component.QualifiedMove.mkQualifiedMove (Component.Move.mkMove source destination) $ mkNormalMoveType destination,
 					Parsec.try $ do	-- This scenario occurs if there's an identical piece on either the same row or the same column, as the intended attacker.
 						sourceFilter	<- (
 							(
 								\x -> filter $ (== x) . Cartesian.Coordinates.getX
-							) <$> abscissaParser
+							) <$> Notation.PureCoordinate.abscissaParser
 						 ) <|> (
 							(
 								\y -> filter $ (== y) . Cartesian.Coordinates.getY
-							) <$> ordinateParser
+							) <$> Notation.PureCoordinate.ordinateParser
 						 ) -- Build a filter from the source-qualifier.
 
 						Parsec.optional captureParser		<?> "Optional capture"
 
-						destination	<- coordinatesParser	<?> "Destination"
+						destination	<- Notation.PureCoordinate.coordinatesParser	<?> "Destination"
 
 						resolveQualifiedMove destination . sourceFilter $ findAttacksBy destination,
 					do	-- The most likely scenario, where the intended attacker is unambiguous.
 						Parsec.optional captureParser		<?> "Optional capture"
 
-						destination	<- coordinatesParser	<?> "Unqualified destination"
+						destination	<- Notation.PureCoordinate.coordinatesParser	<?> "Unqualified destination"
 
 						resolveQualifiedMove destination $ findAttacksBy destination
 				],
diff --git a/src-lib/BishBosh/Input/CECPFeatures.hs b/src-lib/BishBosh/Input/CECPFeatures.hs
--- a/src-lib/BishBosh/Input/CECPFeatures.hs
+++ b/src-lib/BishBosh/Input/CECPFeatures.hs
@@ -180,7 +180,7 @@
 reuseTag :: Key
 reuseTag	= "reuse"
 
--- | Tags the feature which defines whether the GUI may send moves in "SAN" rather than "Coordinate" notation.
+-- | Tags the feature which defines whether the GUI may send moves in "SAN" rather than "PureCoordinate" notation.
 sanTag :: Key
 sanTag		= "san"
 
@@ -294,7 +294,7 @@
 			), (
 				reuseTag,	true			-- Whether xboard may reuse this engine for multiple games.
 			), (
-				sanTag,		false			-- Whether xboard sends moves in "Standard Algebraic Notation" rather than "Coordinate".
+				sanTag,		false			-- Whether xboard sends moves in "Standard Algebraic Notation" rather than "PureCoordinate".
 			), (
 				setboardTag,	true			-- Whether xboard may send the "setboard" command, to define the board.
 			), (
diff --git a/src-lib/BishBosh/Input/UIOptions.hs b/src-lib/BishBosh/Input/UIOptions.hs
--- a/src-lib/BishBosh/Input/UIOptions.hs
+++ b/src-lib/BishBosh/Input/UIOptions.hs
@@ -205,7 +205,7 @@
 	| (
 		const False `either` const True
 	) eitherNativeUIOrCECPOptions && not (
-		Notation.MoveNotation.isCoordinate moveNotation
+		Notation.MoveNotation.isPureCoordinate moveNotation
 	)					= Control.Exception.throw . Data.Exception.mkIncompatibleData . showString "BishBosh.Input.UIOptions.mkUIOptions:\t" . shows Input.CECPOptions.tag . showString " is incompatible with " . showString Notation.MoveNotation.tag . Text.ShowList.showsAssociation $ shows moveNotation "."
 	| otherwise	= MkUIOptions {
 		getMoveNotation			= moveNotation,
diff --git a/src-lib/BishBosh/Model/Game.hs b/src-lib/BishBosh/Model/Game.hs
--- a/src-lib/BishBosh/Model/Game.hs
+++ b/src-lib/BishBosh/Model/Game.hs
@@ -109,7 +109,9 @@
 import qualified	BishBosh.Model.GameTerminationReason		as Model.GameTerminationReason
 import qualified	BishBosh.Model.Result				as Model.Result
 import qualified	BishBosh.Notation.MoveNotation			as Notation.MoveNotation
+import qualified	BishBosh.Notation.PureCoordinate		as Notation.PureCoordinate
 import qualified	BishBosh.Property.Empty				as Property.Empty
+import qualified	BishBosh.Property.ExtendedPositionDescription	as Property.ExtendedPositionDescription
 import qualified	BishBosh.Property.ForsythEdwards		as Property.ForsythEdwards
 import qualified	BishBosh.Property.Null				as Property.Null
 import qualified	BishBosh.Property.Opposable			as Property.Opposable
@@ -324,29 +326,26 @@
 		) Attribute.LogicalColour.range
 	}
 
--- CAVEAT: some information is lost during 'showsFEN', which can't subsequently be recovered by 'readsFEN'.
 instance (
 	Enum	x,
 	Enum	y,
 	Ord	x,
 	Ord	y,
-	Read	x,
-	Read	y,
 	Show	x,
 	Show	y
- ) => Property.ForsythEdwards.ReadsFEN (Game x y) where
-	{-# SPECIALISE instance Property.ForsythEdwards.ReadsFEN (Game T.X T.Y) #-}
-	readsFEN s	= [
+ ) => Property.ExtendedPositionDescription.ReadsEPD (Game x y) where
+	{-# SPECIALISE instance Property.ExtendedPositionDescription.ReadsEPD (Game T.X T.Y) #-}
+	readsEPD s	= [
 		(
 			mkGame nextLogicalColour castleableRooksByLogicalColour board turnsByLogicalColour,
-			remainder	-- En-passant target, half-move clock, full-move number.
+			s4
 		) |
-			(board, s1)				<- Property.ForsythEdwards.readsFEN s,
-			(nextLogicalColour, s2)			<- Property.ForsythEdwards.readsFEN s1,
-			(castleableRooksByLogicalColour, s3)	<- Property.ForsythEdwards.readsFEN s2,
-			(turnsByLogicalColour, remainder)	<- case Data.List.Extra.trimStart s3 of
-				'-' : remainder	-> [(Property.Empty.empty {-TurnsByLogicalColour-}, remainder)]
-				s4		-> Control.Arrow.first (
+			(board, s1)				<- Property.ExtendedPositionDescription.readsEPD s,
+			(nextLogicalColour, s2)			<- Property.ExtendedPositionDescription.readsEPD s1,
+			(castleableRooksByLogicalColour, s3)	<- Property.ExtendedPositionDescription.readsEPD s2,
+			(turnsByLogicalColour, s4)		<- case Data.List.Extra.trimStart s3 of
+				'-' : s4'	-> [(Property.Empty.empty {-TurnsByLogicalColour-}, s4')]
+				s3'		-> Control.Arrow.first (
 					\enPassantDestination -> let
 						opponentsLogicalColour	= Property.Opposable.getOpposite nextLogicalColour
 					 in State.TurnsByLogicalColour.fromAssocs [
@@ -360,13 +359,15 @@
 									Component.QualifiedMove.mkQualifiedMove (
 										uncurry Component.Move.mkMove $ (
 											uncurry Cartesian.Coordinates.retreat &&& uncurry Cartesian.Coordinates.advance
-										) (opponentsLogicalColour, enPassantDestination)	-- Construct a Pawn double-advance.
+										) (opponentsLogicalColour, enPassantDestination)	-- Reconstruct the recent Pawn double-advance.
 									) Data.Default.def {-move-type-}
 								 ) Attribute.Rank.Pawn
 							] -- Singleton.
 						) -- Pair.
 					]
-				 ) `map` reads s4
+				 ) `map` (
+					Notation.PureCoordinate.readsCoordinates s3'
+				 ) {-En-passant destination-}
 	 ] -- List-comprehension.
 
 instance (
@@ -374,26 +375,23 @@
 	Enum	y,
 	Ord	x,
 	Ord	y
- ) => Property.ForsythEdwards.ShowsFEN (Game x y) where
-	showsFEN game@MkGame {
+ ) => Property.ExtendedPositionDescription.ShowsEPD (Game x y) where
+	showsEPD game@MkGame {
 		getNextLogicalColour			= nextLogicalColour,
 		getCastleableRooksByLogicalColour	= castleableRooksByLogicalColour,
-		getBoard				= board,
-		getTurnsByLogicalColour			= turnsByLogicalColour,
-		getInstancesByPosition			= instancesByPosition
-	 } = Text.ShowList.showsDelimitedList Property.ForsythEdwards.showsSeparator id id [
-		Property.ForsythEdwards.showsFEN board,					-- Placement of pieces.
-		Property.ForsythEdwards.showsFEN nextLogicalColour,			-- Active colour.
-		Property.ForsythEdwards.showsFEN castleableRooksByLogicalColour,	-- Castling availability.
-		Data.Maybe.maybe Property.ForsythEdwards.showsNullField (
+		getBoard				= board
+	 } = Text.ShowList.showsDelimitedList Property.ExtendedPositionDescription.showsSeparator id id [
+		Property.ExtendedPositionDescription.showsEPD board,				-- 1. Placement of pieces.
+		Property.ExtendedPositionDescription.showsEPD nextLogicalColour,		-- 2. Active colour.
+		Property.ExtendedPositionDescription.showsEPD castleableRooksByLogicalColour,	-- 3. Castling availability.
+		Data.Maybe.maybe Property.ExtendedPositionDescription.showsNullField (
 			\turn -> if Component.Turn.isPawnDoubleAdvance (Property.Opposable.getOpposite nextLogicalColour) turn
 				then Notation.MoveNotation.showsNotation Data.Default.def {-Smith is the same as the required Algebraic notation in this limited role-} . Cartesian.Coordinates.advance nextLogicalColour . Component.Move.getDestination . Component.QualifiedMove.getMove $ Component.Turn.getQualifiedMove turn
-				else Property.ForsythEdwards.showsNullField
-		) $ maybeLastTurn game,	-- En-passant target square. CAVEAT: in contrast to X-FEN, the opponent isn't required to have a Pawn in position to take en-passant.
-		shows $ State.InstancesByPosition.countConsecutiveRepeatablePlies instancesByPosition,	-- Half move clock.
-		shows . succ {-the full-move count starts at '1', before any move has occurred-} . length $ State.TurnsByLogicalColour.dereference Attribute.LogicalColour.Black turnsByLogicalColour	-- Full move number.
+				else Property.ExtendedPositionDescription.showsNullField
+		) $ maybeLastTurn game	-- 4. En-passant target square. CAVEAT: in contrast to X-EPD, this is required even when there's no opposing Pawn in a suitable position to take en-passant.
 	 ]
 
+-- CAVEAT: some information is lost during 'showsFEN', which can't subsequently be recovered by 'readsFEN'.
 instance (
 	Enum	x,
 	Enum	y,
@@ -401,6 +399,37 @@
 	Ord	y,
 	Show	x,
 	Show	y
+ ) => Property.ForsythEdwards.ReadsFEN (Game x y) where
+	{-# SPECIALISE instance Property.ForsythEdwards.ReadsFEN (Game T.X T.Y) #-}
+	readsFEN s	=  [
+		(game, s3) |
+			(game, s1)		<- Property.ExtendedPositionDescription.readsEPD s,
+			(_halfMoveClock, s2)	<- reads s1 :: [(Int, String)],
+			(_fullMoveCounter, s3)	<- reads s2 :: [(Int, String)]
+	 ] -- List-comprehension.
+
+instance (
+	Enum	x,
+	Enum	y,
+	Ord	x,
+	Ord	y
+ ) => Property.ForsythEdwards.ShowsFEN (Game x y) where
+	showsFEN game@MkGame {
+		getTurnsByLogicalColour	= turnsByLogicalColour,
+		getInstancesByPosition	= instancesByPosition
+	 } = Text.ShowList.showsDelimitedList Property.ExtendedPositionDescription.showsSeparator id id [
+		Property.ExtendedPositionDescription.showsEPD game,
+		shows $ State.InstancesByPosition.countConsecutiveRepeatablePlies instancesByPosition, -- 5. Half move clock.
+		shows . succ {-the full-move counter starts at '1', before any move has occurred-} . length $ State.TurnsByLogicalColour.dereference Attribute.LogicalColour.Black turnsByLogicalColour	-- 6. Full move counter.
+	 ]
+
+instance (
+	Enum	x,
+	Enum	y,
+	Ord	x,
+	Ord	y,
+	Show	x,
+	Show	y
  ) => Property.Empty.Empty (Game x y) where
 	{-# SPECIALISE instance Property.Empty.Empty (Game T.X T.Y) #-}
 	empty	= Data.Default.def	-- i.e. zero turns have been taken, rather than zero pieces remain (which is illegal).
@@ -986,7 +1015,7 @@
 					Attribute.Rank.Knight	-> [
 						(
 							distance `notElem` Cartesian.Vector.attackVectorsForKnight,
-							"the jump must be to the opposite corner of a 3 x 2 rectangle."
+							"the jump must be to the opposite corner of a 3 x 2 rectangle"
 						) -- Pair.
 					 ]
 					Attribute.Rank.Bishop	-> [
diff --git a/src-lib/BishBosh/Notation/Coordinate.hs b/src-lib/BishBosh/Notation/Coordinate.hs
deleted file mode 100644
--- a/src-lib/BishBosh/Notation/Coordinate.hs
+++ /dev/null
@@ -1,153 +0,0 @@
-{-
-	Copyright (C) 2018 Dr. Alistair Ward
-
-	This file is part of BishBosh.
-
-	BishBosh is free software: you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation, either version 3 of the License, or
-	(at your option) any later version.
-
-	BishBosh is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with BishBosh.  If not, see <http://www.gnu.org/licenses/>.
--}
-{- |
- [@AUTHOR@]	Dr. Alistair Ward
-
- [@DESCRIPTION@]
-
-	* <https://www.chessprogramming.org/Algebraic_Chess_Notation#Pure_coordinate_notation>.
-
-	* CAVEAT: <https://en.wikipedia.org/wiki/Chess_notation> defined a variant of this notation.
-
-	* N.B.: used for communication via /CECP/ with /xboard/.
--}
-
-module BishBosh.Notation.Coordinate(
--- * Types
--- ** Data-types
-	Coordinate(
---		MkCoordinate,
-		getMove
---		getMaybePromotionRank
-	),
--- * Constants
---	xOrigin,
---	yOrigin,
-	origin,
-	regexSyntax,
--- * Functions
---	encode,
-	showsCoordinates,
--- ** Constructors
-	mkCoordinate,
-	mkCoordinate'
-) where
-
-import			Control.Arrow((&&&))
-import qualified	BishBosh.Attribute.Rank		as Attribute.Rank
-import qualified	BishBosh.Cartesian.Abscissa	as Cartesian.Abscissa
-import qualified	BishBosh.Cartesian.Coordinates	as Cartesian.Coordinates
-import qualified	BishBosh.Cartesian.Ordinate	as Cartesian.Ordinate
-import qualified	BishBosh.Component.Move		as Component.Move
-import qualified	BishBosh.Data.Exception		as Data.Exception
-import qualified	Control.Arrow
-import qualified	Control.Exception
-import qualified	Data.Char
-import qualified	Data.List.Extra
-import qualified	Data.Maybe
-
--- | The /x/-origin.
-xOrigin :: Int
-xOrigin	= Data.Char.ord 'a'
-
--- | The /y/-origin.
-yOrigin :: Int
-yOrigin	= Data.Char.ord '1'
-
--- | The origin.
-origin :: (Int, Int)
-origin	= (xOrigin, yOrigin)
-
--- | Defines using a regex, the required syntax.
-regexSyntax :: String
-regexSyntax	= showString "([a-h][1-8]){2}[" $ showString (
-	concatMap show Attribute.Rank.promotionProspects
- ) "]?"
-
--- | Defines a /move/, to enable i/o in /Coordinate/-notation.
-data Coordinate x y	= MkCoordinate {
-	getMove			:: Component.Move.Move x y,
-	getMaybePromotionRank	:: Maybe Attribute.Rank.Rank
-} deriving Eq
-
--- | Smart constructor.
-mkCoordinate :: Component.Move.Move x y -> Maybe Attribute.Rank.Rank -> Coordinate x y
-mkCoordinate move maybePromotionRank
-	| Just rank	<- maybePromotionRank
-	, rank `notElem` Attribute.Rank.promotionProspects	= Control.Exception.throw . Data.Exception.mkInvalidDatum . showString "BishBosh.Notation.Coordinate.Coordinate:\tcan't promote to a " $ shows rank "."
-	| otherwise						= MkCoordinate {
-		getMove			= move,
-		getMaybePromotionRank	= maybePromotionRank
-	}
-
--- | Smart constructor.
-mkCoordinate' :: Attribute.Rank.Promotable promotable => Component.Move.Move x y -> promotable -> Coordinate x y
-mkCoordinate' move	= mkCoordinate move . Attribute.Rank.getMaybePromotionRank
-
--- | Encodes the ordinate & abscissa.
-encode :: (Enum x, Enum y) => Cartesian.Coordinates.Coordinates x y -> (ShowS, ShowS)
-encode	= showChar . Data.Char.chr . (+ (xOrigin - Cartesian.Abscissa.xOrigin)) . fromEnum . Cartesian.Coordinates.getX &&& showChar . Data.Char.chr . (+ (yOrigin - Cartesian.Ordinate.yOrigin)) . fromEnum . Cartesian.Coordinates.getY
-
--- | Shows the specified /coordinates/.
-showsCoordinates :: (Enum x, Enum y) => Cartesian.Coordinates.Coordinates x y -> ShowS
-showsCoordinates	= uncurry (.) . encode
-
-instance (Enum x, Enum y) => Show (Coordinate x y) where
-	showsPrec _ MkCoordinate {
-		getMove			= move,
-		getMaybePromotionRank	= maybePromotionRank
-	} = showsCoordinates (
-		Component.Move.getSource move
-	 ) . showsCoordinates (
-		Component.Move.getDestination move
-	 ) . Data.Maybe.maybe id shows maybePromotionRank
-
--- N.B. this merely validates the syntax, leaving any semantic errors to 'Model.Game.validate'.
-instance (
-	Enum	x,
-	Enum	y,
-	Ord	x,
-	Ord	y
- ) => Read (Coordinate x y) where
-	readsPrec _ s	= case Data.List.Extra.trimStart s of
-		x : y : x' : y' : remainder	-> let
-			translate x'' y''	= Cartesian.Coordinates.mkMaybeCoordinates (
-				toEnum $ Data.Char.ord x'' + (Cartesian.Abscissa.xOrigin - xOrigin)
-			 ) (
-				toEnum $ Data.Char.ord y'' + (Cartesian.Ordinate.yOrigin - yOrigin)
-			 )
-		 in [
-			Control.Arrow.first (
-				mkCoordinate $ Component.Move.mkMove source destination
-			) (
-				case reads $ take 1 remainder of
-					[(rank, "")]	-> if rank `elem` Attribute.Rank.promotionProspects
-						then (Just rank, tail remainder)
-						else (Nothing, remainder)
-					_	-> (Nothing, remainder)
-			) |
-				source		<- Data.Maybe.maybeToList $ translate x y,
-				destination	<- Data.Maybe.maybeToList $ translate x' y',
-				source /= destination
-		 ] -- List-comprehension.
-		_					-> []	-- No parse.
-
-instance Attribute.Rank.Promotable (Coordinate x y) where
-	getMaybePromotionRank	= getMaybePromotionRank
-
diff --git a/src-lib/BishBosh/Notation/MoveNotation.hs b/src-lib/BishBosh/Notation/MoveNotation.hs
--- a/src-lib/BishBosh/Notation/MoveNotation.hs
+++ b/src-lib/BishBosh/Notation/MoveNotation.hs
@@ -31,7 +31,7 @@
 	MoveNotation(),
 -- * Constants
 	tag,
-	coordinate,
+	pureCoordinate,
 	range,
 -- * Functions
 	readsQualifiedMove,
@@ -40,7 +40,7 @@
 	getOrigin,
 	showsNotationFloatToNDecimals,
 -- ** Predicates
-	isCoordinate
+	isPureCoordinate
 ) where
 
 import			Control.Arrow((&&&))
@@ -49,8 +49,8 @@
 import qualified	BishBosh.Component.EitherQualifiedMove	as Component.EitherQualifiedMove
 import qualified	BishBosh.Component.QualifiedMove	as Component.QualifiedMove
 import qualified	BishBosh.Component.Turn			as Component.Turn
-import qualified	BishBosh.Notation.Coordinate		as Notation.Coordinate
 import qualified	BishBosh.Notation.ICCFNumeric		as Notation.ICCFNumeric
+import qualified	BishBosh.Notation.PureCoordinate	as Notation.PureCoordinate
 import qualified	BishBosh.Notation.Smith			as Notation.Smith
 import qualified	BishBosh.Property.ShowFloat		as Property.ShowFloat
 import qualified	Control.Arrow
@@ -70,9 +70,9 @@
 	* /Standard Algebraic/ isn't included here because conversion to or from a /QualifiedMove/ requires access to the /game/.
 -}
 data MoveNotation
-	= Coordinate	-- ^ As used for communication with /xboard/.
-	| ICCFNumeric	-- ^ <https://en.wikipedia.org/wiki/ICCF_numeric_notation>.
-	| Smith		-- ^ <https://www.chessprogramming.org/Warren_D._Smith>.
+	= ICCFNumeric		-- ^ <https://en.wikipedia.org/wiki/ICCF_numeric_notation>.
+	| PureCoordinate	-- ^ As used for communication with /xboard/ & as the basis of Standard Algebraic.
+	| Smith			-- ^ <https://www.chessprogramming.org/Warren_D._Smith>.
 	deriving (Eq, Read, Show)
 
 instance Control.DeepSeq.NFData MoveNotation where
@@ -85,12 +85,12 @@
 	xpickle	= HXT.xpDefault Data.Default.def . HXT.xpWrap (read, show) . HXT.xpAttr tag . HXT.xpTextDT . Text.XML.HXT.Arrow.Pickle.Schema.scEnum $ map show range	-- CAVEAT: whether it'll be used as an XML-attribute or an XML-element isn't currently known.
 
 -- | Constant.
-coordinate :: MoveNotation
-coordinate	= Coordinate
+pureCoordinate :: MoveNotation
+pureCoordinate	= PureCoordinate
 
 -- | The constant complete range of values.
 range :: [MoveNotation]
-range	= [Coordinate, ICCFNumeric, Smith]
+range	= [ICCFNumeric, PureCoordinate, Smith]
 
 -- | Reads a /move/ & /move-type/ from the specified 'MoveNotation'.
 readsQualifiedMove :: (
@@ -101,29 +101,29 @@
  )
 	=> MoveNotation
 	-> ReadS (Component.EitherQualifiedMove.EitherQualifiedMove x y)
-readsQualifiedMove Coordinate	= map (Control.Arrow.first $ uncurry Component.EitherQualifiedMove.mkPartiallyQualifiedMove . (Notation.Coordinate.getMove &&& Attribute.Rank.getMaybePromotionRank)) . reads
 readsQualifiedMove ICCFNumeric	= map (Control.Arrow.first $ uncurry Component.EitherQualifiedMove.mkPartiallyQualifiedMove . (Notation.ICCFNumeric.getMove &&& Attribute.Rank.getMaybePromotionRank)) . reads
+readsQualifiedMove PureCoordinate	= map (Control.Arrow.first $ uncurry Component.EitherQualifiedMove.mkPartiallyQualifiedMove . (Notation.PureCoordinate.getMove &&& Attribute.Rank.getMaybePromotionRank)) . reads
 readsQualifiedMove Smith	= map (Control.Arrow.first $ uncurry Component.EitherQualifiedMove.mkFullyQualifiedMove . (Component.QualifiedMove.getMove &&& Component.QualifiedMove.getMoveType) . Notation.Smith.getQualifiedMove) . reads
 
 -- | Show the syntax required by a specific 'MoveNotation'.
 showsMoveSyntax :: MoveNotation -> ShowS
 showsMoveSyntax moveNotation	= showChar '/' . showString (
 	case moveNotation of
-		Coordinate	-> Notation.Coordinate.regexSyntax
 		ICCFNumeric	-> Notation.ICCFNumeric.regexSyntax
+		PureCoordinate	-> Notation.PureCoordinate.regexSyntax
 		Smith		-> Notation.Smith.regexSyntax
  ) . showChar '/'
 
 -- | Returns the origin of the specified coordinate-system.
 getOrigin :: MoveNotation -> (Int, Int)
-getOrigin Coordinate	= Notation.Coordinate.origin
-getOrigin ICCFNumeric	= Notation.ICCFNumeric.origin
-getOrigin Smith		= Notation.Smith.origin
+getOrigin ICCFNumeric		= Notation.ICCFNumeric.origin
+getOrigin PureCoordinate	= Notation.PureCoordinate.origin
+getOrigin Smith			= Notation.Smith.origin
 
 -- | Predicate.
-isCoordinate :: MoveNotation -> Bool
-isCoordinate Coordinate	= True
-isCoordinate _		= False
+isPureCoordinate :: MoveNotation -> Bool
+isPureCoordinate PureCoordinate	= True
+isPureCoordinate _		= False
 
 -- | An interface for types which can be rendered in a chess-notation.
 class ShowNotation a where
@@ -131,8 +131,8 @@
 
 instance (Enum x, Enum y) => ShowNotation (Component.QualifiedMove.QualifiedMove x y) where
 	showsNotation moveNotation qualifiedMove	= case moveNotation of
-		Coordinate	-> shows $ Notation.Coordinate.mkCoordinate' move moveType
 		ICCFNumeric	-> shows $ Notation.ICCFNumeric.mkICCFNumeric' move moveType
+		PureCoordinate	-> shows $ Notation.PureCoordinate.mkPureCoordinate' move moveType
 		Smith		-> shows $ Notation.Smith.fromQualifiedMove qualifiedMove
 		where
 			(move, moveType)	= Component.QualifiedMove.getMove &&& Component.QualifiedMove.getMoveType $ qualifiedMove
@@ -141,8 +141,8 @@
 	showsNotation moveNotation	= showsNotation moveNotation . Component.Turn.getQualifiedMove
 
 instance (Enum x, Enum y) => ShowNotation (Cartesian.Coordinates.Coordinates x y) where
-	showsNotation Coordinate	= Notation.Coordinate.showsCoordinates
 	showsNotation ICCFNumeric	= Notation.ICCFNumeric.showsCoordinates
+	showsNotation PureCoordinate	= Notation.PureCoordinate.showsCoordinates
 	showsNotation Smith		= Notation.Smith.showsCoordinates
 
 -- | Show an arbitrary datum using the specified notation.
diff --git a/src-lib/BishBosh/Notation/PureCoordinate.hs b/src-lib/BishBosh/Notation/PureCoordinate.hs
new file mode 100644
--- /dev/null
+++ b/src-lib/BishBosh/Notation/PureCoordinate.hs
@@ -0,0 +1,266 @@
+{-# LANGUAGE CPP #-}
+{-
+	Copyright (C) 2018 Dr. Alistair Ward
+
+	This file is part of BishBosh.
+
+	BishBosh is free software: you can redistribute it and/or modify
+	it under the terms of the GNU General Public License as published by
+	the Free Software Foundation, either version 3 of the License, or
+	(at your option) any later version.
+
+	BishBosh is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	GNU General Public License for more details.
+
+	You should have received a copy of the GNU General Public License
+	along with BishBosh.  If not, see <http://www.gnu.org/licenses/>.
+-}
+{- |
+ [@AUTHOR@]	Dr. Alistair Ward
+
+ [@DESCRIPTION@]
+
+	* <https://www.chessprogramming.org/Algebraic_Chess_Notation#Pure_coordinate_notation>.
+
+	* CAVEAT: <https://en.wikipedia.org/wiki/Chess_notation> defined a variant of this notation.
+
+	* N.B.: used for communication via /CECP/ with /xboard/.
+
+	* N.B.: this minimal notation defines the coordinate-system on which Standard Algebraic is based.
+-}
+
+module BishBosh.Notation.PureCoordinate(
+-- * Types
+-- ** Data-types
+	PureCoordinate(
+--		MkPureCoordinate,
+		getMove
+--		getMaybePromotionRank
+	),
+-- * Constants
+--	min',
+--	xMin,
+--	xMax,
+--	yMin,
+--	yMax,
+--	xOrigin,
+--	yOrigin,
+	origin,
+	regexSyntax,
+-- * Functions
+	encode,
+	showsCoordinates,
+	readsCoordinates,
+	abscissaParser,
+	ordinateParser,
+	coordinatesParser,
+-- ** Constructors
+	mkPureCoordinate,
+	mkPureCoordinate'
+-- ** Predicates
+--	inXRange,
+--	inYRange
+) where
+
+import			Control.Arrow((&&&), (***))
+import qualified	BishBosh.Attribute.Rank		as Attribute.Rank
+import qualified	BishBosh.Cartesian.Abscissa	as Cartesian.Abscissa
+import qualified	BishBosh.Cartesian.Coordinates	as Cartesian.Coordinates
+import qualified	BishBosh.Cartesian.Ordinate	as Cartesian.Ordinate
+import qualified	BishBosh.Component.Move		as Component.Move
+import qualified	BishBosh.Data.Exception		as Data.Exception
+import qualified	BishBosh.Types			as T
+import qualified	Control.Arrow
+import qualified	Control.Exception
+import qualified	Data.Char
+import qualified	Data.List.Extra
+import qualified	Data.Maybe
+
+#ifdef USE_POLYPARSE
+import qualified	BishBosh.Text.Poly			as Text.Poly
+#if USE_POLYPARSE == 1
+import qualified	Text.ParserCombinators.Poly.Lazy	as Poly
+#else /* Plain */
+import qualified	Text.ParserCombinators.Poly.Plain	as Poly
+#endif
+#else /* Parsec */
+import qualified	Text.ParserCombinators.Parsec		as Parsec
+import			Text.ParserCombinators.Parsec((<?>))
+#endif
+
+-- | The minimum permissible values for /x/ & /y/ coordinates.
+min' :: (Char, Char)
+xMin, yMin :: Char
+min'@(xMin, yMin)	= ('a', '1')
+
+-- | The origin of the coordinate-system.
+origin :: (Int, Int)
+xOrigin, yOrigin :: Int
+origin@(xOrigin, yOrigin)	= Data.Char.ord *** Data.Char.ord $ min'
+
+-- | The maximum permissible values for /x/ & /y/ coordinates.
+xMax, yMax :: Char
+(xMax, yMax)	= Data.Char.chr . (
+	+ pred {-fence-post-} (fromIntegral Cartesian.Abscissa.xLength)
+ ) *** Data.Char.chr . (
+	+ pred {-fence-post-} (fromIntegral Cartesian.Ordinate.yLength)
+ ) $ origin
+
+-- | Whether the specified character is a valid abscissa.
+inXRange :: Char -> Bool
+inXRange	= uncurry (&&) . ((>= xMin) &&& (<= xMax))
+
+-- | Whether the specified character is a valid ordinate.
+inYRange :: Char -> Bool
+inYRange	= uncurry (&&) . ((>= yMin) &&& (<= yMax))
+
+-- | Defines using a regex, the required syntax.
+regexSyntax :: String
+regexSyntax	= showString "([a-h][1-8]){2}[" $ showString (
+	concatMap show Attribute.Rank.promotionProspects
+ ) "]?"
+
+#ifdef USE_POLYPARSE
+-- | Parse an /x/-coordinate.
+abscissaParser :: Enum x => Text.Poly.TextParser x
+{-# SPECIALISE abscissaParser :: Text.Poly.TextParser T.X #-}
+abscissaParser	= (
+	toEnum . (+ (Cartesian.Abscissa.xOrigin - xOrigin)) . Data.Char.ord
+ ) `fmap` Poly.satisfyMsg inXRange "Abscissa"
+
+-- | Parse a /y/-coordinate.
+ordinateParser :: Enum y => Text.Poly.TextParser y
+{-# SPECIALISE ordinateParser :: Text.Poly.TextParser T.Y #-}
+ordinateParser	= (
+	toEnum . (+ (Cartesian.Ordinate.yOrigin - yOrigin)) . Data.Char.ord
+ ) `fmap` Poly.satisfyMsg inYRange "Ordinate"
+
+-- | Parse a pair of /coordinates/.
+coordinatesParser :: (
+	Enum	x,
+	Enum	y,
+	Ord	x,
+	Ord	y
+ ) => Text.Poly.TextParser (Cartesian.Coordinates.Coordinates x y)
+{-# SPECIALISE coordinatesParser :: Text.Poly.TextParser (Cartesian.Coordinates.Coordinates T.X T.Y) #-}
+coordinatesParser	= do
+	x	<- abscissaParser
+	y	<- ordinateParser
+
+	return {-to Parser-monad-} $ Cartesian.Coordinates.mkCoordinates x y
+#else
+-- | Parse an /x/-coordinate.
+abscissaParser :: Enum x => Parsec.Parser x
+{-# SPECIALISE abscissaParser :: Parsec.Parser T.X #-}
+abscissaParser	= (
+	toEnum . (+ (Cartesian.Abscissa.xOrigin - xOrigin)) . Data.Char.ord
+ ) <$> Parsec.satisfy inXRange <?> "Abscissa"
+
+-- | Parse a /y/-coordinate.
+ordinateParser :: Enum y => Parsec.Parser y
+{-# SPECIALISE ordinateParser :: Parsec.Parser T.X #-}
+ordinateParser	= (
+	toEnum . (+ (Cartesian.Ordinate.yOrigin - yOrigin)) . Data.Char.ord
+ ) <$> Parsec.satisfy inYRange <?> "Ordinate"
+
+-- | Parse a pair of /coordinates/.
+coordinatesParser :: (
+	Enum	x,
+	Enum	y,
+	Ord	x,
+	Ord	y
+ ) => Parsec.Parser (Cartesian.Coordinates.Coordinates x y)
+{-# SPECIALISE coordinatesParser :: Parsec.Parser (Cartesian.Coordinates.Coordinates T.X T.Y) #-}
+coordinatesParser	= Cartesian.Coordinates.mkCoordinates <$> abscissaParser <*> ordinateParser
+#endif
+
+-- | Defines a /move/, to enable i/o in /PureCoordinate/-notation.
+data PureCoordinate x y	= MkPureCoordinate {
+	getMove			:: Component.Move.Move x y,
+	getMaybePromotionRank	:: Maybe Attribute.Rank.Rank
+} deriving Eq
+
+-- | Smart constructor.
+mkPureCoordinate :: Component.Move.Move x y -> Maybe Attribute.Rank.Rank -> PureCoordinate x y
+mkPureCoordinate move maybePromotionRank
+	| Just rank	<- maybePromotionRank
+	, rank `notElem` Attribute.Rank.promotionProspects	= Control.Exception.throw . Data.Exception.mkInvalidDatum . showString "BishBosh.Notation.PureCoordinate.mkPureCoordinate:\tcan't promote to a " $ shows rank "."
+	| otherwise						= MkPureCoordinate {
+		getMove			= move,
+		getMaybePromotionRank	= maybePromotionRank
+	}
+
+-- | Smart constructor.
+mkPureCoordinate' :: Attribute.Rank.Promotable promotable => Component.Move.Move x y -> promotable -> PureCoordinate x y
+mkPureCoordinate' move	= mkPureCoordinate move . Attribute.Rank.getMaybePromotionRank
+
+-- | Encodes the ordinate & abscissa.
+encode :: (Enum x, Enum y) => Cartesian.Coordinates.Coordinates x y -> (ShowS, ShowS)
+encode	= showChar . Data.Char.chr . (+ (xOrigin - Cartesian.Abscissa.xOrigin)) . fromEnum . Cartesian.Coordinates.getX &&& showChar . Data.Char.chr . (+ (yOrigin - Cartesian.Ordinate.yOrigin)) . fromEnum . Cartesian.Coordinates.getY
+
+-- | Shows the specified /coordinates/.
+showsCoordinates :: (Enum x, Enum y) => Cartesian.Coordinates.Coordinates x y -> ShowS
+showsCoordinates	= uncurry (.) . encode
+
+-- | Reads coordinates.
+readsCoordinates :: (
+	Enum	x,
+	Enum	y,
+	Ord	x,
+	Ord	y
+ ) => ReadS (Cartesian.Coordinates.Coordinates x y)
+readsCoordinates s	= case Data.List.Extra.trimStart s of
+	x : y : remainder	-> map (
+		flip (,) remainder
+	 ) . Data.Maybe.maybeToList $ Cartesian.Coordinates.mkMaybeCoordinates (
+		toEnum $ Data.Char.ord x + (Cartesian.Abscissa.xOrigin - xOrigin)
+	 ) (
+		toEnum $ Data.Char.ord y + (Cartesian.Ordinate.yOrigin - yOrigin)
+	 )
+	_			-> []	-- Mo parse.
+
+instance (Enum x, Enum y) => Show (PureCoordinate x y) where
+	showsPrec _ MkPureCoordinate {
+		getMove			= move,
+		getMaybePromotionRank	= maybePromotionRank
+	} = showsCoordinates (
+		Component.Move.getSource move
+	 ) . showsCoordinates (
+		Component.Move.getDestination move
+	 ) . Data.Maybe.maybe id shows maybePromotionRank
+
+-- N.B. this merely validates the syntax, leaving any semantic errors to 'Model.Game.validate'.
+instance (
+	Enum	x,
+	Enum	y,
+	Ord	x,
+	Ord	y
+ ) => Read (PureCoordinate x y) where
+	readsPrec _ s	= case Data.List.Extra.trimStart s of
+		x : y : x' : y' : remainder	-> let
+			translate x'' y''	= Cartesian.Coordinates.mkMaybeCoordinates (
+				toEnum $ Data.Char.ord x'' + (Cartesian.Abscissa.xOrigin - xOrigin)
+			 ) (
+				toEnum $ Data.Char.ord y'' + (Cartesian.Ordinate.yOrigin - yOrigin)
+			 )
+		 in [
+			Control.Arrow.first (
+				mkPureCoordinate $ Component.Move.mkMove source destination
+			) (
+				case reads $ take 1 remainder of
+					[(rank, "")]	-> if rank `elem` Attribute.Rank.promotionProspects
+						then (Just rank, tail remainder)
+						else (Nothing, remainder)
+					_	-> (Nothing, remainder)
+			) |
+				source		<- Data.Maybe.maybeToList $ translate x y,
+				destination	<- Data.Maybe.maybeToList $ translate x' y',
+				source /= destination
+		 ] -- List-comprehension.
+		_					-> []	-- No parse.
+
+instance Attribute.Rank.Promotable (PureCoordinate x y) where
+	getMaybePromotionRank	= getMaybePromotionRank
+
diff --git a/src-lib/BishBosh/Property/ExtendedPositionDescription.hs b/src-lib/BishBosh/Property/ExtendedPositionDescription.hs
new file mode 100644
--- /dev/null
+++ b/src-lib/BishBosh/Property/ExtendedPositionDescription.hs
@@ -0,0 +1,64 @@
+{-
+	Copyright (C) 2018 Dr. Alistair Ward
+
+	This file is part of BishBosh.
+
+	BishBosh is free software: you can redistribute it and/or modify
+	it under the terms of the GNU General Public License as published by
+	the Free Software Foundation, either version 3 of the License, or
+	(at your option) any later version.
+
+	BishBosh is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	GNU General Public License for more details.
+
+	You should have received a copy of the GNU General Public License
+	along with BishBosh.  If not, see <http://www.gnu.org/licenses/>.
+-}
+{- |
+ [@AUTHOR@]	Dr. Alistair Ward
+
+ [@DESCRIPTION@]
+
+	* <https://www.chessprogramming.org/Extended_Position_Description>.
+-}
+
+module BishBosh.Property.ExtendedPositionDescription(
+-- * Type-classes
+	ReadsEPD(..),
+	ShowsEPD(..),
+-- * Constants
+	showsNullField,
+	showsSeparator,
+-- * Functions
+	readEPD,
+	showEPD
+) where
+
+-- | An alternative to 'Read'.
+class ReadsEPD a where
+	readsEPD	:: ReadS a	-- ^ Read a datum from EPD.
+
+-- | An alternative to 'Show'.
+class ShowsEPD a where
+	showsEPD	:: a -> ShowS	-- ^ Stringify a EPD-datum.
+
+-- | Read from EPD.
+readEPD	:: ReadsEPD a => String -> a
+readEPD s	= case readsEPD s of
+	[(a, _)]	-> a
+	_		-> error . showString "BishBosh.Property.ExtendedPositionDescription.readEPD:\tfailed to parse " $ shows s "."
+
+-- | Display in EPD.
+showEPD	:: ShowsEPD a => a -> String
+showEPD a	= showsEPD a ""
+
+-- | The standard way to denote the absence of a field.
+showsNullField :: ShowS
+showsNullField	= showChar '-'
+
+-- | The standard separator between fields in EPD.
+showsSeparator :: ShowS
+showsSeparator	= showChar ' '
+
diff --git a/src-lib/BishBosh/Property/ForsythEdwards.hs b/src-lib/BishBosh/Property/ForsythEdwards.hs
--- a/src-lib/BishBosh/Property/ForsythEdwards.hs
+++ b/src-lib/BishBosh/Property/ForsythEdwards.hs
@@ -30,21 +30,22 @@
 -- * Type-classes
 	ReadsFEN(..),
 	ShowsFEN(..),
--- * Constants
-	showsNullField,
-	showsSeparator,
 -- * Functions
 	readFEN,
 	showFEN
 ) where
 
+import qualified	BishBosh.Property.ExtendedPositionDescription	as Property.ExtendedPositionDescription
+
 -- | An alternative to 'Read'.
-class ReadsFEN a where
+class Property.ExtendedPositionDescription.ReadsEPD a => ReadsFEN a where
 	readsFEN	:: ReadS a	-- ^ Read a datum from FEN.
+	readsFEN	= Property.ExtendedPositionDescription.readsEPD	-- Default implementation.
 
 -- | An alternative to 'Show'.
-class ShowsFEN a where
+class Property.ExtendedPositionDescription.ShowsEPD a => ShowsFEN a where
 	showsFEN	:: a -> ShowS	-- ^ Stringify a FEN-datum.
+	showsFEN	= Property.ExtendedPositionDescription.showsEPD	-- Default implementation.
 
 -- | Read from FEN.
 readFEN	:: ReadsFEN a => String -> a
@@ -55,12 +56,4 @@
 -- | Display in FEN.
 showFEN	:: ShowsFEN a => a -> String
 showFEN a	= showsFEN a ""
-
--- | The standard way to denote the absence of a field.
-showsNullField :: ShowS
-showsNullField	= showChar '-'
-
--- | The standard separator between fields in FEN.
-showsSeparator :: ShowS
-showsSeparator	= showChar ' '
 
diff --git a/src-lib/BishBosh/State/Board.hs b/src-lib/BishBosh/State/Board.hs
--- a/src-lib/BishBosh/State/Board.hs
+++ b/src-lib/BishBosh/State/Board.hs
@@ -83,6 +83,7 @@
 import qualified	BishBosh.Component.Zobrist			as Component.Zobrist
 import qualified	BishBosh.Data.Exception				as Data.Exception
 import qualified	BishBosh.Property.Empty				as Property.Empty
+import qualified	BishBosh.Property.ExtendedPositionDescription	as Property.ExtendedPositionDescription
 import qualified	BishBosh.Property.ForsythEdwards		as Property.ForsythEdwards
 import qualified	BishBosh.Property.Opposable			as Property.Opposable
 import qualified	BishBosh.Property.Reflectable			as Property.Reflectable
@@ -176,17 +177,33 @@
 	Enum	y,
 	Ord	x,
 	Ord	y
+ ) => Property.ExtendedPositionDescription.ReadsEPD (Board x y) where
+	{-# SPECIALISE instance Property.ExtendedPositionDescription.ReadsEPD (Board T.X T.Y) #-}
+	readsEPD	= map (Control.Arrow.first fromMaybePieceByCoordinates) . Property.ExtendedPositionDescription.readsEPD
+
+instance (
+	Enum	x,
+	Enum	y,
+	Ord	x,
+	Ord	y
+ ) => Property.ExtendedPositionDescription.ShowsEPD (Board x y) where
+	showsEPD MkBoard { getMaybePieceByCoordinates = maybePieceByCoordinates }	= Property.ExtendedPositionDescription.showsEPD maybePieceByCoordinates
+
+instance (
+	Enum	x,
+	Enum	y,
+	Ord	x,
+	Ord	y
  ) => Property.ForsythEdwards.ReadsFEN (Board x y) where
 	{-# SPECIALISE instance Property.ForsythEdwards.ReadsFEN (Board T.X T.Y) #-}
-	readsFEN	= map (Control.Arrow.first fromMaybePieceByCoordinates) . Property.ForsythEdwards.readsFEN
+	readsFEN	=  Property.ExtendedPositionDescription.readsEPD
 
 instance (
 	Enum	x,
 	Enum	y,
 	Ord	x,
 	Ord	y
- ) => Property.ForsythEdwards.ShowsFEN (Board x y) where
-	showsFEN MkBoard { getMaybePieceByCoordinates = maybePieceByCoordinates }	= Property.ForsythEdwards.showsFEN maybePieceByCoordinates
+ ) => Property.ForsythEdwards.ShowsFEN (Board x y)
 
 instance (
 	Enum	x,
diff --git a/src-lib/BishBosh/State/CastleableRooksByLogicalColour.hs b/src-lib/BishBosh/State/CastleableRooksByLogicalColour.hs
--- a/src-lib/BishBosh/State/CastleableRooksByLogicalColour.hs
+++ b/src-lib/BishBosh/State/CastleableRooksByLogicalColour.hs
@@ -67,6 +67,7 @@
 import qualified	BishBosh.Component.Turn				as Component.Turn
 import qualified	BishBosh.Component.Zobrist			as Component.Zobrist
 import qualified	BishBosh.Data.Exception				as Data.Exception
+import qualified	BishBosh.Property.ExtendedPositionDescription	as Property.ExtendedPositionDescription
 import qualified	BishBosh.Property.ForsythEdwards		as Property.ForsythEdwards
 import qualified	BishBosh.Property.Opposable			as Property.Opposable
 import qualified	BishBosh.Property.Reflectable			as Property.Reflectable
@@ -78,6 +79,7 @@
 import qualified	Control.DeepSeq
 import qualified	Control.Exception
 import qualified	Data.Array.IArray
+import qualified	Data.Char
 import qualified	Data.Default
 import qualified	Data.List
 import qualified	Data.List.Extra
@@ -159,42 +161,46 @@
 	Enum	x,
 	Ord	x,
 	Show	x
- ) => Property.ForsythEdwards.ReadsFEN (CastleableRooksByLogicalColour x) where
-	readsFEN s	= case Data.List.Extra.trimStart s of
+ ) => Property.ExtendedPositionDescription.ReadsEPD (CastleableRooksByLogicalColour x) where
+	readsEPD s	= case Data.List.Extra.trimStart s of
 		'-' : remainder	-> [
 			(
-				MkCastleableRooksByLogicalColour $ Attribute.LogicalColour.range `zip` repeat [],	-- CAVEAT: it could also be just '[]'.
+				MkCastleableRooksByLogicalColour $ Attribute.LogicalColour.range `zip` repeat [],	-- CAVEAT: can't disambiguate between this potential value & '[]' which have different semantics for this application.
 				remainder
 			) -- Pair.
 		 ] -- Singleton.
 		s1		-> let
-			readsAssocs s'	= case reads s' of
-				[(piece, s'')]	-> let
-					logicalColour	= Component.Piece.getLogicalColour piece
-				 in case Component.Piece.getRank piece of
-					Attribute.Rank.Queen	-> Control.Arrow.first (
-						(
-							logicalColour,
-							Cartesian.Abscissa.xMin
-						) :
-					 ) `map` readsAssocs s''	-- Recurse.
-					Attribute.Rank.King	-> Control.Arrow.first (
-						(
-							logicalColour,
-							Cartesian.Abscissa.xMax
-						) :
-					 ) `map` readsAssocs s''	-- Recurse.
-					_			-> []	-- Inappropriate rank => parse-failure.
-				_		-> [([], s')]
+			readsAssocs s'
+				| null s' || Data.Char.isSpace (head s')	= terminate	-- CAVEAT: white space separates this field from the start of the En-passant destination, which should it begin with a 'b' might be interpreted as a Bishop.
+				| otherwise					= case reads s' of
+					[(piece, s'')]	-> case rank of
+						Attribute.Rank.Queen	-> Control.Arrow.first (
+							(
+								logicalColour,
+								Cartesian.Abscissa.xMin
+							) : {-prepend-}
+						 ) `map` readsAssocs s''	-- Recurse.
+						Attribute.Rank.King	-> Control.Arrow.first (
+							(
+								logicalColour,
+								Cartesian.Abscissa.xMax
+							) : {-prepend-}
+						 ) `map` readsAssocs s''	-- Recurse.
+						_			-> []	-- Inappropriate rank => parse-failure.
+						where
+							(logicalColour, rank)	= Component.Piece.getLogicalColour &&& Component.Piece.getRank $ piece
+					_		-> terminate
+				where
+					terminate	= [([], s')]
 		 in case readsAssocs s1 of
-			[([], _)]	-> []	-- Zero pieces were read => no parse.
+			[([], _)]	-> []	-- Zero pieces were read => parse-failure.
 			l		-> Control.Arrow.first (fromAssocs . Data.List.Extra.groupSort) `map` l
 
-instance (Enum x, Eq x) => Property.ForsythEdwards.ShowsFEN (CastleableRooksByLogicalColour x) where
-	showsFEN MkCastleableRooksByLogicalColour { getAssocs = assocs }
-		| all (null . snd) assocs	= Property.ForsythEdwards.showsNullField
+instance (Enum x, Eq x) => Property.ExtendedPositionDescription.ShowsEPD (CastleableRooksByLogicalColour x) where
+	showsEPD MkCastleableRooksByLogicalColour { getAssocs = assocs }
+		| all (null . snd) assocs	= Property.ExtendedPositionDescription.showsNullField
 		| otherwise			= foldr (
-			(.) . Property.ForsythEdwards.showsFEN
+			(.) . Property.ExtendedPositionDescription.showsEPD
 		) id [
 			pieceConstructor logicalColour |
 				logicalColour			<- [Attribute.LogicalColour.White, Attribute.LogicalColour.Black],	-- N.B.: the order is standardised.
@@ -202,6 +208,14 @@
 				canCastleWith' logicalColour rooksX assocs
 		] -- List-comprehension.
 
+instance (
+	Enum	x,
+	Ord	x,
+	Show	x
+ ) => Property.ForsythEdwards.ReadsFEN (CastleableRooksByLogicalColour x)
+
+instance (Enum x, Eq x) => Property.ForsythEdwards.ShowsFEN (CastleableRooksByLogicalColour x)
+
 -- | Get the list of random numbers required to represent the current castling potential.
 instance Eq x => Component.Zobrist.Hashable1D CastleableRooksByLogicalColour x {-CAVEAT: FlexibleInstances, MultiParamTypeClasses-} where
 	listRandoms1D MkCastleableRooksByLogicalColour { getAssocs = assocs } zobrist	= Data.Maybe.catMaybes [
@@ -215,7 +229,7 @@
 	Enum	x,
 	Ord	x,
 	Show	x
- ) => [(Attribute.LogicalColour.LogicalColour, [x])] -> CastleableRooksByLogicalColour x
+ ) => AbscissaeByLogicalColour x -> CastleableRooksByLogicalColour x
 fromAssocs assocs
 	| Data.List.Extra.anySame $ map fst {-logicalColour-} assocs	= Control.Exception.throw . Data.Exception.mkDuplicateData . showString "BishBosh.State.CastleableRooksByLogicalColour.fromAssocs:\tduplicate logical colours have been defined; " $ shows assocs "."
 	| any (Data.List.Extra.anySame . snd) assocs			= Control.Exception.throw . Data.Exception.mkDuplicateData . showString "BishBosh.State.CastleableRooksByLogicalColour.fromAssocs:\tduplicate abscissae have been defined; " $ shows assocs "."
diff --git a/src-lib/BishBosh/State/MaybePieceByCoordinates.hs b/src-lib/BishBosh/State/MaybePieceByCoordinates.hs
--- a/src-lib/BishBosh/State/MaybePieceByCoordinates.hs
+++ b/src-lib/BishBosh/State/MaybePieceByCoordinates.hs
@@ -82,6 +82,7 @@
 import qualified	BishBosh.Component.Zobrist			as Component.Zobrist
 import qualified	BishBosh.Data.Exception				as Data.Exception
 import qualified	BishBosh.Property.Empty				as Property.Empty
+import qualified	BishBosh.Property.ExtendedPositionDescription	as Property.ExtendedPositionDescription
 import qualified	BishBosh.Property.ForsythEdwards		as Property.ForsythEdwards
 import qualified	BishBosh.Property.Opposable			as Property.Opposable
 import qualified	BishBosh.Property.Reflectable			as Property.Reflectable
@@ -142,8 +143,8 @@
 	Enum	y,
 	Ord	x,
 	Ord	y
- ) => Property.ForsythEdwards.ReadsFEN (MaybePieceByCoordinates x y) where
-	readsFEN s
+ ) => Property.ExtendedPositionDescription.ReadsEPD (MaybePieceByCoordinates x y) where
+	readsEPD s
 		| length rows /= fromIntegral Cartesian.Ordinate.yLength || any (
 			(/= fromIntegral Cartesian.Abscissa.xLength) . length
 		) rows		= []	-- No parse.
@@ -154,11 +155,11 @@
 					concatMap (
 						\c -> case reads [c] of
 							[(i, "")]	-> replicate i Nothing	-- Expand the runlength-code so that each row has the same length.
-							_		-> [Just piece | (piece, []) <- Property.ForsythEdwards.readsFEN [c]] -- List-comprehension.
+							_		-> [Just piece | (piece, []) <- Property.ExtendedPositionDescription.readsEPD [c]] -- List-comprehension.
 					)
 				) . Text.ShowList.splitOn (== rankSeparator)
 			 ) . span (
-				`elem` rankSeparator : concatMap Property.ForsythEdwards.showFEN Component.Piece.range ++ concatMap show [1 .. Cartesian.Abscissa.xLength]
+				`elem` rankSeparator : concatMap Property.ExtendedPositionDescription.showEPD Component.Piece.range ++ concatMap show [1 .. Cartesian.Abscissa.xLength]
 			 ) $ Data.List.Extra.trimStart s
 
 instance (
@@ -166,8 +167,8 @@
 	Enum	y,
 	Ord	x,
 	Ord	y
- ) => Property.ForsythEdwards.ShowsFEN (MaybePieceByCoordinates x y) where
-	showsFEN MkMaybePieceByCoordinates { deconstruct = byCoordinates }	= foldr1 (
+ ) => Property.ExtendedPositionDescription.ShowsEPD (MaybePieceByCoordinates x y) where
+	showsEPD MkMaybePieceByCoordinates { deconstruct = byCoordinates }	= foldr1 (
 		flip (.)	-- Render the line with the highest y-coordinate first.
 	 ) . Data.List.intersperse (
 		showChar rankSeparator	-- Separate the lines.
@@ -176,10 +177,24 @@
 			\(runLength, maybePiece) -> Data.Maybe.maybe [
 				shows runLength	-- Represent empty squares.
 			] (
-				replicate runLength . Property.ForsythEdwards.showsFEN	-- Render each piece.
+				replicate runLength . Property.ExtendedPositionDescription.showsEPD	-- Render each piece.
 			) maybePiece
 		) . ToolShed.Data.List.Runlength.encode
 	 ) . listToRaster $ Data.Array.IArray.elems byCoordinates
+
+instance (
+	Enum	x,
+	Enum	y,
+	Ord	x,
+	Ord	y
+ ) => Property.ForsythEdwards.ReadsFEN (MaybePieceByCoordinates x y)
+
+instance (
+	Enum	x,
+	Enum	y,
+	Ord	x,
+	Ord	y
+ ) => Property.ForsythEdwards.ShowsFEN (MaybePieceByCoordinates x y)
 
 instance (
 	Enum	x,
diff --git a/src-lib/BishBosh/UI/Command.hs b/src-lib/BishBosh/UI/Command.hs
--- a/src-lib/BishBosh/UI/Command.hs
+++ b/src-lib/BishBosh/UI/Command.hs
@@ -119,7 +119,7 @@
 data Command x y
 	= Hint						-- ^ Request a move-suggestion.
 	| Print UI.PrintObject.PrintObject		-- ^ Show the value of the specified object.
-	| Quit						-- ^ Terminate ths application.
+	| Quit						-- ^ Terminate this application.
 	| Resign					-- ^ Admit defeat.
 	| Restart					-- ^ Abandon the current game, & start afresh.
 	| RollBack (Maybe Component.Move.NMoves)	-- ^ Roll-back the specified number of plies.
@@ -147,7 +147,7 @@
 	), (
 		quitTag,
 		Nothing,
-		"Terminate ths application"
+		"Terminate this application"
 	), (
 		resignTag,
 		Nothing,
diff --git a/src-lib/BishBosh/UI/PrintObject.hs b/src-lib/BishBosh/UI/PrintObject.hs
--- a/src-lib/BishBosh/UI/PrintObject.hs
+++ b/src-lib/BishBosh/UI/PrintObject.hs
@@ -29,6 +29,7 @@
 -- * Constants
 	boardTag,
 	configurationTag,
+	epdTag,
 	fenTag,
 	gameTag,
 	helpTag,
@@ -54,6 +55,10 @@
 configurationTag	= "configuration"
 
 -- | Input-format.
+epdTag :: String
+epdTag			= "epd"
+
+-- | Input-format.
 fenTag :: String
 fenTag			= "fen"
 
@@ -77,6 +82,7 @@
 data PrintObject
 	= Board
 	| Configuration
+	| EPD
 	| FEN
 	| Game
 	| Help
@@ -91,6 +97,7 @@
 	showsPrec _ printObject	= showString $ case printObject of
 		Board		-> boardTag
 		Configuration	-> configurationTag
+		EPD		-> epdTag
 		FEN		-> fenTag
 		Game		-> gameTag
 		Help		-> helpTag
@@ -101,6 +108,7 @@
 	readsPrec _ s	= case Control.Arrow.first Data.List.Extra.lower `map` lex s of
 		[("board", remainder)]		-> [(Board, remainder)]
 		[("configuration", remainder)]	-> [(Configuration, remainder)]
+		[("epd", remainder)]		-> [(EPD, remainder)]
 		[("fen", remainder)]		-> [(FEN, remainder)]
 		[("game", remainder)]		-> [(Game, remainder)]
 		[("help", remainder)]		-> [(Help, remainder)]
@@ -110,7 +118,7 @@
 
 -- | The constant unordered list of possible values.
 range :: [PrintObject]
-range	= [Board, Configuration, FEN, Game, Help, Moves, PGN]
+range	= [Board, Configuration, EPD, FEN, Game, Help, Moves, PGN]
 
 -- | Replace the first word of the specified string with the name of a command of which it is an unambiguous case-insensitive prefix.
 autoComplete :: ShowS
@@ -120,6 +128,7 @@
 			tag	<- [
 				boardTag,
 				configurationTag,
+				epdTag,
 				fenTag,
 				gameTag,
 				helpTag,
diff --git a/src-test/BishBosh/Test/HUnit/Model/Game.hs b/src-test/BishBosh/Test/HUnit/Model/Game.hs
--- a/src-test/BishBosh/Test/HUnit/Model/Game.hs
+++ b/src-test/BishBosh/Test/HUnit/Model/Game.hs
@@ -45,6 +45,7 @@
 import qualified	BishBosh.Model.Game				as Model.Game
 import qualified	BishBosh.Model.GameTerminationReason		as Model.GameTerminationReason
 import qualified	BishBosh.Notation.MoveNotation			as Notation.MoveNotation
+import qualified	BishBosh.Property.ExtendedPositionDescription	as Property.ExtendedPositionDescription
 import qualified	BishBosh.Property.ForsythEdwards		as Property.ForsythEdwards
 import qualified	BishBosh.Test.HUnit.Cartesian.Coordinates	as Test.HUnit.Cartesian.Coordinates
 import qualified	BishBosh.Text.ShowList				as Text.ShowList
@@ -267,6 +268,30 @@
 		[(eitherQualifiedMove, "")]	-> Model.Game.isValidEitherQualifiedMove eitherQualifiedMove (
 			Property.ForsythEdwards.readFEN "r2qkbnr/ppp1pppp/2np4/5b2/3P4/NQP5/PP1BPPPP/R3KBNR w KQkq - 5 6"	:: Game
 		 ) ~? "long Castle through legal check failed."
-		_				-> Control.Exception.throw . Data.Exception.mkParseFailure . showString "BishBosh.Test.HUnit.Model.Game.testCases:\tfailed to parse " $ shows longCastle "."
+		_				-> Control.Exception.throw . Data.Exception.mkParseFailure . showString "BishBosh.Test.HUnit.Model.Game.testCases:\tfailed to parse " $ shows longCastle ".",
+	let
+		epds :: [String]
+		epds	= [
+			"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq -",			-- Initial position.
+			"rnbqkbnr/pppp1ppp/8/3Pp3/8/8/PPP1PPPP/RNBQKBNR w KQkq e6",		-- Double Pawn-advance leading to en-passant option.
+			"rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3",		-- Double Pawn-advance, but no actual en-passant option.
+			"rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq c6",		-- Double Pawn-advance, but no actual en-passant option.
+			" rnbqkbnr/pppppppp/8/8/1P6/8/P1PPPPPP/RNBQKBNR  w\t Kq \r  b3",	-- Extra white space & potential parser confusion between Casteable Rooks & En-passant destination fields.
+			"rnbqkr2/p2pbp1p/1pp4n/6N1/PP2pRpP/2N5/R1PPPPP1/2BQKB2 b - -"		-- Neither Casteable Rooks nor En-passant destination are defined.
+		 ]
+
+		parseFailures :: [(String, String)]
+		parseFailures	= filter (
+			uncurry (/=)
+		 ) $ map (
+			\epd -> (
+				epd,
+				case Property.ExtendedPositionDescription.readsEPD epd of
+					[(game, "")]		-> Property.ExtendedPositionDescription.showEPD (game :: Game)
+					[(_, remainder)]	-> Control.Exception.throw . Data.Exception.mkRedundantData . showString "BishBosh.Test.HUnit.Model.Game.testCases:\tparsed EPD=" . shows epd . showString ", but leaving " $ shows remainder " unparsed."
+					_			-> Control.Exception.throw . Data.Exception.mkParseFailure . showString "BishBosh.Test.HUnit.Model.Game.testCases:\tfailed to parse EPD=" $ shows epd "."
+			) -- Pair.
+		 ) epds
+	in not (null parseFailures) ~? (showString "BishBosh.Test.HUnit.Model.Game.testCases:\tfailed to correctly parse EPDs=" $ shows parseFailures ".")
  ]
 
diff --git a/src-test/BishBosh/Test/HUnit/Model/GameTree.hs b/src-test/BishBosh/Test/HUnit/Model/GameTree.hs
--- a/src-test/BishBosh/Test/HUnit/Model/GameTree.hs
+++ b/src-test/BishBosh/Test/HUnit/Model/GameTree.hs
@@ -70,8 +70,6 @@
 	sortAvailableMoves :: (
 		Integral	x,
 		Integral	y,
-		Read		x,
-		Read		y,
 		Show		x,
 		Show		y
 	 ) => Maybe Attribute.CaptureMoveSortAlgorithm.CaptureMoveSortAlgorithm -> String -> [Component.Turn.Turn x y]
diff --git a/src-test/BishBosh/Test/QuickCheck/Input/UIOptions.hs b/src-test/BishBosh/Test/QuickCheck/Input/UIOptions.hs
--- a/src-test/BishBosh/Test/QuickCheck/Input/UIOptions.hs
+++ b/src-test/BishBosh/Test/QuickCheck/Input/UIOptions.hs
@@ -41,7 +41,7 @@
  ) => Test.QuickCheck.Arbitrary (Input.UIOptions.UIOptions row column) where
 	arbitrary	= do
 		eitherNativeUIOrCECPOptions	<- Test.QuickCheck.arbitrary
-		moveNotation			<- const Test.QuickCheck.arbitrary `either` const (return {-to Gen-monad-} Notation.MoveNotation.coordinate) $ eitherNativeUIOrCECPOptions
+		moveNotation			<- const Test.QuickCheck.arbitrary `either` const (return {-to Gen-monad-} Notation.MoveNotation.pureCoordinate) $ eitherNativeUIOrCECPOptions
 
 		Input.UIOptions.mkUIOptions <$> return {-to Gen-monad-} moveNotation <*> fmap (
 			fmap $ succ . (`mod` 3)	-- maybePrintMoveTree.
diff --git a/src-test/BishBosh/Test/QuickCheck/Model/Game.hs b/src-test/BishBosh/Test/QuickCheck/Model/Game.hs
--- a/src-test/BishBosh/Test/QuickCheck/Model/Game.hs
+++ b/src-test/BishBosh/Test/QuickCheck/Model/Game.hs
@@ -119,12 +119,27 @@
 		f game	= Test.QuickCheck.label "Game.prop_fen/Half move clock" $ uncurry (&&) . (
 			(>= 0) &&& (<= Model.DrawReason.maximumConsecutiveRepeatablePlies)
 		 ) . read . (
-			!! 4
+			!! 4	-- Half-move Clock.
 		 ) . words $ Property.ForsythEdwards.showFEN game
 	in Test.QuickCheck.quickCheckWithResult Test.QuickCheck.stdArgs { Test.QuickCheck.maxSuccess = 256 } f,
 	let
 		f :: Game -> Test.QuickCheck.Property
-		f game	= Test.QuickCheck.label "Game.prop_fen/Full move number" $ (> (0 :: Component.Move.NMoves)) . read . (!! 5) . words $ Property.ForsythEdwards.showFEN game
+		f game	= Test.QuickCheck.label "Game.prop_fen/Full move counter" $ (
+			> (0 :: Component.Move.NMoves)
+		 ) . read . (
+			!! 5	-- Full Move Counter.
+		 ) . words $ Property.ForsythEdwards.showFEN game
+	in Test.QuickCheck.quickCheckWithResult Test.QuickCheck.stdArgs { Test.QuickCheck.maxSuccess = 256 } f,
+	let
+		f :: Game -> Test.QuickCheck.Property
+		f game	= Test.QuickCheck.label "Game.prop_fen" . (
+			\game'	-> and [
+				uncurry (==) $ (($ game) &&& ($ game')) Model.Game.getNextLogicalColour,
+				uncurry (==) . (($ game) &&& ($ game')) $ State.CastleableRooksByLogicalColour.unify . Model.Game.getCastleableRooksByLogicalColour,
+				uncurry (==) $ (($ game) &&& ($ game')) Model.Game.getBoard,
+				uncurry (==) $ (($ game) &&& ($ game')) Model.Game.getMaybeChecked
+			]
+		 ) . Property.ForsythEdwards.readFEN $ Property.ForsythEdwards.showFEN game
 	in Test.QuickCheck.quickCheckWithResult Test.QuickCheck.stdArgs { Test.QuickCheck.maxSuccess = 256 } f,
 	let
 		f :: Game -> Test.QuickCheck.Property
diff --git a/src-test/BishBosh/Test/QuickCheck/Notation/Coordinate.hs b/src-test/BishBosh/Test/QuickCheck/Notation/Coordinate.hs
deleted file mode 100644
--- a/src-test/BishBosh/Test/QuickCheck/Notation/Coordinate.hs
+++ /dev/null
@@ -1,97 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-{-
-	Copyright (C) 2018 Dr. Alistair Ward
-
-	This file is part of BishBosh.
-
-	BishBosh is free software: you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation, either version 3 of the License, or
-	(at your option) any later version.
-
-	BishBosh is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with BishBosh.  If not, see <http://www.gnu.org/licenses/>.
--}
-{- |
- [@AUTHOR@]	Dr. Alistair Ward
-
- [@DESCRIPTION@]	Implements 'Test.QuickCheck.Arbitrary' & defines /QuickCheck/-properties.
--}
-
-module BishBosh.Test.QuickCheck.Notation.Coordinate(
--- * Types
--- ** Type-synonyms
---	Coordinate,
--- * Constants
-	results
-) where
-
-import			BishBosh.Test.QuickCheck.Component.Move()
-import			Control.Arrow((&&&))
-import qualified	BishBosh.Attribute.Rank		as Attribute.Rank
-import qualified	BishBosh.Cartesian.Coordinates	as Cartesian.Coordinates
-import qualified	BishBosh.Cartesian.Ordinate	as Cartesian.Ordinate
-import qualified	BishBosh.Cartesian.Vector	as Cartesian.Vector
-import qualified	BishBosh.Component.Move		as Component.Move
-import qualified	BishBosh.Notation.Coordinate	as Notation.Coordinate
-import qualified	BishBosh.Types			as T
-import qualified	Data.Char
-import qualified	Test.QuickCheck
-import qualified	ToolShed.Test.ReversibleIO
-
--- | Defines a concrete type for testing.
-type Coordinate	= Notation.Coordinate.Coordinate T.X T.Y
-
-instance (
-	Enum	x,
-	Enum	y,
-	Ord	x,
-	Ord	y
- ) => Test.QuickCheck.Arbitrary (Notation.Coordinate.Coordinate x y) where
-	{-# SPECIALISE instance Test.QuickCheck.Arbitrary Coordinate #-}
-	arbitrary	= do
-		move	<- Test.QuickCheck.arbitrary
-
-		Notation.Coordinate.mkCoordinate move `fmap` if abs (
-			Cartesian.Vector.getXDistance (Component.Move.measureDistance move :: Cartesian.Vector.VectorInt)
-		 ) <= 1 && (
-			Cartesian.Coordinates.getY . Component.Move.getSource &&& Cartesian.Coordinates.getY . Component.Move.getDestination $ move
-		 ) `elem` [
-			(succ Cartesian.Ordinate.yMin, Cartesian.Ordinate.yMin),	-- Black moving down.
-			(pred Cartesian.Ordinate.yMax, Cartesian.Ordinate.yMax)		-- White moving up.
-		 ]
-			then Test.QuickCheck.oneof [
-				return {-to Gen-monad-} Nothing,
-				Test.QuickCheck.elements $ map Just Attribute.Rank.promotionProspects	-- CAVEAT: move & promotionRank are still unlikely to be compatible.
-			]
-			else return {-to Gen-monad-} Nothing
-
--- | The constant test-results for this data-type.
-results :: IO [Test.QuickCheck.Result]
-results	= sequence [
-	let
-		f :: Coordinate -> Test.QuickCheck.Property
-		f	= Test.QuickCheck.label "Coordinate.prop_readPrependedWhiteSpace" . ToolShed.Test.ReversibleIO.readPrependedWhiteSpace
-	in Test.QuickCheck.quickCheckWithResult Test.QuickCheck.stdArgs { Test.QuickCheck.maxSuccess = 256 } f,
-	let
-		f :: String -> Test.QuickCheck.Property
-		f garbage	= Test.QuickCheck.label "Coordinate.prop_read" $ case (
-			reads garbage :: [(Notation.Coordinate.Coordinate Int Int, String)]
-		 ) of
-			[_]	-> True
-			_	-> True	-- Unless the read-implementation throws an exception.
-	in Test.QuickCheck.quickCheckWithResult Test.QuickCheck.stdArgs { Test.QuickCheck.maxSuccess = 256 } f,
-	let
-		f :: Coordinate -> String -> Test.QuickCheck.Property
-		f coordinate	= Test.QuickCheck.label "Coordinate.prop_readTrailingGarbage" . ToolShed.Test.ReversibleIO.readTrailingGarbage (
-			(
-				`elem` concatMap show Attribute.Rank.promotionProspects
-			) . Data.Char.toLower
-		 ) coordinate
-	in Test.QuickCheck.quickCheckWithResult Test.QuickCheck.stdArgs { Test.QuickCheck.maxSuccess = 2048 } f
- ]
diff --git a/src-test/BishBosh/Test/QuickCheck/Notation/PureCoordinate.hs b/src-test/BishBosh/Test/QuickCheck/Notation/PureCoordinate.hs
new file mode 100644
--- /dev/null
+++ b/src-test/BishBosh/Test/QuickCheck/Notation/PureCoordinate.hs
@@ -0,0 +1,97 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-
+	Copyright (C) 2018 Dr. Alistair Ward
+
+	This file is part of BishBosh.
+
+	BishBosh is free software: you can redistribute it and/or modify
+	it under the terms of the GNU General Public License as published by
+	the Free Software Foundation, either version 3 of the License, or
+	(at your option) any later version.
+
+	BishBosh is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	GNU General Public License for more details.
+
+	You should have received a copy of the GNU General Public License
+	along with BishBosh.  If not, see <http://www.gnu.org/licenses/>.
+-}
+{- |
+ [@AUTHOR@]	Dr. Alistair Ward
+
+ [@DESCRIPTION@]	Implements 'Test.QuickCheck.Arbitrary' & defines /QuickCheck/-properties.
+-}
+
+module BishBosh.Test.QuickCheck.Notation.PureCoordinate(
+-- * Types
+-- ** Type-synonyms
+--	PureCoordinate,
+-- * Constants
+	results
+) where
+
+import			BishBosh.Test.QuickCheck.Component.Move()
+import			Control.Arrow((&&&))
+import qualified	BishBosh.Attribute.Rank			as Attribute.Rank
+import qualified	BishBosh.Cartesian.Coordinates		as Cartesian.Coordinates
+import qualified	BishBosh.Cartesian.Ordinate		as Cartesian.Ordinate
+import qualified	BishBosh.Cartesian.Vector		as Cartesian.Vector
+import qualified	BishBosh.Component.Move			as Component.Move
+import qualified	BishBosh.Notation.PureCoordinate	as Notation.PureCoordinate
+import qualified	BishBosh.Types				as T
+import qualified	Data.Char
+import qualified	Test.QuickCheck
+import qualified	ToolShed.Test.ReversibleIO
+
+-- | Defines a concrete type for testing.
+type PureCoordinate	= Notation.PureCoordinate.PureCoordinate T.X T.Y
+
+instance (
+	Enum	x,
+	Enum	y,
+	Ord	x,
+	Ord	y
+ ) => Test.QuickCheck.Arbitrary (Notation.PureCoordinate.PureCoordinate x y) where
+	{-# SPECIALISE instance Test.QuickCheck.Arbitrary PureCoordinate #-}
+	arbitrary	= do
+		move	<- Test.QuickCheck.arbitrary
+
+		Notation.PureCoordinate.mkPureCoordinate move `fmap` if abs (
+			Cartesian.Vector.getXDistance (Component.Move.measureDistance move :: Cartesian.Vector.VectorInt)
+		 ) <= 1 && (
+			Cartesian.Coordinates.getY . Component.Move.getSource &&& Cartesian.Coordinates.getY . Component.Move.getDestination $ move
+		 ) `elem` [
+			(succ Cartesian.Ordinate.yMin, Cartesian.Ordinate.yMin),	-- Black moving down.
+			(pred Cartesian.Ordinate.yMax, Cartesian.Ordinate.yMax)		-- White moving up.
+		 ]
+			then Test.QuickCheck.oneof [
+				return {-to Gen-monad-} Nothing,
+				Test.QuickCheck.elements $ map Just Attribute.Rank.promotionProspects	-- CAVEAT: move & promotionRank are still unlikely to be compatible.
+			]
+			else return {-to Gen-monad-} Nothing
+
+-- | The constant test-results for this data-type.
+results :: IO [Test.QuickCheck.Result]
+results	= sequence [
+	let
+		f :: PureCoordinate -> Test.QuickCheck.Property
+		f	= Test.QuickCheck.label "PureCoordinate.prop_readPrependedWhiteSpace" . ToolShed.Test.ReversibleIO.readPrependedWhiteSpace
+	in Test.QuickCheck.quickCheckWithResult Test.QuickCheck.stdArgs { Test.QuickCheck.maxSuccess = 256 } f,
+	let
+		f :: String -> Test.QuickCheck.Property
+		f garbage	= Test.QuickCheck.label "PureCoordinate.prop_read" $ case (
+			reads garbage :: [(Notation.PureCoordinate.PureCoordinate Int Int, String)]
+		 ) of
+			[_]	-> True
+			_	-> True	-- Unless the read-implementation throws an exception.
+	in Test.QuickCheck.quickCheckWithResult Test.QuickCheck.stdArgs { Test.QuickCheck.maxSuccess = 256 } f,
+	let
+		f :: PureCoordinate -> String -> Test.QuickCheck.Property
+		f coordinate	= Test.QuickCheck.label "PureCoordinate.prop_readTrailingGarbage" . ToolShed.Test.ReversibleIO.readTrailingGarbage (
+			(
+				`elem` concatMap show Attribute.Rank.promotionProspects
+			) . Data.Char.toLower
+		 ) coordinate
+	in Test.QuickCheck.quickCheckWithResult Test.QuickCheck.stdArgs { Test.QuickCheck.maxSuccess = 2048 } f
+ ]
diff --git a/src-test/Main.hs b/src-test/Main.hs
--- a/src-test/Main.hs
+++ b/src-test/Main.hs
@@ -68,8 +68,8 @@
 import qualified	BishBosh.Test.QuickCheck.Model.GameTree						as Test.QuickCheck.Model.GameTree
 import qualified	BishBosh.Test.QuickCheck.Model.MoveFrequency					as Test.QuickCheck.Model.MoveFrequency
 import qualified	BishBosh.Test.QuickCheck.Model.Result						as Test.QuickCheck.Model.Result
-import qualified	BishBosh.Test.QuickCheck.Notation.Coordinate					as Test.QuickCheck.Notation.Coordinate
 import qualified	BishBosh.Test.QuickCheck.Notation.ICCFNumeric					as Test.QuickCheck.Notation.ICCFNumeric
+import qualified	BishBosh.Test.QuickCheck.Notation.PureCoordinate				as Test.QuickCheck.Notation.PureCoordinate
 import qualified	BishBosh.Test.QuickCheck.Notation.Smith						as Test.QuickCheck.Notation.Smith
 import qualified	BishBosh.Test.QuickCheck.Search.KillerMoves					as Test.QuickCheck.Search.KillerMoves
 -- import qualified	BishBosh.Test.QuickCheck.Search.Search						as Test.QuickCheck.Search.Search
@@ -127,8 +127,8 @@
 	Test.QuickCheck.Component.Move.results,
 	Test.QuickCheck.Component.QualifiedMove.results,
 	Test.QuickCheck.Component.Turn.results,
-	Test.QuickCheck.Notation.Coordinate.results,
 	Test.QuickCheck.Notation.ICCFNumeric.results,
+	Test.QuickCheck.Notation.PureCoordinate.results,
 	Test.QuickCheck.Notation.Smith.results,
 	Test.QuickCheck.Model.GameTerminationReason.results,
 	Test.QuickCheck.Model.Result.results,
