aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt4
-rw-r--r--aux/CMakeLists.txt1
-rw-r--r--aux/doc/arrow.svg4
-rw-r--r--aux/doc/expanded-F.svg84
-rw-r--r--aux/doc/expanded-H.svg99
-rw-r--r--aux/doc/expanded-P.svg84
-rw-r--r--aux/doc/expanded-T.svg54
-rw-r--r--aux/doc/hat-kites.svg33
-rw-r--r--aux/doc/hatmaps.html62
-rw-r--r--aux/doc/hats-single-F.svg35
-rw-r--r--aux/doc/hats-single-H.svg67
-rw-r--r--aux/doc/hats-single-P.svg35
-rw-r--r--aux/doc/hats-single-T.svg19
-rw-r--r--aux/doc/hats.html258
-rw-r--r--aux/doc/kitemap-F.svg783
-rw-r--r--aux/doc/kitemap-H.svg933
-rw-r--r--aux/doc/kitemap-P.svg783
-rw-r--r--aux/doc/kitemap-T.svg483
-rw-r--r--aux/doc/metamap-F.svg714
-rw-r--r--aux/doc/metamap-H.svg819
-rw-r--r--aux/doc/metamap-P.svg708
-rw-r--r--aux/doc/metamap-T.svg459
-rw-r--r--aux/doc/single-F.svg9
-rw-r--r--aux/doc/single-H.svg11
-rw-r--r--aux/doc/single-P.svg9
-rw-r--r--aux/doc/single-T.svg8
-rwxr-xr-xaux/hatgen-images.sh23
-rw-r--r--aux/hatgen.c1713
-rw-r--r--grid.c158
-rw-r--r--grid.h4
-rw-r--r--hat-tables.h2183
-rw-r--r--hat.c1248
-rw-r--r--hat.h67
-rw-r--r--loopy.c4
34 files changed, 11955 insertions, 3 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 37c0f54..9d4af5d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,7 +7,7 @@ include(cmake/setup.cmake)
add_library(common
combi.c divvy.c drawing.c dsf.c findloop.c grid.c latin.c
- laydomino.c loopgen.c malloc.c matching.c midend.c misc.c penrose.c
+ laydomino.c loopgen.c malloc.c matching.c midend.c misc.c penrose.c hat.c
ps.c random.c sort.c tdq.c tree234.c version.c
${platform_common_sources})
@@ -264,12 +264,14 @@ puzzle(untangle
OBJECTIVE "Reposition the points so that the lines do not cross.")
add_subdirectory(unfinished)
+add_subdirectory(aux)
cliprogram(obfusc obfusc.c)
cliprogram(latincheck latin.c COMPILE_DEFINITIONS STANDALONE_LATIN_TEST)
cliprogram(matching matching.c COMPILE_DEFINITIONS STANDALONE_MATCHING_TEST)
cliprogram(combi combi.c COMPILE_DEFINITIONS STANDALONE_COMBI_TEST)
cliprogram(divvy divvy.c COMPILE_DEFINITIONS TESTMODE)
+cliprogram(hat-test hat.c COMPILE_DEFINITIONS TEST_HAT)
cliprogram(penrose-test penrose.c COMPILE_DEFINITIONS TEST_PENROSE)
cliprogram(penrose-vector-test penrose.c COMPILE_DEFINITIONS TEST_VECTORS)
cliprogram(sort-test sort.c COMPILE_DEFINITIONS SORT_TEST)
diff --git a/aux/CMakeLists.txt b/aux/CMakeLists.txt
new file mode 100644
index 0000000..82e8c82
--- /dev/null
+++ b/aux/CMakeLists.txt
@@ -0,0 +1 @@
+cliprogram(hatgen hatgen.c COMPILE_DEFINITIONS TEST_HAT)
diff --git a/aux/doc/arrow.svg b/aux/doc/arrow.svg
new file mode 100644
index 0000000..1804e19
--- /dev/null
+++ b/aux/doc/arrow.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="110" height="200">
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 10 100 L 100 100 L 70 70 M 100 100 L 70 130" />
+</svg>
diff --git a/aux/doc/expanded-F.svg b/aux/doc/expanded-F.svg
new file mode 100644
index 0000000..71a1b2b
--- /dev/null
+++ b/aux/doc/expanded-F.svg
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="336" height="543">
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 261.807617
+L 242.000000 244.487106
+L 242.000000 105.923035
+L 212.000000 88.602509
+L 92.000000 157.884583
+L 92.000000 192.525589
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 122.000000 175.205078 L 212.000000 175.205078 L 200.000000 163.205078 M 212.000000 175.205078 L 200.000000 187.205078 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="179.705">0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 365.730652
+L 212.000000 331.089661
+L 92.000000 261.807617
+L 62.000000 279.128113
+L 62.000000 417.692200
+L 92.000000 435.012695
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 92.000000 400.371674 L 137.000000 322.429382 L 120.607696 326.821687 M 137.000000 322.429382 L 141.392305 338.821686 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="122" y="352.91">1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 244.487106
+L 302.000000 209.846085
+L 302.000000 71.282043
+L 242.000000 105.923035
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 254.000000 157.884552 L 290.000000 157.884567 L 278.000005 145.884562 M 290.000000 157.884567 L 277.999994 169.884562 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="162.385">2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 331.089661
+L 212.000000 261.807617
+L 92.000000 192.525589
+L 92.000000 261.807617
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 143.000000 277.396088 L 161.000000 246.219162 L 144.607696 250.611469 M 161.000000 246.219162 L 165.392307 262.611466 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="152" y="266.308">3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 62.000000 105.923035
+L 62.000000 140.564056
+L 92.000000 157.884583
+L 212.000000 88.602509
+L 152.000000 53.961517
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="122" y="110.423">4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 92.000000 157.884583
+L 62.000000 140.564056
+L 32.000000 157.884583
+L 32.000000 296.448639
+L 92.000000 261.807617
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="62" y="214.346">5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 2.000000 417.692200
+L 32.000000 435.012695
+L 62.000000 417.692200
+L 62.000000 279.128113
+L 2.000000 313.769135
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="32" y="370.231">6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 62.000000 417.692200
+L 32.000000 435.012695
+L 32.000000 469.653717
+L 152.000000 538.935730
+L 152.000000 469.653717
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="92" y="474.154">7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 332.000000 53.961517
+L 332.000000 19.320526
+L 302.000000 2.000000
+L 182.000000 71.282043
+L 242.000000 105.923035
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="58.4615">8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 365.730652
+L 242.000000 383.051178
+L 272.000000 365.730652
+L 272.000000 227.166611
+L 212.000000 261.807617
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="242" y="318.269">9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 417.692200
+L 242.000000 383.051178
+L 212.000000 365.730652
+L 92.000000 435.012695
+L 152.000000 469.653717
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="422.192">10</text>
+</svg>
diff --git a/aux/doc/expanded-H.svg b/aux/doc/expanded-H.svg
new file mode 100644
index 0000000..2ccc4d4
--- /dev/null
+++ b/aux/doc/expanded-H.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="456" height="491">
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 122.000000 209.846085
+L 152.000000 227.166611
+L 272.000000 157.884567
+L 272.000000 123.243561
+L 152.000000 53.961517
+L 122.000000 71.282043
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 152.000000 88.602539 L 197.000000 166.544830 L 201.392305 150.152526 M 197.000000 166.544830 L 180.607696 162.152525 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="145.064">0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 92.000000 365.730682
+L 122.000000 383.051178
+L 242.000000 313.769165
+L 242.000000 279.128143
+L 122.000000 209.846085
+L 92.000000 227.166611
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 122.000000 244.487106 L 167.000000 322.429382 L 171.392304 306.037077 M 167.000000 322.429382 L 150.607695 318.037078 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="152" y="300.949">1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 157.884567
+L 242.000000 175.205093
+L 242.000000 313.769165
+L 272.000000 331.089661
+L 392.000000 261.807617
+L 392.000000 227.166611
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 362.000000 244.487106 L 272.000000 244.487106 L 284.000000 256.487106 M 272.000000 244.487106 L 284.000000 232.487106 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="248.987">2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 175.205093
+L 152.000000 227.166611
+L 242.000000 279.128143
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 233.000000 190.793549 L 206.000000 237.558914 L 222.392305 233.166610 M 206.000000 237.558914 L 201.607696 221.166609 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="231.667">3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 62.000000 244.487122
+L 122.000000 209.846085
+L 122.000000 71.282043
+L 62.000000 105.923065
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 74.000000 157.884583 L 110.000000 157.884583 L 98.000000 145.884583 M 110.000000 157.884583 L 98.000000 169.884583 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="92" y="162.385">4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 88.602539
+L 272.000000 157.884567
+L 392.000000 227.166611
+L 392.000000 157.884567
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 341.000000 142.296112 L 323.000000 173.473022 L 339.392305 169.080719 M 323.000000 173.473022 L 318.607696 157.080717 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="162.385">5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 122.000000 383.051178
+L 182.000000 417.692200
+L 302.000000 348.410156
+L 242.000000 313.769165
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 203.000000 350.142242 L 221.000000 381.319153 L 225.392304 364.926847 M 221.000000 381.319153 L 204.607695 376.926849 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="370.231">6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 152.000000 53.961517
+L 152.000000 19.320526
+L 122.000000 2.000000
+L 2.000000 71.282043
+L 62.000000 105.923065
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="92" y="58.4615">7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 182.000000 2.000000
+L 152.000000 19.320526
+L 152.000000 53.961517
+L 272.000000 123.243561
+L 272.000000 53.961517
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="58.4615">8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 32.000000 365.730682
+L 62.000000 383.051178
+L 92.000000 365.730682
+L 92.000000 227.166611
+L 32.000000 261.807617
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="62" y="318.269">9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 92.000000 365.730682
+L 62.000000 383.051178
+L 62.000000 417.692200
+L 182.000000 486.974213
+L 182.000000 417.692200
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="122" y="422.192">10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 261.807617
+L 422.000000 279.128143
+L 452.000000 261.807617
+L 452.000000 123.243561
+L 392.000000 157.884567
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="214.346">11</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 422.000000 313.769165
+L 422.000000 279.128143
+L 392.000000 261.807617
+L 272.000000 331.089661
+L 332.000000 365.730682
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="318.269">12</text>
+</svg>
diff --git a/aux/doc/expanded-P.svg b/aux/doc/expanded-P.svg
new file mode 100644
index 0000000..e688525
--- /dev/null
+++ b/aux/doc/expanded-P.svg
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="366" height="526">
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 261.807617
+L 272.000000 244.487137
+L 272.000000 105.923035
+L 242.000000 88.602570
+L 122.000000 157.884583
+L 122.000000 192.525604
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 152.000000 175.205093 L 242.000000 175.205078 L 229.999999 163.205080 M 242.000000 175.205078 L 230.000002 187.205080 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="179.705">0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 365.730682
+L 242.000000 331.089661
+L 122.000000 261.807617
+L 92.000000 279.128113
+L 92.000000 417.692200
+L 122.000000 435.012726
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 122.000000 400.371704 L 167.000000 322.429382 L 150.607696 326.821691 M 167.000000 322.429382 L 171.392308 338.821686 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="152" y="352.91">1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 32.000000 452.333221
+L 92.000000 417.692200
+L 92.000000 279.128113
+L 32.000000 313.769165
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 44.000000 365.730652 L 80.000000 365.730652 L 68.000000 353.730652 M 80.000000 365.730652 L 68.000000 377.730652 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="62" y="370.231">2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 244.487137
+L 332.000000 209.846115
+L 332.000000 71.282043
+L 272.000000 105.923035
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 284.000000 157.884583 L 320.000000 157.884583 L 308.000000 145.884583 M 320.000000 157.884583 L 308.000000 169.884583 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="162.385">3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 331.089661
+L 242.000000 261.807617
+L 122.000000 192.525604
+L 122.000000 261.807617
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 173.000000 277.396088 L 191.000000 246.219162 L 174.607696 250.611469 M 191.000000 246.219162 L 195.392307 262.611466 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="266.308">4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 92.000000 105.923035
+L 92.000000 140.564087
+L 122.000000 157.884583
+L 242.000000 88.602570
+L 182.000000 53.961517
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="152" y="110.423">5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 122.000000 157.884583
+L 92.000000 140.564087
+L 62.000000 157.884583
+L 62.000000 296.448669
+L 122.000000 261.807617
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="92" y="214.346">6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 2.000000 469.653717
+L 2.000000 504.294739
+L 32.000000 521.615234
+L 152.000000 452.333221
+L 92.000000 417.692200
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="62" y="474.154">7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 362.000000 53.961517
+L 362.000000 19.320526
+L 332.000000 2.000000
+L 212.000000 71.282043
+L 272.000000 105.923035
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="58.4615">8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 365.730682
+L 272.000000 383.051208
+L 302.000000 365.730682
+L 302.000000 227.166611
+L 242.000000 261.807617
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="318.269">9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 417.692200
+L 272.000000 383.051208
+L 242.000000 365.730682
+L 122.000000 435.012726
+L 182.000000 469.653717
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="422.192">10</text>
+</svg>
diff --git a/aux/doc/expanded-T.svg b/aux/doc/expanded-T.svg
new file mode 100644
index 0000000..c39b59a
--- /dev/null
+++ b/aux/doc/expanded-T.svg
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="366" height="388">
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 227.166595
+L 242.000000 192.525574
+L 122.000000 123.243546
+L 92.000000 140.564041
+L 92.000000 279.128113
+L 122.000000 296.448639
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 122.000000 261.807617 L 167.000000 183.865326 L 150.607696 188.257631 M 167.000000 183.865326 L 171.392305 200.257630 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="152" y="214.346">0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 32.000000 313.769135
+L 92.000000 279.128113
+L 92.000000 140.564041
+L 32.000000 175.205078
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 44.000000 227.166595 L 80.000000 227.166595 L 68.000000 215.166595 M 80.000000 227.166595 L 68.000000 239.166595 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="62" y="231.667">1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 192.525574
+L 242.000000 123.243546
+L 122.000000 53.961517
+L 122.000000 123.243546
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 173.000000 138.832001 L 191.000000 107.655090 L 174.607695 112.047394 M 191.000000 107.655090 L 195.392304 124.047396 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="127.744">2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 261.807617
+L 242.000000 227.166595
+L 122.000000 296.448639
+L 182.000000 331.089630
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 221.000000 294.716583 L 203.000000 263.539673 L 198.607696 279.931978 M 203.000000 263.539673 L 219.392305 267.931977 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="283.628">3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 122.000000 19.320496
+L 92.000000 2.000000
+L 62.000000 19.320496
+L 62.000000 157.884567
+L 122.000000 123.243546
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="92" y="75.782">4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 2.000000 331.089630
+L 2.000000 365.730652
+L 32.000000 383.051147
+L 152.000000 313.769135
+L 92.000000 279.128113
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="62" y="335.59">5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 332.000000 279.128113
+L 362.000000 261.807617
+L 362.000000 227.166595
+L 242.000000 157.884567
+L 242.000000 227.166595
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="231.667">6</text>
+</svg>
diff --git a/aux/doc/hat-kites.svg b/aux/doc/hat-kites.svg
new file mode 100644
index 0000000..a8fadbc
--- /dev/null
+++ b/aux/doc/hat-kites.svg
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="192" height="168">
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 107.923042
+L 184.000000 107.923042
+L 184.000000 73.282028
+L 154.000000 55.961521
+L 124.000000 38.641014
+L 94.000000 55.961521
+L 64.000000 4.000000
+L 4.000000 4.000000
+L 4.000000 38.641014
+L 34.000000 55.961521
+L 4.000000 107.923042
+L 34.000000 159.884567
+L 64.000000 142.564056
+L 94.000000 159.884567
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 107.923042 L 154.000000 55.961521" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 107.923042 L 94.000000 55.961521" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 64.000000 4.000000 L 34.000000 55.961521" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 107.923042 L 4.000000 107.923042" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 34.000000 55.961521 L 64.000000 73.282028" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 55.961521 L 64.000000 73.282028" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 64.000000 142.564056 L 64.000000 73.282028" />
+<text style="fill: black; font-family: Sans; font-size: 22px; text-anchor: middle; text-align: center; " x="34" y="27.9205">0</text>
+<text style="fill: black; font-family: Sans; font-size: 22px; text-anchor: middle; text-align: center; " x="64" y="45.241">1</text>
+<text style="fill: black; font-family: Sans; font-size: 22px; text-anchor: middle; text-align: center; " x="34" y="97.2025">2</text>
+<text style="fill: black; font-family: Sans; font-size: 22px; text-anchor: middle; text-align: center; " x="34" y="131.844">3</text>
+<text style="fill: black; font-family: Sans; font-size: 22px; text-anchor: middle; text-align: center; " x="94" y="131.844">4</text>
+<text style="fill: black; font-family: Sans; font-size: 22px; text-anchor: middle; text-align: center; " x="94" y="97.2025">5</text>
+<text style="fill: black; font-family: Sans; font-size: 22px; text-anchor: middle; text-align: center; " x="124" y="79.882">6</text>
+<text style="fill: black; font-family: Sans; font-size: 22px; text-anchor: middle; text-align: center; " x="154" y="97.2025">7</text>
+</svg>
diff --git a/aux/doc/hatmaps.html b/aux/doc/hatmaps.html
new file mode 100644
index 0000000..92d26c3
--- /dev/null
+++ b/aux/doc/hatmaps.html
@@ -0,0 +1,62 @@
+<html>
+<head>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+<title>Kitemaps and metamaps for the hat tiling generator</title>
+<style type="text/css">
+ table, tbody, tr, td, th {
+ border: 1px solid rgba(0, 0, 0, 0.3);
+ border-collapse: collapse;
+ }
+ table.noborder, table.noborder tbody, table.noborder td,
+ table.noborder th, table.noborder tr { border: none; }
+ table {
+ margin: 1em;
+ }
+ th, td {
+ padding: 0.5em;
+ }
+</style>
+</head>
+<body>
+ <h1>Kitemaps and metamaps for the hat tiling generator</h1>
+ <p>See <a href="hats.html">hats.html</a> for the full explanation.</p>
+ <p>Here's the full set of kitemaps and metamaps for all the tile
+ types:</p>
+ <table>
+ <tr>
+ <th>Tile name</th>
+ <th>Original tile</th>
+ <th>First-order expansion</th>
+ <th>Kitemap</th>
+ <th>Metamap</th>
+ <tr>
+ <td>H</td>
+ <td><img src="single-H.svg"></td>
+ <td><img src="expanded-H.svg"></td>
+ <td><img src="kitemap-H.svg"></td>
+ <td><img src="metamap-H.svg"></td>
+ </tr>
+ <tr>
+ <td>T</td>
+ <td><img src="single-T.svg"></td>
+ <td><img src="expanded-T.svg"></td>
+ <td><img src="kitemap-T.svg"></td>
+ <td><img src="metamap-T.svg"></td>
+ </tr>
+ <tr>
+ <td>P</td>
+ <td><img src="single-P.svg"></td>
+ <td><img src="expanded-P.svg"></td>
+ <td><img src="kitemap-P.svg"></td>
+ <td><img src="metamap-P.svg"></td>
+ </tr>
+ <tr>
+ <td>F</td>
+ <td><img src="single-F.svg"></td>
+ <td><img src="expanded-F.svg"></td>
+ <td><img src="kitemap-F.svg"></td>
+ <td><img src="metamap-F.svg"></td>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/aux/doc/hats-single-F.svg b/aux/doc/hats-single-F.svg
new file mode 100644
index 0000000..bac6010
--- /dev/null
+++ b/aux/doc/hats-single-F.svg
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="96" height="171">
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 47.000000 88.602539
+L 32.000000 62.621773
+L 17.000000 71.282028
+L 17.000000 88.602539
+L 17.000000 105.923042
+L 32.000000 114.583298
+L 17.000000 140.564056
+L 32.000000 166.544815
+L 47.000000 157.884567
+L 47.000000 140.564056
+L 77.000000 140.564056
+L 92.000000 114.583298
+L 77.000000 105.923042
+L 77.000000 88.602539
+z" />
+<text style="fill: black; font-family: Sans; font-size: 20px; text-anchor: middle; text-align: center; " x="62" y="120.583">0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 77.000000 36.641014
+L 92.000000 10.660248
+L 77.000000 2.000000
+L 62.000000 10.660248
+L 47.000000 19.320503
+L 47.000000 36.641014
+L 17.000000 36.641014
+L 2.000000 62.621773
+L 17.000000 71.282028
+L 32.000000 62.621773
+L 47.000000 88.602539
+L 77.000000 88.602539
+L 77.000000 71.282028
+L 92.000000 62.621773
+z" />
+<text style="fill: black; font-family: Sans; font-size: 20px; text-anchor: middle; text-align: center; " x="62" y="68.6218">1</text>
+</svg>
diff --git a/aux/doc/hats-single-H.svg b/aux/doc/hats-single-H.svg
new file mode 100644
index 0000000..f7017ea
--- /dev/null
+++ b/aux/doc/hats-single-H.svg
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="171" height="188">
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 62.000000 157.884567
+L 92.000000 157.884567
+L 92.000000 140.564056
+L 77.000000 131.903809
+L 62.000000 123.243553
+L 47.000000 131.903809
+L 32.000000 105.923050
+L 2.000000 105.923050
+L 2.000000 123.243553
+L 17.000000 131.903809
+L 2.000000 157.884567
+L 17.000000 183.865326
+L 32.000000 175.205078
+L 47.000000 183.865326
+z" />
+<text style="fill: black; font-family: Sans; font-size: 20px; text-anchor: middle; text-align: center; " x="32" y="163.885">0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 92.000000 105.923050
+L 77.000000 131.903809
+L 92.000000 140.564056
+L 107.000000 131.903809
+L 122.000000 123.243553
+L 122.000000 105.923050
+L 152.000000 105.923050
+L 167.000000 79.942284
+L 152.000000 71.282021
+L 137.000000 79.942284
+L 122.000000 53.961525
+L 92.000000 53.961525
+L 92.000000 71.282021
+L 77.000000 79.942284
+z" />
+<text style="fill: black; font-family: Sans; font-size: 20px; text-anchor: middle; text-align: center; " x="107" y="85.9423">1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 62.000000 53.961525
+L 92.000000 53.961525
+L 92.000000 36.641014
+L 77.000000 27.980759
+L 62.000000 19.320511
+L 47.000000 27.980759
+L 32.000000 2.000000
+L 2.000000 2.000000
+L 2.000000 19.320511
+L 17.000000 27.980759
+L 2.000000 53.961525
+L 17.000000 79.942284
+L 32.000000 71.282021
+L 47.000000 79.942284
+z" />
+<text style="fill: black; font-family: Sans; font-size: 20px; text-anchor: middle; text-align: center; " x="32" y="59.9615">2</text>
+<path style="fill: rgba(0,0,0,0.2); stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 47.000000 131.903809
+L 62.000000 123.243553
+L 77.000000 131.903809
+L 92.000000 105.923050
+L 77.000000 79.942284
+L 92.000000 71.282021
+L 92.000000 53.961525
+L 62.000000 53.961525
+L 47.000000 79.942284
+L 32.000000 71.282021
+L 17.000000 79.942284
+L 2.000000 88.602539
+L 2.000000 105.923050
+L 32.000000 105.923050
+z" />
+<text style="fill: black; font-family: Sans; font-size: 20px; text-anchor: middle; text-align: center; " x="62" y="111.923">3</text>
+</svg>
diff --git a/aux/doc/hats-single-P.svg b/aux/doc/hats-single-P.svg
new file mode 100644
index 0000000..83b147e
--- /dev/null
+++ b/aux/doc/hats-single-P.svg
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="96" height="171">
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 47.000000 88.602547
+L 32.000000 62.621788
+L 17.000000 71.282051
+L 17.000000 88.602547
+L 17.000000 105.923065
+L 32.000000 114.583313
+L 17.000000 140.564087
+L 32.000000 166.544846
+L 47.000000 157.884583
+L 47.000000 140.564087
+L 77.000000 140.564087
+L 92.000000 114.583313
+L 77.000000 105.923065
+L 77.000000 88.602547
+z" />
+<text style="fill: black; font-family: Sans; font-size: 20px; text-anchor: middle; text-align: center; " x="62" y="120.583">0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 77.000000 36.641037
+L 92.000000 10.660263
+L 77.000000 2.000000
+L 62.000000 10.660263
+L 47.000000 19.320526
+L 47.000000 36.641037
+L 17.000000 36.641037
+L 2.000000 62.621788
+L 17.000000 71.282051
+L 32.000000 62.621788
+L 47.000000 88.602547
+L 77.000000 88.602547
+L 77.000000 71.282051
+L 92.000000 62.621788
+z" />
+<text style="fill: black; font-family: Sans; font-size: 20px; text-anchor: middle; text-align: center; " x="62" y="68.6218">1</text>
+</svg>
diff --git a/aux/doc/hats-single-T.svg b/aux/doc/hats-single-T.svg
new file mode 100644
index 0000000..146788e
--- /dev/null
+++ b/aux/doc/hats-single-T.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="81" height="110">
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 32.000000 27.980759
+L 17.000000 2.000000
+L 2.000000 10.660263
+L 2.000000 27.980759
+L 2.000000 45.301277
+L 17.000000 53.961529
+L 2.000000 79.942291
+L 17.000000 105.923050
+L 32.000000 97.262802
+L 32.000000 79.942291
+L 62.000000 79.942291
+L 77.000000 53.961529
+L 62.000000 45.301277
+L 62.000000 27.980759
+z" />
+<text style="fill: black; font-family: Sans; font-size: 20px; text-anchor: middle; text-align: center; " x="47" y="59.9615">0</text>
+</svg>
diff --git a/aux/doc/hats.html b/aux/doc/hats.html
new file mode 100644
index 0000000..ab73ccc
--- /dev/null
+++ b/aux/doc/hats.html
@@ -0,0 +1,258 @@
+<html>
+<head>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+<title>Generating hat tilings for Loopy</title>
+<style type="text/css">
+ table, tbody, tr, td, th {
+ border: 1px solid rgba(0, 0, 0, 0.3);
+ border-collapse: collapse;
+ }
+ table.noborder, table.noborder tbody, table.noborder td,
+ table.noborder th, table.noborder tr { border: none; }
+ table {
+ margin: 1em;
+ }
+ th, td {
+ padding: 0.5em;
+ }
+</style>
+</head>
+<body>
+ <h1>Generating hat tilings for Loopy</h1>
+ <p>The <a href="https://arxiv.org/abs/2303.10798">original paper</a>
+ describes a method for generating hat tilings from a system of four
+ 'metatiles'. You can start with any one of the four tiles, and then
+ recursively apply a set of expansion rules that turn each tile into
+ a collection of smaller tiles from the same set.</p>
+ <p>This table shows the four tiles, with their one-letter names as
+ given in the paper, and how each one is expanded.</p>
+ <p>All the tiles have a significant orientation. The H, T and P
+ tiles are marked with arrows to indicate the orientation. The F tile
+ is asymmetric, so no arrow is needed.</p>
+ <p>I've assigned each tile in each expansion a number, which Loopy
+ will use for its coordinate system.</p>
+ <table>
+ <tr>
+ <th>Tile name</th>
+ <th>Single tile</th>
+ <th>Expansion</th>
+ <tr>
+ <td>H</td>
+ <td><img src="single-H.svg"></td>
+ <td><img src="expanded-H.svg"></td>
+ </tr>
+ <tr>
+ <td>T</td>
+ <td><img src="single-T.svg"></td>
+ <td><img src="expanded-T.svg"></td>
+ </tr>
+ <tr>
+ <td>P</td>
+ <td><img src="single-P.svg"></td>
+ <td><img src="expanded-P.svg"></td>
+ </tr>
+ <tr>
+ <td>F</td>
+ <td><img src="single-F.svg"></td>
+ <td><img src="expanded-F.svg"></td>
+ </tr>
+ </table>
+ <p><strong>Note that these expansions overlap</strong>. When two
+ adjacent metatiles are expanded, the outer layer of P and F tiles in
+ their expansions must be placed so that they overlap each other. The
+ original paper suggests a set of tiles to remove from these
+ expansions so that each metatile expands to a <em>disjoint</em> set
+ of smaller tiles. In our implementation, however, we prefer to keep
+ the overlap, because our coordinate system will use it.</p>
+ <p>Once you've generated a large enough patch of metatiles for your
+ needs, the final step is to convert it into the actual hat tiles.
+ The expansion of each metatile into hats is shown here. Again, I've
+ assigned numbers to each hat for coordinate-system purposes:</p>
+ <table>
+ <tr>
+ <th>Tile name</th>
+ <th>Conversion into hats</th>
+ <tr>
+ <td>H</td>
+ <td><img src="single-H.svg"></td>
+ <td><img src="hats-single-H.svg"></td>
+ </tr>
+ <tr>
+ <td>T</td>
+ <td><img src="single-T.svg"></td>
+ <td><img src="hats-single-T.svg"></td>
+ </tr>
+ <tr>
+ <td>P</td>
+ <td><img src="single-P.svg"></td>
+ <td><img src="hats-single-P.svg"></td>
+ </tr>
+ <tr>
+ <td>F</td>
+ <td><img src="single-F.svg"></td>
+ <td><img src="hats-single-F.svg"></td>
+ </tr>
+ </table>
+ <p>(The hat in the middle of the H is shaded to indicate that it's
+ one of the rare reflected ones. All the other hats are rotations of
+ each other.)</p>
+ <p>Given all of this, an obvious approach to generating a random
+ patch of hat tiling would be to start with a single metatile,
+ iterate the expansion process a few times until you have a tiled
+ area much larger than you need, and then pick a subrectangle of
+ it at random.</p>
+ <p>Loopy's algorithm for generating Penrose tilings (which admit a
+ similar, though less complicated, expansion system) works in exactly
+ this way.</p>
+ <p>One problem with that algorithm is that it spends a lot of effort
+ on generating huge areas of tiles that aren't actually needed. So
+ you'd prefer to adjust the algorithm so that at every stage of
+ expansion it spots tiles completely outside the target rectangle,
+ and throws them away <em>before</em> spending 5 iterations on
+ exponentially expanding them into huge amounts of detail that will
+ only be thrown away anyway later.</p>
+ <p>That works well for Penrose tilings, because there, the expansion
+ procedure is geometrically precise: coordinates in the expanded
+ tiling are scaled up by an exact factor from coordinates in the
+ original tiling. So at every stage it's easy to know exactly where
+ your target rectangle <em>is</em>, and discard things that don't
+ overlap it.</p>
+ <p>But the metatiles shown here don't have that property. The tiles
+ distort slightly as they expand. The <em>topological</em> properties
+ of the expanded tiling match the original (which expanded tiles
+ connect to each other), but the geometry (precise distances) is
+ different. So it would be harder to implement the pruning for this
+ tiling. The target rectangle might not even be rectangular in every
+ iteration!</p>
+ <p>Instead, I came up with a completely different mechanism, by
+ devising a coordinate system to track our position within multiple
+ layers of tile expansion. This allows us to generate precisely the
+ area of tiling we need, and waste no effort at all on anything
+ outside the target region.</p>
+ <p>We begin by assigning an integer index to each kite making up an
+ individual hat:</p>
+ <img src="hat-kites.svg">
+ <p>(For a reflected hat, these indices work in mirror image, so that
+ for example 5 is still the kite in the middle.)</p>
+ <p>Together with the indices we've assigned to hats within each
+ metatile, and to metatiles in the expansion of another metatile,
+ this gives us a coordinate system that can identify an individual
+ kite in an n-times-expanded metatile. For each large metatile
+ expansion, you can give the index of the smaller metatile selected
+ from its expansion; when we reach the last layer of metatiles and
+ expand them into hats, we can give the index of the hat in that
+ metatile; finally we can index the kite in that hat.</p>
+ <p><strong>But note that a kite can have multiple
+ coordinates</strong>, because of the overlap between the expansions
+ of adjacent metatiles. This will be useful!</p>
+ <p>Our next step is to unambiguously name the four directions in
+ which you can move from one kite to an adjacent kite. The directions
+ should be independent of the orientation of the kite. I've chosen to
+ name them from the viewpoint of someone standing at the pointy end
+ of the kite and looking towards the blunt end:</p>
+ <dl>
+ <dt><strong>Left</strong></dt>
+ <dd>Rotate 60° anticlockwise about the pointy end of the kite. For
+ example, in the above hat, going 'left' from kite 5 takes you to
+ kite 4.</dd>
+ <dt><strong>Right</strong></dt>
+ <dd>Rotate 60° clockwise about the pointy end. From kite 5, this
+ would take you to kite 6.</dd>
+ <dt><strong>Forward left</strong></dt>
+ <dd>Head forwards and slightly left, to the kite sharing the
+ left-hand one of this kite's short edges (as seen from the
+ centre). Equivalently, rotate 120° <em>clockwise</em> about the
+ blunt end. From kite 5, this takes you to kite 2.</dd>
+ <dt><strong>Forward right</strong></dt>
+ <dd>Head forwards and slightly right. Or rotate 120° anticlockwise
+ about the blunt end, if you prefer to think of it that way. From
+ kite 5, this takes you to kite 1.</dd>
+ </dl>
+ <p>The idea is that if we know how to transform the coordinates of a
+ single kite into the coordinates of each of those four adjacent
+ kites, then we can iterate that over a whole area and determine the
+ coordinates of every kite in the whole tiling.</p>
+ <p>Having done that, it's easy to identify each individual kite, by
+ several different methods. For example, you could iterate over edges
+ of the tiling to see whether the kites on each side have coordinates
+ differing only in the kite index; if so, they're part of the same
+ hat, and if not, not. Or a completely different approach (in fact
+ the one Loopy actually uses) would be to trace round the boundary of
+ each hat by starting from its kite #0 and just knowing what shape a
+ hat is.</p>
+ <p>So now we have to come up with an algorithm that lets us
+ transform a kite coordinate by making one of the four permitted
+ moves. To do this, we use two multilevel types of map.</p>
+ <p>The <strong>kitemap</strong> for a given metatile type is made by
+ expanding the metatile once into more metatiles, and then into hats.
+ For example, the T tile:</p>
+ <table class="noborder">
+ <tr>
+ <td><img src="single-T.svg"></td>
+ <td><img src="arrow.svg"></td>
+ <td><img src="expanded-T.svg" height="200px"></td>
+ <td><img src="arrow.svg"></td>
+ <td><img src="kitemap-T.svg" height="500px"></td>
+ </tr>
+ </table>
+ <p>In each kite, we show a three-part coordinate, in little-endian
+ fashion (because that matches the order the coordinates are stored
+ in an array in the code that actually generates the tilings). For
+ example, 7.3.0 means kite 7 in hat 3 of metatile 0 of the
+ expansion.</p>
+ <p>This map can be converted into a lookup table, indexed by those
+ three-part coordinates and also the four move directions, which
+ allows you to look up that (for example) going Left from kite 7.3.0
+ goes to 0.0.0, or going Forward Left from 7.3.0 goes to 3.1.3.</p>
+ <p>But if you're at the very edge of the kitemap, this isn't enough.
+ For example, kite 0.0.4 right at the top can go Left to 1.0.4, but
+ if it wants to go in any of the other three directions, this map
+ doesn't help at all.</p>
+ <p>This is where the overlap between the metatile expansions comes
+ in. If you're in kite 0.0.4, then in particular, you're in the F
+ tile numbered 4 in the expansion of a larger T metatile. And that F
+ tile is <em>also</em> part of the expansion of at least one other
+ second-order metatile – maybe two of them – which means that there
+ are other equivalent coordinates describing the same kite, which
+ will place it in a different kitemap where it <em>isn't</em> right
+ on the edge,</p>
+ <p>In order to find those equivalent coordinates, we create a second
+ map for each metatile type, called the <strong>metamap</strong>.
+ This one arises from expanding the metatile twice into other
+ metatiles, instead of into hats:</p>
+ <table class="noborder">
+ <tr>
+ <td><img src="single-T.svg"></td>
+ <td><img src="arrow.svg"></td>
+ <td><img src="expanded-T.svg" height="200px"></td>
+ <td><img src="arrow.svg"></td>
+ <td><img src="metamap-T.svg" height="500px"></td>
+ </tr>
+ </table>
+ <p>Again, the coordinates are little-end first, so that 7.4 means
+ the 7th smallest-size tile expanded from the 4th medium-sized tile
+ expanded from the original single large tile.</p>
+ <p>Unlike the kitemap, the metamap is not used for <em>moving
+ around</em> the tiling to a different kite. It's used for rewriting
+ the coordinates of the current kite into equivalent forms. So each
+ the small tile in the metamap that's part of the expansion
+ of <em>more than one</em> medium-sized tile has more than one
+ coordinate pair. For example, tile 5.2 is also tile 5.4, and tile
+ 7.0 is also 8.3 <em>and</em> also 4.5 (because it's where three
+ medium-tile expansions meet).</p>
+ <p>Using both of these maps (converted into appropriate lookup
+ tables in the code), you can always eventually find a valid
+ coordinate representation of whichever kite you like adjacent to
+ your current one. If the kitemap corresponding to the current
+ coordinates doesn't tell you the coordinates of the next kite, then
+ you can try rewriting the two least-significant metatile indices
+ (using the metamap corresponding to the type of the next-larger
+ metatile still) and then see if that gives you a new kitemap that
+ works. If even that doesn't work, you can move another level up, and
+ try a metamap rewrite on the 2nd and 3rd smallest metatile levels,
+ or the 3rd and 4th, etc. And eventually, you find something you can
+ do.</p>
+ <p>The full set of kitemaps and metamaps for all the tile
+ types is in <a href="hatmaps.html">hatmaps.html</a>.</p>
+</body>
+</html>
diff --git a/aux/doc/kitemap-F.svg b/aux/doc/kitemap-F.svg
new file mode 100644
index 0000000..5b448ab
--- /dev/null
+++ b/aux/doc/kitemap-F.svg
@@ -0,0 +1,783 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="732" height="1104">
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 419.692169
+L 544.000000 367.730652
+L 514.000000 350.410156
+L 484.000000 367.730652
+L 454.000000 385.051178
+L 454.000000 419.692169
+L 394.000000 419.692169
+L 364.000000 471.653687
+L 394.000000 488.974213
+L 424.000000 471.653687
+L 454.000000 523.615234
+L 514.000000 523.615234
+L 514.000000 488.974213
+L 544.000000 471.653687
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 419.692169 L 484.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 419.692169 L 454.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 419.692169 L 424.000000 471.653687" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 419.692169 L 454.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 471.653687 L 454.000000 454.333191" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 419.692169 L 454.000000 454.333191" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 488.974213 L 454.000000 454.333191" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="457.333">0.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="440.013">1.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="491.974">2.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="509.295">3.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="457.333">4.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="440.013">5.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="405.372">6.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="388.051">7.0.0</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 315.769165
+L 484.000000 367.730652
+L 514.000000 350.410156
+L 514.000000 315.769165
+L 514.000000 281.128113
+L 484.000000 263.807617
+L 514.000000 211.846069
+L 484.000000 159.884521
+L 454.000000 177.205017
+L 454.000000 211.846069
+L 394.000000 211.846069
+L 364.000000 263.807617
+L 394.000000 281.128113
+L 394.000000 315.769165
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 315.769165 L 514.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 315.769165 L 484.000000 263.807617" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 211.846069 L 454.000000 211.846069" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 315.769165 L 394.000000 211.846069" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 211.846069 L 454.000000 246.487122" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 263.807617 L 454.000000 246.487122" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 281.128113 L 454.000000 246.487122" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="197.526">0.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="232.167">1.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="232.167">2.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="249.487">3.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="301.449">4.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="284.128">5.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="301.449">6.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="336.09">7.1.0</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 315.769165
+L 364.000000 263.807617
+L 334.000000 246.487122
+L 304.000000 263.807617
+L 274.000000 281.128113
+L 274.000000 315.769165
+L 214.000000 315.769165
+L 184.000000 367.730652
+L 214.000000 385.051178
+L 244.000000 367.730652
+L 274.000000 419.692169
+L 334.000000 419.692169
+L 334.000000 385.051178
+L 364.000000 367.730652
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 315.769165 L 304.000000 263.807617" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 315.769165 L 274.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 315.769165 L 244.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 315.769165 L 274.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 367.730652 L 274.000000 350.410156" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 315.769165 L 274.000000 350.410156" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 385.051178 L 274.000000 350.410156" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="353.41">0.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="336.09">1.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="388.051">2.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="405.372">3.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="353.41">4.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="336.09">5.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="301.449">6.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="284.128">7.2.0</text>
+<path style="fill: rgba(0,0,0,0.2); stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 419.692169
+L 454.000000 385.051178
+L 484.000000 367.730652
+L 454.000000 315.769165
+L 394.000000 315.769165
+L 394.000000 281.128113
+L 364.000000 263.807617
+L 334.000000 315.769165
+L 364.000000 367.730652
+L 334.000000 385.051178
+L 334.000000 419.692169
+L 334.000000 454.333221
+L 364.000000 471.653687
+L 394.000000 419.692169
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 419.692169 L 334.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 419.692169 L 364.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 315.769165 L 394.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 419.692169 L 454.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 315.769165 L 394.000000 350.410156" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 367.730652 L 394.000000 350.410156" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 385.051178 L 394.000000 350.410156" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="301.449">0.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="336.09">1.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="336.09">2.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="353.41">3.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="405.372">4.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="388.051">5.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="405.372">6.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="440.013">7.3.0</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 627.538269
+L 364.000000 575.576782
+L 334.000000 592.897278
+L 334.000000 627.538269
+L 334.000000 662.179321
+L 364.000000 679.499817
+L 334.000000 731.461304
+L 364.000000 783.422852
+L 394.000000 766.102356
+L 394.000000 731.461304
+L 454.000000 731.461304
+L 484.000000 679.499817
+L 454.000000 662.179321
+L 454.000000 627.538269
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 627.538269 L 334.000000 627.538269" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 627.538269 L 364.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 731.461304 L 394.000000 731.461304" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 627.538269 L 454.000000 731.461304" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 731.461304 L 394.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 679.499817 L 394.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 662.179321 L 394.000000 696.820312" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="751.782">0.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="717.141">1.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="717.141">2.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="699.82">3.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="647.859">4.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="665.179">5.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="647.859">6.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="613.218">7.0.1</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 627.538269
+L 334.000000 627.538269
+L 334.000000 592.897278
+L 304.000000 575.576782
+L 274.000000 558.256226
+L 244.000000 575.576782
+L 214.000000 523.615234
+L 154.000000 523.615234
+L 154.000000 558.256226
+L 184.000000 575.576782
+L 154.000000 627.538269
+L 184.000000 679.499817
+L 214.000000 662.179321
+L 244.000000 679.499817
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 627.538269 L 304.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 627.538269 L 244.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 523.615234 L 184.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 627.538269 L 154.000000 627.538269" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 575.576782 L 214.000000 592.897217" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 575.576782 L 214.000000 592.897217" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 662.179321 L 214.000000 592.897217" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="543.936">0.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="561.256">1.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="613.218">2.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="647.859">3.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="647.859">4.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="613.218">5.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="595.897">6.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="613.218">7.1.1</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 731.461304
+L 184.000000 679.499817
+L 154.000000 696.820312
+L 154.000000 731.461304
+L 154.000000 766.102356
+L 184.000000 783.422852
+L 154.000000 835.384399
+L 184.000000 887.345886
+L 214.000000 870.025391
+L 214.000000 835.384399
+L 274.000000 835.384399
+L 304.000000 783.422852
+L 274.000000 766.102356
+L 274.000000 731.461304
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 731.461304 L 154.000000 731.461304" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 731.461304 L 184.000000 783.422852" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 835.384399 L 214.000000 835.384399" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 731.461304 L 274.000000 835.384399" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 835.384399 L 214.000000 800.743347" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 783.422852 L 214.000000 800.743347" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 766.102356 L 214.000000 800.743347" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="855.705">0.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="821.064">1.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="821.064">2.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="803.743">3.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="751.782">4.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="769.102">5.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="751.782">6.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="717.141">7.2.1</text>
+<path style="fill: rgba(0,0,0,0.2); stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 679.499817
+L 334.000000 662.179321
+L 334.000000 627.538269
+L 274.000000 627.538269
+L 244.000000 679.499817
+L 214.000000 662.179321
+L 184.000000 679.499817
+L 214.000000 731.461304
+L 274.000000 731.461304
+L 274.000000 766.102356
+L 304.000000 783.422852
+L 334.000000 800.743347
+L 364.000000 783.422852
+L 334.000000 731.461304
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 731.461304 L 304.000000 783.422852" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 731.461304 L 274.000000 731.461304" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 731.461304 L 244.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 731.461304 L 274.000000 627.538269" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 679.499817 L 274.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 731.461304 L 274.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 662.179321 L 274.000000 696.820312" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="699.82">0.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="717.141">1.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="665.179">2.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="647.859">3.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="699.82">4.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="717.141">5.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="751.782">6.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="769.102">7.3.1</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 315.769165
+L 544.000000 263.807617
+L 514.000000 281.128113
+L 514.000000 315.769165
+L 514.000000 350.410156
+L 544.000000 367.730652
+L 514.000000 419.692169
+L 544.000000 471.653687
+L 574.000000 454.333221
+L 574.000000 419.692169
+L 634.000000 419.692169
+L 664.000000 367.730652
+L 634.000000 350.410156
+L 634.000000 315.769165
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 315.769165 L 514.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 315.769165 L 544.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 419.692169 L 574.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 315.769165 L 634.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 419.692169 L 574.000000 385.051178" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 367.730652 L 574.000000 385.051178" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 350.410156 L 574.000000 385.051178" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="440.013">0.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="405.372">1.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="405.372">2.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="388.051">3.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="336.09">4.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="353.41">5.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="336.09">6.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="301.449">7.0.2</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 211.846069
+L 664.000000 159.884521
+L 634.000000 142.564087
+L 604.000000 159.884521
+L 574.000000 177.205017
+L 574.000000 211.846069
+L 514.000000 211.846069
+L 484.000000 263.807617
+L 514.000000 281.128113
+L 544.000000 263.807617
+L 574.000000 315.769165
+L 634.000000 315.769165
+L 634.000000 281.128113
+L 664.000000 263.807617
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 211.846069 L 604.000000 159.884521" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 211.846069 L 574.000000 211.846069" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 211.846069 L 544.000000 263.807617" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 211.846069 L 574.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 263.807617 L 574.000000 246.487122" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 211.846069 L 574.000000 246.487122" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 281.128113 L 574.000000 246.487122" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="249.487">0.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="232.167">1.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="284.128">2.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="301.449">3.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="249.487">4.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="232.167">5.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="197.526">6.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="180.205">7.1.2</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 523.615234
+L 274.000000 523.615234
+L 274.000000 558.256226
+L 304.000000 575.576782
+L 334.000000 592.897278
+L 364.000000 575.576782
+L 394.000000 627.538269
+L 454.000000 627.538269
+L 454.000000 592.897278
+L 424.000000 575.576782
+L 454.000000 523.615234
+L 424.000000 471.653687
+L 394.000000 488.974213
+L 364.000000 471.653687
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 523.615234 L 304.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 523.615234 L 364.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 627.538269 L 424.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 523.615234 L 454.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 575.576782 L 394.000000 558.256226" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 575.576782 L 394.000000 558.256226" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 488.974213 L 394.000000 558.256226" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="613.218">0.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="595.897">1.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="543.936">2.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="509.295">3.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="509.295">4.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="543.936">5.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="561.256">6.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="543.936">7.0.3</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 419.692169
+L 244.000000 367.730652
+L 214.000000 385.051178
+L 214.000000 419.692169
+L 214.000000 454.333221
+L 244.000000 471.653687
+L 214.000000 523.615234
+L 244.000000 575.576782
+L 274.000000 558.256226
+L 274.000000 523.615234
+L 334.000000 523.615234
+L 364.000000 471.653687
+L 334.000000 454.333221
+L 334.000000 419.692169
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 419.692169 L 214.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 419.692169 L 244.000000 471.653687" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 523.615234 L 274.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 419.692169 L 334.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 523.615234 L 274.000000 488.974213" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 471.653687 L 274.000000 488.974213" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 454.333221 L 274.000000 488.974213" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="543.936">0.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="509.295">1.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="509.295">2.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="491.974">3.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="440.013">4.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="457.333">5.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="440.013">6.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="405.372">7.1.3</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 211.846069
+L 304.000000 159.884521
+L 274.000000 142.564087
+L 244.000000 159.884521
+L 214.000000 177.205017
+L 214.000000 211.846069
+L 154.000000 211.846069
+L 124.000000 263.807617
+L 154.000000 281.128113
+L 184.000000 263.807617
+L 214.000000 315.769165
+L 274.000000 315.769165
+L 274.000000 281.128113
+L 304.000000 263.807617
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 211.846069 L 244.000000 159.884521" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 211.846069 L 214.000000 211.846069" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 211.846069 L 184.000000 263.807617" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 211.846069 L 214.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 263.807617 L 214.000000 246.487122" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 211.846069 L 214.000000 246.487122" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 281.128113 L 214.000000 246.487122" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="249.487">0.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="232.167">1.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="284.128">2.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="301.449">3.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="249.487">4.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="232.167">5.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="197.526">6.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="180.205">7.0.4</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 211.846069
+L 454.000000 211.846069
+L 454.000000 177.205017
+L 424.000000 159.884521
+L 394.000000 142.564087
+L 364.000000 159.884521
+L 334.000000 107.923035
+L 274.000000 107.923035
+L 274.000000 142.564087
+L 304.000000 159.884521
+L 274.000000 211.846069
+L 304.000000 263.807617
+L 334.000000 246.487122
+L 364.000000 263.807617
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 211.846069 L 424.000000 159.884521" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 211.846069 L 364.000000 159.884521" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 107.923035 L 304.000000 159.884521" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 211.846069 L 274.000000 211.846069" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 159.884521 L 334.000000 177.205078" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 159.884521 L 334.000000 177.205078" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 246.487122 L 334.000000 177.205078" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="128.244">0.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="145.564">1.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="197.526">2.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="232.167">3.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="232.167">4.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="197.526">5.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="180.205">6.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="197.526">7.1.4</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 419.692169
+L 184.000000 471.653687
+L 214.000000 454.333221
+L 214.000000 419.692169
+L 214.000000 385.051178
+L 184.000000 367.730652
+L 214.000000 315.769165
+L 184.000000 263.807617
+L 154.000000 281.128113
+L 154.000000 315.769165
+L 94.000000 315.769165
+L 64.000000 367.730652
+L 94.000000 385.051178
+L 94.000000 419.692169
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 419.692169 L 214.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 419.692169 L 184.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 315.769165 L 154.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 419.692169 L 94.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 315.769165 L 154.000000 350.410156" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 367.730652 L 154.000000 350.410156" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 385.051178 L 154.000000 350.410156" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="301.449">0.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="336.09">1.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="336.09">2.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="94" y="353.41">3.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="405.372">4.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="388.051">5.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="405.372">6.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="440.013">7.0.5</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 523.615234
+L 64.000000 575.576782
+L 94.000000 592.897278
+L 124.000000 575.576782
+L 154.000000 558.256226
+L 154.000000 523.615234
+L 214.000000 523.615234
+L 244.000000 471.653687
+L 214.000000 454.333221
+L 184.000000 471.653687
+L 154.000000 419.692169
+L 94.000000 419.692169
+L 94.000000 454.333221
+L 64.000000 471.653687
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 523.615234 L 124.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 523.615234 L 154.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 523.615234 L 184.000000 471.653687" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 523.615234 L 154.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 471.653687 L 154.000000 488.974213" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 523.615234 L 154.000000 488.974213" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 454.333221 L 154.000000 488.974213" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="491.974">0.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="509.295">1.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="457.333">2.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="440.013">3.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="94" y="491.974">4.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="509.295">5.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="543.936">6.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="94" y="561.256">7.1.5</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 731.461304
+L 64.000000 679.499817
+L 34.000000 696.820312
+L 34.000000 731.461304
+L 34.000000 766.102356
+L 64.000000 783.422852
+L 34.000000 835.384399
+L 64.000000 887.345886
+L 94.000000 870.025391
+L 94.000000 835.384399
+L 154.000000 835.384399
+L 184.000000 783.422852
+L 154.000000 766.102356
+L 154.000000 731.461304
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 731.461304 L 34.000000 731.461304" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 731.461304 L 64.000000 783.422852" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 34.000000 835.384399 L 94.000000 835.384399" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 731.461304 L 154.000000 835.384399" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 835.384399 L 94.000000 800.743347" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 64.000000 783.422852 L 94.000000 800.743347" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 766.102356 L 94.000000 800.743347" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="64" y="855.705">0.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="64" y="821.064">1.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="821.064">2.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="803.743">3.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="751.782">4.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="94" y="769.102">5.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="64" y="751.782">6.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="64" y="717.141">7.0.6</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 627.538269
+L 184.000000 575.576782
+L 154.000000 558.256226
+L 124.000000 575.576782
+L 94.000000 592.897278
+L 94.000000 627.538269
+L 34.000000 627.538269
+L 4.000000 679.499817
+L 34.000000 696.820312
+L 64.000000 679.499817
+L 94.000000 731.461304
+L 154.000000 731.461304
+L 154.000000 696.820312
+L 184.000000 679.499817
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 627.538269 L 124.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 627.538269 L 94.000000 627.538269" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 34.000000 627.538269 L 64.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 627.538269 L 94.000000 731.461304" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 64.000000 679.499817 L 94.000000 662.179321" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 627.538269 L 94.000000 662.179321" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 696.820312 L 94.000000 662.179321" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="34" y="665.179">0.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="64" y="647.859">1.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="94" y="699.82">2.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="717.141">3.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="665.179">4.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="647.859">5.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="613.218">6.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="595.897">7.1.6</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 939.307434
+L 274.000000 939.307434
+L 274.000000 904.666382
+L 244.000000 887.345886
+L 214.000000 870.025391
+L 184.000000 887.345886
+L 154.000000 835.384399
+L 94.000000 835.384399
+L 94.000000 870.025391
+L 124.000000 887.345886
+L 94.000000 939.307434
+L 124.000000 991.268921
+L 154.000000 973.948425
+L 184.000000 991.268921
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 939.307434 L 244.000000 887.345886" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 939.307434 L 184.000000 887.345886" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 835.384399 L 124.000000 887.345886" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 939.307434 L 94.000000 939.307434" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 887.345886 L 154.000000 904.666382" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 887.345886 L 154.000000 904.666382" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 973.948425 L 154.000000 904.666382" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="855.705">0.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="873.025">1.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="924.987">2.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="959.628">3.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="959.628">4.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="924.987">5.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="907.666">6.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="924.987">7.0.7</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 1043.230469
+L 304.000000 1095.192017
+L 334.000000 1077.871460
+L 334.000000 1043.230469
+L 334.000000 1008.589478
+L 304.000000 991.268921
+L 334.000000 939.307434
+L 304.000000 887.345886
+L 274.000000 904.666382
+L 274.000000 939.307434
+L 214.000000 939.307434
+L 184.000000 991.268921
+L 214.000000 1008.589478
+L 214.000000 1043.230469
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 1043.230469 L 334.000000 1043.230469" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 1043.230469 L 304.000000 991.268921" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 939.307434 L 274.000000 939.307434" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 1043.230469 L 214.000000 939.307434" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 939.307434 L 274.000000 973.948425" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 991.268921 L 274.000000 973.948425" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 1008.589478 L 274.000000 973.948425" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="924.987">0.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="959.628">1.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="959.628">2.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="976.948">3.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="1028.91">4.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="1011.59">5.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="1028.91">6.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="1063.55">7.1.7</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 107.923035
+L 544.000000 159.884521
+L 574.000000 177.205017
+L 604.000000 159.884521
+L 634.000000 142.564087
+L 634.000000 107.923035
+L 694.000000 107.923035
+L 724.000000 55.961548
+L 694.000000 38.641052
+L 664.000000 55.961548
+L 634.000000 4.000000
+L 574.000000 4.000000
+L 574.000000 38.641052
+L 544.000000 55.961548
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 107.923035 L 604.000000 159.884521" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 107.923035 L 634.000000 107.923035" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 694.000000 107.923035 L 664.000000 55.961548" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 107.923035 L 634.000000 4.000000" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 664.000000 55.961548 L 634.000000 73.282104" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 107.923035 L 634.000000 73.282104" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 38.641052 L 634.000000 73.282104" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="694" y="76.282">0.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="664" y="93.6025">1.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="41.6411">2.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="24.3205">3.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="76.282">4.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="93.6025">5.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="128.244">6.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="145.564">7.0.8</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 107.923035
+L 394.000000 107.923035
+L 394.000000 142.564087
+L 424.000000 159.884521
+L 454.000000 177.205017
+L 484.000000 159.884521
+L 514.000000 211.846069
+L 574.000000 211.846069
+L 574.000000 177.205017
+L 544.000000 159.884521
+L 574.000000 107.923035
+L 544.000000 55.961548
+L 514.000000 73.281982
+L 484.000000 55.961548
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 107.923035 L 424.000000 159.884521" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 107.923035 L 484.000000 159.884521" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 211.846069 L 544.000000 159.884521" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 107.923035 L 574.000000 107.923035" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 159.884521 L 514.000000 142.563965" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 159.884521 L 514.000000 142.563965" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 73.281982 L 514.000000 142.563965" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="197.526">0.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="180.205">1.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="128.244">2.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="93.6025">3.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="93.6025">4.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="128.244">5.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="145.564">6.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="128.244">7.1.8</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 627.538269
+L 484.000000 575.576782
+L 454.000000 592.897278
+L 454.000000 627.538269
+L 454.000000 662.179321
+L 484.000000 679.499817
+L 454.000000 731.461304
+L 484.000000 783.422852
+L 514.000000 766.102356
+L 514.000000 731.461304
+L 574.000000 731.461304
+L 604.000000 679.499817
+L 574.000000 662.179321
+L 574.000000 627.538269
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 627.538269 L 454.000000 627.538269" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 627.538269 L 484.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 731.461304 L 514.000000 731.461304" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 627.538269 L 574.000000 731.461304" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 731.461304 L 514.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 679.499817 L 514.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 662.179321 L 514.000000 696.820312" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="751.782">0.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="717.141">1.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="717.141">2.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="699.82">3.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="647.859">4.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="665.179">5.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="647.859">6.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="613.218">7.0.9</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 523.615234
+L 604.000000 471.653687
+L 574.000000 454.333221
+L 544.000000 471.653687
+L 514.000000 488.974213
+L 514.000000 523.615234
+L 454.000000 523.615234
+L 424.000000 575.576782
+L 454.000000 592.897278
+L 484.000000 575.576782
+L 514.000000 627.538269
+L 574.000000 627.538269
+L 574.000000 592.897278
+L 604.000000 575.576782
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 523.615234 L 544.000000 471.653687" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 523.615234 L 514.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 523.615234 L 484.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 523.615234 L 514.000000 627.538269" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 575.576782 L 514.000000 558.256226" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 523.615234 L 514.000000 558.256226" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 592.897278 L 514.000000 558.256226" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="561.256">0.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="543.936">1.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="595.897">2.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="613.218">3.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="561.256">4.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="543.936">5.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="509.295">6.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="491.974">7.1.9</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 835.384399
+L 364.000000 887.345886
+L 394.000000 904.666382
+L 424.000000 887.345886
+L 454.000000 870.025391
+L 454.000000 835.384399
+L 514.000000 835.384399
+L 544.000000 783.422852
+L 514.000000 766.102356
+L 484.000000 783.422852
+L 454.000000 731.461304
+L 394.000000 731.461304
+L 394.000000 766.102356
+L 364.000000 783.422852
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 835.384399 L 424.000000 887.345886" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 835.384399 L 454.000000 835.384399" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 835.384399 L 484.000000 783.422852" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 835.384399 L 454.000000 731.461304" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 783.422852 L 454.000000 800.743347" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 835.384399 L 454.000000 800.743347" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 766.102356 L 454.000000 800.743347" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="803.743">0.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="821.064">1.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="769.102">2.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="751.782">3.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="803.743">4.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="821.064">5.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="855.705">6.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="873.025">7.0.10</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 835.384399
+L 214.000000 835.384399
+L 214.000000 870.025391
+L 244.000000 887.345886
+L 274.000000 904.666382
+L 304.000000 887.345886
+L 334.000000 939.307434
+L 394.000000 939.307434
+L 394.000000 904.666382
+L 364.000000 887.345886
+L 394.000000 835.384399
+L 364.000000 783.422852
+L 334.000000 800.743347
+L 304.000000 783.422852
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 835.384399 L 244.000000 887.345886" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 835.384399 L 304.000000 887.345886" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 939.307434 L 364.000000 887.345886" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 835.384399 L 394.000000 835.384399" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 887.345886 L 334.000000 870.025391" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 887.345886 L 334.000000 870.025391" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 800.743347 L 334.000000 870.025391" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="924.987">0.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="907.666">1.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="855.705">2.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="821.064">3.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="821.064">4.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="855.705">5.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="873.025">6.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="855.705">7.1.10</text>
+</svg>
diff --git a/aux/doc/kitemap-H.svg b/aux/doc/kitemap-H.svg
new file mode 100644
index 0000000..16750fb
--- /dev/null
+++ b/aux/doc/kitemap-H.svg
@@ -0,0 +1,933 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="942" height="1000">
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 419.692169
+L 424.000000 419.692169
+L 424.000000 385.051178
+L 394.000000 367.730652
+L 364.000000 350.410187
+L 334.000000 367.730652
+L 304.000000 315.769135
+L 244.000000 315.769135
+L 244.000000 350.410187
+L 274.000000 367.730652
+L 244.000000 419.692169
+L 274.000000 471.653717
+L 304.000000 454.333221
+L 334.000000 471.653717
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 419.692169 L 394.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 419.692169 L 334.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 315.769135 L 274.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 419.692169 L 244.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 367.730652 L 304.000000 385.051178" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 367.730652 L 304.000000 385.051178" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 454.333221 L 304.000000 385.051178" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="336.09">0.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="353.41">1.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="405.372">2.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="440.013">3.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="440.013">4.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="405.372">5.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="388.051">6.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="405.372">7.0.0</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 315.769135
+L 394.000000 367.730652
+L 424.000000 385.051178
+L 454.000000 367.730652
+L 484.000000 350.410187
+L 484.000000 315.769135
+L 544.000000 315.769135
+L 574.000000 263.807617
+L 544.000000 246.487122
+L 514.000000 263.807617
+L 484.000000 211.846130
+L 424.000000 211.846130
+L 424.000000 246.487122
+L 394.000000 263.807617
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 315.769135 L 454.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 315.769135 L 484.000000 315.769135" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 315.769135 L 514.000000 263.807617" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 315.769135 L 484.000000 211.846130" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 263.807617 L 484.000000 281.128143" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 315.769135 L 484.000000 281.128143" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 246.487122 L 484.000000 281.128143" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="284.128">0.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="301.449">1.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="249.487">2.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="232.167">3.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="284.128">4.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="301.449">5.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="336.09">6.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="353.41">7.1.0</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 211.846130
+L 424.000000 211.846130
+L 424.000000 177.205078
+L 394.000000 159.884583
+L 364.000000 142.564087
+L 334.000000 159.884583
+L 304.000000 107.923035
+L 244.000000 107.923035
+L 244.000000 142.564087
+L 274.000000 159.884583
+L 244.000000 211.846130
+L 274.000000 263.807617
+L 304.000000 246.487122
+L 334.000000 263.807617
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 211.846130 L 394.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 211.846130 L 334.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 107.923035 L 274.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 211.846130 L 244.000000 211.846130" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 159.884583 L 304.000000 177.205078" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 159.884583 L 304.000000 177.205078" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 246.487122 L 304.000000 177.205078" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="128.244">0.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="145.564">1.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="197.526">2.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="232.167">3.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="232.167">4.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="197.526">5.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="180.205">6.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="197.526">7.2.0</text>
+<path style="fill: rgba(0,0,0,0.2); stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 367.730652
+L 364.000000 350.410187
+L 394.000000 367.730652
+L 424.000000 315.769135
+L 394.000000 263.807617
+L 424.000000 246.487122
+L 424.000000 211.846130
+L 364.000000 211.846130
+L 334.000000 263.807617
+L 304.000000 246.487122
+L 274.000000 263.807617
+L 244.000000 281.128143
+L 244.000000 315.769135
+L 304.000000 315.769135
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 315.769135 L 274.000000 263.807617" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 315.769135 L 334.000000 263.807617" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 211.846130 L 394.000000 263.807617" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 315.769135 L 424.000000 315.769135" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 263.807617 L 364.000000 281.128143" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 263.807617 L 364.000000 281.128143" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 350.410187 L 364.000000 281.128143" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="232.167">0.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="249.487">1.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="301.449">2.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="336.09">3.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="336.09">4.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="301.449">5.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="284.128">6.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="301.449">7.3.0</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 731.461365
+L 364.000000 731.461365
+L 364.000000 696.820312
+L 334.000000 679.499817
+L 304.000000 662.179321
+L 274.000000 679.499817
+L 244.000000 627.538330
+L 184.000000 627.538330
+L 184.000000 662.179321
+L 214.000000 679.499817
+L 184.000000 731.461365
+L 214.000000 783.422852
+L 244.000000 766.102356
+L 274.000000 783.422852
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 731.461365 L 334.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 731.461365 L 274.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 627.538330 L 214.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 731.461365 L 184.000000 731.461365" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 679.499817 L 244.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 679.499817 L 244.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 766.102356 L 244.000000 696.820312" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="647.859">0.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="665.179">1.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="717.141">2.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="751.782">3.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="751.782">4.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="717.141">5.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="699.82">6.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="717.141">7.0.1</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 627.538330
+L 334.000000 679.499817
+L 364.000000 696.820312
+L 394.000000 679.499817
+L 424.000000 662.179321
+L 424.000000 627.538330
+L 484.000000 627.538330
+L 514.000000 575.576782
+L 484.000000 558.256287
+L 454.000000 575.576782
+L 424.000000 523.615234
+L 364.000000 523.615234
+L 364.000000 558.256287
+L 334.000000 575.576782
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 627.538330 L 394.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 627.538330 L 424.000000 627.538330" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 627.538330 L 454.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 627.538330 L 424.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 575.576782 L 424.000000 592.897278" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 627.538330 L 424.000000 592.897278" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 558.256287 L 424.000000 592.897278" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="595.897">0.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="613.218">1.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="561.256">2.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="543.936">3.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="595.897">4.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="613.218">5.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="647.859">6.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="665.179">7.1.1</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 523.615234
+L 364.000000 523.615234
+L 364.000000 488.974243
+L 334.000000 471.653717
+L 304.000000 454.333221
+L 274.000000 471.653717
+L 244.000000 419.692169
+L 184.000000 419.692169
+L 184.000000 454.333221
+L 214.000000 471.653717
+L 184.000000 523.615234
+L 214.000000 575.576782
+L 244.000000 558.256287
+L 274.000000 575.576782
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 523.615234 L 334.000000 471.653717" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 523.615234 L 274.000000 471.653717" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 419.692169 L 214.000000 471.653717" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 523.615234 L 184.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 471.653717 L 244.000000 488.974213" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 471.653717 L 244.000000 488.974213" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 558.256287 L 244.000000 488.974213" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="440.013">0.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="457.333">1.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="509.295">2.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="543.936">3.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="543.936">4.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="509.295">5.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="491.974">6.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="509.295">7.2.1</text>
+<path style="fill: rgba(0,0,0,0.2); stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 679.499817
+L 304.000000 662.179321
+L 334.000000 679.499817
+L 364.000000 627.538330
+L 334.000000 575.576782
+L 364.000000 558.256287
+L 364.000000 523.615234
+L 304.000000 523.615234
+L 274.000000 575.576782
+L 244.000000 558.256287
+L 214.000000 575.576782
+L 184.000000 592.897278
+L 184.000000 627.538330
+L 244.000000 627.538330
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 627.538330 L 214.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 627.538330 L 274.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 523.615234 L 334.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 627.538330 L 364.000000 627.538330" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 575.576782 L 304.000000 592.897278" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 575.576782 L 304.000000 592.897278" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 662.179321 L 304.000000 592.897278" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="543.936">0.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="561.256">1.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="613.218">2.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="647.859">3.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="647.859">4.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="613.218">5.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="595.897">6.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="613.218">7.3.1</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 419.692169
+L 454.000000 471.653717
+L 484.000000 488.974243
+L 514.000000 471.653717
+L 544.000000 454.333221
+L 544.000000 419.692169
+L 604.000000 419.692169
+L 634.000000 367.730652
+L 604.000000 350.410187
+L 574.000000 367.730652
+L 544.000000 315.769135
+L 484.000000 315.769135
+L 484.000000 350.410187
+L 454.000000 367.730652
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 419.692169 L 514.000000 471.653717" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 419.692169 L 544.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 604.000000 419.692169 L 574.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 419.692169 L 544.000000 315.769135" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 367.730652 L 544.000000 385.051178" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 419.692169 L 544.000000 385.051178" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 350.410187 L 544.000000 385.051178" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="388.051">0.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="405.372">1.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="353.41">2.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="336.09">3.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="388.051">4.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="405.372">5.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="440.013">6.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="457.333">7.0.2</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 523.615234
+L 514.000000 471.653717
+L 484.000000 488.974243
+L 484.000000 523.615234
+L 484.000000 558.256287
+L 514.000000 575.576782
+L 484.000000 627.538330
+L 514.000000 679.499817
+L 544.000000 662.179321
+L 544.000000 627.538330
+L 604.000000 627.538330
+L 634.000000 575.576782
+L 604.000000 558.256287
+L 604.000000 523.615234
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 523.615234 L 484.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 523.615234 L 514.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 627.538330 L 544.000000 627.538330" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 523.615234 L 604.000000 627.538330" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 627.538330 L 544.000000 592.897278" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 575.576782 L 544.000000 592.897278" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 604.000000 558.256287 L 544.000000 592.897278" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="647.859">0.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="613.218">1.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="613.218">2.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="595.897">3.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="543.936">4.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="561.256">5.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="543.936">6.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="509.295">7.1.2</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 664.000000 523.615234
+L 634.000000 575.576782
+L 664.000000 592.897278
+L 694.000000 575.576782
+L 724.000000 558.256287
+L 724.000000 523.615234
+L 784.000000 523.615234
+L 814.000000 471.653717
+L 784.000000 454.333221
+L 754.000000 471.653717
+L 724.000000 419.692169
+L 664.000000 419.692169
+L 664.000000 454.333221
+L 634.000000 471.653717
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 664.000000 523.615234 L 694.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 664.000000 523.615234 L 724.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 784.000000 523.615234 L 754.000000 471.653717" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 664.000000 523.615234 L 724.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 754.000000 471.653717 L 724.000000 488.974243" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 724.000000 523.615234 L 724.000000 488.974243" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 664.000000 454.333221 L 724.000000 488.974243" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="784" y="491.974">0.2.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="754" y="509.295">1.2.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="724" y="457.333">2.2.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="694" y="440.013">3.2.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="664" y="491.974">4.2.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="694" y="509.295">5.2.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="694" y="543.936">6.2.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="664" y="561.256">7.2.2</text>
+<path style="fill: rgba(0,0,0,0.2); stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 419.692169
+L 544.000000 454.333221
+L 514.000000 471.653717
+L 544.000000 523.615234
+L 604.000000 523.615234
+L 604.000000 558.256287
+L 634.000000 575.576782
+L 664.000000 523.615234
+L 634.000000 471.653717
+L 664.000000 454.333221
+L 664.000000 419.692169
+L 664.000000 385.051178
+L 634.000000 367.730652
+L 604.000000 419.692169
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 604.000000 419.692169 L 664.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 604.000000 419.692169 L 634.000000 471.653717" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 664.000000 523.615234 L 604.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 604.000000 419.692169 L 544.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 604.000000 523.615234 L 604.000000 488.974243" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 471.653717 L 604.000000 488.974243" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 454.333221 L 604.000000 488.974243" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="543.936">0.3.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="509.295">1.3.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="509.295">2.3.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="491.974">3.3.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="440.013">4.3.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="457.333">5.3.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="440.013">6.3.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="405.372">7.3.2</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 523.615234
+L 454.000000 575.576782
+L 484.000000 558.256287
+L 484.000000 523.615234
+L 484.000000 488.974243
+L 454.000000 471.653717
+L 484.000000 419.692169
+L 454.000000 367.730652
+L 424.000000 385.051178
+L 424.000000 419.692169
+L 364.000000 419.692169
+L 334.000000 471.653717
+L 364.000000 488.974243
+L 364.000000 523.615234
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 523.615234 L 484.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 523.615234 L 454.000000 471.653717" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 419.692169 L 424.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 523.615234 L 364.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 419.692169 L 424.000000 454.333221" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 471.653717 L 424.000000 454.333221" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 488.974243 L 424.000000 454.333221" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="405.372">0.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="440.013">1.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="440.013">2.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="457.333">3.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="509.295">4.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="491.974">5.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="509.295">6.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="543.936">7.0.3</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 315.769135
+L 154.000000 263.807617
+L 124.000000 281.128143
+L 124.000000 315.769135
+L 124.000000 350.410187
+L 154.000000 367.730652
+L 124.000000 419.692169
+L 154.000000 471.653717
+L 184.000000 454.333221
+L 184.000000 419.692169
+L 244.000000 419.692169
+L 274.000000 367.730652
+L 244.000000 350.410187
+L 244.000000 315.769135
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 315.769135 L 124.000000 315.769135" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 315.769135 L 154.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 419.692169 L 184.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 315.769135 L 244.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 419.692169 L 184.000000 385.051178" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 367.730652 L 184.000000 385.051178" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 350.410187 L 184.000000 385.051178" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="440.013">0.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="405.372">1.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="405.372">2.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="388.051">3.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="336.09">4.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="353.41">5.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="336.09">6.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="301.449">7.0.4</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 211.846130
+L 274.000000 159.884583
+L 244.000000 142.564087
+L 214.000000 159.884583
+L 184.000000 177.205078
+L 184.000000 211.846130
+L 124.000000 211.846130
+L 94.000000 263.807617
+L 124.000000 281.128143
+L 154.000000 263.807617
+L 184.000000 315.769135
+L 244.000000 315.769135
+L 244.000000 281.128143
+L 274.000000 263.807617
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 211.846130 L 214.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 211.846130 L 184.000000 211.846130" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 211.846130 L 154.000000 263.807617" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 211.846130 L 184.000000 315.769135" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 263.807617 L 184.000000 246.487122" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 211.846130 L 184.000000 246.487122" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 281.128143 L 184.000000 246.487122" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="249.487">0.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="232.167">1.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="284.128">2.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="301.449">3.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="249.487">4.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="232.167">5.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="197.526">6.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="180.205">7.1.4</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 664.000000 315.769135
+L 724.000000 315.769135
+L 724.000000 281.128143
+L 694.000000 263.807617
+L 664.000000 246.487122
+L 634.000000 263.807617
+L 604.000000 211.846130
+L 544.000000 211.846130
+L 544.000000 246.487122
+L 574.000000 263.807617
+L 544.000000 315.769135
+L 574.000000 367.730652
+L 604.000000 350.410187
+L 634.000000 367.730652
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 664.000000 315.769135 L 694.000000 263.807617" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 664.000000 315.769135 L 634.000000 263.807617" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 604.000000 211.846130 L 574.000000 263.807617" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 664.000000 315.769135 L 544.000000 315.769135" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 263.807617 L 604.000000 281.128143" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 263.807617 L 604.000000 281.128143" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 604.000000 350.410187 L 604.000000 281.128143" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="232.167">0.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="249.487">1.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="301.449">2.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="336.09">3.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="336.09">4.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="301.449">5.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="664" y="284.128">6.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="694" y="301.449">7.0.5</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 724.000000 419.692169
+L 754.000000 471.653717
+L 784.000000 454.333221
+L 784.000000 419.692169
+L 784.000000 385.051178
+L 754.000000 367.730652
+L 784.000000 315.769135
+L 754.000000 263.807617
+L 724.000000 281.128143
+L 724.000000 315.769135
+L 664.000000 315.769135
+L 634.000000 367.730652
+L 664.000000 385.051178
+L 664.000000 419.692169
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 724.000000 419.692169 L 784.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 724.000000 419.692169 L 754.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 784.000000 315.769135 L 724.000000 315.769135" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 724.000000 419.692169 L 664.000000 315.769135" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 724.000000 315.769135 L 724.000000 350.410156" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 754.000000 367.730652 L 724.000000 350.410156" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 664.000000 385.051178 L 724.000000 350.410156" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="754" y="301.449">0.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="754" y="336.09">1.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="694" y="336.09">2.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="664" y="353.41">3.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="694" y="405.372">4.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="724" y="388.051">5.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="754" y="405.372">6.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="754" y="440.013">7.1.5</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 731.461365
+L 454.000000 679.499817
+L 424.000000 662.179321
+L 394.000000 679.499817
+L 364.000000 696.820312
+L 364.000000 731.461365
+L 304.000000 731.461365
+L 274.000000 783.422852
+L 304.000000 800.743347
+L 334.000000 783.422852
+L 364.000000 835.384399
+L 424.000000 835.384399
+L 424.000000 800.743347
+L 454.000000 783.422852
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 731.461365 L 394.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 731.461365 L 364.000000 731.461365" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 731.461365 L 334.000000 783.422852" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 731.461365 L 364.000000 835.384399" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 783.422852 L 364.000000 766.102356" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 731.461365 L 364.000000 766.102356" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 800.743347 L 364.000000 766.102356" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="769.102">0.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="751.782">1.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="803.743">2.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="821.064">3.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="769.102">4.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="751.782">5.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="717.141">6.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="699.82">7.0.6</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 731.461365
+L 604.000000 731.461365
+L 604.000000 696.820312
+L 574.000000 679.499817
+L 544.000000 662.179321
+L 514.000000 679.499817
+L 484.000000 627.538330
+L 424.000000 627.538330
+L 424.000000 662.179321
+L 454.000000 679.499817
+L 424.000000 731.461365
+L 454.000000 783.422852
+L 484.000000 766.102356
+L 514.000000 783.422852
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 731.461365 L 574.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 731.461365 L 514.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 627.538330 L 454.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 731.461365 L 424.000000 731.461365" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 679.499817 L 484.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 679.499817 L 484.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 766.102356 L 484.000000 696.820312" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="647.859">0.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="665.179">1.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="717.141">2.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="751.782">3.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="751.782">4.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="717.141">5.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="699.82">6.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="717.141">7.1.6</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 107.923035
+L 154.000000 159.884583
+L 184.000000 177.205078
+L 214.000000 159.884583
+L 244.000000 142.564087
+L 244.000000 107.923035
+L 304.000000 107.923035
+L 334.000000 55.961487
+L 304.000000 38.641052
+L 274.000000 55.961487
+L 244.000000 4.000000
+L 184.000000 4.000000
+L 184.000000 38.641052
+L 154.000000 55.961487
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 107.923035 L 214.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 107.923035 L 244.000000 107.923035" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 107.923035 L 274.000000 55.961487" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 107.923035 L 244.000000 4.000000" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 55.961487 L 244.000000 73.282043" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 107.923035 L 244.000000 73.282043" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 38.641052 L 244.000000 73.282043" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="76.282">0.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="93.6025">1.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="41.6411">2.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="24.3205">3.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="76.282">4.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="93.6025">5.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="128.244">6.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="145.564">7.0.7</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 64.000000 107.923035
+L 4.000000 107.923035
+L 4.000000 142.564087
+L 34.000000 159.884583
+L 64.000000 177.205078
+L 94.000000 159.884583
+L 124.000000 211.846130
+L 184.000000 211.846130
+L 184.000000 177.205078
+L 154.000000 159.884583
+L 184.000000 107.923035
+L 154.000000 55.961487
+L 124.000000 73.281982
+L 94.000000 55.961487
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 64.000000 107.923035 L 34.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 64.000000 107.923035 L 94.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 211.846130 L 154.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 64.000000 107.923035 L 184.000000 107.923035" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 159.884583 L 124.000000 142.564087" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 159.884583 L 124.000000 142.564087" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 73.281982 L 124.000000 142.564087" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="197.526">0.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="180.205">1.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="128.244">2.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="93.6025">3.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="94" y="93.6025">4.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="94" y="128.244">5.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="64" y="145.564">6.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="34" y="128.244">7.1.7</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 107.923035
+L 484.000000 107.923035
+L 484.000000 73.281982
+L 454.000000 55.961487
+L 424.000000 38.641052
+L 394.000000 55.961487
+L 364.000000 4.000000
+L 304.000000 4.000000
+L 304.000000 38.641052
+L 334.000000 55.961487
+L 304.000000 107.923035
+L 334.000000 159.884583
+L 364.000000 142.564087
+L 394.000000 159.884583
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 107.923035 L 454.000000 55.961487" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 107.923035 L 394.000000 55.961487" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 4.000000 L 334.000000 55.961487" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 107.923035 L 304.000000 107.923035" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 55.961487 L 364.000000 73.282043" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 55.961487 L 364.000000 73.282043" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 142.564087 L 364.000000 73.282043" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="24.3205">0.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="41.6411">1.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="93.6025">2.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="128.244">3.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="128.244">4.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="93.6025">5.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="76.282">6.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="93.6025">7.0.8</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 211.846130
+L 514.000000 263.807617
+L 544.000000 246.487122
+L 544.000000 211.846130
+L 544.000000 177.205078
+L 514.000000 159.884583
+L 544.000000 107.923035
+L 514.000000 55.961487
+L 484.000000 73.281982
+L 484.000000 107.923035
+L 424.000000 107.923035
+L 394.000000 159.884583
+L 424.000000 177.205078
+L 424.000000 211.846130
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 211.846130 L 544.000000 211.846130" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 211.846130 L 514.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 107.923035 L 484.000000 107.923035" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 211.846130 L 424.000000 107.923035" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 107.923035 L 484.000000 142.564087" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 159.884583 L 484.000000 142.564087" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 177.205078 L 484.000000 142.564087" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="93.6025">0.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="128.244">1.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="128.244">2.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="145.564">3.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="197.526">4.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="180.205">5.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="197.526">6.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="232.167">7.1.8</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 627.538330
+L 94.000000 575.576782
+L 64.000000 592.897278
+L 64.000000 627.538330
+L 64.000000 662.179321
+L 94.000000 679.499817
+L 64.000000 731.461365
+L 94.000000 783.422852
+L 124.000000 766.102356
+L 124.000000 731.461365
+L 184.000000 731.461365
+L 214.000000 679.499817
+L 184.000000 662.179321
+L 184.000000 627.538330
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 627.538330 L 64.000000 627.538330" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 627.538330 L 94.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 64.000000 731.461365 L 124.000000 731.461365" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 627.538330 L 184.000000 731.461365" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 731.461365 L 124.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 679.499817 L 124.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 662.179321 L 124.000000 696.820312" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="94" y="751.782">0.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="94" y="717.141">1.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="717.141">2.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="699.82">3.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="647.859">4.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="665.179">5.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="94" y="647.859">6.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="94" y="613.218">7.0.9</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 523.615234
+L 214.000000 471.653717
+L 184.000000 454.333221
+L 154.000000 471.653717
+L 124.000000 488.974243
+L 124.000000 523.615234
+L 64.000000 523.615234
+L 34.000000 575.576782
+L 64.000000 592.897278
+L 94.000000 575.576782
+L 124.000000 627.538330
+L 184.000000 627.538330
+L 184.000000 592.897278
+L 214.000000 575.576782
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 523.615234 L 154.000000 471.653717" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 523.615234 L 124.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 64.000000 523.615234 L 94.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 523.615234 L 124.000000 627.538330" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 575.576782 L 124.000000 558.256226" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 523.615234 L 124.000000 558.256226" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 592.897278 L 124.000000 558.256226" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="64" y="561.256">0.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="94" y="543.936">1.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="595.897">2.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="613.218">3.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="561.256">4.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="543.936">5.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="509.295">6.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="491.974">7.1.9</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 835.384399
+L 304.000000 835.384399
+L 304.000000 800.743347
+L 274.000000 783.422852
+L 244.000000 766.102356
+L 214.000000 783.422852
+L 184.000000 731.461365
+L 124.000000 731.461365
+L 124.000000 766.102356
+L 154.000000 783.422852
+L 124.000000 835.384399
+L 154.000000 887.345886
+L 184.000000 870.025391
+L 214.000000 887.345886
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 835.384399 L 274.000000 783.422852" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 835.384399 L 214.000000 783.422852" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 731.461365 L 154.000000 783.422852" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 835.384399 L 124.000000 835.384399" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 783.422852 L 184.000000 800.743347" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 783.422852 L 184.000000 800.743347" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 870.025391 L 184.000000 800.743347" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="751.782">0.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="769.102">1.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="821.064">2.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="855.705">3.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="855.705">4.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="821.064">5.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="803.743">6.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="821.064">7.0.10</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 939.307434
+L 334.000000 991.268982
+L 364.000000 973.948425
+L 364.000000 939.307434
+L 364.000000 904.666382
+L 334.000000 887.345886
+L 364.000000 835.384399
+L 334.000000 783.422852
+L 304.000000 800.743347
+L 304.000000 835.384399
+L 244.000000 835.384399
+L 214.000000 887.345886
+L 244.000000 904.666382
+L 244.000000 939.307434
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 939.307434 L 364.000000 939.307434" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 939.307434 L 334.000000 887.345886" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 835.384399 L 304.000000 835.384399" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 939.307434 L 244.000000 835.384399" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 835.384399 L 304.000000 870.025391" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 887.345886 L 304.000000 870.025391" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 904.666382 L 304.000000 870.025391" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="821.064">0.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="855.705">1.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="855.705">2.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="873.025">3.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="924.987">4.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="907.666">5.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="924.987">6.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="959.628">7.1.10</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 844.000000 419.692169
+L 814.000000 367.730652
+L 784.000000 385.051178
+L 784.000000 419.692169
+L 784.000000 454.333221
+L 814.000000 471.653717
+L 784.000000 523.615234
+L 814.000000 575.576782
+L 844.000000 558.256287
+L 844.000000 523.615234
+L 904.000000 523.615234
+L 934.000000 471.653717
+L 904.000000 454.333221
+L 904.000000 419.692169
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 844.000000 419.692169 L 784.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 844.000000 419.692169 L 814.000000 471.653717" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 784.000000 523.615234 L 844.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 844.000000 419.692169 L 904.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 844.000000 523.615234 L 844.000000 488.974243" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 814.000000 471.653717 L 844.000000 488.974243" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 904.000000 454.333221 L 844.000000 488.974243" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="814" y="543.936">0.0.11</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="814" y="509.295">1.0.11</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="874" y="509.295">2.0.11</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="904" y="491.974">3.0.11</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="874" y="440.013">4.0.11</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="844" y="457.333">5.0.11</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="814" y="440.013">6.0.11</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="814" y="405.372">7.0.11</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 904.000000 315.769135
+L 934.000000 263.807617
+L 904.000000 246.487122
+L 874.000000 263.807617
+L 844.000000 281.128143
+L 844.000000 315.769135
+L 784.000000 315.769135
+L 754.000000 367.730652
+L 784.000000 385.051178
+L 814.000000 367.730652
+L 844.000000 419.692169
+L 904.000000 419.692169
+L 904.000000 385.051178
+L 934.000000 367.730652
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 904.000000 315.769135 L 874.000000 263.807617" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 904.000000 315.769135 L 844.000000 315.769135" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 784.000000 315.769135 L 814.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 904.000000 315.769135 L 844.000000 419.692169" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 814.000000 367.730652 L 844.000000 350.410156" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 844.000000 315.769135 L 844.000000 350.410156" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 904.000000 385.051178 L 844.000000 350.410156" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="784" y="353.41">0.1.11</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="814" y="336.09">1.1.11</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="844" y="388.051">2.1.11</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="874" y="405.372">3.1.11</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="904" y="353.41">4.1.11</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="874" y="336.09">5.1.11</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="874" y="301.449">6.1.11</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="904" y="284.128">7.1.11</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 724.000000 627.538330
+L 694.000000 679.499817
+L 724.000000 696.820312
+L 754.000000 679.499817
+L 784.000000 662.179321
+L 784.000000 627.538330
+L 844.000000 627.538330
+L 874.000000 575.576782
+L 844.000000 558.256287
+L 814.000000 575.576782
+L 784.000000 523.615234
+L 724.000000 523.615234
+L 724.000000 558.256287
+L 694.000000 575.576782
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 724.000000 627.538330 L 754.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 724.000000 627.538330 L 784.000000 627.538330" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 844.000000 627.538330 L 814.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 724.000000 627.538330 L 784.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 814.000000 575.576782 L 784.000000 592.897278" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 784.000000 627.538330 L 784.000000 592.897278" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 724.000000 558.256287 L 784.000000 592.897278" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="844" y="595.897">0.0.12</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="814" y="613.218">1.0.12</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="784" y="561.256">2.0.12</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="754" y="543.936">3.0.12</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="724" y="595.897">4.0.12</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="754" y="613.218">5.0.12</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="754" y="647.859">6.0.12</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="724" y="665.179">7.0.12</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 604.000000 627.538330
+L 544.000000 627.538330
+L 544.000000 662.179321
+L 574.000000 679.499817
+L 604.000000 696.820312
+L 634.000000 679.499817
+L 664.000000 731.461365
+L 724.000000 731.461365
+L 724.000000 696.820312
+L 694.000000 679.499817
+L 724.000000 627.538330
+L 694.000000 575.576782
+L 664.000000 592.897278
+L 634.000000 575.576782
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 604.000000 627.538330 L 574.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 604.000000 627.538330 L 634.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 664.000000 731.461365 L 694.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 604.000000 627.538330 L 724.000000 627.538330" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 694.000000 679.499817 L 664.000000 662.179321" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 679.499817 L 664.000000 662.179321" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 664.000000 592.897278 L 664.000000 662.179321" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="694" y="717.141">0.1.12</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="664" y="699.82">1.1.12</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="694" y="647.859">2.1.12</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="694" y="613.218">3.1.12</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="613.218">4.1.12</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="647.859">5.1.12</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="665.179">6.1.12</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="647.859">7.1.12</text>
+</svg>
diff --git a/aux/doc/kitemap-P.svg b/aux/doc/kitemap-P.svg
new file mode 100644
index 0000000..bd3fffb
--- /dev/null
+++ b/aux/doc/kitemap-P.svg
@@ -0,0 +1,783 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="792" height="1052">
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 419.692230
+L 604.000000 367.730652
+L 574.000000 350.410217
+L 544.000000 367.730652
+L 514.000000 385.051208
+L 514.000000 419.692230
+L 454.000000 419.692230
+L 424.000000 471.653748
+L 454.000000 488.974274
+L 484.000000 471.653748
+L 514.000000 523.615234
+L 574.000000 523.615234
+L 574.000000 488.974274
+L 604.000000 471.653748
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 419.692230 L 544.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 419.692230 L 514.000000 419.692230" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 419.692230 L 484.000000 471.653748" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 419.692230 L 514.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 471.653748 L 514.000000 454.333252" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 419.692230 L 514.000000 454.333252" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 488.974274 L 514.000000 454.333252" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="457.333">0.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="440.013">1.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="491.974">2.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="509.295">3.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="457.333">4.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="440.013">5.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="405.372">6.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="388.051">7.0.0</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 315.769165
+L 544.000000 367.730652
+L 574.000000 350.410217
+L 574.000000 315.769165
+L 574.000000 281.128174
+L 544.000000 263.807678
+L 574.000000 211.846069
+L 544.000000 159.884583
+L 514.000000 177.205139
+L 514.000000 211.846069
+L 454.000000 211.846069
+L 424.000000 263.807678
+L 454.000000 281.128174
+L 454.000000 315.769165
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 315.769165 L 574.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 315.769165 L 544.000000 263.807678" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 211.846069 L 514.000000 211.846069" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 315.769165 L 454.000000 211.846069" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 211.846069 L 514.000000 246.487122" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 263.807678 L 514.000000 246.487122" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 281.128174 L 514.000000 246.487122" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="197.526">0.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="232.167">1.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="232.167">2.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="249.487">3.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="301.449">4.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="284.128">5.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="301.449">6.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="336.09">7.1.0</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 315.769165
+L 424.000000 263.807678
+L 394.000000 246.487122
+L 364.000000 263.807678
+L 334.000000 281.128174
+L 334.000000 315.769165
+L 274.000000 315.769165
+L 244.000000 367.730652
+L 274.000000 385.051208
+L 304.000000 367.730652
+L 334.000000 419.692230
+L 394.000000 419.692230
+L 394.000000 385.051208
+L 424.000000 367.730652
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 315.769165 L 364.000000 263.807678" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 315.769165 L 334.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 315.769165 L 304.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 315.769165 L 334.000000 419.692230" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 367.730652 L 334.000000 350.410156" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 315.769165 L 334.000000 350.410156" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 385.051208 L 334.000000 350.410156" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="353.41">0.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="336.09">1.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="388.051">2.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="405.372">3.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="353.41">4.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="336.09">5.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="301.449">6.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="284.128">7.2.0</text>
+<path style="fill: rgba(0,0,0,0.2); stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 419.692230
+L 514.000000 385.051208
+L 544.000000 367.730652
+L 514.000000 315.769165
+L 454.000000 315.769165
+L 454.000000 281.128174
+L 424.000000 263.807678
+L 394.000000 315.769165
+L 424.000000 367.730652
+L 394.000000 385.051208
+L 394.000000 419.692230
+L 394.000000 454.333221
+L 424.000000 471.653748
+L 454.000000 419.692230
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 419.692230 L 394.000000 419.692230" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 419.692230 L 424.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 315.769165 L 454.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 419.692230 L 514.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 315.769165 L 454.000000 350.410156" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 367.730652 L 454.000000 350.410156" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 385.051208 L 454.000000 350.410156" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="301.449">0.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="336.09">1.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="336.09">2.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="353.41">3.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="405.372">4.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="388.051">5.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="405.372">6.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="440.013">7.3.0</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 627.538330
+L 424.000000 575.576782
+L 394.000000 592.897339
+L 394.000000 627.538330
+L 394.000000 662.179321
+L 424.000000 679.499817
+L 394.000000 731.461365
+L 424.000000 783.422913
+L 454.000000 766.102417
+L 454.000000 731.461365
+L 514.000000 731.461365
+L 544.000000 679.499817
+L 514.000000 662.179321
+L 514.000000 627.538330
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 627.538330 L 394.000000 627.538330" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 627.538330 L 424.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 731.461365 L 454.000000 731.461365" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 627.538330 L 514.000000 731.461365" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 731.461365 L 454.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 679.499817 L 454.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 662.179321 L 454.000000 696.820312" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="751.782">0.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="717.141">1.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="717.141">2.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="699.82">3.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="647.859">4.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="665.179">5.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="647.859">6.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="613.218">7.0.1</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 627.538330
+L 394.000000 627.538330
+L 394.000000 592.897339
+L 364.000000 575.576782
+L 334.000000 558.256226
+L 304.000000 575.576782
+L 274.000000 523.615234
+L 214.000000 523.615234
+L 214.000000 558.256226
+L 244.000000 575.576782
+L 214.000000 627.538330
+L 244.000000 679.499817
+L 274.000000 662.179321
+L 304.000000 679.499817
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 627.538330 L 364.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 627.538330 L 304.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 523.615234 L 244.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 627.538330 L 214.000000 627.538330" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 575.576782 L 274.000000 592.897339" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 575.576782 L 274.000000 592.897339" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 662.179321 L 274.000000 592.897339" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="543.936">0.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="561.256">1.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="613.218">2.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="647.859">3.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="647.859">4.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="613.218">5.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="595.897">6.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="613.218">7.1.1</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 731.461365
+L 244.000000 679.499817
+L 214.000000 696.820374
+L 214.000000 731.461365
+L 214.000000 766.102417
+L 244.000000 783.422913
+L 214.000000 835.384399
+L 244.000000 887.345947
+L 274.000000 870.025452
+L 274.000000 835.384399
+L 334.000000 835.384399
+L 364.000000 783.422913
+L 334.000000 766.102417
+L 334.000000 731.461365
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 731.461365 L 214.000000 731.461365" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 731.461365 L 244.000000 783.422913" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 835.384399 L 274.000000 835.384399" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 731.461365 L 334.000000 835.384399" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 835.384399 L 274.000000 800.743408" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 783.422913 L 274.000000 800.743408" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 766.102417 L 274.000000 800.743408" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="855.705">0.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="821.064">1.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="821.064">2.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="803.743">3.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="751.782">4.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="769.102">5.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="751.782">6.2.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="717.141">7.2.1</text>
+<path style="fill: rgba(0,0,0,0.2); stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 679.499817
+L 394.000000 662.179321
+L 394.000000 627.538330
+L 334.000000 627.538330
+L 304.000000 679.499817
+L 274.000000 662.179321
+L 244.000000 679.499817
+L 274.000000 731.461365
+L 334.000000 731.461365
+L 334.000000 766.102417
+L 364.000000 783.422913
+L 394.000000 800.743408
+L 424.000000 783.422913
+L 394.000000 731.461365
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 731.461365 L 364.000000 783.422913" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 731.461365 L 334.000000 731.461365" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 731.461365 L 304.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 731.461365 L 334.000000 627.538330" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 679.499817 L 334.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 731.461365 L 334.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 662.179321 L 334.000000 696.820312" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="699.82">0.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="717.141">1.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="665.179">2.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="647.859">3.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="699.82">4.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="717.141">5.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="751.782">6.3.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="769.102">7.3.1</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 731.461365
+L 124.000000 679.499817
+L 94.000000 696.820374
+L 94.000000 731.461365
+L 94.000000 766.102417
+L 124.000000 783.422913
+L 94.000000 835.384399
+L 124.000000 887.345947
+L 154.000000 870.025452
+L 154.000000 835.384399
+L 214.000000 835.384399
+L 244.000000 783.422913
+L 214.000000 766.102417
+L 214.000000 731.461365
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 731.461365 L 94.000000 731.461365" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 731.461365 L 124.000000 783.422913" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 835.384399 L 154.000000 835.384399" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 731.461365 L 214.000000 835.384399" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 835.384399 L 154.000000 800.743408" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 783.422913 L 154.000000 800.743408" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 766.102417 L 154.000000 800.743408" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="855.705">0.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="821.064">1.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="821.064">2.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="803.743">3.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="751.782">4.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="769.102">5.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="751.782">6.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="717.141">7.0.2</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 627.538330
+L 244.000000 575.576782
+L 214.000000 558.256226
+L 184.000000 575.576782
+L 154.000000 592.897339
+L 154.000000 627.538330
+L 94.000000 627.538330
+L 64.000000 679.499817
+L 94.000000 696.820374
+L 124.000000 679.499817
+L 154.000000 731.461365
+L 214.000000 731.461365
+L 214.000000 696.820374
+L 244.000000 679.499817
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 627.538330 L 184.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 627.538330 L 154.000000 627.538330" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 627.538330 L 124.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 627.538330 L 154.000000 731.461365" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 679.499817 L 154.000000 662.179321" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 627.538330 L 154.000000 662.179321" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 696.820374 L 154.000000 662.179321" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="94" y="665.179">0.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="647.859">1.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="699.82">2.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="717.141">3.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="665.179">4.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="647.859">5.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="613.218">6.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="595.897">7.1.2</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 315.769165
+L 604.000000 263.807678
+L 574.000000 281.128174
+L 574.000000 315.769165
+L 574.000000 350.410217
+L 604.000000 367.730652
+L 574.000000 419.692230
+L 604.000000 471.653748
+L 634.000000 454.333221
+L 634.000000 419.692230
+L 694.000000 419.692230
+L 724.000000 367.730652
+L 694.000000 350.410217
+L 694.000000 315.769165
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 315.769165 L 574.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 315.769165 L 604.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 419.692230 L 634.000000 419.692230" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 315.769165 L 694.000000 419.692230" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 419.692230 L 634.000000 385.051208" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 604.000000 367.730652 L 634.000000 385.051208" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 694.000000 350.410217 L 634.000000 385.051208" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="440.013">0.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="405.372">1.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="664" y="405.372">2.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="694" y="388.051">3.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="664" y="336.09">4.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="353.41">5.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="336.09">6.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="301.449">7.0.3</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 694.000000 211.846069
+L 724.000000 159.884583
+L 694.000000 142.564087
+L 664.000000 159.884583
+L 634.000000 177.205139
+L 634.000000 211.846069
+L 574.000000 211.846069
+L 544.000000 263.807678
+L 574.000000 281.128174
+L 604.000000 263.807678
+L 634.000000 315.769165
+L 694.000000 315.769165
+L 694.000000 281.128174
+L 724.000000 263.807678
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 694.000000 211.846069 L 664.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 694.000000 211.846069 L 634.000000 211.846069" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 211.846069 L 604.000000 263.807678" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 694.000000 211.846069 L 634.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 604.000000 263.807678 L 634.000000 246.487122" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 211.846069 L 634.000000 246.487122" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 694.000000 281.128174 L 634.000000 246.487122" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="249.487">0.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="232.167">1.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="284.128">2.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="664" y="301.449">3.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="694" y="249.487">4.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="664" y="232.167">5.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="664" y="197.526">6.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="694" y="180.205">7.1.3</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 523.615234
+L 334.000000 523.615234
+L 334.000000 558.256226
+L 364.000000 575.576782
+L 394.000000 592.897339
+L 424.000000 575.576782
+L 454.000000 627.538330
+L 514.000000 627.538330
+L 514.000000 592.897339
+L 484.000000 575.576782
+L 514.000000 523.615234
+L 484.000000 471.653748
+L 454.000000 488.974274
+L 424.000000 471.653748
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 523.615234 L 364.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 523.615234 L 424.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 627.538330 L 484.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 523.615234 L 514.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 575.576782 L 454.000000 558.256287" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 575.576782 L 454.000000 558.256287" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 488.974274 L 454.000000 558.256287" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="613.218">0.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="595.897">1.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="543.936">2.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="509.295">3.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="509.295">4.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="543.936">5.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="561.256">6.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="543.936">7.0.4</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 419.692230
+L 304.000000 367.730652
+L 274.000000 385.051208
+L 274.000000 419.692230
+L 274.000000 454.333221
+L 304.000000 471.653748
+L 274.000000 523.615234
+L 304.000000 575.576782
+L 334.000000 558.256226
+L 334.000000 523.615234
+L 394.000000 523.615234
+L 424.000000 471.653748
+L 394.000000 454.333221
+L 394.000000 419.692230
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 419.692230 L 274.000000 419.692230" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 419.692230 L 304.000000 471.653748" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 523.615234 L 334.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 419.692230 L 394.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 523.615234 L 334.000000 488.974243" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 471.653748 L 334.000000 488.974243" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 454.333221 L 334.000000 488.974243" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="543.936">0.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="509.295">1.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="509.295">2.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="491.974">3.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="440.013">4.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="457.333">5.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="440.013">6.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="405.372">7.1.4</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 211.846069
+L 364.000000 159.884583
+L 334.000000 142.564087
+L 304.000000 159.884583
+L 274.000000 177.205139
+L 274.000000 211.846069
+L 214.000000 211.846069
+L 184.000000 263.807678
+L 214.000000 281.128174
+L 244.000000 263.807678
+L 274.000000 315.769165
+L 334.000000 315.769165
+L 334.000000 281.128174
+L 364.000000 263.807678
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 211.846069 L 304.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 211.846069 L 274.000000 211.846069" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 211.846069 L 244.000000 263.807678" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 211.846069 L 274.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 263.807678 L 274.000000 246.487122" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 211.846069 L 274.000000 246.487122" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 281.128174 L 274.000000 246.487122" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="249.487">0.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="232.167">1.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="284.128">2.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="301.449">3.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="249.487">4.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="232.167">5.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="197.526">6.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="180.205">7.0.5</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 211.846069
+L 514.000000 211.846069
+L 514.000000 177.205139
+L 484.000000 159.884583
+L 454.000000 142.564087
+L 424.000000 159.884583
+L 394.000000 107.923035
+L 334.000000 107.923035
+L 334.000000 142.564087
+L 364.000000 159.884583
+L 334.000000 211.846069
+L 364.000000 263.807678
+L 394.000000 246.487122
+L 424.000000 263.807678
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 211.846069 L 484.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 211.846069 L 424.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 107.923035 L 364.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 211.846069 L 334.000000 211.846069" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 159.884583 L 394.000000 177.205017" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 159.884583 L 394.000000 177.205017" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 246.487122 L 394.000000 177.205017" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="128.244">0.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="145.564">1.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="197.526">2.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="232.167">3.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="232.167">4.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="197.526">5.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="180.205">6.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="197.526">7.1.5</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 419.692230
+L 244.000000 471.653748
+L 274.000000 454.333221
+L 274.000000 419.692230
+L 274.000000 385.051208
+L 244.000000 367.730652
+L 274.000000 315.769165
+L 244.000000 263.807678
+L 214.000000 281.128174
+L 214.000000 315.769165
+L 154.000000 315.769165
+L 124.000000 367.730652
+L 154.000000 385.051208
+L 154.000000 419.692230
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 419.692230 L 274.000000 419.692230" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 419.692230 L 244.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 315.769165 L 214.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 419.692230 L 154.000000 315.769165" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 315.769165 L 214.000000 350.410156" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 367.730652 L 214.000000 350.410156" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 385.051208 L 214.000000 350.410156" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="301.449">0.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="336.09">1.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="336.09">2.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="353.41">3.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="405.372">4.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="388.051">5.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="405.372">6.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="440.013">7.0.6</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 523.615234
+L 124.000000 575.576782
+L 154.000000 592.897339
+L 184.000000 575.576782
+L 214.000000 558.256226
+L 214.000000 523.615234
+L 274.000000 523.615234
+L 304.000000 471.653748
+L 274.000000 454.333221
+L 244.000000 471.653748
+L 214.000000 419.692230
+L 154.000000 419.692230
+L 154.000000 454.333221
+L 124.000000 471.653748
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 523.615234 L 184.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 523.615234 L 214.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 523.615234 L 244.000000 471.653748" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 523.615234 L 214.000000 419.692230" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 471.653748 L 214.000000 488.974243" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 523.615234 L 214.000000 488.974243" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 454.333221 L 214.000000 488.974243" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="491.974">0.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="509.295">1.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="457.333">2.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="440.013">3.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="491.974">4.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="509.295">5.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="543.936">6.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="561.256">7.1.6</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 939.307434
+L 184.000000 887.345947
+L 154.000000 870.025452
+L 124.000000 887.345947
+L 94.000000 904.666443
+L 94.000000 939.307434
+L 34.000000 939.307434
+L 4.000000 991.268982
+L 34.000000 1008.589478
+L 64.000000 991.268982
+L 94.000000 1043.230469
+L 154.000000 1043.230469
+L 154.000000 1008.589478
+L 184.000000 991.268982
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 939.307434 L 124.000000 887.345947" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 939.307434 L 94.000000 939.307434" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 34.000000 939.307434 L 64.000000 991.268982" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 939.307434 L 94.000000 1043.230469" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 64.000000 991.268982 L 94.000000 973.948486" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 939.307434 L 94.000000 973.948486" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 1008.589478 L 94.000000 973.948486" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="34" y="976.948">0.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="64" y="959.628">1.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="94" y="1011.59">2.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="1028.91">3.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="976.948">4.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="959.628">5.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="924.987">6.0.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="907.666">7.0.7</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 939.307434
+L 334.000000 939.307434
+L 334.000000 904.666443
+L 304.000000 887.345947
+L 274.000000 870.025452
+L 244.000000 887.345947
+L 214.000000 835.384399
+L 154.000000 835.384399
+L 154.000000 870.025452
+L 184.000000 887.345947
+L 154.000000 939.307434
+L 184.000000 991.268982
+L 214.000000 973.948486
+L 244.000000 991.268982
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 939.307434 L 304.000000 887.345947" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 939.307434 L 244.000000 887.345947" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 835.384399 L 184.000000 887.345947" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 939.307434 L 154.000000 939.307434" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 887.345947 L 214.000000 904.666443" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 887.345947 L 214.000000 904.666443" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 973.948486 L 214.000000 904.666443" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="855.705">0.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="873.025">1.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="924.987">2.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="959.628">3.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="959.628">4.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="924.987">5.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="907.666">6.1.7</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="924.987">7.1.7</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 107.923035
+L 604.000000 159.884583
+L 634.000000 177.205139
+L 664.000000 159.884583
+L 694.000000 142.564087
+L 694.000000 107.923035
+L 754.000000 107.923035
+L 784.000000 55.961548
+L 754.000000 38.641052
+L 724.000000 55.961548
+L 694.000000 4.000000
+L 634.000000 4.000000
+L 634.000000 38.641052
+L 604.000000 55.961548
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 107.923035 L 664.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 107.923035 L 694.000000 107.923035" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 754.000000 107.923035 L 724.000000 55.961548" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 107.923035 L 694.000000 4.000000" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 724.000000 55.961548 L 694.000000 73.282043" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 694.000000 107.923035 L 694.000000 73.282043" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 38.641052 L 694.000000 73.282043" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="754" y="76.2821">0.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="724" y="93.6026">1.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="694" y="41.6411">2.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="664" y="24.3205">3.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="76.2821">4.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="664" y="93.6026">5.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="664" y="128.244">6.0.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="145.564">7.0.8</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 107.923035
+L 454.000000 107.923035
+L 454.000000 142.564087
+L 484.000000 159.884583
+L 514.000000 177.205139
+L 544.000000 159.884583
+L 574.000000 211.846069
+L 634.000000 211.846069
+L 634.000000 177.205139
+L 604.000000 159.884583
+L 634.000000 107.923035
+L 604.000000 55.961548
+L 574.000000 73.282104
+L 544.000000 55.961548
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 107.923035 L 484.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 107.923035 L 544.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 211.846069 L 604.000000 159.884583" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 107.923035 L 634.000000 107.923035" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 604.000000 159.884583 L 574.000000 142.564087" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 159.884583 L 574.000000 142.564087" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 73.282104 L 574.000000 142.564087" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="197.526">0.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="180.205">1.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="128.244">2.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="93.6026">3.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="93.6026">4.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="128.244">5.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="145.564">6.1.8</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="128.244">7.1.8</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 627.538330
+L 544.000000 575.576782
+L 514.000000 592.897339
+L 514.000000 627.538330
+L 514.000000 662.179321
+L 544.000000 679.499817
+L 514.000000 731.461365
+L 544.000000 783.422913
+L 574.000000 766.102417
+L 574.000000 731.461365
+L 634.000000 731.461365
+L 664.000000 679.499817
+L 634.000000 662.179321
+L 634.000000 627.538330
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 627.538330 L 514.000000 627.538330" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 627.538330 L 544.000000 679.499817" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 731.461365 L 574.000000 731.461365" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 627.538330 L 634.000000 731.461365" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 731.461365 L 574.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 679.499817 L 574.000000 696.820312" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 662.179321 L 574.000000 696.820312" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="751.782">0.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="717.141">1.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="717.141">2.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="699.82">3.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="647.859">4.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="665.179">5.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="647.859">6.0.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="613.218">7.0.9</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 523.615234
+L 664.000000 471.653748
+L 634.000000 454.333221
+L 604.000000 471.653748
+L 574.000000 488.974274
+L 574.000000 523.615234
+L 514.000000 523.615234
+L 484.000000 575.576782
+L 514.000000 592.897339
+L 544.000000 575.576782
+L 574.000000 627.538330
+L 634.000000 627.538330
+L 634.000000 592.897339
+L 664.000000 575.576782
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 523.615234 L 604.000000 471.653748" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 523.615234 L 574.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 523.615234 L 544.000000 575.576782" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 523.615234 L 574.000000 627.538330" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 575.576782 L 574.000000 558.256287" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 523.615234 L 574.000000 558.256287" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 592.897339 L 574.000000 558.256287" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="561.256">0.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="543.936">1.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="595.897">2.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="613.218">3.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="561.256">4.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="543.936">5.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="509.295">6.1.9</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="491.974">7.1.9</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 835.384399
+L 424.000000 887.345947
+L 454.000000 904.666443
+L 484.000000 887.345947
+L 514.000000 870.025452
+L 514.000000 835.384399
+L 574.000000 835.384399
+L 604.000000 783.422913
+L 574.000000 766.102417
+L 544.000000 783.422913
+L 514.000000 731.461365
+L 454.000000 731.461365
+L 454.000000 766.102417
+L 424.000000 783.422913
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 835.384399 L 484.000000 887.345947" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 835.384399 L 514.000000 835.384399" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 835.384399 L 544.000000 783.422913" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 835.384399 L 514.000000 731.461365" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 783.422913 L 514.000000 800.743408" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 835.384399 L 514.000000 800.743408" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 766.102417 L 514.000000 800.743408" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="803.743">0.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="821.064">1.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="769.102">2.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="751.782">3.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="803.743">4.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="821.064">5.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="855.705">6.0.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="873.025">7.0.10</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 835.384399
+L 274.000000 835.384399
+L 274.000000 870.025452
+L 304.000000 887.345947
+L 334.000000 904.666443
+L 364.000000 887.345947
+L 394.000000 939.307434
+L 454.000000 939.307434
+L 454.000000 904.666443
+L 424.000000 887.345947
+L 454.000000 835.384399
+L 424.000000 783.422913
+L 394.000000 800.743408
+L 364.000000 783.422913
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 835.384399 L 304.000000 887.345947" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 835.384399 L 364.000000 887.345947" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 939.307434 L 424.000000 887.345947" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 835.384399 L 454.000000 835.384399" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 887.345947 L 394.000000 870.025452" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 887.345947 L 394.000000 870.025452" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 800.743408 L 394.000000 870.025452" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="924.987">0.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="907.666">1.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="855.705">2.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="821.064">3.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="821.064">4.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="855.705">5.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="873.025">6.1.10</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="855.705">7.1.10</text>
+</svg>
diff --git a/aux/doc/kitemap-T.svg b/aux/doc/kitemap-T.svg
new file mode 100644
index 0000000..6be1ddc
--- /dev/null
+++ b/aux/doc/kitemap-T.svg
@@ -0,0 +1,483 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="762" height="792">
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 367.730652
+L 424.000000 315.769104
+L 394.000000 333.089630
+L 394.000000 367.730652
+L 394.000000 402.371643
+L 424.000000 419.692139
+L 394.000000 471.653687
+L 424.000000 523.615234
+L 454.000000 506.294708
+L 454.000000 471.653687
+L 514.000000 471.653687
+L 544.000000 419.692139
+L 514.000000 402.371643
+L 514.000000 367.730652
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 367.730652 L 394.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 367.730652 L 424.000000 419.692139" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 471.653687 L 454.000000 471.653687" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 367.730652 L 514.000000 471.653687" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 471.653687 L 454.000000 437.012665" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 419.692139 L 454.000000 437.012665" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 402.371643 L 454.000000 437.012665" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="491.974">0.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="457.333">1.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="457.333">2.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="440.013">3.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="388.051">4.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="405.372">5.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="388.051">6.0.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="353.41">7.0.0</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 367.730652
+L 394.000000 367.730652
+L 394.000000 333.089630
+L 364.000000 315.769104
+L 334.000000 298.448578
+L 304.000000 315.769104
+L 274.000000 263.807587
+L 214.000000 263.807587
+L 214.000000 298.448578
+L 244.000000 315.769104
+L 214.000000 367.730652
+L 244.000000 419.692139
+L 274.000000 402.371643
+L 304.000000 419.692139
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 367.730652 L 364.000000 315.769104" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 367.730652 L 304.000000 315.769104" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 263.807587 L 244.000000 315.769104" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 367.730652 L 214.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 315.769104 L 274.000000 333.089630" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 315.769104 L 274.000000 333.089630" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 402.371643 L 274.000000 333.089630" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="284.128">0.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="301.449">1.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="353.41">2.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="388.051">3.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="388.051">4.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="353.41">5.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="336.09">6.1.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="353.41">7.1.0</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 471.653687
+L 244.000000 419.692139
+L 214.000000 437.012695
+L 214.000000 471.653687
+L 214.000000 506.294708
+L 244.000000 523.615234
+L 214.000000 575.576721
+L 244.000000 627.538269
+L 274.000000 610.217773
+L 274.000000 575.576721
+L 334.000000 575.576721
+L 364.000000 523.615234
+L 334.000000 506.294708
+L 334.000000 471.653687
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 471.653687 L 214.000000 471.653687" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 471.653687 L 244.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 575.576721 L 274.000000 575.576721" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 471.653687 L 334.000000 575.576721" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 575.576721 L 274.000000 540.935730" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 523.615234 L 274.000000 540.935730" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 506.294708 L 274.000000 540.935730" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="595.897">0.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="561.256">1.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="561.256">2.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="543.936">3.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="491.974">4.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="509.295">5.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="491.974">6.2.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="457.333">7.2.0</text>
+<path style="fill: rgba(0,0,0,0.2); stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 419.692139
+L 394.000000 402.371643
+L 394.000000 367.730652
+L 334.000000 367.730652
+L 304.000000 419.692139
+L 274.000000 402.371643
+L 244.000000 419.692139
+L 274.000000 471.653687
+L 334.000000 471.653687
+L 334.000000 506.294708
+L 364.000000 523.615234
+L 394.000000 540.935730
+L 424.000000 523.615234
+L 394.000000 471.653687
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 471.653687 L 364.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 471.653687 L 334.000000 471.653687" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 471.653687 L 304.000000 419.692139" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 471.653687 L 334.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 419.692139 L 334.000000 437.012665" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 471.653687 L 334.000000 437.012665" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 402.371643 L 334.000000 437.012665" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="440.013">0.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="457.333">1.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="405.372">2.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="388.051">3.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="440.013">4.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="457.333">5.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="491.974">6.3.0</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="509.295">7.3.0</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 471.653687
+L 124.000000 419.692139
+L 94.000000 437.012695
+L 94.000000 471.653687
+L 94.000000 506.294708
+L 124.000000 523.615234
+L 94.000000 575.576721
+L 124.000000 627.538269
+L 154.000000 610.217773
+L 154.000000 575.576721
+L 214.000000 575.576721
+L 244.000000 523.615234
+L 214.000000 506.294708
+L 214.000000 471.653687
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 471.653687 L 94.000000 471.653687" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 471.653687 L 124.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 575.576721 L 154.000000 575.576721" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 471.653687 L 214.000000 575.576721" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 575.576721 L 154.000000 540.935730" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 523.615234 L 154.000000 540.935730" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 506.294708 L 154.000000 540.935730" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="595.897">0.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="561.256">1.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="561.256">2.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="543.936">3.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="491.974">4.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="509.295">5.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="491.974">6.0.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="457.333">7.0.1</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 367.730652
+L 244.000000 315.769104
+L 214.000000 298.448578
+L 184.000000 315.769104
+L 154.000000 333.089630
+L 154.000000 367.730652
+L 94.000000 367.730652
+L 64.000000 419.692139
+L 94.000000 437.012695
+L 124.000000 419.692139
+L 154.000000 471.653687
+L 214.000000 471.653687
+L 214.000000 437.012695
+L 244.000000 419.692139
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 367.730652 L 184.000000 315.769104" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 367.730652 L 154.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 367.730652 L 124.000000 419.692139" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 367.730652 L 154.000000 471.653687" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 124.000000 419.692139 L 154.000000 402.371643" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 367.730652 L 154.000000 402.371643" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 437.012695 L 154.000000 402.371643" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="94" y="405.372">0.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="388.051">1.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="440.013">2.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="457.333">3.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="405.372">4.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="388.051">5.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="353.41">6.1.1</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="336.09">7.1.1</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 263.807587
+L 334.000000 263.807587
+L 334.000000 298.448578
+L 364.000000 315.769104
+L 394.000000 333.089630
+L 424.000000 315.769104
+L 454.000000 367.730652
+L 514.000000 367.730652
+L 514.000000 333.089630
+L 484.000000 315.769104
+L 514.000000 263.807587
+L 484.000000 211.846069
+L 454.000000 229.166595
+L 424.000000 211.846069
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 263.807587 L 364.000000 315.769104" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 263.807587 L 424.000000 315.769104" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 367.730652 L 484.000000 315.769104" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 263.807587 L 514.000000 263.807587" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 484.000000 315.769104 L 454.000000 298.448608" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 315.769104 L 454.000000 298.448608" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 229.166595 L 454.000000 298.448608" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="353.41">0.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="336.09">1.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="284.128">2.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="249.487">3.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="249.487">4.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="284.128">5.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="301.449">6.0.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="284.128">7.0.2</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 159.884552
+L 304.000000 107.922974
+L 274.000000 125.243530
+L 274.000000 159.884552
+L 274.000000 194.525543
+L 304.000000 211.846069
+L 274.000000 263.807587
+L 304.000000 315.769104
+L 334.000000 298.448578
+L 334.000000 263.807587
+L 394.000000 263.807587
+L 424.000000 211.846069
+L 394.000000 194.525543
+L 394.000000 159.884552
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 159.884552 L 274.000000 159.884552" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 159.884552 L 304.000000 211.846069" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 263.807587 L 334.000000 263.807587" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 159.884552 L 394.000000 263.807587" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 263.807587 L 334.000000 229.166565" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 304.000000 211.846069 L 334.000000 229.166565" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 194.525543 L 334.000000 229.166565" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="284.128">0.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="249.487">1.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="249.487">2.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="232.167">3.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="180.205">4.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="197.526">5.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="180.205">6.1.2</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="145.564">7.1.2</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 575.576721
+L 424.000000 627.538269
+L 454.000000 644.858765
+L 484.000000 627.538269
+L 514.000000 610.217773
+L 514.000000 575.576721
+L 574.000000 575.576721
+L 604.000000 523.615234
+L 574.000000 506.294708
+L 544.000000 523.615234
+L 514.000000 471.653687
+L 454.000000 471.653687
+L 454.000000 506.294708
+L 424.000000 523.615234
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 575.576721 L 484.000000 627.538269" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 575.576721 L 514.000000 575.576721" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 575.576721 L 544.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 575.576721 L 514.000000 471.653687" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 523.615234 L 514.000000 540.935730" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 575.576721 L 514.000000 540.935730" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 454.000000 506.294708 L 514.000000 540.935730" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="543.936">0.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="561.256">1.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="514" y="509.295">2.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="491.974">3.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="543.936">4.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="561.256">5.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="484" y="595.897">6.0.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="454" y="613.218">7.0.3</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 575.576721
+L 274.000000 575.576721
+L 274.000000 610.217773
+L 304.000000 627.538269
+L 334.000000 644.858765
+L 364.000000 627.538269
+L 394.000000 679.499756
+L 454.000000 679.499756
+L 454.000000 644.858765
+L 424.000000 627.538269
+L 454.000000 575.576721
+L 424.000000 523.615234
+L 394.000000 540.935730
+L 364.000000 523.615234
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 575.576721 L 304.000000 627.538269" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 575.576721 L 364.000000 627.538269" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 679.499756 L 424.000000 627.538269" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 334.000000 575.576721 L 454.000000 575.576721" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 424.000000 627.538269 L 394.000000 610.217773" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 364.000000 627.538269 L 394.000000 610.217773" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 394.000000 540.935730 L 394.000000 610.217773" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="665.179">0.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="394" y="647.859">1.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="595.897">2.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="424" y="561.256">3.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="561.256">4.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="364" y="595.897">5.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="334" y="613.218">6.1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="595.897">7.1.3</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 159.884552
+L 244.000000 211.846069
+L 274.000000 194.525543
+L 274.000000 159.884552
+L 274.000000 125.243530
+L 244.000000 107.922974
+L 274.000000 55.961487
+L 244.000000 4.000000
+L 214.000000 21.320496
+L 214.000000 55.961487
+L 154.000000 55.961487
+L 124.000000 107.922974
+L 154.000000 125.243530
+L 154.000000 159.884552
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 159.884552 L 274.000000 159.884552" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 159.884552 L 244.000000 107.922974" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 55.961487 L 214.000000 55.961487" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 159.884552 L 154.000000 55.961487" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 55.961487 L 214.000000 90.602478" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 107.922974 L 214.000000 90.602478" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 125.243530 L 214.000000 90.602478" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="41.641">0.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="76.282">1.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="76.282">2.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="93.6025">3.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="145.564">4.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="128.244">5.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="145.564">6.0.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="180.205">7.0.4</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 263.807587
+L 124.000000 315.769104
+L 154.000000 333.089630
+L 184.000000 315.769104
+L 214.000000 298.448578
+L 214.000000 263.807587
+L 274.000000 263.807587
+L 304.000000 211.846069
+L 274.000000 194.525543
+L 244.000000 211.846069
+L 214.000000 159.884552
+L 154.000000 159.884552
+L 154.000000 194.525543
+L 124.000000 211.846069
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 263.807587 L 184.000000 315.769104" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 263.807587 L 214.000000 263.807587" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 263.807587 L 244.000000 211.846069" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 263.807587 L 214.000000 159.884552" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 211.846069 L 214.000000 229.166565" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 263.807587 L 214.000000 229.166565" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 194.525543 L 214.000000 229.166565" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="232.167">0.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="249.487">1.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="197.526">2.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="180.205">3.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="232.167">4.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="249.487">5.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="284.128">6.1.4</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="301.449">7.1.4</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 679.499756
+L 184.000000 627.538269
+L 154.000000 610.217773
+L 124.000000 627.538269
+L 94.000000 644.858765
+L 94.000000 679.499756
+L 34.000000 679.499756
+L 4.000000 731.461304
+L 34.000000 748.781799
+L 64.000000 731.461304
+L 94.000000 783.422852
+L 154.000000 783.422852
+L 154.000000 748.781799
+L 184.000000 731.461304
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 679.499756 L 124.000000 627.538269" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 679.499756 L 94.000000 679.499756" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 34.000000 679.499756 L 64.000000 731.461304" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 679.499756 L 94.000000 783.422852" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 64.000000 731.461304 L 94.000000 714.140808" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 94.000000 679.499756 L 94.000000 714.140808" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 154.000000 748.781799 L 94.000000 714.140808" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="34" y="717.141">0.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="64" y="699.82">1.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="94" y="751.782">2.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="769.102">3.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="717.141">4.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="699.82">5.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="124" y="665.179">6.0.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="154" y="647.859">7.0.5</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 679.499756
+L 334.000000 679.499756
+L 334.000000 644.858765
+L 304.000000 627.538269
+L 274.000000 610.217773
+L 244.000000 627.538269
+L 214.000000 575.576721
+L 154.000000 575.576721
+L 154.000000 610.217773
+L 184.000000 627.538269
+L 154.000000 679.499756
+L 184.000000 731.461304
+L 214.000000 714.140808
+L 244.000000 731.461304
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 679.499756 L 304.000000 627.538269" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 679.499756 L 244.000000 627.538269" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 575.576721 L 184.000000 627.538269" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 274.000000 679.499756 L 154.000000 679.499756" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 184.000000 627.538269 L 214.000000 644.858765" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 244.000000 627.538269 L 214.000000 644.858765" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 214.000000 714.140808 L 214.000000 644.858765" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="595.897">0.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="214" y="613.218">1.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="665.179">2.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="184" y="699.82">3.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="699.82">4.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="244" y="665.179">5.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="274" y="647.859">6.1.5</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="304" y="665.179">7.1.5</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 471.653687
+L 574.000000 471.653687
+L 574.000000 506.294708
+L 604.000000 523.615234
+L 634.000000 540.935730
+L 664.000000 523.615234
+L 694.000000 575.576721
+L 754.000000 575.576721
+L 754.000000 540.935730
+L 724.000000 523.615234
+L 754.000000 471.653687
+L 724.000000 419.692139
+L 694.000000 437.012695
+L 664.000000 419.692139
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 471.653687 L 604.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 471.653687 L 664.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 694.000000 575.576721 L 724.000000 523.615234" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 471.653687 L 754.000000 471.653687" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 724.000000 523.615234 L 694.000000 506.294708" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 664.000000 523.615234 L 694.000000 506.294708" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 694.000000 437.012695 L 694.000000 506.294708" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="724" y="561.256">0.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="694" y="543.936">1.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="724" y="491.974">2.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="724" y="457.333">3.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="664" y="457.333">4.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="664" y="491.974">5.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="509.295">6.0.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="491.974">7.0.6</text>
+<path style="fill: none; stroke: black; stroke-width: 4.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 367.730652
+L 544.000000 315.769104
+L 514.000000 333.089630
+L 514.000000 367.730652
+L 514.000000 402.371643
+L 544.000000 419.692139
+L 514.000000 471.653687
+L 544.000000 523.615234
+L 574.000000 506.294708
+L 574.000000 471.653687
+L 634.000000 471.653687
+L 664.000000 419.692139
+L 634.000000 402.371643
+L 634.000000 367.730652
+z" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 367.730652 L 514.000000 367.730652" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 367.730652 L 544.000000 419.692139" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 514.000000 471.653687 L 574.000000 471.653687" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 367.730652 L 634.000000 471.653687" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 574.000000 471.653687 L 574.000000 437.012665" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 544.000000 419.692139 L 574.000000 437.012665" />
+<path style="fill: none; stroke: rgba(0,0,0,0.2); stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 634.000000 402.371643 L 574.000000 437.012665" />
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="491.974">0.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="457.333">1.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="457.333">2.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="634" y="440.013">3.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="604" y="388.051">4.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="574" y="405.372">5.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="388.051">6.1.6</text>
+<text style="fill: black; font-family: Sans; font-size: 10px; text-anchor: middle; text-align: center; " x="544" y="353.41">7.1.6</text>
+</svg>
diff --git a/aux/doc/metamap-F.svg b/aux/doc/metamap-F.svg
new file mode 100644
index 0000000..4b2805c
--- /dev/null
+++ b/aux/doc/metamap-F.svg
@@ -0,0 +1,714 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="1026" height="1531">
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 182.000000 469.653748
+L 182.000000 504.294739
+L 302.000000 573.576782
+L 332.000000 556.256287
+L 332.000000 417.692200
+L 302.000000 400.371704
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 435.012695 L 257.000000 512.955017 L 273.392304 508.562709 M 257.000000 512.955017 L 252.607692 496.562713 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="491.474">1.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 182.000000 573.576782
+L 152.000000 590.897278
+L 152.000000 729.461365
+L 182.000000 746.781860
+L 302.000000 677.499817
+L 302.000000 642.858826
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 660.179321 L 182.000000 660.179321 L 194.000000 672.179321 M 182.000000 660.179321 L 194.000000 648.179321 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="664.679">0.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 362.000000 365.730682
+L 392.000000 348.410187
+L 392.000000 209.846100
+L 362.000000 192.525574
+L 242.000000 261.807617
+L 242.000000 296.448669
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 279.128143 L 362.000000 279.128143 L 350.000000 267.128143 M 362.000000 279.128143 L 350.000000 291.128143 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="283.628">1.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 452.000000 313.769135
+L 482.000000 331.089661
+L 602.000000 261.807617
+L 602.000000 227.166626
+L 482.000000 157.884583
+L 452.000000 175.205109
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 482.000000 192.525604 L 527.000000 270.467865 L 531.392303 254.075560 M 527.000000 270.467865 L 510.607695 266.075562 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="512" y="248.987">0.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 937.307434
+L 242.000000 919.986938
+L 242.000000 781.422852
+L 212.000000 764.102356
+L 92.000000 833.384399
+L 92.000000 868.025391
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 122.000000 850.704895 L 212.000000 850.704895 L 200.000000 838.704895 M 212.000000 850.704895 L 200.000000 862.704895 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="855.205">0.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 365.730682
+L 542.000000 400.371704
+L 662.000000 469.653748
+L 692.000000 452.333252
+L 692.000000 313.769135
+L 662.000000 296.448669
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 662.000000 331.089661 L 617.000000 409.031952 L 633.392304 404.639647 M 617.000000 409.031952 L 612.607695 392.639648 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="632" y="387.551">2.0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 1041.230469
+L 212.000000 1006.589478
+L 92.000000 937.307434
+L 62.000000 954.627930
+L 62.000000 1093.192017
+L 92.000000 1110.512573
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 92.000000 1075.871460 L 137.000000 997.929321 L 120.607692 1002.321612 M 137.000000 997.929321 L 141.392291 1014.321630 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="122" y="1028.41">1.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 885.345947
+L 332.000000 902.666443
+L 452.000000 833.384399
+L 452.000000 798.743408
+L 332.000000 729.461365
+L 302.000000 746.781860
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 332.000000 764.102356 L 377.000000 842.044617 L 381.392303 825.652311 M 377.000000 842.044617 L 360.607695 837.652314 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="820.564">2.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 512.000000 521.615234
+L 542.000000 504.294739
+L 542.000000 365.730682
+L 512.000000 348.410187
+L 392.000000 417.692200
+L 392.000000 452.333252
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 422.000000 435.012695 L 512.000000 435.012695 L 500.000000 423.012695 M 512.000000 435.012695 L 500.000000 447.012695 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="439.513">0.0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 752.000000 105.923096
+L 722.000000 88.602539
+L 602.000000 157.884583
+L 602.000000 192.525574
+L 722.000000 261.807617
+L 752.000000 244.487152
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 722.000000 227.166626 L 677.000000 149.224335 L 672.607695 165.616639 M 677.000000 149.224335 L 693.392304 153.616640 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="179.705">0.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 512.000000 625.538330
+L 512.000000 590.897278
+L 392.000000 521.615234
+L 362.000000 538.935791
+L 362.000000 677.499817
+L 392.000000 694.820312
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 660.179321 L 437.000000 582.237000 L 420.607696 586.629308 M 437.000000 582.237000 L 441.392308 598.629303 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="612.718">0.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 842.000000 53.961548
+L 812.000000 71.282043
+L 812.000000 209.846100
+L 842.000000 227.166626
+L 962.000000 157.884583
+L 962.000000 123.243530
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 932.000000 140.564056 L 842.000000 140.564056 L 854.000000 152.564056 M 842.000000 140.564056 L 854.000000 128.564056 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="872" y="145.064">1.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 1249.076660
+L 242.000000 1266.397095
+L 362.000000 1197.115112
+L 362.000000 1162.474121
+L 242.000000 1093.192017
+L 212.000000 1110.512573
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 1127.833008 L 287.000000 1205.775391 L 291.392314 1189.383088 M 287.000000 1205.775391 L 270.607697 1201.383077 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="1184.29">1.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 422.000000 989.268982
+L 422.000000 954.627930
+L 302.000000 885.345947
+L 272.000000 902.666443
+L 272.000000 1041.230469
+L 302.000000 1058.551025
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 1023.909973 L 347.000000 945.967651 L 330.607696 950.359960 M 347.000000 945.967651 L 351.392308 962.359955 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="976.448">0.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 602.000000 677.499817
+L 572.000000 660.179321
+L 452.000000 729.461365
+L 452.000000 764.102356
+L 572.000000 833.384399
+L 602.000000 816.063904
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 798.743347 L 527.000000 720.801086 L 522.607697 737.193392 M 527.000000 720.801086 L 543.392305 725.193389 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="542" y="751.282">1.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 625.538330
+L 662.000000 608.217773
+L 662.000000 469.653748
+L 632.000000 452.333252
+L 512.000000 521.615234
+L 512.000000 556.256287
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 538.935791 L 632.000000 538.935791 L 620.000000 526.935791 M 632.000000 538.935791 L 620.000000 550.935791 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="543.436">1.0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 1301.038086
+L 302.000000 1335.679199
+L 422.000000 1404.961182
+L 452.000000 1387.640625
+L 452.000000 1249.076660
+L 422.000000 1231.756104
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 422.000000 1266.397217 L 377.000000 1344.339478 L 393.392305 1339.947175 M 377.000000 1344.339478 L 372.607697 1327.947172 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="1322.86">0.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 512.000000 1041.230469
+L 482.000000 1023.909973
+L 362.000000 1093.192017
+L 362.000000 1127.833008
+L 482.000000 1197.115112
+L 512.000000 1179.794556
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 482.000000 1162.473999 L 437.000000 1084.531860 L 432.607709 1100.924169 M 437.000000 1084.531860 L 453.392308 1088.924151 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="1115.01">0.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 937.307434
+L 572.000000 902.666443
+L 452.000000 833.384399
+L 422.000000 850.704895
+L 422.000000 989.268982
+L 452.000000 1006.589478
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 452.000000 971.948425 L 497.000000 894.006165 L 480.607695 898.398467 M 497.000000 894.006165 L 501.392303 910.398470 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="924.487">1.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 872.000000 417.692200
+L 902.000000 400.371704
+L 902.000000 261.807617
+L 872.000000 244.487152
+L 752.000000 313.769135
+L 752.000000 348.410187
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 782.000000 331.089661 L 872.000000 331.089661 L 860.000000 319.089661 M 872.000000 331.089661 L 860.000000 343.089661 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="842" y="335.59">0.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 602.000000 989.268982
+L 572.000000 1006.589478
+L 572.000000 1145.153564
+L 602.000000 1162.474121
+L 722.000000 1093.192017
+L 722.000000 1058.551025
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 692.000000 1075.871582 L 602.000000 1075.871582 L 614.000000 1087.871582 M 602.000000 1075.871582 L 614.000000 1063.871582 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="632" y="1080.37">1.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 872.000000 521.615234
+L 872.000000 486.974243
+L 752.000000 417.692200
+L 722.000000 435.012695
+L 722.000000 573.576782
+L 752.000000 590.897278
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 752.000000 556.256287 L 797.000000 478.313965 L 780.607696 482.706273 M 797.000000 478.313965 L 801.392308 494.706269 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="782" y="508.795">1.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 782.000000 781.422852
+L 812.000000 764.102356
+L 812.000000 625.538330
+L 782.000000 608.217773
+L 662.000000 677.499817
+L 662.000000 712.140869
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 692.000000 694.820312 L 782.000000 694.820312 L 770.000000 682.820312 M 782.000000 694.820312 L 770.000000 706.820312 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="752" y="699.32">0.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 782.000000 885.345947
+L 782.000000 850.704895
+L 662.000000 781.422852
+L 632.000000 798.743408
+L 632.000000 937.307434
+L 662.000000 954.627930
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 662.000000 919.986938 L 707.000000 842.044617 L 690.607696 846.436925 M 707.000000 842.044617 L 711.392308 858.436921 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="872.525">1.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 400.371704
+L 542.000000 504.294739
+L 632.000000 452.333252
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 551.000000 415.960144 L 578.000000 462.725525 L 582.392306 446.333220 M 578.000000 462.725525 L 561.607695 458.333219 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="572" y="456.833">3.0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 332.000000 902.666443
+L 422.000000 954.627930
+L 422.000000 850.704895
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 350.000000 902.666382 L 404.000000 902.666382 L 392.000000 890.666382 M 404.000000 902.666382 L 392.000000 914.666382 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="907.166">3.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 182.000000 504.294739
+L 182.000000 573.576782
+L 302.000000 642.858826
+L 302.000000 573.576782
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 251.000000 557.988281 L 233.000000 589.165161 L 249.392307 584.772864 M 233.000000 589.165161 L 228.607703 572.772854 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="242" y="578.077">3.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 152.000000 590.897278
+L 92.000000 625.538330
+L 92.000000 764.102356
+L 152.000000 729.461365
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 140.000000 677.499878 L 104.000000 677.499878 L 116.000000 689.499878 M 104.000000 677.499878 L 116.000000 665.499878 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="122" y="682">2.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 348.410187
+L 452.000000 313.769135
+L 452.000000 175.205109
+L 392.000000 209.846100
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 404.000000 261.807617 L 440.000000 261.807617 L 428.000000 249.807617 M 440.000000 261.807617 L 428.000000 273.807617 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="266.308">3.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 482.000000 331.089661
+L 542.000000 365.730682
+L 662.000000 296.448669
+L 602.000000 261.807617
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 563.000000 298.180725 L 581.000000 329.357605 L 585.392297 312.965298 M 581.000000 329.357605 L 564.607693 324.965308 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="572" y="310.769">5.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="572" y="325.769">2.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 919.986938
+L 302.000000 885.345947
+L 302.000000 746.781860
+L 242.000000 781.422852
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 254.000000 833.384399 L 290.000000 833.384399 L 278.000000 821.384399 M 290.000000 833.384399 L 278.000000 845.384399 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="830.384">5.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="845.384">2.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 722.000000 88.602539
+L 662.000000 53.961548
+L 542.000000 123.243530
+L 602.000000 157.884583
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 641.000000 121.511497 L 623.000000 90.334595 L 618.607697 106.726900 M 623.000000 90.334595 L 639.392305 94.726897 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="632" y="110.423">2.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 1006.589478
+L 212.000000 937.307434
+L 92.000000 868.025391
+L 92.000000 937.307434
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 143.000000 952.895874 L 161.000000 921.718933 L 144.607697 926.111244 M 161.000000 921.718933 L 165.392311 938.111236 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="152" y="941.807">3.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 512.000000 590.897278
+L 512.000000 521.615234
+L 392.000000 452.333252
+L 392.000000 521.615234
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 443.000000 537.203735 L 461.000000 506.026794 L 444.607697 510.419105 M 461.000000 506.026794 L 465.392311 522.419097 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="518.615">4.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="533.615">3.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 812.000000 71.282043
+L 752.000000 105.923096
+L 752.000000 244.487152
+L 812.000000 209.846100
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 800.000000 157.884598 L 764.000000 157.884613 L 776.000006 169.884608 M 764.000000 157.884613 L 775.999995 145.884607 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="782" y="162.385">3.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 660.179321
+L 512.000000 625.538330
+L 392.000000 694.820312
+L 452.000000 729.461365
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 491.000000 693.088257 L 473.000000 661.911316 L 468.607689 678.303618 M 473.000000 661.911316 L 489.392303 666.303627 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="682">4.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 1266.397095
+L 302.000000 1301.038086
+L 422.000000 1231.756104
+L 362.000000 1197.115112
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 323.000000 1233.488281 L 341.000000 1264.665039 L 345.392269 1248.272725 M 341.000000 1264.665039 L 324.607686 1260.272770 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="1253.58">3.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 662.000000 608.217773
+L 722.000000 573.576782
+L 722.000000 435.012695
+L 662.000000 469.653748
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 674.000000 521.615234 L 710.000000 521.615234 L 698.000000 509.615234 M 710.000000 521.615234 L 698.000000 533.615234 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="518.615">6.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="533.615">2.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 1335.679199
+L 302.000000 1404.961182
+L 422.000000 1474.243164
+L 422.000000 1404.961182
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 371.000000 1389.372803 L 353.000000 1420.549561 L 369.392314 1416.157292 M 353.000000 1420.549561 L 348.607731 1404.157247 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="1409.46">2.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 482.000000 1023.909973
+L 422.000000 989.268982
+L 302.000000 1058.551025
+L 362.000000 1093.192017
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 401.000000 1056.818970 L 383.000000 1025.641968 L 378.607675 1042.034267 M 383.000000 1025.641968 L 399.392300 1030.034293 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="1038.23">4.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="1053.23">2.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 902.666443
+L 572.000000 833.384399
+L 452.000000 764.102356
+L 452.000000 833.384399
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 503.000000 848.972839 L 521.000000 817.795898 L 504.607697 822.188209 M 521.000000 817.795898 L 525.392311 834.188201 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="512" y="830.384">2.3</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="512" y="845.384">6.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 902.000000 400.371704
+L 962.000000 365.730682
+L 962.000000 227.166626
+L 902.000000 261.807617
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 914.000000 313.769165 L 950.000000 313.769165 L 938.000000 301.769165 M 950.000000 313.769165 L 938.000000 325.769165 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="932" y="318.269">3.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 1006.589478
+L 512.000000 1041.230469
+L 512.000000 1179.794556
+L 572.000000 1145.153564
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 560.000000 1093.192017 L 524.000000 1093.192017 L 536.000000 1105.192017 M 524.000000 1093.192017 L 536.000000 1081.192017 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="542" y="1097.69">3.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 872.000000 486.974243
+L 872.000000 417.692200
+L 752.000000 348.410187
+L 752.000000 417.692200
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 803.000000 433.280670 L 821.000000 402.103729 L 804.607697 406.496040 M 821.000000 402.103729 L 825.392311 418.496032 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="812" y="422.192">4.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 812.000000 764.102356
+L 872.000000 729.461365
+L 872.000000 590.897278
+L 812.000000 625.538330
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 824.000000 677.499878 L 860.000000 677.499878 L 848.000000 665.499878 M 860.000000 677.499878 L 848.000000 689.499878 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="842" y="682">2.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 782.000000 850.704895
+L 782.000000 781.422852
+L 662.000000 712.140869
+L 662.000000 781.422852
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 713.000000 797.011353 L 731.000000 765.834412 L 714.607697 770.226722 M 731.000000 765.834412 L 735.392311 782.226714 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="722" y="785.923">3.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 209.846100
+L 212.000000 244.487152
+L 242.000000 261.807617
+L 362.000000 192.525574
+L 302.000000 157.884583
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="214.346">6.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 152.000000 417.692200
+L 152.000000 452.333252
+L 182.000000 469.653748
+L 302.000000 400.371704
+L 242.000000 365.730682
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="422.192">10.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 261.807617
+L 212.000000 244.487152
+L 182.000000 261.807617
+L 182.000000 400.371704
+L 242.000000 365.730682
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="318.269">7.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 182.000000 469.653748
+L 152.000000 452.333252
+L 122.000000 469.653748
+L 122.000000 608.217773
+L 182.000000 573.576782
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="152" y="526.115">9.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 62.000000 781.422852
+L 62.000000 816.063904
+L 92.000000 833.384399
+L 212.000000 764.102356
+L 152.000000 729.461365
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="122" y="778.423">8.5</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="122" y="793.423">4.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 92.000000 833.384399
+L 62.000000 816.063904
+L 32.000000 833.384399
+L 32.000000 971.948486
+L 92.000000 937.307434
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="62" y="889.846">5.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 332.000000 417.692200
+L 362.000000 400.371704
+L 362.000000 365.730682
+L 242.000000 296.448669
+L 242.000000 365.730682
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="362.731">10.4</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="377.731">7.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 362.000000 365.730682
+L 362.000000 400.371704
+L 392.000000 417.692200
+L 512.000000 348.410187
+L 452.000000 313.769135
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="362.731">8.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="377.731">9.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 482.000000 157.884583
+L 482.000000 123.243530
+L 452.000000 105.923096
+L 332.000000 175.205109
+L 392.000000 209.846100
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="162.385">5.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 512.000000 105.923096
+L 482.000000 123.243530
+L 482.000000 157.884583
+L 602.000000 227.166626
+L 602.000000 157.884583
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="542" y="154.885">8.8</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="542" y="169.885">4.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 2.000000 1093.192017
+L 32.000000 1110.512573
+L 62.000000 1093.192017
+L 62.000000 954.627930
+L 2.000000 989.268982
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="32" y="1045.73">6.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 417.692200
+L 362.000000 400.371704
+L 332.000000 417.692200
+L 332.000000 556.256287
+L 392.000000 521.615234
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="459.154">7.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="474.154">8.3</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="489.154">6.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 62.000000 1093.192017
+L 32.000000 1110.512573
+L 32.000000 1145.153564
+L 152.000000 1214.435547
+L 152.000000 1145.153564
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="92" y="1149.65">7.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 677.499817
+L 332.000000 694.820312
+L 362.000000 677.499817
+L 362.000000 538.935791
+L 302.000000 573.576782
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="622.538">5.3</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="637.538">5.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 332.000000 729.461365
+L 332.000000 694.820312
+L 302.000000 677.499817
+L 182.000000 746.781860
+L 242.000000 781.422852
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="718.961">4.5</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="733.961">11.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="748.961">8.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 362.000000 677.499817
+L 332.000000 694.820312
+L 332.000000 729.461365
+L 452.000000 798.743408
+L 452.000000 729.461365
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="726.461">6.3</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="741.461">12.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 1041.230469
+L 242.000000 1058.551025
+L 272.000000 1041.230469
+L 272.000000 902.666443
+L 212.000000 937.307434
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="242" y="986.269">8.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="242" y="1001.27">9.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 152.000000 1249.076660
+L 182.000000 1266.397095
+L 212.000000 1249.076660
+L 212.000000 1110.512573
+L 152.000000 1145.153564
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="1201.62">10.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 1093.192017
+L 242.000000 1058.551025
+L 212.000000 1041.230469
+L 92.000000 1110.512573
+L 152.000000 1145.153564
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="1090.19">10.6</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="1105.19">7.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 1041.230469
+L 242.000000 1058.551025
+L 242.000000 1093.192017
+L 362.000000 1162.474121
+L 362.000000 1093.192017
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="1082.69">7.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="1097.69">8.10</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="1112.69">6.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 692.000000 313.769135
+L 722.000000 296.448669
+L 722.000000 261.807617
+L 602.000000 192.525574
+L 602.000000 261.807617
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="662" y="251.308">11.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="662" y="266.308">4.8</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="662" y="281.308">8.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 722.000000 261.807617
+L 722.000000 296.448669
+L 752.000000 313.769135
+L 872.000000 244.487152
+L 812.000000 209.846100
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="782" y="258.808">5.2</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="782" y="273.808">5.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 842.000000 53.961548
+L 842.000000 19.320557
+L 812.000000 2.000000
+L 692.000000 71.282043
+L 752.000000 105.923096
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="782" y="58.4615">9.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 872.000000 2.000000
+L 842.000000 19.320557
+L 842.000000 53.961548
+L 962.000000 123.243530
+L 962.000000 53.961548
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="902" y="58.4615">10.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 1249.076660
+L 182.000000 1266.397095
+L 182.000000 1301.038086
+L 302.000000 1370.320190
+L 302.000000 1301.038086
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="242" y="1305.54">9.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 752.000000 313.769135
+L 722.000000 296.448669
+L 692.000000 313.769135
+L 692.000000 452.333252
+L 752.000000 417.692200
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="722" y="362.731">12.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="722" y="377.731">6.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 602.000000 677.499817
+L 632.000000 660.179321
+L 632.000000 625.538330
+L 512.000000 556.256287
+L 512.000000 625.538330
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="572" y="622.538">9.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="572" y="637.538">9.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 625.538330
+L 632.000000 660.179321
+L 662.000000 677.499817
+L 782.000000 608.217773
+L 722.000000 573.576782
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="615.038">10.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="630.038">4.9</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="645.038">7.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 662.000000 677.499817
+L 632.000000 660.179321
+L 602.000000 677.499817
+L 602.000000 816.063904
+L 662.000000 781.422852
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="632" y="726.461">10.3</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="632" y="741.461">5.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 962.000000 157.884583
+L 992.000000 175.205109
+L 1022.000000 157.884583
+L 1022.000000 19.320557
+L 962.000000 53.961548
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="992" y="110.423">7.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 937.307434
+L 602.000000 954.627930
+L 632.000000 937.307434
+L 632.000000 798.743408
+L 572.000000 833.384399
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="874.846">7.3</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="889.846">6.9</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="904.846">10.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 992.000000 209.846100
+L 992.000000 175.205109
+L 962.000000 157.884583
+L 842.000000 227.166626
+L 902.000000 261.807617
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="932" y="206.846">8.2</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="932" y="221.846">6.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 452.000000 1249.076660
+L 482.000000 1231.756104
+L 482.000000 1197.115112
+L 362.000000 1127.833008
+L 362.000000 1197.115112
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="1194.12">4.10</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="1209.12">5.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 482.000000 1197.115112
+L 482.000000 1231.756104
+L 512.000000 1249.076660
+L 632.000000 1179.794556
+L 572.000000 1145.153564
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="542" y="1201.62">5.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 602.000000 989.268982
+L 602.000000 954.627930
+L 572.000000 937.307434
+L 452.000000 1006.589478
+L 512.000000 1041.230469
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="542" y="986.269">9.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="542" y="1001.27">9.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 937.307434
+L 602.000000 954.627930
+L 602.000000 989.268982
+L 722.000000 1058.551025
+L 722.000000 989.268982
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="662" y="986.269">7.9</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="662" y="1001.27">10.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 872.000000 521.615234
+L 902.000000 538.935791
+L 932.000000 521.615234
+L 932.000000 383.051208
+L 872.000000 417.692200
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="902" y="474.154">9.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 512.000000 1249.076660
+L 482.000000 1231.756104
+L 452.000000 1249.076660
+L 452.000000 1387.640625
+L 512.000000 1352.999756
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="1305.54">4.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 902.000000 573.576782
+L 902.000000 538.935791
+L 872.000000 521.615234
+L 752.000000 590.897278
+L 812.000000 625.538330
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="842" y="570.577">8.9</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="842" y="585.577">10.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 422.000000 1508.884277
+L 452.000000 1526.204712
+L 482.000000 1508.884277
+L 482.000000 1370.320190
+L 422.000000 1404.961182
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="1461.42">8.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 782.000000 885.345947
+L 812.000000 902.666443
+L 842.000000 885.345947
+L 842.000000 746.781860
+L 782.000000 781.422852
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="812" y="837.884">9.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 722.000000 1093.192017
+L 752.000000 1110.512573
+L 782.000000 1093.192017
+L 782.000000 954.627930
+L 722.000000 989.268982
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="752" y="1045.73">7.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 812.000000 937.307434
+L 812.000000 902.666443
+L 782.000000 885.345947
+L 662.000000 954.627930
+L 722.000000 989.268982
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="752" y="941.807">10.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 752.000000 1145.153564
+L 752.000000 1110.512573
+L 722.000000 1093.192017
+L 602.000000 1162.474121
+L 662.000000 1197.115112
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="1149.65">6.10</text>
+</svg>
diff --git a/aux/doc/metamap-H.svg b/aux/doc/metamap-H.svg
new file mode 100644
index 0000000..127df3d
--- /dev/null
+++ b/aux/doc/metamap-H.svg
@@ -0,0 +1,819 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="1356" height="1427">
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 157.884583
+L 242.000000 140.564056
+L 122.000000 209.846100
+L 122.000000 244.487091
+L 242.000000 313.769165
+L 272.000000 296.448639
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 279.128113 L 197.000000 201.185837 L 192.607696 217.578142 M 197.000000 201.185837 L 213.392305 205.578141 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="231.667">0.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 362.000000 105.923065
+L 332.000000 123.243530
+L 332.000000 261.807617
+L 362.000000 279.128143
+L 482.000000 209.846100
+L 482.000000 175.205109
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 452.000000 192.525604 L 362.000000 192.525589 L 373.999998 204.525590 M 362.000000 192.525589 L 374.000001 180.525591 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="197.026">1.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 469.653717
+L 422.000000 452.333221
+L 422.000000 313.769165
+L 392.000000 296.448639
+L 272.000000 365.730652
+L 272.000000 400.371704
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 383.051178 L 392.000000 383.051208 L 380.000004 371.051204 M 392.000000 383.051208 L 379.999996 395.051204 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="387.551">0.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 209.846100
+L 572.000000 227.166626
+L 692.000000 157.884583
+L 692.000000 123.243530
+L 572.000000 53.961487
+L 542.000000 71.282043
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 88.602531 L 617.000000 166.544830 L 621.392306 150.152525 M 617.000000 166.544830 L 600.607695 162.152524 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="145.064">1.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 573.576782
+L 392.000000 538.935730
+L 272.000000 469.653717
+L 242.000000 486.974243
+L 242.000000 625.538269
+L 272.000000 642.858826
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 608.217773 L 317.000000 530.275513 L 300.607695 534.667815 M 317.000000 530.275513 L 321.392303 546.667818 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="560.756">1.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 482.000000 417.692200
+L 512.000000 435.012695
+L 632.000000 365.730652
+L 632.000000 331.089661
+L 512.000000 261.807617
+L 482.000000 279.128143
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 512.000000 296.448669 L 557.000000 374.390930 L 561.392303 357.998625 M 557.000000 374.390930 L 540.607695 369.998628 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="542" y="352.91">0.0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 833.384399
+L 332.000000 816.063904
+L 332.000000 677.499817
+L 302.000000 660.179321
+L 182.000000 729.461304
+L 182.000000 764.102356
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 746.781860 L 302.000000 746.781860 L 290.000000 734.781860 M 302.000000 746.781860 L 290.000000 758.781860 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="751.282">0.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 452.000000 573.576782
+L 482.000000 590.897278
+L 602.000000 521.615234
+L 602.000000 486.974243
+L 482.000000 417.692200
+L 452.000000 435.012695
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 482.000000 452.333191 L 527.000000 530.275513 L 531.392308 513.883209 M 527.000000 530.275513 L 510.607696 525.883204 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="512" y="508.795">1.0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 261.807617
+L 632.000000 296.448639
+L 752.000000 365.730652
+L 782.000000 348.410156
+L 782.000000 209.846100
+L 752.000000 192.525574
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 752.000000 227.166595 L 707.000000 305.108887 L 723.392304 300.716582 M 707.000000 305.108887 L 702.607695 288.716583 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="722" y="283.628">0.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 937.307495
+L 302.000000 902.666382
+L 182.000000 833.384399
+L 152.000000 850.704895
+L 152.000000 989.268982
+L 182.000000 1006.589478
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 182.000000 971.948425 L 227.000000 894.006165 L 210.607695 898.398467 M 227.000000 894.006165 L 231.392303 910.398470 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="924.487">1.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 781.422852
+L 422.000000 798.743347
+L 542.000000 729.461304
+L 542.000000 694.820312
+L 422.000000 625.538269
+L 392.000000 642.858826
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 422.000000 660.179321 L 467.000000 738.121521 L 471.392297 721.729214 M 467.000000 738.121521 L 450.607693 733.729224 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="716.641">0.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 365.730652
+L 602.000000 383.051208
+L 602.000000 521.615234
+L 632.000000 538.935730
+L 752.000000 469.653717
+L 752.000000 435.012695
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 722.000000 452.333191 L 632.000000 452.333191 L 644.000000 464.333191 M 632.000000 452.333191 L 644.000000 440.333191 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="662" y="456.833">2.0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 362.000000 937.307495
+L 392.000000 954.627930
+L 512.000000 885.345947
+L 512.000000 850.704895
+L 392.000000 781.422852
+L 362.000000 798.743347
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 816.063843 L 437.000000 894.006165 L 441.392308 877.613861 M 437.000000 894.006165 L 420.607696 889.613856 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="872.525">1.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 625.538269
+L 542.000000 660.179321
+L 662.000000 729.461304
+L 692.000000 712.140808
+L 692.000000 573.576782
+L 662.000000 556.256287
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 662.000000 590.897278 L 617.000000 668.839539 L 633.392305 664.447236 M 617.000000 668.839539 L 612.607697 652.447233 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="632" y="647.359">0.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 1145.153564
+L 332.000000 1162.474121
+L 452.000000 1093.192017
+L 452.000000 1058.551025
+L 332.000000 989.268982
+L 302.000000 1006.589478
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 332.000000 1023.909973 L 377.000000 1101.852295 L 381.392308 1085.459991 M 377.000000 1101.852295 L 360.607696 1097.459987 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="1080.37">1.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 729.461304
+L 512.000000 746.781860
+L 512.000000 885.345947
+L 542.000000 902.666382
+L 662.000000 833.384399
+L 662.000000 798.743347
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 816.063843 L 542.000000 816.063843 L 554.000000 828.063843 M 542.000000 816.063843 L 554.000000 804.063843 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="572" y="820.564">2.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 1197.114990
+L 392.000000 1231.756104
+L 512.000000 1301.038086
+L 542.000000 1283.717651
+L 542.000000 1145.153564
+L 512.000000 1127.833008
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 512.000000 1162.473999 L 467.000000 1240.416260 L 483.392305 1236.023957 M 467.000000 1240.416260 L 462.607697 1224.023954 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="1218.94">0.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 782.000000 521.615234
+L 752.000000 538.935730
+L 752.000000 677.499817
+L 782.000000 694.820312
+L 902.000000 625.538269
+L 902.000000 590.897278
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 872.000000 608.217773 L 782.000000 608.217773 L 794.000000 620.217773 M 782.000000 608.217773 L 794.000000 596.217773 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="812" y="612.718">1.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 812.000000 469.653717
+L 842.000000 486.974243
+L 962.000000 417.692200
+L 962.000000 383.051208
+L 842.000000 313.769165
+L 812.000000 331.089661
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 842.000000 348.410187 L 887.000000 426.352448 L 891.392303 409.960142 M 887.000000 426.352448 L 870.607695 421.960145 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="872" y="404.872">1.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 1093.192017
+L 602.000000 1075.871460
+L 602.000000 937.307495
+L 572.000000 919.986938
+L 452.000000 989.268982
+L 452.000000 1023.909973
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 482.000000 1006.589478 L 572.000000 1006.589478 L 560.000000 994.589478 M 572.000000 1006.589478 L 560.000000 1018.589478 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="542" y="1011.09">1.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 902.000000 521.615234
+L 902.000000 556.256287
+L 1022.000000 625.538269
+L 1052.000000 608.217773
+L 1052.000000 469.653717
+L 1022.000000 452.333221
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 1022.000000 486.974213 L 977.000000 564.916504 L 993.392304 560.524199 M 977.000000 564.916504 L 972.607695 548.524200 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="992" y="543.436">0.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 662.000000 1041.230469
+L 692.000000 1058.551025
+L 812.000000 989.268982
+L 812.000000 954.627930
+L 692.000000 885.345947
+L 662.000000 902.666382
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 692.000000 919.986938 L 737.000000 997.929321 L 741.392314 981.537019 M 737.000000 997.929321 L 720.607697 993.537007 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="722" y="976.448">0.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 902.000000 625.538269
+L 872.000000 642.858826
+L 872.000000 781.422852
+L 902.000000 798.743347
+L 1022.000000 729.461304
+L 1022.000000 694.820312
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 992.000000 712.140808 L 902.000000 712.140869 L 914.000009 724.140861 M 902.000000 712.140869 L 913.999992 700.140861 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="932" y="716.641">0.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 872.000000 781.422852
+L 872.000000 746.781860
+L 752.000000 677.499817
+L 722.000000 694.820312
+L 722.000000 833.384399
+L 752.000000 850.704895
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 752.000000 816.063904 L 797.000000 738.121643 L 780.607695 742.513946 M 797.000000 738.121643 L 801.392303 754.513948 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="782" y="768.602">2.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 962.000000 833.384399
+L 932.000000 816.063904
+L 812.000000 885.345947
+L 812.000000 919.986938
+L 932.000000 989.268982
+L 962.000000 971.948486
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 932.000000 954.628052 L 887.000000 876.685730 L 882.607692 893.078034 M 887.000000 876.685730 L 903.392304 881.078038 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="902" y="907.166">0.12</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1052.000000 781.422852
+L 1022.000000 798.743347
+L 1022.000000 937.307495
+L 1052.000000 954.627930
+L 1172.000000 885.345947
+L 1172.000000 850.704895
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 1142.000000 868.025391 L 1052.000000 868.025391 L 1064.000000 880.025391 M 1052.000000 868.025391 L 1064.000000 856.025391 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1082" y="872.525">1.12</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1232.000000 573.576782
+L 1262.000000 556.256287
+L 1262.000000 417.692200
+L 1232.000000 400.371704
+L 1112.000000 469.653717
+L 1112.000000 504.294739
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 1142.000000 486.974213 L 1232.000000 486.974213 L 1220.000000 474.974213 M 1232.000000 486.974213 L 1220.000000 498.974213 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1202" y="491.474">0.11</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1232.000000 677.499817
+L 1232.000000 642.858826
+L 1112.000000 573.576782
+L 1082.000000 590.897278
+L 1082.000000 729.461304
+L 1112.000000 746.781860
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 1112.000000 712.140808 L 1157.000000 634.198547 L 1140.607695 638.590850 M 1157.000000 634.198547 L 1161.392303 650.590853 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1142" y="664.679">1.11</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 602.000000 383.051208
+L 512.000000 435.012695
+L 602.000000 486.974243
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 593.000000 398.639648 L 566.000000 445.405029 L 582.392305 441.012723 M 566.000000 445.405029 L 561.607694 429.012724 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="572" y="439.513">3.0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 512.000000 746.781860
+L 422.000000 798.743347
+L 512.000000 850.704895
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 503.000000 762.370300 L 476.000000 809.135620 L 492.392307 804.743323 M 476.000000 809.135620 L 471.607703 792.743313 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="803.243">3.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 872.000000 746.781860
+L 872.000000 642.858826
+L 782.000000 694.820312
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 863.000000 731.193420 L 836.000000 684.428040 L 831.607694 700.820345 M 836.000000 684.428040 L 852.392305 688.820346 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="842" y="699.32">3.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 140.564056
+L 182.000000 105.923065
+L 62.000000 175.205109
+L 122.000000 209.846100
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 161.000000 173.473022 L 143.000000 142.296143 L 138.607703 158.688449 M 143.000000 142.296143 L 159.392307 146.688439 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="152" y="162.385">2.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 332.000000 123.243530
+L 272.000000 157.884583
+L 272.000000 296.448639
+L 332.000000 261.807617
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 320.000000 209.846100 L 284.000000 209.846100 L 296.000000 221.846100 M 284.000000 209.846100 L 296.000000 197.846100 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="214.346">3.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 182.000000 660.179321
+L 242.000000 625.538269
+L 242.000000 486.974243
+L 182.000000 521.615234
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 194.000000 573.576782 L 230.000000 573.576782 L 218.000000 561.576782 M 230.000000 573.576782 L 218.000000 585.576782 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="578.077">2.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 422.000000 452.333221
+L 482.000000 417.692200
+L 482.000000 279.128143
+L 422.000000 313.769165
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 434.000000 365.730652 L 470.000000 365.730652 L 458.000000 353.730652 M 470.000000 365.730652 L 458.000000 377.730652 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="362.731">4.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="377.731">3.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 538.935730
+L 392.000000 469.653717
+L 272.000000 400.371704
+L 272.000000 469.653717
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 323.000000 485.242188 L 341.000000 454.065277 L 324.607695 458.457581 M 341.000000 454.065277 L 345.392304 470.457582 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="474.154">4.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 227.166626
+L 632.000000 261.807617
+L 752.000000 192.525574
+L 692.000000 157.884583
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 653.000000 194.257660 L 671.000000 225.434540 L 675.392297 209.042233 M 671.000000 225.434540 L 654.607693 221.042243 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="662" y="214.346">3.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 332.000000 816.063904
+L 392.000000 781.422852
+L 392.000000 642.858826
+L 332.000000 677.499817
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 344.000000 729.461304 L 380.000000 729.461304 L 368.000000 717.461304 M 380.000000 729.461304 L 368.000000 741.461304 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="726.461">4.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="741.461">2.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 296.448639
+L 632.000000 365.730652
+L 752.000000 435.012695
+L 752.000000 365.730652
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 701.000000 350.142212 L 683.000000 381.319122 L 699.392305 376.926818 M 683.000000 381.319122 L 678.607696 364.926817 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="362.731">5.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="377.731">2.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 902.666382
+L 302.000000 833.384399
+L 182.000000 764.102356
+L 182.000000 833.384399
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 233.000000 848.972839 L 251.000000 817.795898 L 234.607697 822.188209 M 251.000000 817.795898 L 255.392311 834.188201 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="242" y="837.884">3.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 482.000000 590.897278
+L 542.000000 625.538269
+L 662.000000 556.256287
+L 602.000000 521.615234
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 563.000000 557.988281 L 581.000000 589.165161 L 585.392297 572.772854 M 581.000000 589.165161 L 564.607693 584.772864 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="572" y="570.577">6.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="572" y="585.577">3.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 660.179321
+L 542.000000 729.461304
+L 662.000000 798.743347
+L 662.000000 729.461304
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 611.000000 713.872925 L 593.000000 745.049805 L 609.392307 740.657508 M 593.000000 745.049805 L 588.607703 728.657498 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="726.461">5.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="741.461">2.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 954.627930
+L 452.000000 989.268982
+L 572.000000 919.986938
+L 512.000000 885.345947
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 473.000000 921.718933 L 491.000000 952.895874 L 495.392311 936.503572 M 491.000000 952.895874 L 474.607697 948.503563 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="934.307">6.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="949.307">2.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 842.000000 244.487091
+L 842.000000 313.769165
+L 962.000000 383.051208
+L 962.000000 313.769165
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 911.000000 298.180725 L 893.000000 329.357605 L 909.392307 324.965308 M 893.000000 329.357605 L 888.607703 312.965298 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="902" y="318.269">2.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 332.000000 1162.474121
+L 392.000000 1197.114990
+L 512.000000 1127.833008
+L 452.000000 1093.192017
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 413.000000 1129.565186 L 431.000000 1160.741943 L 435.392269 1144.349629 M 431.000000 1160.741943 L 414.607686 1156.349674 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="1149.65">3.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 752.000000 538.935730
+L 692.000000 573.576782
+L 692.000000 712.140808
+L 752.000000 677.499817
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 740.000000 625.538269 L 704.000000 625.538269 L 716.000000 637.538269 M 704.000000 625.538269 L 716.000000 613.538269 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="722" y="622.538">1.3</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="722" y="637.538">6.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 1231.756104
+L 392.000000 1301.038086
+L 512.000000 1370.320068
+L 512.000000 1301.038086
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 461.000000 1285.449585 L 443.000000 1316.626587 L 459.392300 1312.234262 M 443.000000 1316.626587 L 438.607675 1300.234287 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="1305.54">2.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 842.000000 486.974243
+L 902.000000 521.615234
+L 1022.000000 452.333221
+L 962.000000 417.692200
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 923.000000 454.065277 L 941.000000 485.242188 L 945.392304 468.849882 M 941.000000 485.242188 L 924.607695 480.849884 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="932" y="474.154">4.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 602.000000 1075.871460
+L 662.000000 1041.230469
+L 662.000000 902.666382
+L 602.000000 937.307495
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 614.000000 989.268921 L 650.000000 989.268921 L 638.000000 977.268921 M 650.000000 989.268921 L 638.000000 1001.268921 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="632" y="993.769">4.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 902.000000 556.256287
+L 902.000000 625.538269
+L 1022.000000 694.820312
+L 1022.000000 625.538269
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 971.000000 609.949829 L 953.000000 641.126770 L 969.392303 636.734459 M 953.000000 641.126770 L 948.607689 624.734468 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="962" y="622.538">4.2</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="962" y="637.538">3.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 692.000000 1058.551025
+L 752.000000 1093.192017
+L 872.000000 1023.909973
+L 812.000000 989.268982
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 773.000000 1025.641968 L 791.000000 1056.818970 L 795.392325 1040.426670 M 791.000000 1056.818970 L 774.607700 1052.426645 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="782" y="1045.73">3.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 932.000000 816.063904
+L 872.000000 781.422852
+L 752.000000 850.704895
+L 812.000000 885.345947
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 851.000000 848.972839 L 833.000000 817.795898 L 828.607689 834.188201 M 833.000000 817.795898 L 849.392303 822.188209 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="842" y="830.384">5.2</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="842" y="845.384">2.12</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1022.000000 798.743347
+L 962.000000 833.384399
+L 962.000000 971.948486
+L 1022.000000 937.307495
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 1010.000000 885.345886 L 974.000000 885.345886 L 986.000000 897.345886 M 974.000000 885.345886 L 986.000000 873.345886 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="992" y="889.846">3.12</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1262.000000 556.256287
+L 1322.000000 521.615234
+L 1322.000000 383.051208
+L 1262.000000 417.692200
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 1274.000000 469.653717 L 1310.000000 469.653717 L 1298.000000 457.653717 M 1310.000000 469.653717 L 1298.000000 481.653717 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1292" y="474.154">2.11</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1232.000000 642.858826
+L 1232.000000 573.576782
+L 1112.000000 504.294739
+L 1112.000000 573.576782
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 1163.000000 589.165161 L 1181.000000 557.988281 L 1164.607693 562.380578 M 1181.000000 557.988281 L 1185.392297 574.380588 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1172" y="578.077">3.11</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 32.000000 157.884583
+L 2.000000 175.205109
+L 2.000000 209.846100
+L 122.000000 279.128143
+L 122.000000 209.846100
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="62" y="214.346">8.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 365.730652
+L 242.000000 348.410156
+L 242.000000 313.769165
+L 122.000000 244.487091
+L 122.000000 313.769165
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="318.269">4.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 313.769165
+L 242.000000 348.410156
+L 272.000000 365.730652
+L 392.000000 296.448639
+L 332.000000 261.807617
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="310.769">5.4</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="325.769">5.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 362.000000 105.923065
+L 362.000000 71.282043
+L 332.000000 53.961487
+L 212.000000 123.243530
+L 272.000000 157.884583
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="110.423">9.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 53.961487
+L 362.000000 71.282043
+L 362.000000 105.923065
+L 482.000000 175.205109
+L 482.000000 105.923065
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="110.423">10.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 365.730652
+L 242.000000 348.410156
+L 212.000000 365.730652
+L 212.000000 504.294739
+L 272.000000 469.653717
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="242" y="422.192">6.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 152.000000 677.499817
+L 152.000000 712.140808
+L 182.000000 729.461304
+L 302.000000 660.179321
+L 242.000000 625.538269
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="674.5">7.4</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="689.5">4.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 182.000000 729.461304
+L 152.000000 712.140808
+L 122.000000 729.461304
+L 122.000000 868.025391
+L 182.000000 833.384399
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="152" y="785.923">5.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 482.000000 209.846100
+L 512.000000 227.166626
+L 542.000000 209.846100
+L 542.000000 71.282043
+L 482.000000 105.923065
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="512" y="154.885">10.8</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="512" y="169.885">7.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 53.961487
+L 572.000000 19.320496
+L 542.000000 2.000000
+L 422.000000 71.282043
+L 482.000000 105.923065
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="512" y="58.4615">7.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 602.000000 2.000000
+L 572.000000 19.320496
+L 572.000000 53.961487
+L 692.000000 123.243530
+L 692.000000 53.961487
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="632" y="58.4615">6.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 92.000000 989.268982
+L 122.000000 1006.589478
+L 152.000000 989.268982
+L 152.000000 850.704895
+L 92.000000 885.345947
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="122" y="941.807">6.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 512.000000 261.807617
+L 512.000000 227.166626
+L 482.000000 209.846100
+L 362.000000 279.128143
+L 422.000000 313.769165
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="251.308">7.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="266.308">8.4</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="281.308">6.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 209.846100
+L 512.000000 227.166626
+L 512.000000 261.807617
+L 632.000000 331.089661
+L 632.000000 261.807617
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="572" y="258.808">8.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="572" y="273.808">9.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 152.000000 989.268982
+L 122.000000 1006.589478
+L 122.000000 1041.230469
+L 242.000000 1110.512451
+L 242.000000 1041.230469
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="1045.73">7.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 573.576782
+L 422.000000 590.897278
+L 452.000000 573.576782
+L 452.000000 435.012695
+L 392.000000 469.653717
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="518.615">9.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="533.615">9.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 422.000000 625.538269
+L 422.000000 590.897278
+L 392.000000 573.576782
+L 272.000000 642.858826
+L 332.000000 677.499817
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="615.038">7.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="630.038">10.4</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="645.038">8.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 452.000000 573.576782
+L 422.000000 590.897278
+L 422.000000 625.538269
+L 542.000000 694.820312
+L 542.000000 625.538269
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="615.038">10.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="630.038">8.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="645.038">6.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 937.307495
+L 332.000000 954.627930
+L 362.000000 937.307495
+L 362.000000 798.743347
+L 302.000000 833.384399
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="882.346">9.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="897.346">9.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 1145.153564
+L 272.000000 1162.474121
+L 302.000000 1145.153564
+L 302.000000 1006.589478
+L 242.000000 1041.230469
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="1097.69">10.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 332.000000 989.268982
+L 332.000000 954.627930
+L 302.000000 937.307495
+L 182.000000 1006.589478
+L 242.000000 1041.230469
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="986.269">10.9</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="1001.27">7.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 362.000000 937.307495
+L 332.000000 954.627930
+L 332.000000 989.268982
+L 452.000000 1058.551025
+L 452.000000 989.268982
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="978.769">10.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="993.769">6.10</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="1008.77">7.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 782.000000 209.846100
+L 812.000000 192.525574
+L 812.000000 157.884583
+L 692.000000 88.602539
+L 692.000000 157.884583
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="752" y="162.385">5.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 1145.153564
+L 272.000000 1162.474121
+L 272.000000 1197.114990
+L 392.000000 1266.397095
+L 392.000000 1197.114990
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="1201.61">9.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 842.000000 209.846100
+L 812.000000 192.525574
+L 782.000000 209.846100
+L 782.000000 348.410156
+L 842.000000 313.769165
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="812" y="258.808">7.5</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="812" y="273.808">4.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 752.000000 469.653717
+L 782.000000 486.974243
+L 812.000000 469.653717
+L 812.000000 331.089661
+L 752.000000 365.730652
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="782" y="407.192">11.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="782" y="422.192">10.5</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="782" y="437.192">8.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 782.000000 521.615234
+L 782.000000 486.974243
+L 752.000000 469.653717
+L 632.000000 538.935730
+L 692.000000 573.576782
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="722" y="511.115">12.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="722" y="526.115">5.3</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="722" y="541.115">10.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 812.000000 469.653717
+L 782.000000 486.974243
+L 782.000000 521.615234
+L 902.000000 590.897278
+L 902.000000 521.615234
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="842" y="518.615">9.2</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="842" y="533.615">9.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 662.000000 833.384399
+L 692.000000 850.704895
+L 722.000000 833.384399
+L 722.000000 694.820312
+L 662.000000 729.461304
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="770.923">11.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="785.923">4.3</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="800.923">12.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 1145.153564
+L 572.000000 1127.833008
+L 572.000000 1093.192017
+L 452.000000 1023.909973
+L 452.000000 1093.192017
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="512" y="1090.19">5.10</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="512" y="1105.19">10.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 1093.192017
+L 572.000000 1127.833008
+L 602.000000 1145.153564
+L 722.000000 1075.871460
+L 662.000000 1041.230469
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="632" y="1097.69">9.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 692.000000 885.345947
+L 692.000000 850.704895
+L 662.000000 833.384399
+L 542.000000 902.666382
+L 602.000000 937.307495
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="632" y="882.346">12.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="632" y="897.346">6.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 722.000000 833.384399
+L 692.000000 850.704895
+L 692.000000 885.345947
+L 812.000000 954.627930
+L 812.000000 885.345947
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="752" y="874.846">11.2</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="752" y="889.846">5.6</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="752" y="904.846">8.12</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 602.000000 1145.153564
+L 572.000000 1127.833008
+L 542.000000 1145.153564
+L 542.000000 1283.717651
+L 602.000000 1249.076660
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="572" y="1201.62">4.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 512.000000 1404.961182
+L 542.000000 1422.281616
+L 572.000000 1404.961182
+L 572.000000 1266.397095
+L 512.000000 1301.038086
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="542" y="1357.5">8.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1052.000000 469.653717
+L 1082.000000 452.333221
+L 1082.000000 417.692200
+L 962.000000 348.410156
+L 962.000000 417.692200
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1022" y="422.192">6.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1082.000000 417.692200
+L 1082.000000 452.333221
+L 1112.000000 469.653717
+L 1232.000000 400.371704
+L 1172.000000 365.730652
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1142" y="422.192">4.11</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1112.000000 469.653717
+L 1082.000000 452.333221
+L 1052.000000 469.653717
+L 1052.000000 608.217773
+L 1112.000000 573.576782
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1082" y="518.615">5.5</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1082" y="533.615">5.11</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1022.000000 729.461304
+L 1052.000000 746.781860
+L 1082.000000 729.461304
+L 1082.000000 590.897278
+L 1022.000000 625.538269
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1052" y="667">7.2</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1052" y="682">8.5</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1052" y="697">6.11</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 902.000000 1041.230469
+L 932.000000 1023.909973
+L 932.000000 989.268982
+L 812.000000 919.986938
+L 812.000000 989.268982
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="872" y="986.269">8.6</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="872" y="1001.27">4.12</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 932.000000 989.268982
+L 932.000000 1023.909973
+L 962.000000 1041.230469
+L 1082.000000 971.948486
+L 1022.000000 937.307495
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="992" y="993.769">5.12</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1052.000000 781.422852
+L 1052.000000 746.781860
+L 1022.000000 729.461304
+L 902.000000 798.743347
+L 962.000000 833.384399
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="992" y="778.423">8.2</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="992" y="793.423">9.12</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1082.000000 729.461304
+L 1052.000000 746.781860
+L 1052.000000 781.422852
+L 1172.000000 850.704895
+L 1172.000000 781.422852
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1112" y="778.423">10.12</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1112" y="793.423">7.11</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1352.000000 365.730652
+L 1352.000000 331.089661
+L 1322.000000 313.769165
+L 1202.000000 383.051208
+L 1262.000000 417.692200
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1292" y="370.231">8.11</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1232.000000 677.499817
+L 1262.000000 694.820312
+L 1292.000000 677.499817
+L 1292.000000 538.935730
+L 1232.000000 573.576782
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1262" y="630.038">9.11</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1172.000000 885.345947
+L 1202.000000 902.666382
+L 1232.000000 885.345947
+L 1232.000000 746.781860
+L 1172.000000 781.422852
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1202" y="837.884">7.12</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1262.000000 729.461304
+L 1262.000000 694.820312
+L 1232.000000 677.499817
+L 1112.000000 746.781860
+L 1172.000000 781.422852
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1202" y="733.961">10.11</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1202.000000 937.307495
+L 1202.000000 902.666382
+L 1172.000000 885.345947
+L 1052.000000 954.627930
+L 1112.000000 989.268982
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1142" y="941.807">6.12</text>
+</svg>
diff --git a/aux/doc/metamap-P.svg b/aux/doc/metamap-P.svg
new file mode 100644
index 0000000..d5a6f4f
--- /dev/null
+++ b/aux/doc/metamap-P.svg
@@ -0,0 +1,708 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="1086" height="1357">
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 469.653748
+L 242.000000 504.294739
+L 362.000000 573.576782
+L 392.000000 556.256287
+L 392.000000 417.692200
+L 362.000000 400.371704
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 362.000000 435.012695 L 317.000000 512.955017 L 333.392304 508.562709 M 317.000000 512.955017 L 312.607692 496.562713 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="491.474">1.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 573.576782
+L 212.000000 590.897278
+L 212.000000 729.461365
+L 242.000000 746.781860
+L 362.000000 677.499817
+L 362.000000 642.858826
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 332.000000 660.179321 L 242.000000 660.179321 L 254.000000 672.179321 M 242.000000 660.179321 L 254.000000 648.179321 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="664.679">0.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 422.000000 365.730682
+L 452.000000 348.410187
+L 452.000000 209.846100
+L 422.000000 192.525574
+L 302.000000 261.807617
+L 302.000000 296.448669
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 332.000000 279.128143 L 422.000000 279.128143 L 410.000000 267.128143 M 422.000000 279.128143 L 410.000000 291.128143 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="283.628">1.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 512.000000 313.769135
+L 542.000000 331.089661
+L 662.000000 261.807617
+L 662.000000 227.166626
+L 542.000000 157.884583
+L 512.000000 175.205109
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 192.525604 L 587.000000 270.467865 L 591.392303 254.075560 M 587.000000 270.467865 L 570.607695 266.075562 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="572" y="248.987">0.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 937.307434
+L 302.000000 919.986938
+L 302.000000 781.422852
+L 272.000000 764.102356
+L 152.000000 833.384399
+L 152.000000 868.025391
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 182.000000 850.704895 L 272.000000 850.704895 L 260.000000 838.704895 M 272.000000 850.704895 L 260.000000 862.704895 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="242" y="855.205">0.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 602.000000 365.730682
+L 602.000000 400.371704
+L 722.000000 469.653748
+L 752.000000 452.333252
+L 752.000000 313.769135
+L 722.000000 296.448669
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 722.000000 331.089661 L 677.000000 409.031952 L 693.392304 404.639647 M 677.000000 409.031952 L 672.607695 392.639648 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="387.551">2.0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 1041.230469
+L 272.000000 1006.589478
+L 152.000000 937.307434
+L 122.000000 954.627930
+L 122.000000 1093.192017
+L 152.000000 1110.512573
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 152.000000 1075.871460 L 197.000000 997.929321 L 180.607692 1002.321612 M 197.000000 997.929321 L 201.392291 1014.321630 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="1028.41">1.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 362.000000 885.345947
+L 392.000000 902.666443
+L 512.000000 833.384399
+L 512.000000 798.743408
+L 392.000000 729.461365
+L 362.000000 746.781860
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 764.102356 L 437.000000 842.044617 L 441.392303 825.652311 M 437.000000 842.044617 L 420.607695 837.652314 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="820.564">2.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 521.615234
+L 602.000000 504.294739
+L 602.000000 365.730682
+L 572.000000 348.410187
+L 452.000000 417.692200
+L 452.000000 452.333252
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 482.000000 435.012695 L 572.000000 435.012695 L 560.000000 423.012695 M 572.000000 435.012695 L 560.000000 447.012695 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="542" y="439.513">0.0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 812.000000 105.923096
+L 782.000000 88.602539
+L 662.000000 157.884583
+L 662.000000 192.525574
+L 782.000000 261.807617
+L 812.000000 244.487152
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 782.000000 227.166626 L 737.000000 149.224335 L 732.607695 165.616639 M 737.000000 149.224335 L 753.392304 153.616640 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="752" y="179.705">0.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 182.000000 1301.038086
+L 212.000000 1283.717529
+L 212.000000 1145.153564
+L 182.000000 1127.833008
+L 62.000000 1197.115112
+L 62.000000 1231.756104
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 92.000000 1214.435547 L 182.000000 1214.435547 L 170.000000 1202.435547 M 182.000000 1214.435547 L 170.000000 1226.435547 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="152" y="1218.94">1.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 625.538330
+L 572.000000 590.897278
+L 452.000000 521.615234
+L 422.000000 538.935791
+L 422.000000 677.499817
+L 452.000000 694.820312
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 452.000000 660.179321 L 497.000000 582.237000 L 480.607696 586.629308 M 497.000000 582.237000 L 501.392308 598.629303 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="612.718">0.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 902.000000 53.961548
+L 872.000000 71.282043
+L 872.000000 209.846100
+L 902.000000 227.166626
+L 1022.000000 157.884583
+L 1022.000000 123.243530
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 992.000000 140.564056 L 902.000000 140.564056 L 914.000000 152.564056 M 902.000000 140.564056 L 914.000000 128.564056 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="932" y="145.064">1.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 1249.076660
+L 302.000000 1266.397095
+L 422.000000 1197.115112
+L 422.000000 1162.474121
+L 302.000000 1093.192017
+L 272.000000 1110.512573
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 1127.833008 L 347.000000 1205.775391 L 351.392314 1189.383088 M 347.000000 1205.775391 L 330.607697 1201.383077 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="1184.29">0.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 482.000000 989.268982
+L 482.000000 954.627930
+L 362.000000 885.345947
+L 332.000000 902.666443
+L 332.000000 1041.230469
+L 362.000000 1058.551025
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 362.000000 1023.909973 L 407.000000 945.967651 L 390.607696 950.359960 M 407.000000 945.967651 L 411.392308 962.359955 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="976.448">0.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 662.000000 677.499817
+L 632.000000 660.179321
+L 512.000000 729.461365
+L 512.000000 764.102356
+L 632.000000 833.384399
+L 662.000000 816.063904
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 798.743347 L 587.000000 720.801086 L 582.607697 737.193392 M 587.000000 720.801086 L 603.392305 725.193389 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="751.282">1.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 692.000000 625.538330
+L 722.000000 608.217773
+L 722.000000 469.653748
+L 692.000000 452.333252
+L 572.000000 521.615234
+L 572.000000 556.256287
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 602.000000 538.935791 L 692.000000 538.935791 L 680.000000 526.935791 M 692.000000 538.935791 L 680.000000 550.935791 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="662" y="543.436">1.0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 1041.230469
+L 542.000000 1023.909973
+L 422.000000 1093.192017
+L 422.000000 1127.833008
+L 542.000000 1197.115112
+L 572.000000 1179.794556
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 1162.473999 L 497.000000 1084.531860 L 492.607709 1100.924169 M 497.000000 1084.531860 L 513.392308 1088.924151 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="512" y="1115.01">0.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 937.307434
+L 632.000000 902.666443
+L 512.000000 833.384399
+L 482.000000 850.704895
+L 482.000000 989.268982
+L 512.000000 1006.589478
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 512.000000 971.948425 L 557.000000 894.006165 L 540.607695 898.398467 M 557.000000 894.006165 L 561.392303 910.398470 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="542" y="924.487">1.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 932.000000 417.692200
+L 962.000000 400.371704
+L 962.000000 261.807617
+L 932.000000 244.487152
+L 812.000000 313.769135
+L 812.000000 348.410187
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 842.000000 331.089661 L 932.000000 331.089661 L 920.000000 319.089661 M 932.000000 331.089661 L 920.000000 343.089661 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="902" y="335.59">0.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 662.000000 989.268982
+L 632.000000 1006.589478
+L 632.000000 1145.153564
+L 662.000000 1162.474121
+L 782.000000 1093.192017
+L 782.000000 1058.551025
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 752.000000 1075.871582 L 662.000000 1075.871582 L 674.000000 1087.871582 M 662.000000 1075.871582 L 674.000000 1063.871582 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="1080.37">1.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 932.000000 521.615234
+L 932.000000 486.974243
+L 812.000000 417.692200
+L 782.000000 435.012695
+L 782.000000 573.576782
+L 812.000000 590.897278
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 812.000000 556.256287 L 857.000000 478.313965 L 840.607696 482.706273 M 857.000000 478.313965 L 861.392308 494.706269 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="842" y="508.795">1.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 842.000000 781.422852
+L 872.000000 764.102356
+L 872.000000 625.538330
+L 842.000000 608.217773
+L 722.000000 677.499817
+L 722.000000 712.140869
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 752.000000 694.820312 L 842.000000 694.820312 L 830.000000 682.820312 M 842.000000 694.820312 L 830.000000 706.820312 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="812" y="699.32">0.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 842.000000 885.345947
+L 842.000000 850.704895
+L 722.000000 781.422852
+L 692.000000 798.743408
+L 692.000000 937.307434
+L 722.000000 954.627930
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 722.000000 919.986938 L 767.000000 842.044617 L 750.607696 846.436925 M 767.000000 842.044617 L 771.392308 858.436921 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="752" y="872.525">1.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 602.000000 400.371704
+L 602.000000 504.294739
+L 692.000000 452.333252
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 611.000000 415.960144 L 638.000000 462.725525 L 642.392306 446.333220 M 638.000000 462.725525 L 621.607695 458.333219 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="632" y="456.833">3.0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 902.666443
+L 482.000000 954.627930
+L 482.000000 850.704895
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 410.000000 902.666382 L 464.000000 902.666382 L 452.000000 890.666382 M 464.000000 902.666382 L 452.000000 914.666382 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="907.166">3.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 504.294739
+L 242.000000 573.576782
+L 362.000000 642.858826
+L 362.000000 573.576782
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 311.000000 557.988281 L 293.000000 589.165161 L 309.392307 584.772864 M 293.000000 589.165161 L 288.607703 572.772854 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="578.077">3.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 590.897278
+L 152.000000 625.538330
+L 152.000000 764.102356
+L 212.000000 729.461365
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 200.000000 677.499878 L 164.000000 677.499878 L 176.000000 689.499878 M 164.000000 677.499878 L 176.000000 665.499878 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="682">2.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 452.000000 348.410187
+L 512.000000 313.769135
+L 512.000000 175.205109
+L 452.000000 209.846100
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 464.000000 261.807617 L 500.000000 261.807617 L 488.000000 249.807617 M 500.000000 261.807617 L 488.000000 273.807617 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="266.308">3.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 62.000000 1127.833008
+L 122.000000 1093.192017
+L 122.000000 954.627930
+L 62.000000 989.268982
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 74.000000 1041.230469 L 110.000000 1041.230469 L 98.000000 1029.230469 M 110.000000 1041.230469 L 98.000000 1053.230469 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="92" y="1045.73">2.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 331.089661
+L 602.000000 365.730682
+L 722.000000 296.448669
+L 662.000000 261.807617
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 623.000000 298.180725 L 641.000000 329.357605 L 645.392297 312.965298 M 641.000000 329.357605 L 624.607693 324.965308 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="632" y="310.769">5.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="632" y="325.769">2.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 919.986938
+L 362.000000 885.345947
+L 362.000000 746.781860
+L 302.000000 781.422852
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 314.000000 833.384399 L 350.000000 833.384399 L 338.000000 821.384399 M 350.000000 833.384399 L 338.000000 845.384399 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="830.384">5.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="845.384">3.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 782.000000 88.602539
+L 722.000000 53.961548
+L 602.000000 123.243530
+L 662.000000 157.884583
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 701.000000 121.511497 L 683.000000 90.334595 L 678.607697 106.726900 M 683.000000 90.334595 L 699.392305 94.726897 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="110.423">2.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 1006.589478
+L 272.000000 937.307434
+L 152.000000 868.025391
+L 152.000000 937.307434
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 203.000000 952.895874 L 221.000000 921.718933 L 204.607697 926.111244 M 221.000000 921.718933 L 225.392311 938.111236 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="941.807">4.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 590.897278
+L 572.000000 521.615234
+L 452.000000 452.333252
+L 452.000000 521.615234
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 503.000000 537.203735 L 521.000000 506.026794 L 504.607697 510.419105 M 521.000000 506.026794 L 525.392311 522.419097 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="512" y="518.615">4.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="512" y="533.615">3.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 872.000000 71.282043
+L 812.000000 105.923096
+L 812.000000 244.487152
+L 872.000000 209.846100
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 860.000000 157.884598 L 824.000000 157.884613 L 836.000006 169.884608 M 824.000000 157.884613 L 835.999995 145.884607 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="842" y="162.385">3.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 1283.717529
+L 272.000000 1249.076660
+L 272.000000 1110.512573
+L 212.000000 1145.153564
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 224.000000 1197.114990 L 260.000000 1197.114990 L 248.000000 1185.114990 M 260.000000 1197.114990 L 248.000000 1209.114990 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="242" y="1201.61">3.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 660.179321
+L 572.000000 625.538330
+L 452.000000 694.820312
+L 512.000000 729.461365
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 551.000000 693.088257 L 533.000000 661.911316 L 528.607689 678.303618 M 533.000000 661.911316 L 549.392303 666.303627 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="542" y="682">4.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 1266.397095
+L 362.000000 1301.038086
+L 482.000000 1231.756104
+L 422.000000 1197.115112
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 383.000000 1233.488281 L 401.000000 1264.665039 L 405.392269 1248.272725 M 401.000000 1264.665039 L 384.607686 1260.272770 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="1253.58">2.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 722.000000 608.217773
+L 782.000000 573.576782
+L 782.000000 435.012695
+L 722.000000 469.653748
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 734.000000 521.615234 L 770.000000 521.615234 L 758.000000 509.615234 M 770.000000 521.615234 L 758.000000 533.615234 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="752" y="518.615">6.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="752" y="533.615">2.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 1023.909973
+L 482.000000 989.268982
+L 362.000000 1058.551025
+L 422.000000 1093.192017
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 461.000000 1056.818970 L 443.000000 1025.641968 L 438.607675 1042.034267 M 443.000000 1025.641968 L 459.392300 1030.034293 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="1038.23">4.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="1053.23">2.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 902.666443
+L 632.000000 833.384399
+L 512.000000 764.102356
+L 512.000000 833.384399
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 563.000000 848.972839 L 581.000000 817.795898 L 564.607697 822.188209 M 581.000000 817.795898 L 585.392311 834.188201 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="572" y="830.384">2.4</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="572" y="845.384">6.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 962.000000 400.371704
+L 1022.000000 365.730682
+L 1022.000000 227.166626
+L 962.000000 261.807617
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 974.000000 313.769165 L 1010.000000 313.769165 L 998.000000 301.769165 M 1010.000000 313.769165 L 998.000000 325.769165 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="992" y="318.269">3.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 1006.589478
+L 572.000000 1041.230469
+L 572.000000 1179.794556
+L 632.000000 1145.153564
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 620.000000 1093.192017 L 584.000000 1093.192017 L 596.000000 1105.192017 M 584.000000 1093.192017 L 596.000000 1081.192017 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="1097.69">3.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 932.000000 486.974243
+L 932.000000 417.692200
+L 812.000000 348.410187
+L 812.000000 417.692200
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 863.000000 433.280670 L 881.000000 402.103729 L 864.607697 406.496040 M 881.000000 402.103729 L 885.392311 418.496032 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="872" y="422.192">4.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 872.000000 764.102356
+L 932.000000 729.461365
+L 932.000000 590.897278
+L 872.000000 625.538330
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 884.000000 677.499878 L 920.000000 677.499878 L 908.000000 665.499878 M 920.000000 677.499878 L 908.000000 689.499878 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="902" y="682">2.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 842.000000 850.704895
+L 842.000000 781.422852
+L 722.000000 712.140869
+L 722.000000 781.422852
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 773.000000 797.011353 L 791.000000 765.834412 L 774.607697 770.226722 M 791.000000 765.834412 L 795.392311 782.226714 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="782" y="785.923">3.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 209.846100
+L 272.000000 244.487152
+L 302.000000 261.807617
+L 422.000000 192.525574
+L 362.000000 157.884583
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="214.346">6.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 417.692200
+L 212.000000 452.333252
+L 242.000000 469.653748
+L 362.000000 400.371704
+L 302.000000 365.730682
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="422.192">10.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 261.807617
+L 272.000000 244.487152
+L 242.000000 261.807617
+L 242.000000 400.371704
+L 302.000000 365.730682
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="318.269">7.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 469.653748
+L 212.000000 452.333252
+L 182.000000 469.653748
+L 182.000000 608.217773
+L 242.000000 573.576782
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="526.115">9.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 122.000000 781.422852
+L 122.000000 816.063904
+L 152.000000 833.384399
+L 272.000000 764.102356
+L 212.000000 729.461365
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="778.423">8.6</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="793.423">5.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 152.000000 833.384399
+L 122.000000 816.063904
+L 92.000000 833.384399
+L 92.000000 971.948486
+L 152.000000 937.307434
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="122" y="889.846">6.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 417.692200
+L 422.000000 400.371704
+L 422.000000 365.730682
+L 302.000000 296.448669
+L 302.000000 365.730682
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="362.731">10.5</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="377.731">7.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 422.000000 365.730682
+L 422.000000 400.371704
+L 452.000000 417.692200
+L 572.000000 348.410187
+L 512.000000 313.769135
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="362.731">8.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="377.731">9.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 157.884583
+L 542.000000 123.243530
+L 512.000000 105.923096
+L 392.000000 175.205109
+L 452.000000 209.846100
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="162.385">5.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 105.923096
+L 542.000000 123.243530
+L 542.000000 157.884583
+L 662.000000 227.166626
+L 662.000000 157.884583
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="154.885">8.8</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="169.885">4.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 32.000000 1145.153564
+L 32.000000 1179.794556
+L 62.000000 1197.115112
+L 182.000000 1127.833008
+L 122.000000 1093.192017
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="92" y="1142.15">7.2</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="92" y="1157.15">6.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 452.000000 417.692200
+L 422.000000 400.371704
+L 392.000000 417.692200
+L 392.000000 556.256287
+L 452.000000 521.615234
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="459.154">7.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="474.154">8.4</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="489.154">6.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 62.000000 1197.115112
+L 32.000000 1179.794556
+L 2.000000 1197.115112
+L 2.000000 1335.679199
+L 62.000000 1301.038086
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="32" y="1253.58">7.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 362.000000 677.499817
+L 392.000000 694.820312
+L 422.000000 677.499817
+L 422.000000 538.935791
+L 362.000000 573.576782
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="622.538">5.4</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="637.538">5.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 729.461365
+L 392.000000 694.820312
+L 362.000000 677.499817
+L 242.000000 746.781860
+L 302.000000 781.422852
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="718.961">4.6</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="733.961">11.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="748.961">8.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 422.000000 677.499817
+L 392.000000 694.820312
+L 392.000000 729.461365
+L 512.000000 798.743408
+L 512.000000 729.461365
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="726.461">6.4</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="741.461">12.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 1041.230469
+L 302.000000 1058.551025
+L 332.000000 1041.230469
+L 332.000000 902.666443
+L 272.000000 937.307434
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="986.269">8.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="1001.27">9.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 152.000000 1352.999756
+L 182.000000 1335.679199
+L 182.000000 1301.038086
+L 62.000000 1231.756104
+L 62.000000 1301.038086
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="122" y="1305.54">10.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 182.000000 1301.038086
+L 182.000000 1335.679199
+L 212.000000 1352.999756
+L 332.000000 1283.717529
+L 272.000000 1249.076660
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="242" y="1305.54">9.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 1093.192017
+L 302.000000 1058.551025
+L 272.000000 1041.230469
+L 152.000000 1110.512573
+L 212.000000 1145.153564
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="242" y="1090.19">10.2</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="242" y="1105.19">5.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 332.000000 1041.230469
+L 302.000000 1058.551025
+L 302.000000 1093.192017
+L 422.000000 1162.474121
+L 422.000000 1093.192017
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="1082.69">7.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="1097.69">8.10</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="1112.69">4.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 752.000000 313.769135
+L 782.000000 296.448669
+L 782.000000 261.807617
+L 662.000000 192.525574
+L 662.000000 261.807617
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="722" y="251.308">11.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="722" y="266.308">4.8</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="722" y="281.308">8.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 782.000000 261.807617
+L 782.000000 296.448669
+L 812.000000 313.769135
+L 932.000000 244.487152
+L 872.000000 209.846100
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="842" y="258.808">5.3</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="842" y="273.808">5.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 902.000000 53.961548
+L 902.000000 19.320557
+L 872.000000 2.000000
+L 752.000000 71.282043
+L 812.000000 105.923096
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="842" y="58.4615">9.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 932.000000 2.000000
+L 902.000000 19.320557
+L 902.000000 53.961548
+L 1022.000000 123.243530
+L 1022.000000 53.961548
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="962" y="58.4615">10.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 812.000000 313.769135
+L 782.000000 296.448669
+L 752.000000 313.769135
+L 752.000000 452.333252
+L 812.000000 417.692200
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="782" y="362.731">12.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="782" y="377.731">6.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 662.000000 677.499817
+L 692.000000 660.179321
+L 692.000000 625.538330
+L 572.000000 556.256287
+L 572.000000 625.538330
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="632" y="622.538">9.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="632" y="637.538">9.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 692.000000 625.538330
+L 692.000000 660.179321
+L 722.000000 677.499817
+L 842.000000 608.217773
+L 782.000000 573.576782
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="752" y="615.038">10.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="752" y="630.038">4.9</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="752" y="645.038">7.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 722.000000 677.499817
+L 692.000000 660.179321
+L 662.000000 677.499817
+L 662.000000 816.063904
+L 722.000000 781.422852
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="726.461">10.4</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="741.461">5.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1022.000000 157.884583
+L 1052.000000 175.205109
+L 1082.000000 157.884583
+L 1082.000000 19.320557
+L 1022.000000 53.961548
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="1052" y="110.423">7.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 937.307434
+L 662.000000 954.627930
+L 692.000000 937.307434
+L 692.000000 798.743408
+L 632.000000 833.384399
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="662" y="874.846">7.4</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="662" y="889.846">6.9</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="662" y="904.846">10.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 1052.000000 209.846100
+L 1052.000000 175.205109
+L 1022.000000 157.884583
+L 902.000000 227.166626
+L 962.000000 261.807617
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="992" y="206.846">8.3</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="992" y="221.846">6.8</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 512.000000 1249.076660
+L 542.000000 1231.756104
+L 542.000000 1197.115112
+L 422.000000 1127.833008
+L 422.000000 1197.115112
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="1194.12">4.10</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="1209.12">8.7</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 1197.115112
+L 542.000000 1231.756104
+L 572.000000 1249.076660
+L 692.000000 1179.794556
+L 632.000000 1145.153564
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="1201.62">5.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 662.000000 989.268982
+L 662.000000 954.627930
+L 632.000000 937.307434
+L 512.000000 1006.589478
+L 572.000000 1041.230469
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="986.269">9.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="1001.27">9.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 692.000000 937.307434
+L 662.000000 954.627930
+L 662.000000 989.268982
+L 782.000000 1058.551025
+L 782.000000 989.268982
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="722" y="986.269">7.9</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="722" y="1001.27">10.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 932.000000 521.615234
+L 962.000000 538.935791
+L 992.000000 521.615234
+L 992.000000 383.051208
+L 932.000000 417.692200
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="962" y="474.154">9.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 962.000000 573.576782
+L 962.000000 538.935791
+L 932.000000 521.615234
+L 812.000000 590.897278
+L 872.000000 625.538330
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="902" y="570.577">8.9</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="902" y="585.577">10.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 842.000000 885.345947
+L 872.000000 902.666443
+L 902.000000 885.345947
+L 902.000000 746.781860
+L 842.000000 781.422852
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="872" y="837.884">9.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 782.000000 1093.192017
+L 812.000000 1110.512573
+L 842.000000 1093.192017
+L 842.000000 954.627930
+L 782.000000 989.268982
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="812" y="1045.73">7.10</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 872.000000 937.307434
+L 872.000000 902.666443
+L 842.000000 885.345947
+L 722.000000 954.627930
+L 782.000000 989.268982
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="812" y="941.807">10.9</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 812.000000 1145.153564
+L 812.000000 1110.512573
+L 782.000000 1093.192017
+L 662.000000 1162.474121
+L 722.000000 1197.115112
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="752" y="1149.65">6.10</text>
+</svg>
diff --git a/aux/doc/metamap-T.svg b/aux/doc/metamap-T.svg
new file mode 100644
index 0000000..c65fc83
--- /dev/null
+++ b/aux/doc/metamap-T.svg
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="1056" height="1063">
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 175.205109
+L 242.000000 209.846100
+L 362.000000 279.128143
+L 392.000000 261.807617
+L 392.000000 123.243530
+L 362.000000 105.923096
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 362.000000 140.564072 L 317.000000 218.506348 L 333.392305 214.114044 M 317.000000 218.506348 L 312.607696 202.114042 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="197.026">1.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 279.128143
+L 212.000000 296.448669
+L 212.000000 435.012695
+L 242.000000 452.333252
+L 362.000000 383.051208
+L 362.000000 348.410187
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 332.000000 365.730713 L 242.000000 365.730682 L 253.999996 377.730687 M 242.000000 365.730682 L 254.000004 353.730687 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="370.231">0.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 642.858826
+L 302.000000 625.538330
+L 302.000000 486.974243
+L 272.000000 469.653748
+L 152.000000 538.935791
+L 152.000000 573.576782
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 182.000000 556.256287 L 272.000000 556.256287 L 260.000000 544.256287 M 272.000000 556.256287 L 260.000000 568.256287 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="242" y="560.756">0.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 746.781860
+L 272.000000 712.140869
+L 152.000000 642.858826
+L 122.000000 660.179321
+L 122.000000 798.743408
+L 152.000000 816.063904
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 152.000000 781.422974 L 197.000000 703.480652 L 180.607696 707.872960 M 197.000000 703.480652 L 201.392308 719.872956 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="733.961">1.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 362.000000 590.897278
+L 392.000000 608.217773
+L 512.000000 538.935791
+L 512.000000 504.294739
+L 392.000000 435.012695
+L 362.000000 452.333252
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 469.653717 L 437.000000 547.596008 L 441.392305 531.203704 M 437.000000 547.596008 L 420.607696 543.203703 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="526.115">2.0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 182.000000 1006.589478
+L 212.000000 989.268982
+L 212.000000 850.704895
+L 182.000000 833.384399
+L 62.000000 902.666443
+L 62.000000 937.307434
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 92.000000 919.986938 L 182.000000 919.986938 L 170.000000 907.986938 M 182.000000 919.986938 L 170.000000 931.986938 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="152" y="924.487">1.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 331.089661
+L 572.000000 296.448669
+L 452.000000 227.166626
+L 422.000000 244.487152
+L 422.000000 383.051208
+L 452.000000 400.371704
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 452.000000 365.730682 L 497.000000 287.788391 L 480.607696 292.180696 M 497.000000 287.788391 L 501.392305 304.180695 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="318.269">0.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 954.627930
+L 302.000000 971.948486
+L 422.000000 902.666443
+L 422.000000 868.025391
+L 302.000000 798.743408
+L 272.000000 816.063904
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 833.384460 L 347.000000 911.326782 L 351.392308 894.934478 M 347.000000 911.326782 L 330.607696 906.934474 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="889.846">0.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 482.000000 694.820312
+L 482.000000 660.179321
+L 362.000000 590.897278
+L 332.000000 608.217773
+L 332.000000 746.781860
+L 362.000000 764.102356
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 362.000000 729.461365 L 407.000000 651.519104 L 390.607695 655.911407 M 407.000000 651.519104 L 411.392303 667.911409 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="682">0.0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 662.000000 383.051208
+L 632.000000 365.730682
+L 512.000000 435.012695
+L 512.000000 469.653748
+L 632.000000 538.935791
+L 662.000000 521.615234
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 504.294739 L 587.000000 426.352448 L 582.607695 442.744751 M 587.000000 426.352448 L 603.392304 430.744753 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="456.833">1.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 746.781860
+L 542.000000 729.461365
+L 422.000000 798.743408
+L 422.000000 833.384399
+L 542.000000 902.666443
+L 572.000000 885.345947
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 868.025513 L 497.000000 790.083191 L 492.607692 806.475495 M 497.000000 790.083191 L 513.392304 794.475499 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="512" y="820.564">0.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 642.858826
+L 632.000000 608.217773
+L 512.000000 538.935791
+L 482.000000 556.256287
+L 482.000000 694.820312
+L 512.000000 712.140869
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 512.000000 677.499817 L 557.000000 599.557495 L 540.607696 603.949803 M 557.000000 599.557495 L 561.392308 615.949799 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="542" y="630.038">1.0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 662.000000 694.820312
+L 632.000000 712.140869
+L 632.000000 850.704895
+L 662.000000 868.025391
+L 782.000000 798.743408
+L 782.000000 764.102356
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 752.000000 781.422852 L 662.000000 781.422852 L 674.000000 793.422852 M 662.000000 781.422852 L 674.000000 769.422852 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="785.923">1.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 842.000000 590.897278
+L 842.000000 556.256287
+L 722.000000 486.974243
+L 692.000000 504.294739
+L 692.000000 642.858826
+L 722.000000 660.179321
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 722.000000 625.538269 L 767.000000 547.596008 L 750.607695 551.988311 M 767.000000 547.596008 L 771.392303 563.988314 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="752" y="578.077">0.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 932.000000 642.858826
+L 902.000000 625.538330
+L 782.000000 694.820312
+L 782.000000 729.461365
+L 902.000000 798.743408
+L 932.000000 781.422852
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 902.000000 764.102356 L 857.000000 686.160034 L 852.607692 702.552338 M 857.000000 686.160034 L 873.392304 690.552342 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="872" y="716.641">1.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 608.217773
+L 482.000000 660.179321
+L 482.000000 556.256287
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 410.000000 608.217773 L 464.000000 608.217773 L 452.000000 596.217773 M 464.000000 608.217773 L 452.000000 620.217773 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="612.718">3.0</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 209.846100
+L 242.000000 279.128143
+L 362.000000 348.410187
+L 362.000000 279.128143
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 311.000000 263.539703 L 293.000000 294.716614 L 309.392305 290.324310 M 293.000000 294.716614 L 288.607696 278.324308 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="283.628">3.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 296.448669
+L 152.000000 331.089661
+L 152.000000 469.653748
+L 212.000000 435.012695
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 200.000000 383.051178 L 164.000000 383.051178 L 176.000000 395.051178 M 164.000000 383.051178 L 176.000000 371.051178 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="387.551">2.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 62.000000 833.384399
+L 122.000000 798.743408
+L 122.000000 660.179321
+L 62.000000 694.820312
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 74.000000 746.781860 L 110.000000 746.781860 L 98.000000 734.781860 M 110.000000 746.781860 L 98.000000 758.781860 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="92" y="751.282">2.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 625.538330
+L 362.000000 590.897278
+L 362.000000 452.333252
+L 302.000000 486.974243
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 314.000000 538.935791 L 350.000000 538.935791 L 338.000000 526.935791 M 350.000000 538.935791 L 338.000000 550.935791 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="535.936">5.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="550.936">3.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 712.140869
+L 272.000000 642.858826
+L 152.000000 573.576782
+L 152.000000 642.858826
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 203.000000 658.447266 L 221.000000 627.270386 L 204.607693 631.662683 M 221.000000 627.270386 L 225.392297 643.662693 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="647.359">4.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 572.000000 296.448669
+L 572.000000 227.166626
+L 452.000000 157.884583
+L 452.000000 227.166626
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 503.000000 242.755081 L 521.000000 211.578171 L 504.607695 215.970475 M 521.000000 211.578171 L 525.392304 227.970476 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="512" y="231.667">3.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 989.268982
+L 272.000000 954.627930
+L 272.000000 816.063904
+L 212.000000 850.704895
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 224.000000 902.666382 L 260.000000 902.666382 L 248.000000 890.666382 M 260.000000 902.666382 L 248.000000 914.666382 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="242" y="907.166">3.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 365.730682
+L 572.000000 331.089661
+L 452.000000 400.371704
+L 512.000000 435.012695
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 551.000000 398.639618 L 533.000000 367.462738 L 528.607703 383.855045 M 533.000000 367.462738 L 549.392307 371.855035 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="542" y="387.551">4.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 971.948486
+L 362.000000 1006.589478
+L 482.000000 937.307434
+L 422.000000 902.666443
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 383.000000 939.039551 L 401.000000 970.216431 L 405.392297 953.824124 M 401.000000 970.216431 L 384.607693 965.824134 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="959.128">2.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 729.461365
+L 482.000000 694.820312
+L 362.000000 764.102356
+L 422.000000 798.743408
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 461.000000 762.370300 L 443.000000 731.193420 L 438.607703 747.585727 M 443.000000 731.193420 L 459.392307 735.585717 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="743.782">4.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="758.782">3.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 608.217773
+L 632.000000 538.935791
+L 512.000000 469.653748
+L 512.000000 538.935791
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 563.000000 554.524231 L 581.000000 523.347290 L 564.607697 527.739601 M 581.000000 523.347290 L 585.392311 539.739593 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="572" y="535.936">6.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="572" y="550.936">2.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 712.140869
+L 572.000000 746.781860
+L 572.000000 885.345947
+L 632.000000 850.704895
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 620.000000 798.743408 L 584.000000 798.743408 L 596.000000 810.743408 M 584.000000 798.743408 L 596.000000 786.743408 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="803.243">4.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 842.000000 556.256287
+L 842.000000 486.974243
+L 722.000000 417.692200
+L 722.000000 486.974243
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 773.000000 502.562653 L 791.000000 471.385742 L 774.607695 475.778046 M 791.000000 471.385742 L 795.392304 487.778048 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="782" y="491.474">2.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 902.000000 625.538330
+L 842.000000 590.897278
+L 722.000000 660.179321
+L 782.000000 694.820312
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 821.000000 658.447266 L 803.000000 627.270386 L 798.607703 643.662693 M 803.000000 627.270386 L 819.392307 631.662683 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="812" y="647.359">3.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 842.000000 833.384399
+L 782.000000 798.743408
+L 662.000000 868.025391
+L 722.000000 902.666443
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 761.000000 866.293335 L 743.000000 835.116394 L 738.607689 851.508697 M 743.000000 835.116394 L 759.392303 839.508705 " />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="752" y="855.205">2.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 212.000000 123.243530
+L 212.000000 157.884583
+L 242.000000 175.205109
+L 362.000000 105.923096
+L 302.000000 71.282043
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="272" y="127.744">10.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 242.000000 175.205109
+L 212.000000 157.884583
+L 182.000000 175.205109
+L 182.000000 313.769135
+L 242.000000 279.128143
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="212" y="231.667">9.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 122.000000 486.974243
+L 122.000000 521.615234
+L 152.000000 538.935791
+L 272.000000 469.653748
+L 212.000000 435.012695
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="483.974">8.4</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="182" y="498.974">5.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 152.000000 538.935791
+L 122.000000 521.615234
+L 92.000000 538.935791
+L 92.000000 677.499817
+L 152.000000 642.858826
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="122" y="595.397">6.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 123.243530
+L 422.000000 105.923096
+L 422.000000 71.282043
+L 302.000000 2.000000
+L 302.000000 71.282043
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="75.782">7.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 32.000000 850.704895
+L 32.000000 885.345947
+L 62.000000 902.666443
+L 182.000000 833.384399
+L 122.000000 798.743408
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="92" y="847.705">7.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="92" y="862.705">6.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 452.000000 123.243530
+L 422.000000 105.923096
+L 392.000000 123.243530
+L 392.000000 261.807617
+L 452.000000 227.166626
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="172.205">8.2</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="422" y="187.205">6.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 62.000000 902.666443
+L 32.000000 885.345947
+L 2.000000 902.666443
+L 2.000000 1041.230469
+L 62.000000 1006.589478
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="32" y="959.128">7.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 362.000000 383.051208
+L 392.000000 400.371704
+L 422.000000 383.051208
+L 422.000000 244.487152
+L 362.000000 279.128143
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="328.09">5.2</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="392" y="343.09">5.4</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 392.000000 435.012695
+L 392.000000 400.371704
+L 362.000000 383.051208
+L 242.000000 452.333252
+L 302.000000 486.974243
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="424.513">11.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="439.513">4.4</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="332" y="454.513">8.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 422.000000 383.051208
+L 392.000000 400.371704
+L 392.000000 435.012695
+L 512.000000 504.294739
+L 512.000000 435.012695
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="432.013">12.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="452" y="447.013">6.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 272.000000 746.781860
+L 302.000000 764.102356
+L 332.000000 746.781860
+L 332.000000 608.217773
+L 272.000000 642.858826
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="691.82">8.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="302" y="706.82">9.1</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 152.000000 1058.551025
+L 182.000000 1041.230469
+L 182.000000 1006.589478
+L 62.000000 937.307434
+L 62.000000 1006.589478
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="122" y="1011.09">10.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 182.000000 1006.589478
+L 182.000000 1041.230469
+L 212.000000 1058.551025
+L 332.000000 989.268982
+L 272.000000 954.627930
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="242" y="1011.09">9.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 302.000000 798.743408
+L 302.000000 764.102356
+L 272.000000 746.781860
+L 152.000000 816.063904
+L 212.000000 850.704895
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="242" y="795.743">10.1</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="242" y="810.743">5.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 332.000000 746.781860
+L 302.000000 764.102356
+L 302.000000 798.743408
+L 422.000000 868.025391
+L 422.000000 798.743408
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="788.243">7.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="803.243">8.3</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="362" y="818.243">4.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 662.000000 383.051208
+L 692.000000 365.730682
+L 692.000000 331.089661
+L 572.000000 261.807617
+L 572.000000 331.089661
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="632" y="335.59">9.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 722.000000 383.051208
+L 692.000000 365.730682
+L 662.000000 383.051208
+L 662.000000 521.615234
+L 722.000000 486.974243
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="432.013">8.6</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="692" y="447.013">10.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 632.000000 642.858826
+L 662.000000 660.179321
+L 692.000000 642.858826
+L 692.000000 504.294739
+L 632.000000 538.935791
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="662" y="580.397">10.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="662" y="595.397">4.6</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="662" y="610.397">7.2</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 512.000000 954.627930
+L 542.000000 937.307434
+L 542.000000 902.666443
+L 422.000000 833.384399
+L 422.000000 902.666443
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="899.666">5.3</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="482" y="914.666">8.5</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 542.000000 902.666443
+L 542.000000 937.307434
+L 572.000000 954.627930
+L 692.000000 885.345947
+L 632.000000 850.704895
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="907.166">6.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 662.000000 694.820312
+L 662.000000 660.179321
+L 632.000000 642.858826
+L 512.000000 712.140869
+L 572.000000 746.781860
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="691.82">9.0</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="602" y="706.82">9.3</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 692.000000 642.858826
+L 662.000000 660.179321
+L 662.000000 694.820312
+L 782.000000 764.102356
+L 782.000000 694.820312
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="722" y="691.82">10.3</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="722" y="706.82">5.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 932.000000 642.858826
+L 962.000000 625.538330
+L 962.000000 590.897278
+L 842.000000 521.615234
+L 842.000000 590.897278
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="902" y="595.397">9.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 872.000000 850.704895
+L 902.000000 833.384399
+L 902.000000 798.743408
+L 782.000000 729.461365
+L 782.000000 798.743408
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="842" y="795.743">7.3</text>
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="842" y="810.743">6.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 902.000000 798.743408
+L 902.000000 833.384399
+L 932.000000 850.704895
+L 1052.000000 781.422852
+L 992.000000 746.781860
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="962" y="803.243">7.6</text>
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 992.000000 642.858826
+L 962.000000 625.538330
+L 932.000000 642.858826
+L 932.000000 781.422852
+L 992.000000 746.781860
+z" />
+<text style="fill: black; font-family: Sans; font-size: 15; text-anchor: middle; text-align: center; " x="962" y="699.32">10.6</text>
+</svg>
diff --git a/aux/doc/single-F.svg b/aux/doc/single-F.svg
new file mode 100644
index 0000000..1e3c4d3
--- /dev/null
+++ b/aux/doc/single-F.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="66" height="162">
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 2.000000 140.564056
+L 32.000000 157.884567
+L 62.000000 140.564056
+L 62.000000 2.000000
+L 2.000000 36.641014
+z" />
+</svg>
diff --git a/aux/doc/single-H.svg b/aux/doc/single-H.svg
new file mode 100644
index 0000000..e3919dc
--- /dev/null
+++ b/aux/doc/single-H.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="156" height="180">
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 2.000000 157.884567
+L 32.000000 175.205078
+L 152.000000 105.923050
+L 152.000000 71.282021
+L 32.000000 2.000000
+L 2.000000 19.320511
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 32.000000 36.641014 L 77.000000 114.583298 L 81.392305 98.190992 M 77.000000 114.583298 L 60.607695 110.190993 " />
+</svg>
diff --git a/aux/doc/single-P.svg b/aux/doc/single-P.svg
new file mode 100644
index 0000000..2b7159a
--- /dev/null
+++ b/aux/doc/single-P.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="66" height="180">
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 2.000000 175.205093
+L 62.000000 140.564087
+L 62.000000 2.000000
+L 2.000000 36.641037
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 14.000000 88.602562 L 50.000000 88.602554 L 37.999997 76.602557 M 50.000000 88.602554 L 38.000003 100.602557 " />
+</svg>
diff --git a/aux/doc/single-T.svg b/aux/doc/single-T.svg
new file mode 100644
index 0000000..68919bb
--- /dev/null
+++ b/aux/doc/single-T.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="96" height="110">
+<path style="fill: none; stroke: black; stroke-width: 2.000000; stroke-linejoin: round; stroke-linecap: round; " d="M 2.000000 105.923042
+L 92.000000 53.961521
+L 2.000000 2.000000
+z" />
+<path style="fill: none; stroke: black; stroke-width: 9.000000; stroke-opacity: 0.2; stroke-linejoin: round; stroke-linecap: round; " d="M 11.000000 90.334587 L 38.000000 43.569218 L 21.607695 47.961522 M 38.000000 43.569218 L 42.392305 59.961523 " />
+</svg>
diff --git a/aux/hatgen-images.sh b/aux/hatgen-images.sh
new file mode 100755
index 0000000..f3cec4b
--- /dev/null
+++ b/aux/hatgen-images.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# Regenerate all the SVG images in the aux/doc directory for hats.html
+# and hatmap.html.
+
+set -e
+
+hatgen=$1
+
+if ! test -x "$hatgen"; then
+ echo "Provide pathname to hatgen as an argument" >&2
+ exit 1
+fi
+
+for tile in H T P F; do
+ "$hatgen" "$tile" > single-"$tile".svg
+ "$hatgen" c"$tile" > expanded-"$tile".svg
+ "$hatgen" h"$tile" > hats-single-"$tile".svg
+ "$hatgen" H"$tile" > kitemap-"$tile".svg
+ "$hatgen" C"$tile" > metamap-"$tile".svg
+done
+
+"$hatgen" --hat > hat-kites.svg
diff --git a/aux/hatgen.c b/aux/hatgen.c
new file mode 100644
index 0000000..11fb262
--- /dev/null
+++ b/aux/hatgen.c
@@ -0,0 +1,1713 @@
+/*
+ * Generate patches of tiling by the 'hat' aperiodic monotile
+ * discovered in 2023.
+ *
+ * This implementation of hat-tiling generation was intended to be the
+ * basis for generating hat grids for Loopy. However, it turned out
+ * that I found a better strategy, so this source file isn't used by
+ * the main puzzle system. I've kept it anyway because I ended up
+ * adapting it to generate the file hat-tables.h containing the lookup
+ * tables for the algorithm I _did_ end up using. It also generates
+ * diagrams that are useful for understanding that algorithm, and for
+ * debugging it if anything still turns out to be wrong with it.
+ *
+ * Discoverers' website: https://cs.uwaterloo.ca/~csk/hat/
+ * Preprint of paper: https://arxiv.org/abs/2303.10798
+ */
+
+#include <assert.h>
+#include <math.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "puzzles.h"
+#include "tree234.h"
+#include "hat.h"
+
+/*
+ * General strategy:
+ *
+ * We construct the hat tiling by means of a substitution system of
+ * 'metatiles' which come in four types, called H,T,P,F. A (valid)
+ * tiling of these metatiles can be expanded to a larger one by a set
+ * of recursive subdivision rules. Once we have a large enough patch
+ * of metatiles, we apply a final transformation that converts each
+ * metatile into 1, 2 or 4 instances of the aperiodically tiling
+ * 'hat'.
+ *
+ * Unlike the similar substitution system for Penrose tilings, the
+ * expansion rules are not geometrically precise: the larger versions
+ * of each metatile fit together combinatorially in the same way, but
+ * their shapes are distorted slightly. So we must construct our
+ * expanded meta-tiling by breadth-first search out from a starting
+ * metatile, because we won't quite know the coordinates of the
+ * expanded version of each metatile until we know one of the ones
+ * next to it.
+ */
+
+/*
+ * Coordinate system:
+ *
+ * Everything in this code lives on the tiling known to grid.c as
+ * 'Kites', which can be viewed as a tiling of hexagons each of which
+ * is subdivided into six kites sharing their pointy vertex, or
+ * (equivalently) a tiling of equilateral triangles each subdivided
+ * into three kits sharing their blunt vertex.
+ *
+ * We express coordinates in this system relative to the basis (1, r)
+ * where r = (1 + sqrt(3)i) / 2 is a primitive 6th root of unity. This
+ * gives us a system in which two integer coordinates can address any
+ * grid point, provided we scale up so that the side length of the
+ * equilateral triangles in the tiling is 6.
+ */
+
+typedef struct Point {
+ int x, y; /* represents x + yr */
+} Point;
+
+static inline Point left6(Point p)
+{
+ /* r satisfies the equation r^2 = r-1. Hence, multiplying by r
+ * (achieving a rotation anticlockwise by 1/6 turn) transforms
+ * x+yr into xr+yr^2 = xr+y(r-1) = (-y) + (x+y)r.
+ *
+ * It's easy to check that iterating this transformation six times
+ * gives you back the same coordinates you started with. */
+ Point q = { -p.y, p.x + p.y };
+ return q;
+}
+
+static inline Point right6(Point p)
+{
+ /* Conversely, 1/r = 1 - r, so dividing by r turns x+yr into x/r+y
+ * = x(1-r) + y = (x+y) + (-x)r. */
+ Point q = { p.x + p.y, -p.x };
+ return q;
+}
+
+typedef enum MetatileType { MT_H, MT_T, MT_P, MT_F } MetatileType;
+typedef struct Metatile Metatile;
+typedef struct MetaCoord {
+ Metatile *parent;
+ int index;
+} MetaCoord;
+
+struct Metatile {
+ /* Data fields describing the metatile and its position. */
+ MetatileType type;
+ Point start, orientation;
+
+ MetaCoord coords[4];
+ size_t ncoords;
+
+ /* Auxiliary fields used to store the progress of the expansion
+ * algorithm. */
+ bool queued;
+ Metatile *qnext;
+};
+
+#define MT_MAXVERT 6 /* largest number of vertices of any metatile */
+#define MT_MAXVDEGREE 3 /* largest degree of any vertex of a meta-tiling */
+#define MT_MAXEXPAND 13 /* largest number of metatiles in any expansion */
+#define MT_MAXHAT 4 /* largest number of hats in a metatile */
+#define HAT_NVERT 14 /* vertices of a single hat (counting the straight one) */
+#define HAT_NKITE 8 /* kites in a single hat */
+
+static int metatile_cmp(void *av, void *bv)
+{
+ Metatile *a = (Metatile *)av, *b = (Metatile *)bv;
+ if (a->type < b->type) return -1;
+ if (a->type > b->type) return +1;
+ if (a->start.x < b->start.x) return -1;
+ if (a->start.x > b->start.x) return +1;
+ if (a->start.y < b->start.y) return -1;
+ if (a->start.y > b->start.y) return +1;
+ if (a->orientation.x < b->orientation.x) return -1;
+ if (a->orientation.x > b->orientation.x) return +1;
+ if (a->orientation.y < b->orientation.y) return -1;
+ if (a->orientation.y > b->orientation.y) return +1;
+ return 0;
+}
+
+/*
+ * Return the coordinates of the vertices of a metatile, given the
+ * coordinates of the vertex we deem to be distinguished, and a vector
+ * of Euclidean length 1 showing its direction.
+ *
+ * If 'expanded' is true, we instead return the coordinates of the
+ * corresponding vertices of the expanded version of the same
+ * metatile.
+ */
+static size_t metatile_vertices(Metatile m, Point *out, bool expanded)
+{
+ static const Point vertices_H[] = {
+ {0, 0}, {4, -2}, {12, 6}, {10, 10}, {-6, 18}, {-8, 16},
+ };
+ static const Point vertices_T[] = {
+ {0, 0}, {6, 6}, {-6, 12},
+ };
+ static const Point vertices_P[] = {
+ {0, 0}, {4, 4}, {-4, 20}, {-8, 16},
+ };
+ static const Point vertices_F[] = {
+ {0, 0}, {4, -2}, {6, 0}, {-2, 16}, {-6, 12},
+ };
+
+ static const Point expanded_H[] = {
+ {0, 0}, {12, -6}, {30, 12}, {24, 24}, {-12, 42}, {-18, 36},
+ };
+ static const Point expanded_T[] = {
+ {0, 0}, {12, 12}, {-12, 24},
+ };
+ static const Point expanded_P[] = {
+ {0, 0}, {14, 8}, {-4, 44}, {-18, 36},
+ };
+ static const Point expanded_F[] = {
+ {0, 0}, {14, -4}, {18, 6}, {0, 42}, {-14, 34},
+ };
+
+ const Point *vertices;
+ size_t nvertices;
+ size_t i;
+
+ switch (m.type) {
+ case MT_H:
+ vertices = expanded ? expanded_H : vertices_H;
+ nvertices = lenof(vertices_H);
+ break;
+ case MT_T:
+ vertices = expanded ? expanded_T : vertices_T;
+ nvertices = lenof(vertices_T);
+ break;
+ case MT_P:
+ vertices = expanded ? expanded_P : vertices_P;
+ nvertices = lenof(vertices_P);
+ break;
+ default /* case MT_F */:
+ vertices = expanded ? expanded_F : vertices_F;
+ nvertices = lenof(vertices_F);
+ break;
+ }
+ assert(nvertices <= MT_MAXVERT);
+
+ Point orientation_r = left6(m.orientation);
+ for (i = 0; i < nvertices; i++) {
+ Point v = vertices[i];
+ out[i].x = m.start.x + v.x * m.orientation.x + v.y * orientation_r.x;
+ out[i].y = m.start.y + v.x * m.orientation.y + v.y * orientation_r.y;
+ }
+ return nvertices;
+}
+
+/*
+ * Return a list of metatiles that arise from expanding a given tile.
+ */
+static size_t metatile_expand(Metatile m, Metatile *out)
+{
+ static const Metatile tiles_H[] = {
+ {MT_H, {-4, 20}, {1, 0}},
+ {MT_H, {2, 2}, {1, 0}},
+ {MT_H, {8, 26}, {0, -1}},
+ {MT_T, {6, 24}, {-1, 0}},
+ {MT_P, {-8, 16}, {1, 0}},
+ {MT_P, {4, 34}, {0, -1}},
+ {MT_P, {6, 0}, {1, -1}},
+ {MT_F, {-10, 38}, {-1, 1}},
+ {MT_F, {-10, 44}, {0, -1}},
+ {MT_F, {-4, 2}, {1, 0}},
+ {MT_F, {2, 2}, {0, -1}},
+ {MT_F, {26, 14}, {1, 0}},
+ {MT_F, {32, 8}, {-1, 1}},
+ };
+ static const Metatile tiles_T[] = {
+ {MT_H, {10, 10}, {-1, 1}},
+ {MT_P, {-6, 0}, {1, 0}},
+ {MT_P, {8, 14}, {0, 1}},
+ {MT_P, {18, 6}, {-1, 1}},
+ {MT_F, {-14, 34}, {-1, 0}},
+ {MT_F, {-8, -2}, {1, -1}},
+ {MT_F, {22, 4}, {0, 1}},
+ };
+ static const Metatile tiles_P[] = {
+ {MT_H, {4, 22}, {0, 1}},
+ {MT_H, {10, 10}, {-1, 1}},
+ {MT_P, {-6, 0}, {1, 0}},
+ {MT_P, {6, 24}, {1, 0}},
+ {MT_P, {8, 14}, {0, 1}},
+ {MT_F, {-20, 40}, {1, -1}},
+ {MT_F, {-14, 34}, {-1, 0}},
+ {MT_F, {-8, -2}, {1, -1}},
+ {MT_F, {4, 46}, {-1, 1}},
+ {MT_F, {10, 10}, {1, 0}},
+ {MT_F, {16, 4}, {-1, 1}},
+ };
+ static const Metatile tiles_F[] = {
+ {MT_H, {8, 20}, {0, 1}},
+ {MT_H, {14, 8}, {-1, 1}},
+ {MT_P, {10, 22}, {1, 0}},
+ {MT_P, {12, 12}, {0, 1}},
+ {MT_F, {-16, 38}, {1, -1}},
+ {MT_F, {-10, 32}, {-1, 0}},
+ {MT_F, {-4, 2}, {1, 0}},
+ {MT_F, {2, 2}, {0, -1}},
+ {MT_F, {8, 44}, {-1, 1}},
+ {MT_F, {14, 8}, {1, 0}},
+ {MT_F, {20, 2}, {-1, 1}},
+ };
+
+ const Metatile *tiles;
+ size_t ntiles;
+ size_t i;
+
+ switch (m.type) {
+ case MT_H:
+ tiles = tiles_H;
+ ntiles = lenof(tiles_H);
+ break;
+ case MT_T:
+ tiles = tiles_T;
+ ntiles = lenof(tiles_T);
+ break;
+ case MT_P:
+ tiles = tiles_P;
+ ntiles = lenof(tiles_P);
+ break;
+ default /* case MT_F */:
+ tiles = tiles_F;
+ ntiles = lenof(tiles_F);
+ break;
+ }
+ assert(ntiles <= MT_MAXEXPAND);
+
+ Point orientation_r = left6(m.orientation);
+ for (i = 0; i < ntiles; i++) {
+ Metatile t = tiles[i];
+ out[i].type = t.type;
+ out[i].start.x = (m.start.x + t.start.x * m.orientation.x +
+ t.start.y * orientation_r.x);
+ out[i].start.y = (m.start.y + t.start.x * m.orientation.y +
+ t.start.y * orientation_r.y);
+ out[i].orientation.x = (t.orientation.x * m.orientation.x +
+ t.orientation.y * orientation_r.x);
+ out[i].orientation.y = (t.orientation.x * m.orientation.y +
+ t.orientation.y * orientation_r.y);
+ }
+ return ntiles;
+}
+
+/* Store data about each vertex during an expansion. */
+typedef struct VertexMapping {
+ Point in;
+
+ /* Metatiles sharing this vertex */
+ Metatile *tiles[MT_MAXVDEGREE];
+ size_t ntiles;
+
+ /* The expanded coordinates of this vertex, if known */
+ bool mapped;
+ Point out;
+} VertexMapping;
+
+static int vertexmapping_cmp(void *av, void *bv)
+{
+ VertexMapping *a = (VertexMapping *)av, *b = (VertexMapping *)bv;
+ if (a->in.x < b->in.x) return -1;
+ if (a->in.x > b->in.x) return +1;
+ if (a->in.y < b->in.y) return -1;
+ if (a->in.y > b->in.y) return +1;
+ return 0;
+}
+
+static int vertexmapping_find(void *av, void *bv)
+{
+ Point *a = (Point *)av;
+ VertexMapping *b = (VertexMapping *)bv;
+ if (a->x < b->in.x) return -1;
+ if (a->x > b->in.x) return +1;
+ if (a->y < b->in.y) return -1;
+ if (a->y > b->in.y) return +1;
+ return 0;
+}
+
+typedef struct MetatileSet {
+ /* The tiles in the set */
+ tree234 *tiles;
+
+ /*
+ * Bounding box of a rectangular region within the original single
+ * tile this set was expanded from. We need this in order to pick
+ * a random chunk out of the tiling to return to our client: this
+ * box is the limit of where we might select our chunk from.
+ *
+ * The box is obtained by starting from the two obtuse vertices of
+ * the starting P metatile, and then mapping those two vertices
+ * through each expansion pass. This wouldn't work for the _other_
+ * two vertices of the P metatile, which end up in the middle of
+ * another metatile after the first expansion, so that the next
+ * expansion wouldn't find that point in its VertexMapping. But
+ * luckily the two inner P vertices do continue working: they
+ * alternate in subsequent expansions between vertex 1 and vertex
+ * 4 of an F metatile. And those are the ones we need to define a
+ * reliable bounding box - phew!
+ */
+ Point vertices[2];
+ size_t nvertices;
+} MetatileSet;
+
+static MetatileSet *metatile_initial_set(MetatileType type)
+{
+ MetatileSet *s;
+ Metatile *m;
+ Point vertices[MT_MAXVERT];
+ size_t nv;
+
+ s = snew(MetatileSet);
+ s->tiles = newtree234(metatile_cmp);
+
+ m = snew(Metatile);
+ m->type = type;
+ m->start.x = 0;
+ m->start.y = 0;
+ m->orientation.x = 1;
+ m->orientation.y = 0;
+ m->ncoords = 0;
+ add234(s->tiles, m);
+
+ if (type == MT_P) {
+ nv = metatile_vertices(*m, vertices, false);
+ assert(nv == 4);
+ s->vertices[0] = vertices[1];
+ s->vertices[1] = vertices[3];
+ s->nvertices = 2;
+ } else {
+ s->nvertices = 0;
+ }
+
+ return s;
+}
+
+static void metatile_free_set(MetatileSet *s)
+{
+ Metatile *m;
+
+ while ((m = delpos234(s->tiles, 0)) != NULL)
+ sfree(m);
+ freetree234(s->tiles);
+ sfree(s);
+}
+
+typedef struct Queue {
+ Metatile *head, *tail;
+} Queue;
+
+static void map_vertex(VertexMapping *vm, Point out, Queue *queue)
+{
+ size_t i;
+
+ debug(("map_vertex %d,%d -> %d,%d", vm->in.x, vm->in.y, out.x, out.y));
+ if (vm->mapped) {
+ debug((" (already done)\n"));
+ return;
+ }
+ debug(("\n"));
+
+ vm->mapped = true;
+ vm->out = out;
+
+ for (i = 0; i < vm->ntiles; i++) {
+ Metatile *t = vm->tiles[i];
+ if (!t->queued) {
+ t->queued = true;
+ t->qnext = NULL;
+ if (queue->tail)
+ queue->tail->qnext = t;
+ else
+ queue->head = t;
+ queue->tail = t;
+ debug(("queued %c @ %d,%d d=%d,%d\n", "HTPF"[t->type], t->start.x,
+ t->start.y, t->orientation.x, t->orientation.y));
+ }
+ }
+}
+
+/*
+ * Expand a set of metatiles into its next-generation set. Returns the
+ * new set. The old set is not freed, but the auxiliary fields of its
+ * Metatile structures will be used as intermediate storage.
+ */
+static MetatileSet *metatile_set_expand(MetatileSet *si)
+{
+ tree234 *vmap;
+ VertexMapping *vm;
+ Metatile *m;
+ Queue queue = { NULL, NULL };
+ size_t i, j;
+ MetatileSet *so = snew(MetatileSet);
+
+ so->tiles = newtree234(metatile_cmp);
+
+ /*
+ * Enumerate all the vertices in our tiling, and store the set of
+ * tiles they belong to.
+ */
+ vmap = newtree234(vertexmapping_cmp);
+ for (i = 0; (m = index234(si->tiles, i)) != NULL; i++) {
+ Point vertices[MT_MAXVERT];
+ size_t nv = metatile_vertices(*m, vertices, false);
+
+ for (j = 0; j < nv; j++) {
+ VertexMapping *newvm = snew(VertexMapping);
+ newvm->in = vertices[j];
+ newvm->ntiles = 0;
+ newvm->mapped = false;
+
+ vm = add234(vmap, newvm);
+ if (vm != newvm)
+ sfree(newvm);
+
+ assert(vm->ntiles < MT_MAXVDEGREE);
+ vm->tiles[vm->ntiles++] = m;
+ }
+
+ m->queued = false;
+ }
+
+ for (i = 0; (vm = index234(vmap, i)) != NULL; i++) {
+ debug(("vertex @ %d,%d {", vm->in.x, vm->in.y));
+ for (j = 0; j < vm->ntiles; j++) {
+ m = vm->tiles[j];
+ debug(("%s%c @ %d,%d d=%d,%d", j?", ":"", "HTPF"[m->type],
+ m->start.x, m->start.y, m->orientation.x,
+ m->orientation.y));
+ }
+ debug(("}\n"));
+ }
+
+ /*
+ * Initialise an arbitrary vertex to a known location.
+ */
+ {
+ Point p = {0, 0};
+ m = index234(si->tiles, 0);
+ vm = find234(vmap, &m->start, vertexmapping_find);
+ map_vertex(vm, p, &queue);
+ }
+
+ /*
+ * Now process the queue of tiles to be expanded.
+ */
+ debug(("-- start\n"));
+ while (queue.head) {
+ Metatile *m, m_moved;
+ Metatile t[MT_MAXEXPAND];
+ Point vi[MT_MAXVERT], vo[MT_MAXVERT];
+ size_t nv, nt;
+
+ m = queue.head;
+ queue.head = queue.head->qnext;
+ if (!queue.head)
+ queue.tail = NULL;
+
+ debug(("unqueued %c @ %d,%d d=%d,%d\n", "HTPF"[m->type],
+ m->start.x, m->start.y, m->orientation.x, m->orientation.y));
+
+ nv = metatile_vertices(*m, vi, false);
+ metatile_vertices(*m, vo, true);
+
+ /* Find a vertex of this tile that's already mapped, and use
+ * it to determine the placement. */
+ int dx, dy;
+ for (i = 0; i < nv; i++) {
+ vm = find234(vmap, &vi[i], vertexmapping_find);
+ assert(vm);
+ if (vm->mapped) {
+ dx = vm->out.x - vo[i].x;
+ dy = vm->out.y - vo[i].y;
+ debug(("found mapped vertex %d,%d -> %d,%d: "
+ "offset=%d,%d\n",
+ vm->in.x, vm->in.y, vm->out.x, vm->out.y, dx, dy));
+ break;
+ }
+ }
+ assert(i < nv && "Why was this tile queued without a mapped vertex?");
+
+ /* Now map all the rest of the vertices of the tile. */
+ for (i = 0; i < nv; i++) {
+ vm = find234(vmap, &vi[i], vertexmapping_find);
+ vo[i].x += dx;
+ vo[i].y += dy;
+ map_vertex(vm, vo[i], &queue);
+ }
+
+ /* And expand it, substituting in its new starting coordinate. */
+ m_moved = *m; /* structure copy */
+ m_moved.start = vo[0];
+ nt = metatile_expand(m_moved, t);
+ for (i = 0; i < nt; i++) {
+ Metatile *newmt = snew(Metatile);
+ *newmt = t[i]; /* structure copy */
+ newmt->ncoords = 0;
+ debug(("expanded %c @ %d,%d d=%d,%d\n", "HTPF"[newmt->type],
+ newmt->start.x, newmt->start.y, newmt->orientation.x,
+ newmt->orientation.y));
+
+ Metatile *added = add234(so->tiles, newmt);
+ if (added != newmt)
+ sfree(newmt);
+ assert(added->ncoords < lenof(added->coords));
+ added->coords[added->ncoords].parent = m;
+ added->coords[added->ncoords].index = i;
+ added->ncoords++;
+ }
+ }
+
+ for (i = 0; (m = index234(si->tiles, i)) != NULL; i++) {
+ if (!m->queued)
+ debug(("OMITTED %c @ %d,%d d=%d,%d\n", "HTPF"[m->type],
+ m->start.x, m->start.y, m->orientation.x,
+ m->orientation.y));
+ }
+
+ /*
+ * Write out the remapped versions of the tile set's bounding
+ * vertices.
+ */
+ for (i = 0; i < si->nvertices; i++) {
+ vm = find234(vmap, &si->vertices[i], vertexmapping_find);
+ so->vertices[i] = vm->out;
+ }
+ so->nvertices = si->nvertices;
+
+ while ((vm = delpos234(vmap, 0)) != NULL)
+ sfree(vm);
+ freetree234(vmap);
+
+ return so;
+}
+
+typedef struct Hat {
+ Point start, orientation;
+ bool reversed;
+ const Metatile *parent;
+ int index;
+} Hat;
+
+static size_t metatile_hats(const Metatile *m, Hat *out)
+{
+ static const Hat hats_H[] = {
+ {{6, 0}, {1, 0}, false},
+ {{6, 6}, {0, -1}, false},
+ {{0, 12}, {1, 0}, false},
+ {{0, 6}, {-1, 0}, true},
+ };
+ static const Hat hats_T[] = {
+ {{-2, 10}, {-1, 1}, false},
+ };
+ static const Hat hats_P[] = {
+ {{-2, 10}, {-1, 1}, false},
+ {{-2, 16}, {0, 1}, false},
+ };
+ static const Hat hats_F[] = {
+ {{0, 6}, {-1, 1}, false},
+ {{0, 12}, {0, 1}, false},
+ };
+
+ const Hat *hats;
+ size_t nhats;
+ size_t i;
+
+ switch (m->type) {
+ case MT_H:
+ hats = hats_H;
+ nhats = lenof(hats_H);
+ break;
+ case MT_T:
+ hats = hats_T;
+ nhats = lenof(hats_T);
+ break;
+ case MT_P:
+ hats = hats_P;
+ nhats = lenof(hats_P);
+ break;
+ default /* case MT_F */:
+ hats = hats_F;
+ nhats = lenof(hats_F);
+ break;
+ }
+ assert(nhats <= MT_MAXHAT);
+
+ Point orientation_r = left6(m->orientation);
+ for (i = 0; i < nhats; i++) {
+ Hat h = hats[i];
+ out[i].parent = m;
+ out[i].index = i;
+ out[i].start.x = (m->start.x + h.start.x * m->orientation.x +
+ h.start.y * orientation_r.x);
+ out[i].start.y = (m->start.y + h.start.x * m->orientation.y +
+ h.start.y * orientation_r.y);
+ out[i].orientation.x = (h.orientation.x * m->orientation.x +
+ h.orientation.y * orientation_r.x);
+ out[i].orientation.y = (h.orientation.x * m->orientation.y +
+ h.orientation.y * orientation_r.y);
+ out[i].reversed = h.reversed;
+ }
+ return nhats;
+}
+
+static size_t hat_vertices(Hat h, Point *out)
+{
+ static const Point reference_hat[] = {
+ {0, 0}, {3, 0}, {2, 2}, {0, 3}, {-2, 4}, {-3, 3}, {-6, 6}, {-9, 6},
+ {-8, 4}, {-6, 3}, {-6, 0}, {-3, -3}, {-2, -2}, {0, -3},
+ };
+
+ size_t i;
+
+ Point orientation_r;
+ if (h.reversed)
+ orientation_r = right6(h.orientation);
+ else
+ orientation_r = left6(h.orientation);
+ assert(lenof(reference_hat) == HAT_NVERT);
+
+ for (i = 0; i < lenof(reference_hat); i++) {
+ Point v = reference_hat[h.reversed ? HAT_NVERT-1-i : i];
+ out[i].x = h.start.x + v.x * h.orientation.x + v.y * orientation_r.x;
+ out[i].y = h.start.y + v.x * h.orientation.y + v.y * orientation_r.y;
+ }
+ return lenof(reference_hat);
+}
+
+typedef struct BoundingBox {
+ Point bl, tr;
+} BoundingBox;
+
+static bool point_in_bbox(Point p, const BoundingBox *bbox)
+{
+ int xl, xr, x;
+
+ if (!bbox)
+ return true;
+
+ /*
+ * Bounding boxes have vertical edges, not aligned with our basis
+ * vector r. So the 'true' x coordinate of (x,y) is proportional
+ * to 2x+y.
+ */
+ if (p.y < bbox->bl.y || p.y > bbox->tr.y)
+ return false;
+
+ xl = 2*bbox->bl.x + bbox->bl.y;
+ xr = 2*bbox->tr.x + bbox->tr.y;
+ x = 2*p.x + p.y;
+
+ if (x < xl || x > xr)
+ return false;
+
+ return true;
+}
+
+static bool hat_in_bbox(Hat h, const BoundingBox *bbox)
+{
+ Point p[HAT_NVERT];
+ size_t i, np;
+
+ if (!bbox)
+ return true;
+
+ np = hat_vertices(h, p);
+ for (i = 0; i < np; i++)
+ if (!point_in_bbox(p[i], bbox))
+ return false;
+
+ return true;
+}
+
+static Hat *metatile_set_to_hats(MetatileSet *s, size_t *nhats,
+ const BoundingBox *bbox)
+{
+ Metatile *m;
+ size_t i, j, k, n;
+ Hat *h;
+
+ n = 0;
+ for (i = 0; (m = index234(s->tiles, i)) != NULL; i++) {
+ Hat htmp[MT_MAXHAT];
+ size_t nthis = metatile_hats(m, htmp);
+ for (k = 0; k < nthis; k++)
+ if (hat_in_bbox(htmp[k], bbox))
+ n++;
+ }
+
+ *nhats = n;
+ h = snewn(n, Hat);
+
+ j = 0;
+ for (i = 0; (m = index234(s->tiles, i)) != NULL; i++) {
+ Hat htmp[MT_MAXHAT];
+ size_t nthis = metatile_hats(m, htmp);
+ for (k = 0; k < nthis; k++) {
+ if (hat_in_bbox(htmp[k], bbox)) {
+ assert(j < n);
+ h[j++] = htmp[k]; /* structure copy */
+ }
+ }
+ }
+
+ assert(j == n);
+ return h;
+}
+
+#if 0
+void hat_tiling_randomise(struct HatPatchParams *params, random_state *rs)
+{
+ MetatileSet *s, *s2;
+ int x0, x1, y0, y1;
+
+ /*
+ * Iterate until we have a good-sized patch to select a rectangle
+ * from.
+ */
+ s = metatile_initial_set(MT_P);
+ params->iterations = 0;
+
+ while (true) {
+ x0 = 2 * s->vertices[0].x + s->vertices[0].y;
+ x1 = 2 * s->vertices[1].x + s->vertices[1].y;
+ if (x1 < x0) {
+ int t = x1;
+ x1 = x0;
+ x0 = t;
+ }
+ y0 = s->vertices[0].y;
+ y1 = s->vertices[1].y;
+ if (y1 < y0) {
+ int t = y1;
+ y1 = y0;
+ y0 = t;
+ }
+
+ if (50*params->w <= x1-x0 && 50*params->h <= y1-y0)
+ break;
+
+ params->iterations++;
+ s2 = metatile_set_expand(s);
+ metatile_free_set(s);
+ s = s2;
+ }
+
+ /*
+ * Now select that rectangle.
+ */
+ params->x = x0 + random_upto(rs, x1 - x0 - params->w + 1);
+ params->y = y0 + random_upto(rs, y1 - y0 - params->h + 1);
+}
+
+void hat_tiling_generate(struct HatPatchParams *params,
+ hat_tile_callback_fn cb, void *cbctx)
+{
+ MetatileSet *s, *s2;
+ unsigned i;
+ size_t j, nh;
+ BoundingBox bbox;
+ Hat *hats;
+
+ s = metatile_initial_set(MT_P);
+ for (i = 0; i < params->iterations; i++) {
+ s2 = metatile_set_expand(s);
+ metatile_free_set(s);
+ s = s2;
+ }
+
+ bbox.bl.x = (params->x - params->y) / 2;
+ bbox.tr.x = ((params->x + params->w) - (params->y + params->h)) / 2;
+ bbox.bl.y = params->y;
+ bbox.tr.y = params->y + params->h;
+ hats = metatile_set_to_hats(s, &nh, &bbox);
+ for (j = 0; j < nh; j++) {
+ Point vertices[HAT_NVERT];
+ size_t nv = hat_vertices(hats[j], vertices);
+ int out[2 * HAT_NVERT];
+ size_t k;
+
+ for (k = 0; k < nv; k++) {
+ out[2*k] = 2 * vertices[k].x + vertices[k].y;
+ out[2*k+1] = vertices[k].y;
+ }
+
+ cb(cbctx, nv, out);
+ }
+ sfree(hats);
+
+ metatile_free_set(s);
+}
+
+#endif
+
+#ifdef TEST_HAT
+
+/*
+ * Assortment of test modes that output Postscript diagrams.
+ */
+
+static size_t hat_kite_centres(Hat h, Point *out)
+{
+ static const Point reference_hat[] = {
+ {-7,5},{-5,4},{-5,1},{-4,-1},{-1,-1},{-2,1},{-1,2},{1,1},
+ };
+
+ size_t i;
+
+ Point orientation_r;
+ if (h.reversed)
+ orientation_r = right6(h.orientation);
+ else
+ orientation_r = left6(h.orientation);
+ assert(lenof(reference_hat) == HAT_NKITE);
+
+ for (i = 0; i < lenof(reference_hat); i++) {
+ Point v = reference_hat[i];
+ out[i].x = h.start.x + v.x * h.orientation.x + v.y * orientation_r.x;
+ out[i].y = h.start.y + v.x * h.orientation.y + v.y * orientation_r.y;
+ }
+ return lenof(reference_hat);
+}
+
+static inline int round6(int x)
+{
+ int sign = x<0 ? -1 : +1;
+ x *= sign;
+ x += 3;
+ x /= 6;
+ x *= 6;
+ x *= sign;
+ return x;
+}
+
+static inline Point kite_left(Point k)
+{
+ Point centre = { round6(k.x), round6(k.y) };
+ Point offset = { k.x - centre.x, k.y - centre.y };
+ offset = left6(offset);
+ Point r = { centre.x + offset.x, centre.y + offset.y };
+ return r;
+}
+
+static inline Point kite_right(Point k)
+{
+ Point centre = { round6(k.x), round6(k.y) };
+ Point offset = { k.x - centre.x, k.y - centre.y };
+ offset = right6(offset);
+ Point r = { centre.x + offset.x, centre.y + offset.y };
+ return r;
+}
+
+static inline Point kite_forward_left(Point k)
+{
+ Point centre = { round6(k.x), round6(k.y) };
+ Point offset = { k.x - centre.x, k.y - centre.y };
+ Point rotate = left6(offset);
+ Point r = { k.x + rotate.x + offset.x, k.y + rotate.y + offset.y };
+ return r;
+}
+
+static inline Point kite_forward_right(Point k)
+{
+ Point centre = { round6(k.x), round6(k.y) };
+ Point offset = { k.x - centre.x, k.y - centre.y };
+ Point rotate = right6(offset);
+ Point r = { k.x + rotate.x + offset.x, k.y + rotate.y + offset.y };
+ return r;
+}
+
+typedef struct pspoint {
+ float x, y;
+} pspoint;
+
+static inline pspoint pscoords(Point p)
+{
+ pspoint q = { p.x + p.y / 2.0F, p.y * sqrt(0.75) };
+ return q;
+}
+
+typedef struct psbbox {
+ bool started;
+ pspoint bl, tr;
+} psbbox;
+
+static inline void psbbox_add(psbbox *bbox, pspoint p)
+{
+ if (!bbox->started || bbox->bl.x > p.x)
+ bbox->bl.x = p.x;
+ if (!bbox->started || bbox->tr.x < p.x)
+ bbox->tr.x = p.x;
+ if (!bbox->started || bbox->bl.y > p.y)
+ bbox->bl.y = p.y;
+ if (!bbox->started || bbox->tr.y < p.y)
+ bbox->tr.y = p.y;
+ bbox->started = true;
+}
+
+static void draw_metatiles_svg(const Metatile *tiles, size_t n,
+ const Point *bounds, bool coords)
+{
+ size_t i, j;
+ psbbox bbox = { false };
+
+ for (i = 0; i < n; i++) {
+ Point vertices[MT_MAXVERT];
+ size_t nv = metatile_vertices(tiles[i], vertices, false);
+ for (j = 0; j < nv; j++)
+ psbbox_add(&bbox, pscoords(vertices[j]));
+ }
+
+ float ascale = 10, xscale = ascale, yscale = -ascale;
+ float border = 0.2 * ascale; /* leave room for strokes at the edges */
+ float ox = -xscale * bbox.bl.x + border;
+ float oy = -yscale * bbox.tr.y + border;
+
+ printf("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n");
+ printf("<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" "
+ "width=\"%g\" height=\"%g\">\n",
+ ceil(ox + xscale * bbox.tr.x + 2*border),
+ ceil(oy + yscale * bbox.bl.y + 2*border));
+
+ for (i = 0; i < n; i++) {
+ Point vertices[MT_MAXVERT];
+ size_t nv = metatile_vertices(tiles[i], vertices, false);
+ pspoint pp[MT_MAXVERT];
+
+ for (j = 0; j < nv; j++) {
+ pp[j] = pscoords(vertices[j]);
+ pp[j].x = ox + xscale * pp[j].x;
+ pp[j].y = oy + yscale * pp[j].y;
+ }
+
+ printf("<path style=\""
+ "fill: none; "
+ "stroke: black; "
+ "stroke-width: %f; "
+ "stroke-linejoin: round; "
+ "stroke-linecap: round; "
+ "\" d=\"", 0.2 * ascale);
+ for (j = 0; j < nv; j++)
+ printf("%s %f %f \n", j ? "L" : "M", pp[j].x, pp[j].y);
+ printf("z\" />\n");
+
+ if (tiles[i].type != MT_F) {
+ /*
+ * Mark arrows on three of the metatile types (H, T, P),
+ * following the diagrams in the paper. (The metatile
+ * shapes other than F each have some symmetry, but their
+ * roles in the metatile substitution system are not
+ * similarly symmetric, so for diagnostic diagrams you
+ * want to mark their orientation.)
+ */
+ pspoint lstart, lend;
+ pspoint astart, aend, aforward, aleft;
+ double d;
+
+ /*
+ * Determine endpoints of a line crossing the polygon in
+ * the appropriate direction, by case analysis on the
+ * individual tile types.
+ */
+ switch (tiles[i].type) {
+ case MT_H:
+ lstart.x = (pp[4].x + pp[5].x) / 2;
+ lstart.y = (pp[4].y + pp[5].y) / 2;
+ lend.x = (pp[1].x + pp[2].x) / 2;
+ lend.y = (pp[1].y + pp[2].y) / 2;
+ break;
+ case MT_T:
+ lstart = pp[0];
+ lend.x = (pp[1].x + pp[2].x) / 2;
+ lend.y = (pp[1].y + pp[2].y) / 2;
+ break;
+ default /* case MT_P */:
+ lstart.x = (5*pp[3].x + 3*pp[0].x) / 8;
+ lstart.y = (5*pp[3].y + 3*pp[0].y) / 8;
+ lend.x = (5*pp[1].x + 3*pp[2].x) / 8;
+ lend.y = (5*pp[1].y + 3*pp[2].y) / 8;
+ break;
+ }
+
+ /*
+ * Now shorten that line a little and give it an arrowhead.
+ */
+ astart.x = (4 * lstart.x + lend.x) / 5;
+ astart.y = (4 * lstart.y + lend.y) / 5;
+ aend.x = (lstart.x + 4 * lend.x) / 5;
+ aend.y = (lstart.y + 4 * lend.y) / 5;
+ aforward.x = aend.x - astart.x;
+ aforward.y = aend.y - astart.y;
+ d = sqrt(aforward.x*aforward.x + aforward.y*aforward.y);
+ aforward.x /= d;
+ aforward.y /= d;
+ aleft.x = -aforward.y;
+ aleft.y = +aforward.x;
+
+ printf("<path style=\""
+ "fill: none; "
+ "stroke: black; "
+ "stroke-width: %f; "
+ "stroke-opacity: 0.2; "
+ "stroke-linejoin: round; "
+ "stroke-linecap: round; "
+ "\" d=\"", 0.9 * ascale);
+
+ printf("M %f %f L %f %f ", astart.x, astart.y,
+ aend.x, aend.y);
+ printf("L %f %f ",
+ aend.x - 1.2 * ascale * (aforward.x + aleft.x),
+ aend.y - 1.2 * ascale * (aforward.y + aleft.y));
+ printf("M %f %f L %f %f ", aend.x, aend.y,
+ aend.x - 1.2 * ascale * (aforward.x - aleft.x),
+ aend.y - 1.2 * ascale * (aforward.y - aleft.y));
+ printf("\" />\n");
+ }
+
+ if (coords) {
+ /*
+ * Print each tile's coordinates.
+ */
+ pspoint centre;
+ size_t j;
+
+ switch (tiles[i].type) {
+ case MT_H:
+ centre.x = (pp[0].x + pp[2].x + pp[4].x) / 3;
+ centre.y = (pp[0].y + pp[2].y + pp[4].y) / 3;
+ break;
+ case MT_T:
+ centre.x = (pp[0].x + pp[1].x + pp[2].x) / 3;
+ centre.y = (pp[0].y + pp[1].y + pp[2].y) / 3;
+ break;
+ case MT_P:
+ centre.x = (pp[0].x + pp[2].x) / 2;
+ centre.y = (pp[0].y + pp[2].y) / 2;
+ break;
+ default /* case MT_F */:
+ centre.x = (pp[2].x + pp[4].x) / 2;
+ centre.y = (pp[2].y + pp[4].y) / 2;
+ break;
+ }
+
+ double lineheight = ascale * 1.5;
+ double charheight = lineheight * 0.6; /* close enough */
+ double allheight = lineheight * (tiles[i].ncoords-1) + charheight;
+
+ for (j = 0; j < tiles[i].ncoords; j++) {
+ const Metatile *it;
+ unsigned cindex;
+
+ printf("<text style=\""
+ "fill: black; "
+ "font-family: Sans; "
+ "font-size: %g; "
+ "text-anchor: middle; "
+ "text-align: center; "
+ "\" x=\"%g\" y=\"%g\">", lineheight,
+ centre.x,
+ centre.y - allheight/2 + charheight + lineheight*j);
+
+ it = &tiles[i];
+ cindex = j;
+ while (cindex < it->ncoords) {
+ if (it != &tiles[i])
+ printf(".");
+ printf("%d", (int)it->coords[cindex].index);
+
+ it = it->coords[cindex].parent;
+ cindex = 0; /* BODGING AHOY */
+ }
+
+ printf("</text>\n");
+ }
+ }
+
+ }
+
+ printf("</svg>\n");
+}
+
+static void draw_metatile_set_svg(
+ MetatileSet *tiles, const Point *bounds, bool coords)
+{
+ /*
+ * Slurp the tree234 of tiles into an array for display.
+ * Tedious, but this test code doesn't have to be particularly
+ * efficient.
+ */
+ size_t nt = count234(tiles->tiles);
+ Metatile *t = snewn(nt, Metatile);
+ size_t i;
+ for (i = 0; i < nt; i++) {
+ Metatile *m = index234(tiles->tiles, i);
+ t[i] = *m; /* structure copy */
+ }
+ draw_metatiles_svg(t, nt, bounds, coords);
+ sfree(t);
+}
+
+static void draw_hats_svg(const Hat *hats, size_t n,
+ const Point *bounds, bool kites, char coordtype)
+{
+ size_t i, j;
+ psbbox bbox = { false };
+
+ for (i = 0; i < n; i++) {
+ Point vertices[HAT_NVERT];
+ size_t nv = hat_vertices(hats[i], vertices);
+ for (j = 0; j < nv; j++)
+ psbbox_add(&bbox, pscoords(vertices[j]));
+ }
+
+ float ascale = (coordtype == 'k' || coordtype == 'K' ? 20 : 10);
+ float xscale = ascale, yscale = -ascale;
+ float border = 0.2 * ascale; /* leave room for strokes at the edges */
+ float ox = -xscale * bbox.bl.x + border;
+ float oy = -yscale * bbox.tr.y + border;
+
+ printf("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n");
+ printf("<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" "
+ "width=\"%g\" height=\"%g\">\n",
+ ceil(ox + xscale * bbox.tr.x + 2*border),
+ ceil(oy + yscale * bbox.bl.y + 2*border));
+
+ for (i = 0; i < n; i++) {
+ Point vertices[HAT_NVERT];
+ pspoint psvs[HAT_NVERT];
+ size_t nv = hat_vertices(hats[i], vertices);
+ int is = hats[i].reversed ? -1 : +1;
+ int io = hats[i].reversed ? 13 : 0;
+
+ printf("<path style=\""
+ "fill: %s; "
+ "stroke: black; "
+ "stroke-width: %f; "
+ "stroke-linejoin: round; "
+ "stroke-linecap: round; "
+ "\" d=\"",
+ hats[i].reversed ? "rgba(0,0,0,0.2)" : "none",
+ 0.2 * ascale);
+ for (j = 0; j < nv; j++) {
+ psvs[j] = pscoords(vertices[j]);
+ printf("%s %f %f\n", j ? "L" : "M",
+ ox + xscale * psvs[j].x, oy + yscale * psvs[j].y);
+ }
+ printf("z\" />\n");
+
+ if (kites) {
+ /*
+ * Draw internal lines within each hat dividing it into
+ * kites. This is done in a rather bodgy way, sorry.
+ */
+ const char *fmt = "<path style=\""
+ "fill: none; "
+ "stroke: rgba(0,0,0,0.2); "
+ "stroke-width: %f; "
+ "stroke-linejoin: round; "
+ "stroke-linecap: round; "
+ "\" d=\"M %f %f L %f %f\" />\n";
+ float strokewidth = 0.1 * ascale;
+
+ printf(fmt, strokewidth,
+ ox + xscale * psvs[io+is*0].x,
+ oy + yscale * psvs[io+is*0].y,
+ ox + xscale * psvs[io+is*3].x,
+ oy + yscale * psvs[io+is*3].y);
+
+ printf(fmt, strokewidth,
+ ox + xscale * psvs[io+is*0].x,
+ oy + yscale * psvs[io+is*0].y,
+ ox + xscale * psvs[io+is*5].x,
+ oy + yscale * psvs[io+is*5].y);
+
+ printf(fmt, strokewidth,
+ ox + xscale * psvs[io+is*6].x,
+ oy + yscale * psvs[io+is*6].y,
+ ox + xscale * psvs[io+is*9].x,
+ oy + yscale * psvs[io+is*9].y);
+
+ printf(fmt, strokewidth,
+ ox + xscale * psvs[io+is*0].x,
+ oy + yscale * psvs[io+is*0].y,
+ ox + xscale * psvs[io+is*10].x,
+ oy + yscale * psvs[io+is*10].y);
+
+ printf(fmt, strokewidth,
+ ox + xscale * psvs[io+is*9].x,
+ oy + yscale * psvs[io+is*9].y,
+ ox + xscale * (psvs[io+is*6].x + psvs[io+is*12].x) / 2,
+ oy + yscale * (psvs[io+is*6].y + psvs[io+is*12].y) / 2);
+
+ printf(fmt, strokewidth,
+ ox + xscale * psvs[io+is*5].x,
+ oy + yscale * psvs[io+is*5].y,
+ ox + xscale * (psvs[io+is*6].x + psvs[io+is*12].x) / 2,
+ oy + yscale * (psvs[io+is*6].y + psvs[io+is*12].y) / 2);
+
+ printf(fmt, strokewidth,
+ ox + xscale * psvs[io+is*12].x,
+ oy + yscale * psvs[io+is*12].y,
+ ox + xscale * (psvs[io+is*6].x + psvs[io+is*12].x) / 2,
+ oy + yscale * (psvs[io+is*6].y + psvs[io+is*12].y) / 2);
+ }
+
+ if (coordtype == 'h') {
+ double lineheight = ascale * 2;
+ double charheight = lineheight * 0.6; /* close enough */
+
+ printf("<text style=\""
+ "fill: black; "
+ "font-family: Sans; "
+ "font-size: %gpx; "
+ "text-anchor: middle; "
+ "text-align: center; "
+ "\" x=\"%g\" y=\"%g\">", lineheight,
+ ox + xscale * (psvs[io+is*0].x + psvs[io+is*10].x) / 2,
+ oy + yscale * (psvs[io+is*0].y + psvs[io+is*10].y) / 2
+ + charheight/2);
+ printf("%d", (int)i);
+ printf("</text>\n");
+ } else if (coordtype == 'k') {
+ Point kites[HAT_NKITE];
+ size_t nk = hat_kite_centres(hats[i], kites);
+
+ double lineheight = ascale * 0.5;
+ double charheight = lineheight * 0.6; /* close enough */
+
+ for (j = 0; j < nk; j++) {
+ pspoint p = pscoords(kites[j]);
+
+ printf("<text style=\""
+ "fill: black; "
+ "font-family: Sans; "
+ "font-size: %gpx; "
+ "text-anchor: middle; "
+ "text-align: center; "
+ "\" x=\"%g\" y=\"%g\">", lineheight,
+ ox + xscale * p.x,
+ oy + yscale * p.y + charheight/2);
+
+ printf("%d.%d.%d", (int)j, hats[i].index,
+ hats[i].parent->coords[0].index);
+
+ printf("</text>\n");
+ }
+ } else if (coordtype == 'K') {
+ Point kites[HAT_NKITE];
+ size_t nk = hat_kite_centres(hats[i], kites);
+
+ double lineheight = ascale * 1.1;
+ double charheight = lineheight * 0.6; /* close enough */
+
+ for (j = 0; j < nk; j++) {
+ pspoint p = pscoords(kites[j]);
+
+ printf("<text style=\""
+ "fill: black; "
+ "font-family: Sans; "
+ "font-size: %gpx; "
+ "text-anchor: middle; "
+ "text-align: center; "
+ "\" x=\"%g\" y=\"%g\">", lineheight,
+ ox + xscale * p.x,
+ oy + yscale * p.y + charheight/2);
+ printf("%d", (int)j);
+ printf("</text>\n");
+ }
+ }
+ }
+
+ printf("</svg>\n");
+}
+
+typedef enum KiteStep { KS_LEFT, KS_RIGHT, KS_F_LEFT, KS_F_RIGHT } KiteStep;
+
+static inline Point kite_step(Point k, KiteStep step)
+{
+ switch (step) {
+ case KS_LEFT: return kite_left(k);
+ case KS_RIGHT: return kite_right(k);
+ case KS_F_LEFT: return kite_forward_left(k);
+ default /* case KS_F_RIGHT */: return kite_forward_right(k);
+ }
+}
+
+int main(int argc, char **argv)
+{
+ if (argc <= 1) {
+ printf("usage: hat-test <mode>\n");
+ printf("modes: H,T,P,F display a single unexpanded tile\n");
+ printf(" xH,xT,xP,xF display the expansion of one tile\n");
+ printf(" cH,cT,cP,cF display expansion with tile coords\n");
+ printf(" CH,CT,CP,CF display double expansion with coords\n");
+ printf(" hH,hT,hP,hF display the hats from one tile\n");
+ printf(" HH,HT,HP,HF hats from an expansion, with coords\n");
+ printf(" m1, m2, ... nth expansion of one H metatile\n");
+ printf(" M1, M2, ... nth expansion turned into real hats\n");
+ printf(" --hat show the kites in a single hat\n");
+ printf(" --tables generate hat-tables.h for hat.c\n");
+ return 0;
+ }
+
+ if (!strcmp(argv[1], "H") || !strcmp(argv[1], "T") ||
+ !strcmp(argv[1], "P") || !strcmp(argv[1], "F")) {
+ MetatileType type = (argv[1][0] == 'H' ? MT_H :
+ argv[1][0] == 'T' ? MT_T :
+ argv[1][0] == 'P' ? MT_P : MT_F);
+ Metatile m = {type, {0, 0}, {1, 0}};
+ draw_metatiles_svg(&m, 1, NULL, false);
+ return 0;
+ }
+
+ if (!strcmp(argv[1], "xH") || !strcmp(argv[1], "xT") ||
+ !strcmp(argv[1], "xP") || !strcmp(argv[1], "xF")) {
+ MetatileType type = (argv[1][1] == 'H' ? MT_H :
+ argv[1][1] == 'T' ? MT_T :
+ argv[1][1] == 'P' ? MT_P : MT_F);
+ Metatile m = {type, {0, 0}, {1, 0}};
+ Metatile t[MT_MAXEXPAND];
+ size_t nt = metatile_expand(m, t);
+ draw_metatiles_svg(t, nt, NULL, false);
+ return 0;
+ }
+
+ if (argv[1][0] && argv[1][1] &&
+ strchr("cC", argv[1][0]) && strchr("HTPF", argv[1][1])) {
+ MetatileType type = (argv[1][1] == 'H' ? MT_H :
+ argv[1][1] == 'T' ? MT_T :
+ argv[1][1] == 'P' ? MT_P : MT_F);
+ MetatileSet *t[3];
+ int nsets = (argv[1][0] == 'c' ? 2 : 3);
+ int i;
+
+ t[0] = metatile_initial_set(type);
+ for (i = 1; i < nsets; i++)
+ t[i] = metatile_set_expand(t[i-1]);
+ draw_metatile_set_svg(t[nsets-1], NULL, true);
+ for (i = 0; i < nsets; i++)
+ metatile_free_set(t[i]);
+ return 0;
+ }
+
+ if (!strcmp(argv[1], "hH") || !strcmp(argv[1], "hT") ||
+ !strcmp(argv[1], "hP") || !strcmp(argv[1], "hF")) {
+ MetatileType type = (
+ !strcmp(argv[1], "hH") ? MT_H :
+ !strcmp(argv[1], "hT") ? MT_T :
+ !strcmp(argv[1], "hP") ? MT_P : MT_F);
+ Metatile m = {type, {0, 0}, {1, 0}};
+ Hat h[MT_MAXHAT];
+ size_t nh = metatile_hats(&m, h);
+ draw_hats_svg(h, nh, NULL, false, 'h');
+ return 0;
+ }
+
+ if (!strcmp(argv[1], "--hat")) {
+ Hat h = { { 0, 0 }, { 1, 0 }, false, NULL, 0 };
+ draw_hats_svg(&h, 1, NULL, true, 'K');
+ return 0;
+ }
+
+ if (argv[1][0] == 'H' && argv[1][1] && strchr("HTPF", argv[1][1])) {
+ MetatileType type = (argv[1][1] == 'H' ? MT_H :
+ argv[1][1] == 'T' ? MT_T :
+ argv[1][1] == 'P' ? MT_P : MT_F);
+ MetatileSet *t[2];
+ size_t i, nh;
+
+ t[0] = metatile_initial_set(type);
+ t[1] = metatile_set_expand(t[0]);
+ Hat *h = metatile_set_to_hats(t[1], &nh, NULL);
+ draw_hats_svg(h, nh, NULL, true, 'k');
+ sfree(h);
+ for (i = 0; i < 2; i++)
+ metatile_free_set(t[i]);
+ return 0;
+ }
+
+ if (argv[1][0] == 'm' || argv[1][0] == 'M') {
+ int niter = atoi(argv[1] + 1);
+ MetatileSet *tiles = metatile_initial_set(MT_P);
+
+ while (niter-- > 0) {
+ MetatileSet *t2 = metatile_set_expand(tiles);
+ metatile_free_set(tiles);
+ tiles = t2;
+ }
+
+ if (argv[1][0] == 'M') {
+ size_t nh;
+ Hat *h = metatile_set_to_hats(tiles, &nh, NULL);
+ draw_hats_svg(h, nh, tiles->vertices, false, 0);
+ sfree(h);
+ } else {
+ draw_metatile_set_svg(tiles, tiles->vertices, false);
+ }
+
+ metatile_free_set(tiles);
+
+ return 0;
+ }
+
+ if (!strcmp(argv[1], "--tables")) {
+ size_t i, j, k;
+
+ printf("/*\n"
+ " * Header file autogenerated by aux/hatgen.c\n"
+ " *\n"
+ " * To regenerate, run 'hatgen --tables > hat-tables.h'\n"
+ " */\n\n");
+
+ static const char HTPF[] = "HTPF";
+
+ printf("static const unsigned hats_in_metatile[] = {");
+ for (i = 0; i < 4; i++) {
+ Metatile m = {i, {0, 0}, {1, 0}};
+ Hat h[MT_MAXHAT];
+ size_t nh = metatile_hats(&m, h);
+ printf(" %zu,", nh);
+ }
+ printf(" };\n\n");
+
+ {
+ struct Parent {
+ MetatileType t;
+ unsigned index;
+ } parents[4][4*MT_MAXEXPAND];
+ size_t psizes[4] = {0, 0, 0, 0};
+ size_t csizes[4] = {0, 0, 0, 0};
+
+ for (i = 0; i < 4; i++) {
+ Metatile m = {i, {0, 0}, {1, 0}};
+ Metatile t[MT_MAXEXPAND];
+ size_t nt = metatile_expand(m, t);
+
+ printf("static const TileType children_%c[] = {\n"
+ " ", HTPF[i]);
+ for (j = 0; j < nt; j++) {
+ MetatileType c = t[j].type;
+ parents[c][psizes[c]].t = i;
+ parents[c][psizes[c]].index = j;
+ psizes[c]++;
+ csizes[i]++;
+ printf(" TT_%c,", HTPF[c]);
+ }
+ printf("\n};\n");
+ }
+
+ printf("static const TileType *const children[] = {\n");
+ for (i = 0; i < 4; i++)
+ printf(" children_%c,\n", HTPF[i]);
+ printf("};\n");
+ printf("static const size_t nchildren[] = {\n");
+ for (i = 0; i < 4; i++)
+ printf(" %u,\n", (unsigned)csizes[i]);
+ printf("};\n\n");
+
+ for (i = 0; i < 4; i++) {
+ printf("static const MetatilePossibleParent "
+ "permitted_parents_%c[] = {\n", HTPF[i]);
+ for (j = 0; j < psizes[i]; j++)
+ printf(" { TT_%c, %u },\n", HTPF[parents[i][j].t],
+ parents[i][j].index);
+ printf("};\n");
+ }
+
+ printf("static const MetatilePossibleParent *const "
+ "permitted_parents[] = {\n");
+ for (i = 0; i < 4; i++)
+ printf(" permitted_parents_%c,\n", HTPF[i]);
+ printf("};\n");
+
+ printf("static const size_t n_permitted_parents[] = {\n");
+ for (i = 0; i < 4; i++)
+ printf(" %u,\n", (unsigned)psizes[i]);
+ printf("};\n\n");
+ }
+
+ {
+ for (i = 0; i < 4; i++) {
+ MetatileSet *t[2];
+ size_t j, k, nh, nmeta, ti;
+ struct list {
+ Point kite;
+ unsigned ik, ih, im;
+ } list[8*MT_MAXHAT*MT_MAXEXPAND];
+ size_t len = 0;
+
+ t[0] = metatile_initial_set(i);
+ t[1] = metatile_set_expand(t[0]);
+ Hat *h = metatile_set_to_hats(t[1], &nh, NULL);
+
+ printf("static const KitemapEntry kitemap_%c[] = {\n",
+ HTPF[i]);
+
+ Point origin = h[0].start;
+ for (j = 0; j < nh; j++) {
+ Point kites[HAT_NKITE];
+ size_t nk = hat_kite_centres(h[j], kites);
+ for (k = 0; k < nk; k++) {
+ struct list *le = &list[len++];
+ le->kite.x = kites[k].x - origin.x;
+ le->kite.y = kites[k].y - origin.y;
+ le->ik = k;
+ le->ih = h[j].index;
+ le->im = h[j].parent->coords[0].index;
+#if 0
+ printf("// %d,%d = %u.%u.%u\n", le->kite.x, le->kite.y, le->ik, le->ih, le->im);
+#endif
+ }
+ }
+
+ nmeta = count234(t[1]->tiles);
+ for (ti = 0; ti < 8 * 4 * nmeta; ti++) {
+ unsigned ik = ti % 8;
+ unsigned ih = ti / 8 % 4;
+ unsigned im = ti / (8*4);
+ struct list *src = NULL, *dst = NULL;
+ int istep;
+
+ for (j = 0; j < len; j++) {
+ struct list *tmp = &list[j];
+ if (tmp->ik == ik && tmp->ih == ih && tmp->im == im) {
+ src = tmp;
+ break;
+ }
+ }
+ if (ik == 0) {
+ printf(" /* hat #%u in metatile #%u (type %c)",
+ ih, im, HTPF[((Metatile *)index234(
+ t[1]->tiles, im))->type]);
+ if (!src)
+ printf(" does not exist");
+ printf(" */\n");
+ }
+#if 0
+ if (src)
+ printf(" // src=%d,%d\n", src->kite.x, src->kite.y);
+#endif
+ printf(" ");
+
+ for (istep = 0; istep < 4; istep++) {
+ KiteStep step = istep;
+ dst = NULL;
+ if (src) {
+ Point pdst = kite_step(src->kite, step);
+#if 0
+ printf(" /* dst=%d,%d */", pdst.x, pdst.y);
+#endif
+ for (k = 0; k < len; k++) {
+ struct list *tmp = &list[k];
+ if (tmp->kite.x == pdst.x &&
+ tmp->kite.y == pdst.y) {
+ dst = tmp;
+ break;
+ }
+ }
+ }
+ if (!dst) {
+ printf(" {-1,-1,-1},");
+ } else {
+ printf(" {%u,%u,%u},", dst->ik, dst->ih, dst->im);
+ }
+ }
+ printf("\n");
+ }
+ printf("};\n");
+
+ sfree(h);
+ for (j = 0; j < 2; j++)
+ metatile_free_set(t[j]);
+ }
+
+ printf("static const KitemapEntry *const "
+ "kitemap[] = {\n");
+ for (i = 0; i < 4; i++)
+ printf(" kitemap_%c,\n", HTPF[i]);
+ printf("};\n\n");
+
+ }
+
+ {
+ for (i = 0; i < 4; i++) {
+ MetatileSet *t[3];
+ Metatile *m;
+ int map[MT_MAXEXPAND * MT_MAXEXPAND];
+ size_t maplen;
+
+ for (j = 0; j < lenof(map); j++)
+ map[j] = -1;
+
+ t[0] = metatile_initial_set(i);
+ for (j = 1; j < 3; j++)
+ t[j] = metatile_set_expand(t[j-1]);
+
+ for (j = 0; (m = index234(t[2]->tiles, j)) != NULL; j++) {
+ unsigned coords[4];
+ size_t ncoords = 0;
+ int cindex;
+
+#if 0
+ printf("// ***\n");
+#endif
+ for (cindex = 0; cindex < m->ncoords; cindex++) {
+#if 0
+ printf("// %d.%d\n", (int)m->coords[cindex].index,
+ (int)m->coords[cindex].parent->coords[0].index);
+#endif
+ coords[ncoords++] = (
+ m->coords[cindex].index + MT_MAXEXPAND *
+ m->coords[cindex].parent->coords[0].index);
+ }
+
+ unsigned prev = ncoords-1;
+ for (k = 0; k < ncoords; k++) {
+ map[coords[prev]] = coords[k];
+ prev = k;
+ }
+ }
+
+ printf("static const MetamapEntry metamap_%c[] = {\n",
+ HTPF[i]);
+ maplen = MT_MAXEXPAND * count234(t[1]->tiles);
+ for (j = 0; j < maplen; j++) {
+ printf(" /* %u, %u -> */ ",
+ (unsigned)(j % MT_MAXEXPAND),
+ (unsigned)(j / MT_MAXEXPAND));
+ if (map[j] == -1) {
+ printf("{-1,-1}, /* does not exist */\n");
+ } else {
+ printf("{%u, %u},",
+ (unsigned)(map[j] % MT_MAXEXPAND),
+ (unsigned)(map[j] / MT_MAXEXPAND));
+ if (map[j] == j)
+ printf(" /* no alternatives */");
+ printf("\n");
+ }
+ }
+ printf("};\n");
+
+ for (j = 0; j < 3; j++)
+ metatile_free_set(t[j]);
+ }
+
+ printf("static const MetamapEntry *const "
+ "metamap[] = {\n");
+ for (i = 0; i < 4; i++)
+ printf(" metamap_%c,\n", HTPF[i]);
+ printf("};\n");
+ }
+
+ return 0;
+ }
+
+ fprintf(stderr, "unknown test mode '%s'\n", argv[1]);
+ return 1;
+}
+#endif
diff --git a/grid.c b/grid.c
index 21353ba..bac8be8 100644
--- a/grid.c
+++ b/grid.c
@@ -19,6 +19,7 @@
#include "tree234.h"
#include "grid.h"
#include "penrose.h"
+#include "hat.h"
/* Debugging options */
@@ -3401,6 +3402,159 @@ static grid *grid_new_penrose_p3_thick(int width, int height, const char *desc)
return grid_new_penrose(width, height, PENROSE_P3, desc);
}
+#define HATS_TILESIZE 32
+#define HATS_XSQUARELEN 4
+#define HATS_YSQUARELEN 6
+#define HATS_XUNIT 14
+#define HATS_YUNIT 8
+
+static const char *grid_validate_params_hats(
+ int width, int height)
+{
+ int l = HATS_TILESIZE;
+
+ if (width > INT_MAX / l || /* xextent */
+ height > INT_MAX / l || /* yextent */
+ width > INT_MAX / (6 * height)) /* max_dots */
+ return "Grid must not be unreasonably large";
+ return NULL;
+}
+
+static void grid_size_hats(int width, int height,
+ int *tilesize, int *xextent, int *yextent)
+{
+ *tilesize = HATS_TILESIZE;
+ *xextent = width * HATS_XUNIT * HATS_XSQUARELEN;
+ *yextent = height * HATS_YUNIT * HATS_YSQUARELEN;
+}
+
+static char *grid_new_desc_hats(
+ grid_type type, int width, int height, random_state *rs)
+{
+ char *buf, *p;
+ size_t bufmax, i;
+ struct HatPatchParams hp;
+
+ hat_tiling_randomise(&hp, width, height, rs);
+
+ bufmax = 3 * hp.ncoords + 2;
+ buf = snewn(bufmax, char);
+ p = buf;
+ for (i = 0; i < hp.ncoords; i++) {
+ assert(hp.coords[i] < 100); /* at most 2 digits */
+ assert(p - buf <= bufmax-4); /* room for 2 digits, comma and NUL */
+ p += sprintf(p, "%d,", (int)hp.coords[i]);
+ }
+ assert(p - buf <= bufmax-2); /* room for final letter and NUL */
+ p[0] = hp.final_metatile;
+ p[1] = '\0';
+
+ sfree(hp.coords);
+ return buf;
+}
+
+/* Shared code between validating and reading grid descs.
+ * Always allocates hp->coords, whether or not it returns an error. */
+static const char *grid_desc_to_hat_params(
+ const char *desc, struct HatPatchParams *hp)
+{
+ size_t maxcoords;
+ const char *p = desc;
+
+ maxcoords = (strlen(desc) + 1) / 2;
+ hp->coords = snewn(maxcoords, unsigned char);
+ hp->ncoords = 0;
+
+ while (isdigit((unsigned char)*p)) {
+ const char *p_orig = p;
+ int n = atoi(p);
+ while (*p && isdigit((unsigned char)*p)) p++;
+ if (*p != ',')
+ return "expected ',' in grid description";
+ if (p - p_orig > 2 || n > 0xFF)
+ return "too-large coordinate in grid description";
+ p++; /* eat the comma */
+
+ /* This assert should be guaranteed by the way we calculated
+ * maxcoords, so a failure of this check is a bug in this
+ * function, not an indication of an invalid input string */
+ assert(hp->ncoords < maxcoords);
+ hp->coords[hp->ncoords++] = n;
+ }
+
+ if (*p == 'H' || *p == 'T' || *p == 'P' || *p == 'F')
+ hp->final_metatile = *p;
+ else
+ return "invalid character in grid description";
+
+ return NULL;
+}
+
+static const char *grid_validate_desc_hats(
+ grid_type type, int width, int height, const char *desc)
+{
+ struct HatPatchParams hp;
+ const char *error = NULL;
+
+ error = grid_desc_to_hat_params(desc, &hp);
+ if (!error)
+ error = hat_tiling_params_invalid(&hp);
+
+ sfree(hp.coords);
+ return error;
+}
+
+struct hatcontext {
+ grid *g;
+ tree234 *points;
+};
+
+static void grid_hats_callback(void *vctx, size_t nvertices, int *coords)
+{
+ struct hatcontext *ctx = (struct hatcontext *)vctx;
+ size_t i;
+
+ grid_face_add_new(ctx->g, nvertices);
+ for (i = 0; i < nvertices; i++) {
+ grid_dot *d = grid_get_dot(
+ ctx->g, ctx->points,
+ coords[2*i] * HATS_XUNIT,
+ coords[2*i+1] * HATS_YUNIT);
+ grid_face_set_dot(ctx->g, d, i);
+ }
+}
+
+static grid *grid_new_hats(int width, int height, const char *desc)
+{
+ struct HatPatchParams hp;
+ const char *error = NULL;
+
+ error = grid_desc_to_hat_params(desc, &hp);
+ assert(error == NULL && "grid_validate_desc_hats should have failed");
+
+ /* Upper bounds - don't have to be exact */
+ int max_faces = (width * height * 6 + 7) / 8;
+ int max_dots = width * height * 6 + width * 2 + height * 2 + 1;
+
+ struct hatcontext ctx[1];
+
+ ctx->g = grid_empty();
+ ctx->g->tilesize = HATS_TILESIZE;
+ ctx->g->faces = snewn(max_faces, grid_face);
+ ctx->g->dots = snewn(max_dots, grid_dot);
+
+ ctx->points = newtree234(grid_point_cmp_fn);
+
+ hat_tiling_generate(&hp, width, height, grid_hats_callback, ctx);
+
+ freetree234(ctx->points);
+ sfree(hp.coords);
+
+ grid_trim_vigorously(ctx->g);
+ grid_make_consistent(ctx->g);
+ return ctx->g;
+}
+
/* ----------- End of grid generators ------------- */
#define FNVAL(upper,lower) &grid_validate_params_ ## lower,
@@ -3425,6 +3579,8 @@ char *grid_new_desc(grid_type type, int width, int height, random_state *rs)
{
if (type == GRID_PENROSE_P2 || type == GRID_PENROSE_P3) {
return grid_new_desc_penrose(type, width, height, rs);
+ } else if (type == GRID_HATS) {
+ return grid_new_desc_hats(type, width, height, rs);
} else if (type == GRID_TRIANGULAR) {
return dupstr("0"); /* up-to-date version of triangular grid */
} else {
@@ -3437,6 +3593,8 @@ const char *grid_validate_desc(grid_type type, int width, int height,
{
if (type == GRID_PENROSE_P2 || type == GRID_PENROSE_P3) {
return grid_validate_desc_penrose(type, width, height, desc);
+ } else if (type == GRID_HATS) {
+ return grid_validate_desc_hats(type, width, height, desc);
} else if (type == GRID_TRIANGULAR) {
return grid_validate_desc_triangular(type, width, height, desc);
} else {
diff --git a/grid.h b/grid.h
index 69108d4..c0246c1 100644
--- a/grid.h
+++ b/grid.h
@@ -109,7 +109,9 @@ typedef struct grid {
A(GREATGREATDODECAGONAL,greatgreatdodecagonal) \
A(COMPASSDODECAGONAL,compassdodecagonal) \
A(PENROSE_P2,penrose_p2_kite) \
- A(PENROSE_P3,penrose_p3_thick)
+ A(PENROSE_P3,penrose_p3_thick) \
+ A(HATS,hats) \
+ /* end of list */
#define ENUM(upper,lower) GRID_ ## upper,
typedef enum grid_type { GRIDGEN_LIST(ENUM) GRID_TYPE_MAX } grid_type;
diff --git a/hat-tables.h b/hat-tables.h
new file mode 100644
index 0000000..5b3b0ed
--- /dev/null
+++ b/hat-tables.h
@@ -0,0 +1,2183 @@
+/*
+ * Header file autogenerated by aux/hatgen.c
+ *
+ * To regenerate, run 'hatgen --tables > hat-tables.h'
+ */
+
+static const unsigned hats_in_metatile[] = { 4, 1, 2, 2, };
+
+static const TileType children_H[] = {
+ TT_H, TT_H, TT_H, TT_T, TT_P, TT_P, TT_P, TT_F, TT_F, TT_F, TT_F, TT_F, TT_F,
+};
+static const TileType children_T[] = {
+ TT_H, TT_P, TT_P, TT_P, TT_F, TT_F, TT_F,
+};
+static const TileType children_P[] = {
+ TT_H, TT_H, TT_P, TT_P, TT_P, TT_F, TT_F, TT_F, TT_F, TT_F, TT_F,
+};
+static const TileType children_F[] = {
+ TT_H, TT_H, TT_P, TT_P, TT_F, TT_F, TT_F, TT_F, TT_F, TT_F, TT_F,
+};
+static const TileType *const children[] = {
+ children_H,
+ children_T,
+ children_P,
+ children_F,
+};
+static const size_t nchildren[] = {
+ 13,
+ 7,
+ 11,
+ 11,
+};
+
+static const MetatilePossibleParent permitted_parents_H[] = {
+ { TT_H, 0 },
+ { TT_H, 1 },
+ { TT_H, 2 },
+ { TT_T, 0 },
+ { TT_P, 0 },
+ { TT_P, 1 },
+ { TT_F, 0 },
+ { TT_F, 1 },
+};
+static const MetatilePossibleParent permitted_parents_T[] = {
+ { TT_H, 3 },
+};
+static const MetatilePossibleParent permitted_parents_P[] = {
+ { TT_H, 4 },
+ { TT_H, 5 },
+ { TT_H, 6 },
+ { TT_T, 1 },
+ { TT_T, 2 },
+ { TT_T, 3 },
+ { TT_P, 2 },
+ { TT_P, 3 },
+ { TT_P, 4 },
+ { TT_F, 2 },
+ { TT_F, 3 },
+};
+static const MetatilePossibleParent permitted_parents_F[] = {
+ { TT_H, 7 },
+ { TT_H, 8 },
+ { TT_H, 9 },
+ { TT_H, 10 },
+ { TT_H, 11 },
+ { TT_H, 12 },
+ { TT_T, 4 },
+ { TT_T, 5 },
+ { TT_T, 6 },
+ { TT_P, 5 },
+ { TT_P, 6 },
+ { TT_P, 7 },
+ { TT_P, 8 },
+ { TT_P, 9 },
+ { TT_P, 10 },
+ { TT_F, 4 },
+ { TT_F, 5 },
+ { TT_F, 6 },
+ { TT_F, 7 },
+ { TT_F, 8 },
+ { TT_F, 9 },
+ { TT_F, 10 },
+};
+static const MetatilePossibleParent *const permitted_parents[] = {
+ permitted_parents_H,
+ permitted_parents_T,
+ permitted_parents_P,
+ permitted_parents_F,
+};
+static const size_t n_permitted_parents[] = {
+ 8,
+ 1,
+ 11,
+ 22,
+};
+
+static const KitemapEntry kitemap_H[] = {
+ /* hat #0 in metatile #0 (type H) */
+ {1,0,0}, {7,3,0}, {3,0,4}, {4,0,4},
+ {4,3,0}, {0,0,0}, {5,0,0}, {2,0,0},
+ {3,0,4}, {3,0,0}, {1,0,0}, {5,0,0},
+ {2,0,0}, {1,2,1}, {4,0,0}, {6,2,1},
+ {3,0,3}, {5,0,0}, {6,2,1}, {3,0,0},
+ {4,0,0}, {6,0,0}, {2,0,0}, {1,0,0},
+ {5,0,0}, {7,0,0}, {4,3,0}, {3,3,0},
+ {6,0,0}, {2,0,3}, {7,1,0}, {0,0,3},
+ /* hat #1 in metatile #0 (type H) */
+ {1,1,0}, {2,0,5}, {7,1,8}, {0,0,5},
+ {3,0,2}, {0,1,0}, {5,1,0}, {2,1,0},
+ {7,1,8}, {3,1,0}, {1,1,0}, {5,1,0},
+ {2,1,0}, {4,1,8}, {4,1,0}, {0,3,0},
+ {2,3,0}, {5,1,0}, {0,3,0}, {3,1,0},
+ {4,1,0}, {6,1,0}, {2,1,0}, {1,1,0},
+ {5,1,0}, {7,1,0}, {3,0,2}, {4,0,2},
+ {6,1,0}, {3,3,0}, {0,0,3}, {7,0,0},
+ /* hat #2 in metatile #0 (type H) */
+ {1,2,0}, {1,0,7}, {7,1,4}, {6,0,7},
+ {3,0,8}, {0,2,0}, {5,2,0}, {2,2,0},
+ {7,1,4}, {3,2,0}, {1,2,0}, {5,2,0},
+ {2,2,0}, {4,1,4}, {4,2,0}, {6,3,0},
+ {1,3,0}, {5,2,0}, {6,3,0}, {3,2,0},
+ {4,2,0}, {6,2,0}, {2,2,0}, {1,2,0},
+ {5,2,0}, {7,2,0}, {3,0,8}, {4,0,8},
+ {6,2,0}, {0,3,0}, {3,1,8}, {4,1,8},
+ /* hat #3 in metatile #0 (type H) */
+ {7,2,0}, {1,3,0}, {3,1,0}, {4,1,0},
+ {0,3,0}, {4,2,0}, {2,3,0}, {5,3,0},
+ {3,3,0}, {4,1,0}, {5,3,0}, {1,3,0},
+ {7,1,0}, {2,3,0}, {6,0,0}, {4,3,0},
+ {5,3,0}, {1,0,0}, {3,3,0}, {6,0,0},
+ {6,3,0}, {4,3,0}, {1,3,0}, {2,3,0},
+ {7,3,0}, {5,3,0}, {3,2,0}, {4,2,0},
+ {0,0,0}, {6,3,0}, {3,1,4}, {4,1,4},
+ /* hat #0 in metatile #1 (type H) */
+ {1,0,1}, {7,3,1}, {3,0,9}, {4,0,9},
+ {4,3,1}, {0,0,1}, {5,0,1}, {2,0,1},
+ {3,0,9}, {3,0,1}, {1,0,1}, {5,0,1},
+ {2,0,1}, {1,0,10}, {4,0,1}, {6,0,10},
+ {0,0,6}, {5,0,1}, {6,0,10}, {3,0,1},
+ {4,0,1}, {6,0,1}, {2,0,1}, {1,0,1},
+ {5,0,1}, {7,0,1}, {4,3,1}, {3,3,1},
+ {6,0,1}, {1,0,6}, {7,1,1}, {6,0,6},
+ /* hat #1 in metatile #1 (type H) */
+ {1,1,1}, {1,1,2}, {7,0,3}, {6,1,2},
+ {0,1,6}, {0,1,1}, {5,1,1}, {2,1,1},
+ {7,0,3}, {3,1,1}, {1,1,1}, {5,1,1},
+ {2,1,1}, {4,0,3}, {4,1,1}, {0,3,1},
+ {2,3,1}, {5,1,1}, {0,3,1}, {3,1,1},
+ {4,1,1}, {6,1,1}, {2,1,1}, {1,1,1},
+ {5,1,1}, {7,1,1}, {0,1,6}, {7,0,6},
+ {6,1,1}, {3,3,1}, {6,0,6}, {7,0,1},
+ /* hat #2 in metatile #1 (type H) */
+ {1,2,1}, {2,0,4}, {7,1,9}, {0,0,4},
+ {3,0,0}, {0,2,1}, {5,2,1}, {2,2,1},
+ {7,1,9}, {3,2,1}, {1,2,1}, {5,2,1},
+ {2,2,1}, {4,1,9}, {4,2,1}, {6,3,1},
+ {1,3,1}, {5,2,1}, {6,3,1}, {3,2,1},
+ {4,2,1}, {6,2,1}, {2,2,1}, {1,2,1},
+ {5,2,1}, {7,2,1}, {3,0,0}, {4,0,0},
+ {6,2,1}, {0,3,1}, {3,0,3}, {4,0,3},
+ /* hat #3 in metatile #1 (type H) */
+ {7,2,1}, {1,3,1}, {3,1,1}, {4,1,1},
+ {0,3,1}, {4,2,1}, {2,3,1}, {5,3,1},
+ {3,3,1}, {4,1,1}, {5,3,1}, {1,3,1},
+ {7,1,1}, {2,3,1}, {6,0,1}, {4,3,1},
+ {5,3,1}, {1,0,1}, {3,3,1}, {6,0,1},
+ {6,3,1}, {4,3,1}, {1,3,1}, {2,3,1},
+ {7,3,1}, {5,3,1}, {3,2,1}, {4,2,1},
+ {0,0,1}, {6,3,1}, {3,1,9}, {4,1,9},
+ /* hat #0 in metatile #2 (type H) */
+ {1,0,2}, {7,3,2}, {3,0,5}, {4,0,5},
+ {4,3,2}, {0,0,2}, {5,0,2}, {2,0,2},
+ {3,0,5}, {3,0,2}, {1,0,2}, {5,0,2},
+ {2,0,2}, {1,1,0}, {4,0,2}, {6,1,0},
+ {0,0,3}, {5,0,2}, {6,1,0}, {3,0,2},
+ {4,0,2}, {6,0,2}, {2,0,2}, {1,0,2},
+ {5,0,2}, {7,0,2}, {4,3,2}, {3,3,2},
+ {6,0,2}, {1,0,3}, {7,1,2}, {6,0,3},
+ /* hat #1 in metatile #2 (type H) */
+ {1,1,2}, {1,1,6}, {7,1,12}, {6,1,6},
+ {0,1,1}, {0,1,2}, {5,1,2}, {2,1,2},
+ {7,1,12}, {3,1,2}, {1,1,2}, {5,1,2},
+ {2,1,2}, {4,1,12}, {4,1,2}, {0,3,2},
+ {2,3,2}, {5,1,2}, {0,3,2}, {3,1,2},
+ {4,1,2}, {6,1,2}, {2,1,2}, {1,1,2},
+ {5,1,2}, {7,1,2}, {0,1,1}, {7,0,3},
+ {6,1,2}, {3,3,2}, {6,0,3}, {7,0,2},
+ /* hat #2 in metatile #2 (type H) */
+ {1,2,2}, {1,0,11}, {7,1,5}, {6,0,11},
+ {3,0,12}, {0,2,2}, {5,2,2}, {2,2,2},
+ {7,1,5}, {3,2,2}, {1,2,2}, {5,2,2},
+ {2,2,2}, {4,1,5}, {4,2,2}, {6,3,2},
+ {1,3,2}, {5,2,2}, {6,3,2}, {3,2,2},
+ {4,2,2}, {6,2,2}, {2,2,2}, {1,2,2},
+ {5,2,2}, {7,2,2}, {3,0,12}, {4,0,12},
+ {6,2,2}, {0,3,2}, {3,1,12}, {4,1,12},
+ /* hat #3 in metatile #2 (type H) */
+ {7,2,2}, {1,3,2}, {3,1,2}, {4,1,2},
+ {0,3,2}, {4,2,2}, {2,3,2}, {5,3,2},
+ {3,3,2}, {4,1,2}, {5,3,2}, {1,3,2},
+ {7,1,2}, {2,3,2}, {6,0,2}, {4,3,2},
+ {5,3,2}, {1,0,2}, {3,3,2}, {6,0,2},
+ {6,3,2}, {4,3,2}, {1,3,2}, {2,3,2},
+ {7,3,2}, {5,3,2}, {3,2,2}, {4,2,2},
+ {0,0,2}, {6,3,2}, {3,1,5}, {4,1,5},
+ /* hat #0 in metatile #3 (type T) */
+ {1,0,3}, {4,0,2}, {7,0,0}, {7,1,0},
+ {7,0,2}, {0,0,3}, {5,0,3}, {2,0,3},
+ {7,0,0}, {3,0,3}, {1,0,3}, {5,0,3},
+ {2,0,3}, {4,0,0}, {4,0,3}, {7,2,1},
+ {3,1,1}, {5,0,3}, {7,2,1}, {3,0,3},
+ {4,0,3}, {6,0,3}, {2,0,3}, {1,0,3},
+ {5,0,3}, {7,0,3}, {7,0,2}, {7,1,2},
+ {6,0,3}, {2,1,1}, {6,1,2}, {0,1,1},
+ /* hat #1 in metatile #3 (type T) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #2 in metatile #3 (type T) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #3 (type T) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #4 (type P) */
+ {1,0,4}, {-1,-1,-1}, {0,2,1}, {7,1,9},
+ {-1,-1,-1}, {0,0,4}, {5,0,4}, {2,0,4},
+ {0,2,1}, {3,0,4}, {1,0,4}, {5,0,4},
+ {2,0,4}, {2,0,0}, {4,0,4}, {0,0,0},
+ {3,1,4}, {5,0,4}, {0,0,0}, {3,0,4},
+ {4,0,4}, {6,0,4}, {2,0,4}, {1,0,4},
+ {5,0,4}, {7,0,4}, {-1,-1,-1}, {-1,-1,-1},
+ {6,0,4}, {2,1,4}, {-1,-1,-1}, {0,1,4},
+ /* hat #1 in metatile #4 (type P) */
+ {1,1,4}, {-1,-1,-1}, {7,0,4}, {-1,-1,-1},
+ {0,1,7}, {0,1,4}, {5,1,4}, {2,1,4},
+ {7,0,4}, {3,1,4}, {1,1,4}, {5,1,4},
+ {2,1,4}, {4,0,4}, {4,1,4}, {7,3,0},
+ {3,2,0}, {5,1,4}, {7,3,0}, {3,1,4},
+ {4,1,4}, {6,1,4}, {2,1,4}, {1,1,4},
+ {5,1,4}, {7,1,4}, {0,1,7}, {7,0,7},
+ {6,1,4}, {2,2,0}, {6,0,7}, {0,2,0},
+ /* hat #2 in metatile #4 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #4 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #5 (type P) */
+ {1,0,5}, {-1,-1,-1}, {0,1,0}, {7,1,8},
+ {-1,-1,-1}, {0,0,5}, {5,0,5}, {2,0,5},
+ {0,1,0}, {3,0,5}, {1,0,5}, {5,0,5},
+ {2,0,5}, {2,0,2}, {4,0,5}, {0,0,2},
+ {3,1,5}, {5,0,5}, {0,0,2}, {3,0,5},
+ {4,0,5}, {6,0,5}, {2,0,5}, {1,0,5},
+ {5,0,5}, {7,0,5}, {-1,-1,-1}, {-1,-1,-1},
+ {6,0,5}, {2,1,5}, {-1,-1,-1}, {0,1,5},
+ /* hat #1 in metatile #5 (type P) */
+ {1,1,5}, {-1,-1,-1}, {7,0,5}, {-1,-1,-1},
+ {0,1,11}, {0,1,5}, {5,1,5}, {2,1,5},
+ {7,0,5}, {3,1,5}, {1,1,5}, {5,1,5},
+ {2,1,5}, {4,0,5}, {4,1,5}, {7,3,2},
+ {3,2,2}, {5,1,5}, {7,3,2}, {3,1,5},
+ {4,1,5}, {6,1,5}, {2,1,5}, {1,1,5},
+ {5,1,5}, {7,1,5}, {0,1,11}, {7,0,11},
+ {6,1,5}, {2,2,2}, {6,0,11}, {0,2,2},
+ /* hat #2 in metatile #5 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #5 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #6 (type P) */
+ {1,0,6}, {4,0,1}, {0,1,10}, {7,0,10},
+ {7,0,1}, {0,0,6}, {5,0,6}, {2,0,6},
+ {0,1,10}, {3,0,6}, {1,0,6}, {5,0,6},
+ {2,0,6}, {-1,-1,-1}, {4,0,6}, {-1,-1,-1},
+ {3,1,6}, {5,0,6}, {-1,-1,-1}, {3,0,6},
+ {4,0,6}, {6,0,6}, {2,0,6}, {1,0,6},
+ {5,0,6}, {7,0,6}, {7,0,1}, {7,1,1},
+ {6,0,6}, {2,1,6}, {6,1,1}, {0,1,6},
+ /* hat #1 in metatile #6 (type P) */
+ {1,1,6}, {1,1,1}, {7,0,6}, {6,1,1},
+ {0,1,2}, {0,1,6}, {5,1,6}, {2,1,6},
+ {7,0,6}, {3,1,6}, {1,1,6}, {5,1,6},
+ {2,1,6}, {4,0,6}, {4,1,6}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,6}, {-1,-1,-1}, {3,1,6},
+ {4,1,6}, {6,1,6}, {2,1,6}, {1,1,6},
+ {5,1,6}, {7,1,6}, {0,1,2}, {7,1,12},
+ {6,1,6}, {-1,-1,-1}, {6,1,12}, {-1,-1,-1},
+ /* hat #2 in metatile #6 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #6 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #7 (type F) */
+ {1,0,7}, {2,0,8}, {-1,-1,-1}, {0,0,8},
+ {0,2,0}, {0,0,7}, {5,0,7}, {2,0,7},
+ {-1,-1,-1}, {3,0,7}, {1,0,7}, {5,0,7},
+ {2,0,7}, {-1,-1,-1}, {4,0,7}, {-1,-1,-1},
+ {3,1,7}, {5,0,7}, {-1,-1,-1}, {3,0,7},
+ {4,0,7}, {6,0,7}, {2,0,7}, {1,0,7},
+ {5,0,7}, {7,0,7}, {0,2,0}, {7,1,4},
+ {6,0,7}, {2,1,7}, {6,1,4}, {0,1,7},
+ /* hat #1 in metatile #7 (type F) */
+ {1,1,7}, {1,1,4}, {7,0,7}, {6,1,4},
+ {-1,-1,-1}, {0,1,7}, {5,1,7}, {2,1,7},
+ {7,0,7}, {3,1,7}, {1,1,7}, {5,1,7},
+ {2,1,7}, {4,0,7}, {4,1,7}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,7}, {-1,-1,-1}, {3,1,7},
+ {4,1,7}, {6,1,7}, {2,1,7}, {1,1,7},
+ {5,1,7}, {7,1,7}, {-1,-1,-1}, {-1,-1,-1},
+ {6,1,7}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #2 in metatile #7 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #7 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #8 (type F) */
+ {1,0,8}, {-1,-1,-1}, {0,0,7}, {-1,-1,-1},
+ {-1,-1,-1}, {0,0,8}, {5,0,8}, {2,0,8},
+ {0,0,7}, {3,0,8}, {1,0,8}, {5,0,8},
+ {2,0,8}, {1,2,0}, {4,0,8}, {6,2,0},
+ {3,1,8}, {5,0,8}, {6,2,0}, {3,0,8},
+ {4,0,8}, {6,0,8}, {2,0,8}, {1,0,8},
+ {5,0,8}, {7,0,8}, {-1,-1,-1}, {-1,-1,-1},
+ {6,0,8}, {2,1,8}, {-1,-1,-1}, {0,1,8},
+ /* hat #1 in metatile #8 (type F) */
+ {1,1,8}, {-1,-1,-1}, {7,0,8}, {-1,-1,-1},
+ {-1,-1,-1}, {0,1,8}, {5,1,8}, {2,1,8},
+ {7,0,8}, {3,1,8}, {1,1,8}, {5,1,8},
+ {2,1,8}, {4,0,8}, {4,1,8}, {7,2,0},
+ {3,1,0}, {5,1,8}, {7,2,0}, {3,1,8},
+ {4,1,8}, {6,1,8}, {2,1,8}, {1,1,8},
+ {5,1,8}, {7,1,8}, {-1,-1,-1}, {-1,-1,-1},
+ {6,1,8}, {2,1,0}, {0,0,5}, {0,1,0},
+ /* hat #2 in metatile #8 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #8 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #9 (type F) */
+ {1,0,9}, {-1,-1,-1}, {0,0,10}, {-1,-1,-1},
+ {-1,-1,-1}, {0,0,9}, {5,0,9}, {2,0,9},
+ {0,0,10}, {3,0,9}, {1,0,9}, {5,0,9},
+ {2,0,9}, {2,0,1}, {4,0,9}, {0,0,1},
+ {3,1,9}, {5,0,9}, {0,0,1}, {3,0,9},
+ {4,0,9}, {6,0,9}, {2,0,9}, {1,0,9},
+ {5,0,9}, {7,0,9}, {-1,-1,-1}, {-1,-1,-1},
+ {6,0,9}, {2,1,9}, {-1,-1,-1}, {0,1,9},
+ /* hat #1 in metatile #9 (type F) */
+ {1,1,9}, {-1,-1,-1}, {7,0,9}, {-1,-1,-1},
+ {-1,-1,-1}, {0,1,9}, {5,1,9}, {2,1,9},
+ {7,0,9}, {3,1,9}, {1,1,9}, {5,1,9},
+ {2,1,9}, {4,0,9}, {4,1,9}, {7,3,1},
+ {3,2,1}, {5,1,9}, {7,3,1}, {3,1,9},
+ {4,1,9}, {6,1,9}, {2,1,9}, {1,1,9},
+ {5,1,9}, {7,1,9}, {-1,-1,-1}, {-1,-1,-1},
+ {6,1,9}, {2,2,1}, {0,0,4}, {0,2,1},
+ /* hat #2 in metatile #9 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #9 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #10 (type F) */
+ {1,0,10}, {2,0,9}, {-1,-1,-1}, {0,0,9},
+ {3,0,1}, {0,0,10}, {5,0,10}, {2,0,10},
+ {-1,-1,-1}, {3,0,10}, {1,0,10}, {5,0,10},
+ {2,0,10}, {-1,-1,-1}, {4,0,10}, {-1,-1,-1},
+ {3,1,10}, {5,0,10}, {-1,-1,-1}, {3,0,10},
+ {4,0,10}, {6,0,10}, {2,0,10}, {1,0,10},
+ {5,0,10}, {7,0,10}, {3,0,1}, {4,0,1},
+ {6,0,10}, {2,1,10}, {0,0,6}, {0,1,10},
+ /* hat #1 in metatile #10 (type F) */
+ {1,1,10}, {2,0,6}, {7,0,10}, {0,0,6},
+ {-1,-1,-1}, {0,1,10}, {5,1,10}, {2,1,10},
+ {7,0,10}, {3,1,10}, {1,1,10}, {5,1,10},
+ {2,1,10}, {4,0,10}, {4,1,10}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,10}, {-1,-1,-1}, {3,1,10},
+ {4,1,10}, {6,1,10}, {2,1,10}, {1,1,10},
+ {5,1,10}, {7,1,10}, {-1,-1,-1}, {-1,-1,-1},
+ {6,1,10}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #2 in metatile #10 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #10 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #11 (type F) */
+ {1,0,11}, {2,0,12}, {-1,-1,-1}, {0,0,12},
+ {0,2,2}, {0,0,11}, {5,0,11}, {2,0,11},
+ {-1,-1,-1}, {3,0,11}, {1,0,11}, {5,0,11},
+ {2,0,11}, {-1,-1,-1}, {4,0,11}, {-1,-1,-1},
+ {3,1,11}, {5,0,11}, {-1,-1,-1}, {3,0,11},
+ {4,0,11}, {6,0,11}, {2,0,11}, {1,0,11},
+ {5,0,11}, {7,0,11}, {0,2,2}, {7,1,5},
+ {6,0,11}, {2,1,11}, {6,1,5}, {0,1,11},
+ /* hat #1 in metatile #11 (type F) */
+ {1,1,11}, {1,1,5}, {7,0,11}, {6,1,5},
+ {-1,-1,-1}, {0,1,11}, {5,1,11}, {2,1,11},
+ {7,0,11}, {3,1,11}, {1,1,11}, {5,1,11},
+ {2,1,11}, {4,0,11}, {4,1,11}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,11}, {-1,-1,-1}, {3,1,11},
+ {4,1,11}, {6,1,11}, {2,1,11}, {1,1,11},
+ {5,1,11}, {7,1,11}, {-1,-1,-1}, {-1,-1,-1},
+ {6,1,11}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #2 in metatile #11 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #11 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #12 (type F) */
+ {1,0,12}, {-1,-1,-1}, {0,0,11}, {-1,-1,-1},
+ {-1,-1,-1}, {0,0,12}, {5,0,12}, {2,0,12},
+ {0,0,11}, {3,0,12}, {1,0,12}, {5,0,12},
+ {2,0,12}, {1,2,2}, {4,0,12}, {6,2,2},
+ {3,1,12}, {5,0,12}, {6,2,2}, {3,0,12},
+ {4,0,12}, {6,0,12}, {2,0,12}, {1,0,12},
+ {5,0,12}, {7,0,12}, {-1,-1,-1}, {-1,-1,-1},
+ {6,0,12}, {2,1,12}, {-1,-1,-1}, {0,1,12},
+ /* hat #1 in metatile #12 (type F) */
+ {1,1,12}, {-1,-1,-1}, {7,0,12}, {-1,-1,-1},
+ {-1,-1,-1}, {0,1,12}, {5,1,12}, {2,1,12},
+ {7,0,12}, {3,1,12}, {1,1,12}, {5,1,12},
+ {2,1,12}, {4,0,12}, {4,1,12}, {7,2,2},
+ {3,1,2}, {5,1,12}, {7,2,2}, {3,1,12},
+ {4,1,12}, {6,1,12}, {2,1,12}, {1,1,12},
+ {5,1,12}, {7,1,12}, {-1,-1,-1}, {7,1,6},
+ {6,1,12}, {2,1,2}, {6,1,6}, {0,1,2},
+ /* hat #2 in metatile #12 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #12 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+};
+static const KitemapEntry kitemap_T[] = {
+ /* hat #0 in metatile #0 (type H) */
+ {1,0,0}, {7,3,0}, {3,0,3}, {4,0,3},
+ {4,3,0}, {0,0,0}, {5,0,0}, {2,0,0},
+ {3,0,3}, {3,0,0}, {1,0,0}, {5,0,0},
+ {2,0,0}, {1,1,6}, {4,0,0}, {6,1,6},
+ {0,0,2}, {5,0,0}, {6,1,6}, {3,0,0},
+ {4,0,0}, {6,0,0}, {2,0,0}, {1,0,0},
+ {5,0,0}, {7,0,0}, {4,3,0}, {3,3,0},
+ {6,0,0}, {1,0,2}, {7,1,0}, {6,0,2},
+ /* hat #1 in metatile #0 (type H) */
+ {1,1,0}, {1,1,4}, {7,1,1}, {6,1,4},
+ {0,1,2}, {0,1,0}, {5,1,0}, {2,1,0},
+ {7,1,1}, {3,1,0}, {1,1,0}, {5,1,0},
+ {2,1,0}, {4,1,1}, {4,1,0}, {0,3,0},
+ {2,3,0}, {5,1,0}, {0,3,0}, {3,1,0},
+ {4,1,0}, {6,1,0}, {2,1,0}, {1,1,0},
+ {5,1,0}, {7,1,0}, {0,1,2}, {7,0,2},
+ {6,1,0}, {3,3,0}, {6,0,2}, {7,0,0},
+ /* hat #2 in metatile #0 (type H) */
+ {1,2,0}, {1,1,5}, {7,1,3}, {6,1,5},
+ {3,0,1}, {0,2,0}, {5,2,0}, {2,2,0},
+ {7,1,3}, {3,2,0}, {1,2,0}, {5,2,0},
+ {2,2,0}, {4,1,3}, {4,2,0}, {6,3,0},
+ {1,3,0}, {5,2,0}, {6,3,0}, {3,2,0},
+ {4,2,0}, {6,2,0}, {2,2,0}, {1,2,0},
+ {5,2,0}, {7,2,0}, {3,0,1}, {4,0,1},
+ {6,2,0}, {0,3,0}, {3,1,1}, {4,1,1},
+ /* hat #3 in metatile #0 (type H) */
+ {7,2,0}, {1,3,0}, {3,1,0}, {4,1,0},
+ {0,3,0}, {4,2,0}, {2,3,0}, {5,3,0},
+ {3,3,0}, {4,1,0}, {5,3,0}, {1,3,0},
+ {7,1,0}, {2,3,0}, {6,0,0}, {4,3,0},
+ {5,3,0}, {1,0,0}, {3,3,0}, {6,0,0},
+ {6,3,0}, {4,3,0}, {1,3,0}, {2,3,0},
+ {7,3,0}, {5,3,0}, {3,2,0}, {4,2,0},
+ {0,0,0}, {6,3,0}, {3,1,3}, {4,1,3},
+ /* hat #0 in metatile #1 (type P) */
+ {1,0,1}, {-1,-1,-1}, {0,1,5}, {7,0,5},
+ {-1,-1,-1}, {0,0,1}, {5,0,1}, {2,0,1},
+ {0,1,5}, {3,0,1}, {1,0,1}, {5,0,1},
+ {2,0,1}, {1,2,0}, {4,0,1}, {6,2,0},
+ {3,1,1}, {5,0,1}, {6,2,0}, {3,0,1},
+ {4,0,1}, {6,0,1}, {2,0,1}, {1,0,1},
+ {5,0,1}, {7,0,1}, {-1,-1,-1}, {-1,-1,-1},
+ {6,0,1}, {2,1,1}, {-1,-1,-1}, {0,1,1},
+ /* hat #1 in metatile #1 (type P) */
+ {1,1,1}, {-1,-1,-1}, {7,0,1}, {-1,-1,-1},
+ {-1,-1,-1}, {0,1,1}, {5,1,1}, {2,1,1},
+ {7,0,1}, {3,1,1}, {1,1,1}, {5,1,1},
+ {2,1,1}, {4,0,1}, {4,1,1}, {7,2,0},
+ {3,1,0}, {5,1,1}, {7,2,0}, {3,1,1},
+ {4,1,1}, {6,1,1}, {2,1,1}, {1,1,1},
+ {5,1,1}, {7,1,1}, {-1,-1,-1}, {7,1,4},
+ {6,1,1}, {2,1,0}, {6,1,4}, {0,1,0},
+ /* hat #2 in metatile #1 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #1 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #2 (type P) */
+ {1,0,2}, {4,0,0}, {-1,-1,-1}, {7,1,6},
+ {7,0,0}, {0,0,2}, {5,0,2}, {2,0,2},
+ {-1,-1,-1}, {3,0,2}, {1,0,2}, {5,0,2},
+ {2,0,2}, {-1,-1,-1}, {4,0,2}, {-1,-1,-1},
+ {3,1,2}, {5,0,2}, {-1,-1,-1}, {3,0,2},
+ {4,0,2}, {6,0,2}, {2,0,2}, {1,0,2},
+ {5,0,2}, {7,0,2}, {7,0,0}, {7,1,0},
+ {6,0,2}, {2,1,2}, {6,1,0}, {0,1,2},
+ /* hat #1 in metatile #2 (type P) */
+ {1,1,2}, {1,1,0}, {7,0,2}, {6,1,0},
+ {0,1,4}, {0,1,2}, {5,1,2}, {2,1,2},
+ {7,0,2}, {3,1,2}, {1,1,2}, {5,1,2},
+ {2,1,2}, {4,0,2}, {4,1,2}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,2}, {-1,-1,-1}, {3,1,2},
+ {4,1,2}, {6,1,2}, {2,1,2}, {1,1,2},
+ {5,1,2}, {7,1,2}, {0,1,4}, {7,0,4},
+ {6,1,2}, {-1,-1,-1}, {6,0,4}, {-1,-1,-1},
+ /* hat #2 in metatile #2 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #2 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #3 (type P) */
+ {1,0,3}, {-1,-1,-1}, {0,1,6}, {7,0,6},
+ {-1,-1,-1}, {0,0,3}, {5,0,3}, {2,0,3},
+ {0,1,6}, {3,0,3}, {1,0,3}, {5,0,3},
+ {2,0,3}, {2,0,0}, {4,0,3}, {0,0,0},
+ {3,1,3}, {5,0,3}, {0,0,0}, {3,0,3},
+ {4,0,3}, {6,0,3}, {2,0,3}, {1,0,3},
+ {5,0,3}, {7,0,3}, {-1,-1,-1}, {-1,-1,-1},
+ {6,0,3}, {2,1,3}, {-1,-1,-1}, {0,1,3},
+ /* hat #1 in metatile #3 (type P) */
+ {1,1,3}, {-1,-1,-1}, {7,0,3}, {-1,-1,-1},
+ {-1,-1,-1}, {0,1,3}, {5,1,3}, {2,1,3},
+ {7,0,3}, {3,1,3}, {1,1,3}, {5,1,3},
+ {2,1,3}, {4,0,3}, {4,1,3}, {7,3,0},
+ {3,2,0}, {5,1,3}, {7,3,0}, {3,1,3},
+ {4,1,3}, {6,1,3}, {2,1,3}, {1,1,3},
+ {5,1,3}, {7,1,3}, {-1,-1,-1}, {7,1,5},
+ {6,1,3}, {2,2,0}, {6,1,5}, {0,2,0},
+ /* hat #2 in metatile #3 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #3 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #4 (type F) */
+ {1,0,4}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {0,0,4}, {5,0,4}, {2,0,4},
+ {-1,-1,-1}, {3,0,4}, {1,0,4}, {5,0,4},
+ {2,0,4}, {-1,-1,-1}, {4,0,4}, {-1,-1,-1},
+ {3,1,4}, {5,0,4}, {-1,-1,-1}, {3,0,4},
+ {4,0,4}, {6,0,4}, {2,0,4}, {1,0,4},
+ {5,0,4}, {7,0,4}, {-1,-1,-1}, {7,1,2},
+ {6,0,4}, {2,1,4}, {6,1,2}, {0,1,4},
+ /* hat #1 in metatile #4 (type F) */
+ {1,1,4}, {1,1,2}, {7,0,4}, {6,1,2},
+ {0,1,0}, {0,1,4}, {5,1,4}, {2,1,4},
+ {7,0,4}, {3,1,4}, {1,1,4}, {5,1,4},
+ {2,1,4}, {4,0,4}, {4,1,4}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,4}, {-1,-1,-1}, {3,1,4},
+ {4,1,4}, {6,1,4}, {2,1,4}, {1,1,4},
+ {5,1,4}, {7,1,4}, {0,1,0}, {7,1,1},
+ {6,1,4}, {-1,-1,-1}, {6,1,1}, {-1,-1,-1},
+ /* hat #2 in metatile #4 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #4 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #5 (type F) */
+ {1,0,5}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {0,0,5}, {5,0,5}, {2,0,5},
+ {-1,-1,-1}, {3,0,5}, {1,0,5}, {5,0,5},
+ {2,0,5}, {-1,-1,-1}, {4,0,5}, {-1,-1,-1},
+ {3,1,5}, {5,0,5}, {-1,-1,-1}, {3,0,5},
+ {4,0,5}, {6,0,5}, {2,0,5}, {1,0,5},
+ {5,0,5}, {7,0,5}, {-1,-1,-1}, {-1,-1,-1},
+ {6,0,5}, {2,1,5}, {0,0,1}, {0,1,5},
+ /* hat #1 in metatile #5 (type F) */
+ {1,1,5}, {2,0,1}, {7,0,5}, {0,0,1},
+ {0,2,0}, {0,1,5}, {5,1,5}, {2,1,5},
+ {7,0,5}, {3,1,5}, {1,1,5}, {5,1,5},
+ {2,1,5}, {4,0,5}, {4,1,5}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,5}, {-1,-1,-1}, {3,1,5},
+ {4,1,5}, {6,1,5}, {2,1,5}, {1,1,5},
+ {5,1,5}, {7,1,5}, {0,2,0}, {7,1,3},
+ {6,1,5}, {-1,-1,-1}, {6,1,3}, {-1,-1,-1},
+ /* hat #2 in metatile #5 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #5 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #6 (type F) */
+ {1,0,6}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {0,0,6}, {5,0,6}, {2,0,6},
+ {-1,-1,-1}, {3,0,6}, {1,0,6}, {5,0,6},
+ {2,0,6}, {-1,-1,-1}, {4,0,6}, {-1,-1,-1},
+ {3,1,6}, {5,0,6}, {-1,-1,-1}, {3,0,6},
+ {4,0,6}, {6,0,6}, {2,0,6}, {1,0,6},
+ {5,0,6}, {7,0,6}, {-1,-1,-1}, {-1,-1,-1},
+ {6,0,6}, {2,1,6}, {0,0,3}, {0,1,6},
+ /* hat #1 in metatile #6 (type F) */
+ {1,1,6}, {2,0,3}, {7,0,6}, {0,0,3},
+ {3,0,0}, {0,1,6}, {5,1,6}, {2,1,6},
+ {7,0,6}, {3,1,6}, {1,1,6}, {5,1,6},
+ {2,1,6}, {4,0,6}, {4,1,6}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,6}, {-1,-1,-1}, {3,1,6},
+ {4,1,6}, {6,1,6}, {2,1,6}, {1,1,6},
+ {5,1,6}, {7,1,6}, {3,0,0}, {4,0,0},
+ {6,1,6}, {-1,-1,-1}, {0,0,2}, {-1,-1,-1},
+ /* hat #2 in metatile #6 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #6 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+};
+static const KitemapEntry kitemap_P[] = {
+ /* hat #0 in metatile #0 (type H) */
+ {1,0,0}, {7,3,0}, {3,0,4}, {4,0,4},
+ {4,3,0}, {0,0,0}, {5,0,0}, {2,0,0},
+ {3,0,4}, {3,0,0}, {1,0,0}, {5,0,0},
+ {2,0,0}, {1,1,9}, {4,0,0}, {6,1,9},
+ {0,0,3}, {5,0,0}, {6,1,9}, {3,0,0},
+ {4,0,0}, {6,0,0}, {2,0,0}, {1,0,0},
+ {5,0,0}, {7,0,0}, {4,3,0}, {3,3,0},
+ {6,0,0}, {1,0,3}, {7,1,0}, {6,0,3},
+ /* hat #1 in metatile #0 (type H) */
+ {1,1,0}, {1,1,8}, {7,1,5}, {6,1,8},
+ {0,1,3}, {0,1,0}, {5,1,0}, {2,1,0},
+ {7,1,5}, {3,1,0}, {1,1,0}, {5,1,0},
+ {2,1,0}, {4,1,5}, {4,1,0}, {0,3,0},
+ {2,3,0}, {5,1,0}, {0,3,0}, {3,1,0},
+ {4,1,0}, {6,1,0}, {2,1,0}, {1,1,0},
+ {5,1,0}, {7,1,0}, {0,1,3}, {7,0,3},
+ {6,1,0}, {3,3,0}, {6,0,3}, {7,0,0},
+ /* hat #2 in metatile #0 (type H) */
+ {1,2,0}, {1,0,6}, {7,1,4}, {6,0,6},
+ {3,0,5}, {0,2,0}, {5,2,0}, {2,2,0},
+ {7,1,4}, {3,2,0}, {1,2,0}, {5,2,0},
+ {2,2,0}, {4,1,4}, {4,2,0}, {6,3,0},
+ {1,3,0}, {5,2,0}, {6,3,0}, {3,2,0},
+ {4,2,0}, {6,2,0}, {2,2,0}, {1,2,0},
+ {5,2,0}, {7,2,0}, {3,0,5}, {4,0,5},
+ {6,2,0}, {0,3,0}, {3,1,5}, {4,1,5},
+ /* hat #3 in metatile #0 (type H) */
+ {7,2,0}, {1,3,0}, {3,1,0}, {4,1,0},
+ {0,3,0}, {4,2,0}, {2,3,0}, {5,3,0},
+ {3,3,0}, {4,1,0}, {5,3,0}, {1,3,0},
+ {7,1,0}, {2,3,0}, {6,0,0}, {4,3,0},
+ {5,3,0}, {1,0,0}, {3,3,0}, {6,0,0},
+ {6,3,0}, {4,3,0}, {1,3,0}, {2,3,0},
+ {7,3,0}, {5,3,0}, {3,2,0}, {4,2,0},
+ {0,0,0}, {6,3,0}, {3,1,4}, {4,1,4},
+ /* hat #0 in metatile #1 (type H) */
+ {1,0,1}, {7,3,1}, {3,0,10}, {4,0,10},
+ {4,3,1}, {0,0,1}, {5,0,1}, {2,0,1},
+ {3,0,10}, {3,0,1}, {1,0,1}, {5,0,1},
+ {2,0,1}, {1,0,9}, {4,0,1}, {6,0,9},
+ {0,0,4}, {5,0,1}, {6,0,9}, {3,0,1},
+ {4,0,1}, {6,0,1}, {2,0,1}, {1,0,1},
+ {5,0,1}, {7,0,1}, {4,3,1}, {3,3,1},
+ {6,0,1}, {1,0,4}, {7,1,1}, {6,0,4},
+ /* hat #1 in metatile #1 (type H) */
+ {1,1,1}, {1,1,6}, {7,1,2}, {6,1,6},
+ {0,1,4}, {0,1,1}, {5,1,1}, {2,1,1},
+ {7,1,2}, {3,1,1}, {1,1,1}, {5,1,1},
+ {2,1,1}, {4,1,2}, {4,1,1}, {0,3,1},
+ {2,3,1}, {5,1,1}, {0,3,1}, {3,1,1},
+ {4,1,1}, {6,1,1}, {2,1,1}, {1,1,1},
+ {5,1,1}, {7,1,1}, {0,1,4}, {7,0,4},
+ {6,1,1}, {3,3,1}, {6,0,4}, {7,0,1},
+ /* hat #2 in metatile #1 (type H) */
+ {1,2,1}, {1,1,7}, {7,1,10}, {6,1,7},
+ {3,0,2}, {0,2,1}, {5,2,1}, {2,2,1},
+ {7,1,10}, {3,2,1}, {1,2,1}, {5,2,1},
+ {2,2,1}, {4,1,10}, {4,2,1}, {6,3,1},
+ {1,3,1}, {5,2,1}, {6,3,1}, {3,2,1},
+ {4,2,1}, {6,2,1}, {2,2,1}, {1,2,1},
+ {5,2,1}, {7,2,1}, {3,0,2}, {4,0,2},
+ {6,2,1}, {0,3,1}, {3,1,2}, {4,1,2},
+ /* hat #3 in metatile #1 (type H) */
+ {7,2,1}, {1,3,1}, {3,1,1}, {4,1,1},
+ {0,3,1}, {4,2,1}, {2,3,1}, {5,3,1},
+ {3,3,1}, {4,1,1}, {5,3,1}, {1,3,1},
+ {7,1,1}, {2,3,1}, {6,0,1}, {4,3,1},
+ {5,3,1}, {1,0,1}, {3,3,1}, {6,0,1},
+ {6,3,1}, {4,3,1}, {1,3,1}, {2,3,1},
+ {7,3,1}, {5,3,1}, {3,2,1}, {4,2,1},
+ {0,0,1}, {6,3,1}, {3,1,10}, {4,1,10},
+ /* hat #0 in metatile #2 (type P) */
+ {1,0,2}, {-1,-1,-1}, {0,1,7}, {7,0,7},
+ {-1,-1,-1}, {0,0,2}, {5,0,2}, {2,0,2},
+ {0,1,7}, {3,0,2}, {1,0,2}, {5,0,2},
+ {2,0,2}, {1,2,1}, {4,0,2}, {6,2,1},
+ {3,1,2}, {5,0,2}, {6,2,1}, {3,0,2},
+ {4,0,2}, {6,0,2}, {2,0,2}, {1,0,2},
+ {5,0,2}, {7,0,2}, {-1,-1,-1}, {-1,-1,-1},
+ {6,0,2}, {2,1,2}, {-1,-1,-1}, {0,1,2},
+ /* hat #1 in metatile #2 (type P) */
+ {1,1,2}, {-1,-1,-1}, {7,0,2}, {-1,-1,-1},
+ {-1,-1,-1}, {0,1,2}, {5,1,2}, {2,1,2},
+ {7,0,2}, {3,1,2}, {1,1,2}, {5,1,2},
+ {2,1,2}, {4,0,2}, {4,1,2}, {7,2,1},
+ {3,1,1}, {5,1,2}, {7,2,1}, {3,1,2},
+ {4,1,2}, {6,1,2}, {2,1,2}, {1,1,2},
+ {5,1,2}, {7,1,2}, {-1,-1,-1}, {7,1,6},
+ {6,1,2}, {2,1,1}, {6,1,6}, {0,1,1},
+ /* hat #2 in metatile #2 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #2 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #3 (type P) */
+ {1,0,3}, {4,0,0}, {-1,-1,-1}, {7,1,9},
+ {7,0,0}, {0,0,3}, {5,0,3}, {2,0,3},
+ {-1,-1,-1}, {3,0,3}, {1,0,3}, {5,0,3},
+ {2,0,3}, {-1,-1,-1}, {4,0,3}, {-1,-1,-1},
+ {3,1,3}, {5,0,3}, {-1,-1,-1}, {3,0,3},
+ {4,0,3}, {6,0,3}, {2,0,3}, {1,0,3},
+ {5,0,3}, {7,0,3}, {7,0,0}, {7,1,0},
+ {6,0,3}, {2,1,3}, {6,1,0}, {0,1,3},
+ /* hat #1 in metatile #3 (type P) */
+ {1,1,3}, {1,1,0}, {7,0,3}, {6,1,0},
+ {0,1,8}, {0,1,3}, {5,1,3}, {2,1,3},
+ {7,0,3}, {3,1,3}, {1,1,3}, {5,1,3},
+ {2,1,3}, {4,0,3}, {4,1,3}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,3}, {-1,-1,-1}, {3,1,3},
+ {4,1,3}, {6,1,3}, {2,1,3}, {1,1,3},
+ {5,1,3}, {7,1,3}, {0,1,8}, {7,0,8},
+ {6,1,3}, {-1,-1,-1}, {6,0,8}, {-1,-1,-1},
+ /* hat #2 in metatile #3 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #3 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #4 (type P) */
+ {1,0,4}, {4,0,1}, {0,1,9}, {7,0,9},
+ {7,0,1}, {0,0,4}, {5,0,4}, {2,0,4},
+ {0,1,9}, {3,0,4}, {1,0,4}, {5,0,4},
+ {2,0,4}, {2,0,0}, {4,0,4}, {0,0,0},
+ {3,1,4}, {5,0,4}, {0,0,0}, {3,0,4},
+ {4,0,4}, {6,0,4}, {2,0,4}, {1,0,4},
+ {5,0,4}, {7,0,4}, {7,0,1}, {7,1,1},
+ {6,0,4}, {2,1,4}, {6,1,1}, {0,1,4},
+ /* hat #1 in metatile #4 (type P) */
+ {1,1,4}, {1,1,1}, {7,0,4}, {6,1,1},
+ {0,1,6}, {0,1,4}, {5,1,4}, {2,1,4},
+ {7,0,4}, {3,1,4}, {1,1,4}, {5,1,4},
+ {2,1,4}, {4,0,4}, {4,1,4}, {7,3,0},
+ {3,2,0}, {5,1,4}, {7,3,0}, {3,1,4},
+ {4,1,4}, {6,1,4}, {2,1,4}, {1,1,4},
+ {5,1,4}, {7,1,4}, {0,1,6}, {7,0,6},
+ {6,1,4}, {2,2,0}, {6,0,6}, {0,2,0},
+ /* hat #2 in metatile #4 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #4 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #5 (type F) */
+ {1,0,5}, {-1,-1,-1}, {0,0,6}, {-1,-1,-1},
+ {-1,-1,-1}, {0,0,5}, {5,0,5}, {2,0,5},
+ {0,0,6}, {3,0,5}, {1,0,5}, {5,0,5},
+ {2,0,5}, {1,2,0}, {4,0,5}, {6,2,0},
+ {3,1,5}, {5,0,5}, {6,2,0}, {3,0,5},
+ {4,0,5}, {6,0,5}, {2,0,5}, {1,0,5},
+ {5,0,5}, {7,0,5}, {-1,-1,-1}, {-1,-1,-1},
+ {6,0,5}, {2,1,5}, {-1,-1,-1}, {0,1,5},
+ /* hat #1 in metatile #5 (type F) */
+ {1,1,5}, {-1,-1,-1}, {7,0,5}, {-1,-1,-1},
+ {-1,-1,-1}, {0,1,5}, {5,1,5}, {2,1,5},
+ {7,0,5}, {3,1,5}, {1,1,5}, {5,1,5},
+ {2,1,5}, {4,0,5}, {4,1,5}, {7,2,0},
+ {3,1,0}, {5,1,5}, {7,2,0}, {3,1,5},
+ {4,1,5}, {6,1,5}, {2,1,5}, {1,1,5},
+ {5,1,5}, {7,1,5}, {-1,-1,-1}, {7,1,8},
+ {6,1,5}, {2,1,0}, {6,1,8}, {0,1,0},
+ /* hat #2 in metatile #5 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #5 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #6 (type F) */
+ {1,0,6}, {2,0,5}, {-1,-1,-1}, {0,0,5},
+ {0,2,0}, {0,0,6}, {5,0,6}, {2,0,6},
+ {-1,-1,-1}, {3,0,6}, {1,0,6}, {5,0,6},
+ {2,0,6}, {-1,-1,-1}, {4,0,6}, {-1,-1,-1},
+ {3,1,6}, {5,0,6}, {-1,-1,-1}, {3,0,6},
+ {4,0,6}, {6,0,6}, {2,0,6}, {1,0,6},
+ {5,0,6}, {7,0,6}, {0,2,0}, {7,1,4},
+ {6,0,6}, {2,1,6}, {6,1,4}, {0,1,6},
+ /* hat #1 in metatile #6 (type F) */
+ {1,1,6}, {1,1,4}, {7,0,6}, {6,1,4},
+ {0,1,1}, {0,1,6}, {5,1,6}, {2,1,6},
+ {7,0,6}, {3,1,6}, {1,1,6}, {5,1,6},
+ {2,1,6}, {4,0,6}, {4,1,6}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,6}, {-1,-1,-1}, {3,1,6},
+ {4,1,6}, {6,1,6}, {2,1,6}, {1,1,6},
+ {5,1,6}, {7,1,6}, {0,1,1}, {7,1,2},
+ {6,1,6}, {-1,-1,-1}, {6,1,2}, {-1,-1,-1},
+ /* hat #2 in metatile #6 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #6 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #7 (type F) */
+ {1,0,7}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {0,0,7}, {5,0,7}, {2,0,7},
+ {-1,-1,-1}, {3,0,7}, {1,0,7}, {5,0,7},
+ {2,0,7}, {-1,-1,-1}, {4,0,7}, {-1,-1,-1},
+ {3,1,7}, {5,0,7}, {-1,-1,-1}, {3,0,7},
+ {4,0,7}, {6,0,7}, {2,0,7}, {1,0,7},
+ {5,0,7}, {7,0,7}, {-1,-1,-1}, {-1,-1,-1},
+ {6,0,7}, {2,1,7}, {0,0,2}, {0,1,7},
+ /* hat #1 in metatile #7 (type F) */
+ {1,1,7}, {2,0,2}, {7,0,7}, {0,0,2},
+ {0,2,1}, {0,1,7}, {5,1,7}, {2,1,7},
+ {7,0,7}, {3,1,7}, {1,1,7}, {5,1,7},
+ {2,1,7}, {4,0,7}, {4,1,7}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,7}, {-1,-1,-1}, {3,1,7},
+ {4,1,7}, {6,1,7}, {2,1,7}, {1,1,7},
+ {5,1,7}, {7,1,7}, {0,2,1}, {7,1,10},
+ {6,1,7}, {-1,-1,-1}, {6,1,10}, {-1,-1,-1},
+ /* hat #2 in metatile #7 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #7 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #8 (type F) */
+ {1,0,8}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {0,0,8}, {5,0,8}, {2,0,8},
+ {-1,-1,-1}, {3,0,8}, {1,0,8}, {5,0,8},
+ {2,0,8}, {-1,-1,-1}, {4,0,8}, {-1,-1,-1},
+ {3,1,8}, {5,0,8}, {-1,-1,-1}, {3,0,8},
+ {4,0,8}, {6,0,8}, {2,0,8}, {1,0,8},
+ {5,0,8}, {7,0,8}, {-1,-1,-1}, {7,1,3},
+ {6,0,8}, {2,1,8}, {6,1,3}, {0,1,8},
+ /* hat #1 in metatile #8 (type F) */
+ {1,1,8}, {1,1,3}, {7,0,8}, {6,1,3},
+ {0,1,0}, {0,1,8}, {5,1,8}, {2,1,8},
+ {7,0,8}, {3,1,8}, {1,1,8}, {5,1,8},
+ {2,1,8}, {4,0,8}, {4,1,8}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,8}, {-1,-1,-1}, {3,1,8},
+ {4,1,8}, {6,1,8}, {2,1,8}, {1,1,8},
+ {5,1,8}, {7,1,8}, {0,1,0}, {7,1,5},
+ {6,1,8}, {-1,-1,-1}, {6,1,5}, {-1,-1,-1},
+ /* hat #2 in metatile #8 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #8 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #9 (type F) */
+ {1,0,9}, {2,0,10}, {-1,-1,-1}, {0,0,10},
+ {3,0,1}, {0,0,9}, {5,0,9}, {2,0,9},
+ {-1,-1,-1}, {3,0,9}, {1,0,9}, {5,0,9},
+ {2,0,9}, {-1,-1,-1}, {4,0,9}, {-1,-1,-1},
+ {3,1,9}, {5,0,9}, {-1,-1,-1}, {3,0,9},
+ {4,0,9}, {6,0,9}, {2,0,9}, {1,0,9},
+ {5,0,9}, {7,0,9}, {3,0,1}, {4,0,1},
+ {6,0,9}, {2,1,9}, {0,0,4}, {0,1,9},
+ /* hat #1 in metatile #9 (type F) */
+ {1,1,9}, {2,0,4}, {7,0,9}, {0,0,4},
+ {3,0,0}, {0,1,9}, {5,1,9}, {2,1,9},
+ {7,0,9}, {3,1,9}, {1,1,9}, {5,1,9},
+ {2,1,9}, {4,0,9}, {4,1,9}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,9}, {-1,-1,-1}, {3,1,9},
+ {4,1,9}, {6,1,9}, {2,1,9}, {1,1,9},
+ {5,1,9}, {7,1,9}, {3,0,0}, {4,0,0},
+ {6,1,9}, {-1,-1,-1}, {0,0,3}, {-1,-1,-1},
+ /* hat #2 in metatile #9 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #9 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #10 (type F) */
+ {1,0,10}, {-1,-1,-1}, {0,0,9}, {-1,-1,-1},
+ {-1,-1,-1}, {0,0,10}, {5,0,10}, {2,0,10},
+ {0,0,9}, {3,0,10}, {1,0,10}, {5,0,10},
+ {2,0,10}, {2,0,1}, {4,0,10}, {0,0,1},
+ {3,1,10}, {5,0,10}, {0,0,1}, {3,0,10},
+ {4,0,10}, {6,0,10}, {2,0,10}, {1,0,10},
+ {5,0,10}, {7,0,10}, {-1,-1,-1}, {-1,-1,-1},
+ {6,0,10}, {2,1,10}, {-1,-1,-1}, {0,1,10},
+ /* hat #1 in metatile #10 (type F) */
+ {1,1,10}, {-1,-1,-1}, {7,0,10}, {-1,-1,-1},
+ {-1,-1,-1}, {0,1,10}, {5,1,10}, {2,1,10},
+ {7,0,10}, {3,1,10}, {1,1,10}, {5,1,10},
+ {2,1,10}, {4,0,10}, {4,1,10}, {7,3,1},
+ {3,2,1}, {5,1,10}, {7,3,1}, {3,1,10},
+ {4,1,10}, {6,1,10}, {2,1,10}, {1,1,10},
+ {5,1,10}, {7,1,10}, {-1,-1,-1}, {7,1,7},
+ {6,1,10}, {2,2,1}, {6,1,7}, {0,2,1},
+ /* hat #2 in metatile #10 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #10 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+};
+static const KitemapEntry kitemap_F[] = {
+ /* hat #0 in metatile #0 (type H) */
+ {1,0,0}, {7,3,0}, {3,0,3}, {4,0,3},
+ {4,3,0}, {0,0,0}, {5,0,0}, {2,0,0},
+ {3,0,3}, {3,0,0}, {1,0,0}, {5,0,0},
+ {2,0,0}, {1,1,9}, {4,0,0}, {6,1,9},
+ {0,0,2}, {5,0,0}, {6,1,9}, {3,0,0},
+ {4,0,0}, {6,0,0}, {2,0,0}, {1,0,0},
+ {5,0,0}, {7,0,0}, {4,3,0}, {3,3,0},
+ {6,0,0}, {1,0,2}, {7,1,0}, {6,0,2},
+ /* hat #1 in metatile #0 (type H) */
+ {1,1,0}, {1,1,8}, {7,1,4}, {6,1,8},
+ {0,1,2}, {0,1,0}, {5,1,0}, {2,1,0},
+ {7,1,4}, {3,1,0}, {1,1,0}, {5,1,0},
+ {2,1,0}, {4,1,4}, {4,1,0}, {0,3,0},
+ {2,3,0}, {5,1,0}, {0,3,0}, {3,1,0},
+ {4,1,0}, {6,1,0}, {2,1,0}, {1,1,0},
+ {5,1,0}, {7,1,0}, {0,1,2}, {7,0,2},
+ {6,1,0}, {3,3,0}, {6,0,2}, {7,0,0},
+ /* hat #2 in metatile #0 (type H) */
+ {1,2,0}, {1,0,5}, {7,1,3}, {6,0,5},
+ {3,0,4}, {0,2,0}, {5,2,0}, {2,2,0},
+ {7,1,3}, {3,2,0}, {1,2,0}, {5,2,0},
+ {2,2,0}, {4,1,3}, {4,2,0}, {6,3,0},
+ {1,3,0}, {5,2,0}, {6,3,0}, {3,2,0},
+ {4,2,0}, {6,2,0}, {2,2,0}, {1,2,0},
+ {5,2,0}, {7,2,0}, {3,0,4}, {4,0,4},
+ {6,2,0}, {0,3,0}, {3,1,4}, {4,1,4},
+ /* hat #3 in metatile #0 (type H) */
+ {7,2,0}, {1,3,0}, {3,1,0}, {4,1,0},
+ {0,3,0}, {4,2,0}, {2,3,0}, {5,3,0},
+ {3,3,0}, {4,1,0}, {5,3,0}, {1,3,0},
+ {7,1,0}, {2,3,0}, {6,0,0}, {4,3,0},
+ {5,3,0}, {1,0,0}, {3,3,0}, {6,0,0},
+ {6,3,0}, {4,3,0}, {1,3,0}, {2,3,0},
+ {7,3,0}, {5,3,0}, {3,2,0}, {4,2,0},
+ {0,0,0}, {6,3,0}, {3,1,3}, {4,1,3},
+ /* hat #0 in metatile #1 (type H) */
+ {1,0,1}, {7,3,1}, {3,0,10}, {4,0,10},
+ {4,3,1}, {0,0,1}, {5,0,1}, {2,0,1},
+ {3,0,10}, {3,0,1}, {1,0,1}, {5,0,1},
+ {2,0,1}, {1,0,9}, {4,0,1}, {6,0,9},
+ {0,0,3}, {5,0,1}, {6,0,9}, {3,0,1},
+ {4,0,1}, {6,0,1}, {2,0,1}, {1,0,1},
+ {5,0,1}, {7,0,1}, {4,3,1}, {3,3,1},
+ {6,0,1}, {1,0,3}, {7,1,1}, {6,0,3},
+ /* hat #1 in metatile #1 (type H) */
+ {1,1,1}, {1,1,5}, {7,1,6}, {6,1,5},
+ {0,1,3}, {0,1,1}, {5,1,1}, {2,1,1},
+ {7,1,6}, {3,1,1}, {1,1,1}, {5,1,1},
+ {2,1,1}, {4,1,6}, {4,1,1}, {0,3,1},
+ {2,3,1}, {5,1,1}, {0,3,1}, {3,1,1},
+ {4,1,1}, {6,1,1}, {2,1,1}, {1,1,1},
+ {5,1,1}, {7,1,1}, {0,1,3}, {7,0,3},
+ {6,1,1}, {3,3,1}, {6,0,3}, {7,0,1},
+ /* hat #2 in metatile #1 (type H) */
+ {1,2,1}, {1,0,7}, {7,1,10}, {6,0,7},
+ {3,0,6}, {0,2,1}, {5,2,1}, {2,2,1},
+ {7,1,10}, {3,2,1}, {1,2,1}, {5,2,1},
+ {2,2,1}, {4,1,10}, {4,2,1}, {6,3,1},
+ {1,3,1}, {5,2,1}, {6,3,1}, {3,2,1},
+ {4,2,1}, {6,2,1}, {2,2,1}, {1,2,1},
+ {5,2,1}, {7,2,1}, {3,0,6}, {4,0,6},
+ {6,2,1}, {0,3,1}, {3,1,6}, {4,1,6},
+ /* hat #3 in metatile #1 (type H) */
+ {7,2,1}, {1,3,1}, {3,1,1}, {4,1,1},
+ {0,3,1}, {4,2,1}, {2,3,1}, {5,3,1},
+ {3,3,1}, {4,1,1}, {5,3,1}, {1,3,1},
+ {7,1,1}, {2,3,1}, {6,0,1}, {4,3,1},
+ {5,3,1}, {1,0,1}, {3,3,1}, {6,0,1},
+ {6,3,1}, {4,3,1}, {1,3,1}, {2,3,1},
+ {7,3,1}, {5,3,1}, {3,2,1}, {4,2,1},
+ {0,0,1}, {6,3,1}, {3,1,10}, {4,1,10},
+ /* hat #0 in metatile #2 (type P) */
+ {1,0,2}, {4,0,0}, {-1,-1,-1}, {7,1,9},
+ {7,0,0}, {0,0,2}, {5,0,2}, {2,0,2},
+ {-1,-1,-1}, {3,0,2}, {1,0,2}, {5,0,2},
+ {2,0,2}, {-1,-1,-1}, {4,0,2}, {-1,-1,-1},
+ {3,1,2}, {5,0,2}, {-1,-1,-1}, {3,0,2},
+ {4,0,2}, {6,0,2}, {2,0,2}, {1,0,2},
+ {5,0,2}, {7,0,2}, {7,0,0}, {7,1,0},
+ {6,0,2}, {2,1,2}, {6,1,0}, {0,1,2},
+ /* hat #1 in metatile #2 (type P) */
+ {1,1,2}, {1,1,0}, {7,0,2}, {6,1,0},
+ {0,1,8}, {0,1,2}, {5,1,2}, {2,1,2},
+ {7,0,2}, {3,1,2}, {1,1,2}, {5,1,2},
+ {2,1,2}, {4,0,2}, {4,1,2}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,2}, {-1,-1,-1}, {3,1,2},
+ {4,1,2}, {6,1,2}, {2,1,2}, {1,1,2},
+ {5,1,2}, {7,1,2}, {0,1,8}, {7,0,8},
+ {6,1,2}, {-1,-1,-1}, {6,0,8}, {-1,-1,-1},
+ /* hat #2 in metatile #2 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #2 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #3 (type P) */
+ {1,0,3}, {4,0,1}, {0,1,9}, {7,0,9},
+ {7,0,1}, {0,0,3}, {5,0,3}, {2,0,3},
+ {0,1,9}, {3,0,3}, {1,0,3}, {5,0,3},
+ {2,0,3}, {2,0,0}, {4,0,3}, {0,0,0},
+ {3,1,3}, {5,0,3}, {0,0,0}, {3,0,3},
+ {4,0,3}, {6,0,3}, {2,0,3}, {1,0,3},
+ {5,0,3}, {7,0,3}, {7,0,1}, {7,1,1},
+ {6,0,3}, {2,1,3}, {6,1,1}, {0,1,3},
+ /* hat #1 in metatile #3 (type P) */
+ {1,1,3}, {1,1,1}, {7,0,3}, {6,1,1},
+ {0,1,5}, {0,1,3}, {5,1,3}, {2,1,3},
+ {7,0,3}, {3,1,3}, {1,1,3}, {5,1,3},
+ {2,1,3}, {4,0,3}, {4,1,3}, {7,3,0},
+ {3,2,0}, {5,1,3}, {7,3,0}, {3,1,3},
+ {4,1,3}, {6,1,3}, {2,1,3}, {1,1,3},
+ {5,1,3}, {7,1,3}, {0,1,5}, {7,0,5},
+ {6,1,3}, {2,2,0}, {6,0,5}, {0,2,0},
+ /* hat #2 in metatile #3 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #3 (type P) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #4 (type F) */
+ {1,0,4}, {-1,-1,-1}, {0,0,5}, {-1,-1,-1},
+ {-1,-1,-1}, {0,0,4}, {5,0,4}, {2,0,4},
+ {0,0,5}, {3,0,4}, {1,0,4}, {5,0,4},
+ {2,0,4}, {1,2,0}, {4,0,4}, {6,2,0},
+ {3,1,4}, {5,0,4}, {6,2,0}, {3,0,4},
+ {4,0,4}, {6,0,4}, {2,0,4}, {1,0,4},
+ {5,0,4}, {7,0,4}, {-1,-1,-1}, {-1,-1,-1},
+ {6,0,4}, {2,1,4}, {-1,-1,-1}, {0,1,4},
+ /* hat #1 in metatile #4 (type F) */
+ {1,1,4}, {-1,-1,-1}, {7,0,4}, {-1,-1,-1},
+ {-1,-1,-1}, {0,1,4}, {5,1,4}, {2,1,4},
+ {7,0,4}, {3,1,4}, {1,1,4}, {5,1,4},
+ {2,1,4}, {4,0,4}, {4,1,4}, {7,2,0},
+ {3,1,0}, {5,1,4}, {7,2,0}, {3,1,4},
+ {4,1,4}, {6,1,4}, {2,1,4}, {1,1,4},
+ {5,1,4}, {7,1,4}, {-1,-1,-1}, {7,1,8},
+ {6,1,4}, {2,1,0}, {6,1,8}, {0,1,0},
+ /* hat #2 in metatile #4 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #4 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #5 (type F) */
+ {1,0,5}, {2,0,4}, {-1,-1,-1}, {0,0,4},
+ {0,2,0}, {0,0,5}, {5,0,5}, {2,0,5},
+ {-1,-1,-1}, {3,0,5}, {1,0,5}, {5,0,5},
+ {2,0,5}, {-1,-1,-1}, {4,0,5}, {-1,-1,-1},
+ {3,1,5}, {5,0,5}, {-1,-1,-1}, {3,0,5},
+ {4,0,5}, {6,0,5}, {2,0,5}, {1,0,5},
+ {5,0,5}, {7,0,5}, {0,2,0}, {7,1,3},
+ {6,0,5}, {2,1,5}, {6,1,3}, {0,1,5},
+ /* hat #1 in metatile #5 (type F) */
+ {1,1,5}, {1,1,3}, {7,0,5}, {6,1,3},
+ {0,1,1}, {0,1,5}, {5,1,5}, {2,1,5},
+ {7,0,5}, {3,1,5}, {1,1,5}, {5,1,5},
+ {2,1,5}, {4,0,5}, {4,1,5}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,5}, {-1,-1,-1}, {3,1,5},
+ {4,1,5}, {6,1,5}, {2,1,5}, {1,1,5},
+ {5,1,5}, {7,1,5}, {0,1,1}, {7,1,6},
+ {6,1,5}, {-1,-1,-1}, {6,1,6}, {-1,-1,-1},
+ /* hat #2 in metatile #5 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #5 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #6 (type F) */
+ {1,0,6}, {-1,-1,-1}, {0,0,7}, {-1,-1,-1},
+ {-1,-1,-1}, {0,0,6}, {5,0,6}, {2,0,6},
+ {0,0,7}, {3,0,6}, {1,0,6}, {5,0,6},
+ {2,0,6}, {1,2,1}, {4,0,6}, {6,2,1},
+ {3,1,6}, {5,0,6}, {6,2,1}, {3,0,6},
+ {4,0,6}, {6,0,6}, {2,0,6}, {1,0,6},
+ {5,0,6}, {7,0,6}, {-1,-1,-1}, {-1,-1,-1},
+ {6,0,6}, {2,1,6}, {-1,-1,-1}, {0,1,6},
+ /* hat #1 in metatile #6 (type F) */
+ {1,1,6}, {-1,-1,-1}, {7,0,6}, {-1,-1,-1},
+ {-1,-1,-1}, {0,1,6}, {5,1,6}, {2,1,6},
+ {7,0,6}, {3,1,6}, {1,1,6}, {5,1,6},
+ {2,1,6}, {4,0,6}, {4,1,6}, {7,2,1},
+ {3,1,1}, {5,1,6}, {7,2,1}, {3,1,6},
+ {4,1,6}, {6,1,6}, {2,1,6}, {1,1,6},
+ {5,1,6}, {7,1,6}, {-1,-1,-1}, {7,1,5},
+ {6,1,6}, {2,1,1}, {6,1,5}, {0,1,1},
+ /* hat #2 in metatile #6 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #6 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #7 (type F) */
+ {1,0,7}, {2,0,6}, {-1,-1,-1}, {0,0,6},
+ {0,2,1}, {0,0,7}, {5,0,7}, {2,0,7},
+ {-1,-1,-1}, {3,0,7}, {1,0,7}, {5,0,7},
+ {2,0,7}, {-1,-1,-1}, {4,0,7}, {-1,-1,-1},
+ {3,1,7}, {5,0,7}, {-1,-1,-1}, {3,0,7},
+ {4,0,7}, {6,0,7}, {2,0,7}, {1,0,7},
+ {5,0,7}, {7,0,7}, {0,2,1}, {7,1,10},
+ {6,0,7}, {2,1,7}, {6,1,10}, {0,1,7},
+ /* hat #1 in metatile #7 (type F) */
+ {1,1,7}, {1,1,10}, {7,0,7}, {6,1,10},
+ {-1,-1,-1}, {0,1,7}, {5,1,7}, {2,1,7},
+ {7,0,7}, {3,1,7}, {1,1,7}, {5,1,7},
+ {2,1,7}, {4,0,7}, {4,1,7}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,7}, {-1,-1,-1}, {3,1,7},
+ {4,1,7}, {6,1,7}, {2,1,7}, {1,1,7},
+ {5,1,7}, {7,1,7}, {-1,-1,-1}, {-1,-1,-1},
+ {6,1,7}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #2 in metatile #7 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #7 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #8 (type F) */
+ {1,0,8}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {0,0,8}, {5,0,8}, {2,0,8},
+ {-1,-1,-1}, {3,0,8}, {1,0,8}, {5,0,8},
+ {2,0,8}, {-1,-1,-1}, {4,0,8}, {-1,-1,-1},
+ {3,1,8}, {5,0,8}, {-1,-1,-1}, {3,0,8},
+ {4,0,8}, {6,0,8}, {2,0,8}, {1,0,8},
+ {5,0,8}, {7,0,8}, {-1,-1,-1}, {7,1,2},
+ {6,0,8}, {2,1,8}, {6,1,2}, {0,1,8},
+ /* hat #1 in metatile #8 (type F) */
+ {1,1,8}, {1,1,2}, {7,0,8}, {6,1,2},
+ {0,1,0}, {0,1,8}, {5,1,8}, {2,1,8},
+ {7,0,8}, {3,1,8}, {1,1,8}, {5,1,8},
+ {2,1,8}, {4,0,8}, {4,1,8}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,8}, {-1,-1,-1}, {3,1,8},
+ {4,1,8}, {6,1,8}, {2,1,8}, {1,1,8},
+ {5,1,8}, {7,1,8}, {0,1,0}, {7,1,4},
+ {6,1,8}, {-1,-1,-1}, {6,1,4}, {-1,-1,-1},
+ /* hat #2 in metatile #8 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #8 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #9 (type F) */
+ {1,0,9}, {2,0,10}, {-1,-1,-1}, {0,0,10},
+ {3,0,1}, {0,0,9}, {5,0,9}, {2,0,9},
+ {-1,-1,-1}, {3,0,9}, {1,0,9}, {5,0,9},
+ {2,0,9}, {-1,-1,-1}, {4,0,9}, {-1,-1,-1},
+ {3,1,9}, {5,0,9}, {-1,-1,-1}, {3,0,9},
+ {4,0,9}, {6,0,9}, {2,0,9}, {1,0,9},
+ {5,0,9}, {7,0,9}, {3,0,1}, {4,0,1},
+ {6,0,9}, {2,1,9}, {0,0,3}, {0,1,9},
+ /* hat #1 in metatile #9 (type F) */
+ {1,1,9}, {2,0,3}, {7,0,9}, {0,0,3},
+ {3,0,0}, {0,1,9}, {5,1,9}, {2,1,9},
+ {7,0,9}, {3,1,9}, {1,1,9}, {5,1,9},
+ {2,1,9}, {4,0,9}, {4,1,9}, {-1,-1,-1},
+ {-1,-1,-1}, {5,1,9}, {-1,-1,-1}, {3,1,9},
+ {4,1,9}, {6,1,9}, {2,1,9}, {1,1,9},
+ {5,1,9}, {7,1,9}, {3,0,0}, {4,0,0},
+ {6,1,9}, {-1,-1,-1}, {0,0,2}, {-1,-1,-1},
+ /* hat #2 in metatile #9 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #9 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #0 in metatile #10 (type F) */
+ {1,0,10}, {-1,-1,-1}, {0,0,9}, {-1,-1,-1},
+ {-1,-1,-1}, {0,0,10}, {5,0,10}, {2,0,10},
+ {0,0,9}, {3,0,10}, {1,0,10}, {5,0,10},
+ {2,0,10}, {2,0,1}, {4,0,10}, {0,0,1},
+ {3,1,10}, {5,0,10}, {0,0,1}, {3,0,10},
+ {4,0,10}, {6,0,10}, {2,0,10}, {1,0,10},
+ {5,0,10}, {7,0,10}, {-1,-1,-1}, {-1,-1,-1},
+ {6,0,10}, {2,1,10}, {-1,-1,-1}, {0,1,10},
+ /* hat #1 in metatile #10 (type F) */
+ {1,1,10}, {-1,-1,-1}, {7,0,10}, {-1,-1,-1},
+ {0,1,7}, {0,1,10}, {5,1,10}, {2,1,10},
+ {7,0,10}, {3,1,10}, {1,1,10}, {5,1,10},
+ {2,1,10}, {4,0,10}, {4,1,10}, {7,3,1},
+ {3,2,1}, {5,1,10}, {7,3,1}, {3,1,10},
+ {4,1,10}, {6,1,10}, {2,1,10}, {1,1,10},
+ {5,1,10}, {7,1,10}, {0,1,7}, {7,0,7},
+ {6,1,10}, {2,2,1}, {6,0,7}, {0,2,1},
+ /* hat #2 in metatile #10 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ /* hat #3 in metatile #10 (type F) does not exist */
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+ {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1}, {-1,-1,-1},
+};
+static const KitemapEntry *const kitemap[] = {
+ kitemap_H,
+ kitemap_T,
+ kitemap_P,
+ kitemap_F,
+};
+
+static const MetamapEntry metamap_H[] = {
+ /* 0, 0 -> */ {0, 0}, /* no alternatives */
+ /* 1, 0 -> */ {1, 0}, /* no alternatives */
+ /* 2, 0 -> */ {2, 0}, /* no alternatives */
+ /* 3, 0 -> */ {3, 0}, /* no alternatives */
+ /* 4, 0 -> */ {3, 4},
+ /* 5, 0 -> */ {2, 8},
+ /* 6, 0 -> */ {3, 3},
+ /* 7, 0 -> */ {8, 4},
+ /* 8, 0 -> */ {9, 8},
+ /* 9, 0 -> */ {9, 4},
+ /* 10, 0 -> */ {8, 1},
+ /* 11, 0 -> */ {10, 5},
+ /* 12, 0 -> */ {5, 3},
+ /* 0, 1 -> */ {0, 1}, /* no alternatives */
+ /* 1, 1 -> */ {1, 1}, /* no alternatives */
+ /* 2, 1 -> */ {2, 1}, /* no alternatives */
+ /* 3, 1 -> */ {3, 1}, /* no alternatives */
+ /* 4, 1 -> */ {2, 9},
+ /* 5, 1 -> */ {2, 3},
+ /* 6, 1 -> */ {2, 6},
+ /* 7, 1 -> */ {10, 4},
+ /* 8, 1 -> */ {6, 3},
+ /* 9, 1 -> */ {9, 9},
+ /* 10, 1 -> */ {6, 10},
+ /* 11, 1 -> */ {4, 3},
+ /* 12, 1 -> */ {6, 6},
+ /* 0, 2 -> */ {0, 2}, /* no alternatives */
+ /* 1, 2 -> */ {1, 2}, /* no alternatives */
+ /* 2, 2 -> */ {2, 2}, /* no alternatives */
+ /* 3, 2 -> */ {3, 2}, /* no alternatives */
+ /* 4, 2 -> */ {3, 5},
+ /* 5, 2 -> */ {2, 12},
+ /* 6, 2 -> */ {1, 3},
+ /* 7, 2 -> */ {8, 5},
+ /* 8, 2 -> */ {9, 12},
+ /* 9, 2 -> */ {9, 5},
+ /* 10, 2 -> */ {12, 0},
+ /* 11, 2 -> */ {5, 6},
+ /* 12, 2 -> */ {11, 1},
+ /* 0, 3 -> */ {0, 3}, /* no alternatives */
+ /* 1, 3 -> */ {6, 2},
+ /* 2, 3 -> */ {5, 1},
+ /* 3, 3 -> */ {6, 0},
+ /* 4, 3 -> */ {12, 2},
+ /* 5, 3 -> */ {10, 2},
+ /* 6, 3 -> */ {10, 0},
+ /* 7, 3 -> */ {-1,-1}, /* does not exist */
+ /* 8, 3 -> */ {-1,-1}, /* does not exist */
+ /* 9, 3 -> */ {-1,-1}, /* does not exist */
+ /* 10, 3 -> */ {-1,-1}, /* does not exist */
+ /* 11, 3 -> */ {-1,-1}, /* does not exist */
+ /* 12, 3 -> */ {-1,-1}, /* does not exist */
+ /* 0, 4 -> */ {0, 4}, /* no alternatives */
+ /* 1, 4 -> */ {1, 4}, /* no alternatives */
+ /* 2, 4 -> */ {2, 4}, /* no alternatives */
+ /* 3, 4 -> */ {4, 0},
+ /* 4, 4 -> */ {4, 4}, /* no alternatives */
+ /* 5, 4 -> */ {5, 7},
+ /* 6, 4 -> */ {6, 4}, /* no alternatives */
+ /* 7, 4 -> */ {4, 9},
+ /* 8, 4 -> */ {6, 7},
+ /* 9, 4 -> */ {9, 0},
+ /* 10, 4 -> */ {8, 9},
+ /* 11, 4 -> */ {-1,-1}, /* does not exist */
+ /* 12, 4 -> */ {-1,-1}, /* does not exist */
+ /* 0, 5 -> */ {0, 5}, /* no alternatives */
+ /* 1, 5 -> */ {1, 5}, /* no alternatives */
+ /* 2, 5 -> */ {2, 5}, /* no alternatives */
+ /* 3, 5 -> */ {4, 2},
+ /* 4, 5 -> */ {4, 5}, /* no alternatives */
+ /* 5, 5 -> */ {5, 11},
+ /* 6, 5 -> */ {6, 5}, /* no alternatives */
+ /* 7, 5 -> */ {4, 8},
+ /* 8, 5 -> */ {6, 11},
+ /* 9, 5 -> */ {9, 2},
+ /* 10, 5 -> */ {8, 8},
+ /* 11, 5 -> */ {-1,-1}, /* does not exist */
+ /* 12, 5 -> */ {-1,-1}, /* does not exist */
+ /* 0, 6 -> */ {0, 6}, /* no alternatives */
+ /* 1, 6 -> */ {1, 6}, /* no alternatives */
+ /* 2, 6 -> */ {6, 1},
+ /* 3, 6 -> */ {3, 6}, /* no alternatives */
+ /* 4, 6 -> */ {4, 6}, /* no alternatives */
+ /* 5, 6 -> */ {8, 12},
+ /* 6, 6 -> */ {12, 1},
+ /* 7, 6 -> */ {10, 1},
+ /* 8, 6 -> */ {4, 12},
+ /* 9, 6 -> */ {9, 6}, /* no alternatives */
+ /* 10, 6 -> */ {5, 10},
+ /* 11, 6 -> */ {-1,-1}, /* does not exist */
+ /* 12, 6 -> */ {-1,-1}, /* does not exist */
+ /* 0, 7 -> */ {0, 7}, /* no alternatives */
+ /* 1, 7 -> */ {1, 7}, /* no alternatives */
+ /* 2, 7 -> */ {2, 7}, /* no alternatives */
+ /* 3, 7 -> */ {3, 7}, /* no alternatives */
+ /* 4, 7 -> */ {4, 7}, /* no alternatives */
+ /* 5, 7 -> */ {5, 4},
+ /* 6, 7 -> */ {7, 0},
+ /* 7, 7 -> */ {10, 8},
+ /* 8, 7 -> */ {8, 7}, /* no alternatives */
+ /* 9, 7 -> */ {9, 7}, /* no alternatives */
+ /* 10, 7 -> */ {10, 7}, /* no alternatives */
+ /* 11, 7 -> */ {-1,-1}, /* does not exist */
+ /* 12, 7 -> */ {-1,-1}, /* does not exist */
+ /* 0, 8 -> */ {0, 8}, /* no alternatives */
+ /* 1, 8 -> */ {1, 8}, /* no alternatives */
+ /* 2, 8 -> */ {5, 0},
+ /* 3, 8 -> */ {3, 8}, /* no alternatives */
+ /* 4, 8 -> */ {7, 5},
+ /* 5, 8 -> */ {5, 8}, /* no alternatives */
+ /* 6, 8 -> */ {6, 8}, /* no alternatives */
+ /* 7, 8 -> */ {7, 8}, /* no alternatives */
+ /* 8, 8 -> */ {11, 0},
+ /* 9, 8 -> */ {8, 0},
+ /* 10, 8 -> */ {7, 7},
+ /* 11, 8 -> */ {-1,-1}, /* does not exist */
+ /* 12, 8 -> */ {-1,-1}, /* does not exist */
+ /* 0, 9 -> */ {0, 9}, /* no alternatives */
+ /* 1, 9 -> */ {1, 9}, /* no alternatives */
+ /* 2, 9 -> */ {4, 1},
+ /* 3, 9 -> */ {3, 9}, /* no alternatives */
+ /* 4, 9 -> */ {7, 4},
+ /* 5, 9 -> */ {5, 9}, /* no alternatives */
+ /* 6, 9 -> */ {6, 9}, /* no alternatives */
+ /* 7, 9 -> */ {7, 9}, /* no alternatives */
+ /* 8, 9 -> */ {7, 1},
+ /* 9, 9 -> */ {9, 1},
+ /* 10, 9 -> */ {7, 10},
+ /* 11, 9 -> */ {-1,-1}, /* does not exist */
+ /* 12, 9 -> */ {-1,-1}, /* does not exist */
+ /* 0, 10 -> */ {0, 10}, /* no alternatives */
+ /* 1, 10 -> */ {1, 10}, /* no alternatives */
+ /* 2, 10 -> */ {2, 10}, /* no alternatives */
+ /* 3, 10 -> */ {3, 10}, /* no alternatives */
+ /* 4, 10 -> */ {4, 10}, /* no alternatives */
+ /* 5, 10 -> */ {10, 6},
+ /* 6, 10 -> */ {7, 6},
+ /* 7, 10 -> */ {10, 9},
+ /* 8, 10 -> */ {8, 10}, /* no alternatives */
+ /* 9, 10 -> */ {9, 10}, /* no alternatives */
+ /* 10, 10 -> */ {10, 10}, /* no alternatives */
+ /* 11, 10 -> */ {-1,-1}, /* does not exist */
+ /* 12, 10 -> */ {-1,-1}, /* does not exist */
+ /* 0, 11 -> */ {0, 11}, /* no alternatives */
+ /* 1, 11 -> */ {1, 11}, /* no alternatives */
+ /* 2, 11 -> */ {2, 11}, /* no alternatives */
+ /* 3, 11 -> */ {3, 11}, /* no alternatives */
+ /* 4, 11 -> */ {4, 11}, /* no alternatives */
+ /* 5, 11 -> */ {5, 5},
+ /* 6, 11 -> */ {7, 2},
+ /* 7, 11 -> */ {10, 12},
+ /* 8, 11 -> */ {8, 11}, /* no alternatives */
+ /* 9, 11 -> */ {9, 11}, /* no alternatives */
+ /* 10, 11 -> */ {10, 11}, /* no alternatives */
+ /* 11, 11 -> */ {-1,-1}, /* does not exist */
+ /* 12, 11 -> */ {-1,-1}, /* does not exist */
+ /* 0, 12 -> */ {0, 12}, /* no alternatives */
+ /* 1, 12 -> */ {1, 12}, /* no alternatives */
+ /* 2, 12 -> */ {5, 2},
+ /* 3, 12 -> */ {3, 12}, /* no alternatives */
+ /* 4, 12 -> */ {8, 6},
+ /* 5, 12 -> */ {5, 12}, /* no alternatives */
+ /* 6, 12 -> */ {6, 12}, /* no alternatives */
+ /* 7, 12 -> */ {7, 12}, /* no alternatives */
+ /* 8, 12 -> */ {11, 2},
+ /* 9, 12 -> */ {8, 2},
+ /* 10, 12 -> */ {7, 11},
+ /* 11, 12 -> */ {-1,-1}, /* does not exist */
+ /* 12, 12 -> */ {-1,-1}, /* does not exist */
+};
+static const MetamapEntry metamap_T[] = {
+ /* 0, 0 -> */ {0, 0}, /* no alternatives */
+ /* 1, 0 -> */ {1, 0}, /* no alternatives */
+ /* 2, 0 -> */ {2, 0}, /* no alternatives */
+ /* 3, 0 -> */ {3, 0}, /* no alternatives */
+ /* 4, 0 -> */ {3, 3},
+ /* 5, 0 -> */ {3, 1},
+ /* 6, 0 -> */ {2, 2},
+ /* 7, 0 -> */ {8, 3},
+ /* 8, 0 -> */ {9, 1},
+ /* 9, 0 -> */ {9, 3},
+ /* 10, 0 -> */ {4, 6},
+ /* 11, 0 -> */ {4, 4},
+ /* 12, 0 -> */ {6, 2},
+ /* 0, 1 -> */ {0, 1}, /* no alternatives */
+ /* 1, 1 -> */ {1, 1}, /* no alternatives */
+ /* 2, 1 -> */ {2, 1}, /* no alternatives */
+ /* 3, 1 -> */ {5, 0},
+ /* 4, 1 -> */ {4, 1}, /* no alternatives */
+ /* 5, 1 -> */ {8, 4},
+ /* 6, 1 -> */ {6, 1}, /* no alternatives */
+ /* 7, 1 -> */ {6, 5},
+ /* 8, 1 -> */ {11, 0},
+ /* 9, 1 -> */ {8, 0},
+ /* 10, 1 -> */ {5, 5},
+ /* 11, 1 -> */ {-1,-1}, /* does not exist */
+ /* 12, 1 -> */ {-1,-1}, /* does not exist */
+ /* 0, 2 -> */ {0, 2}, /* no alternatives */
+ /* 1, 2 -> */ {1, 2}, /* no alternatives */
+ /* 2, 2 -> */ {6, 0},
+ /* 3, 2 -> */ {3, 2}, /* no alternatives */
+ /* 4, 2 -> */ {4, 2}, /* no alternatives */
+ /* 5, 2 -> */ {5, 4},
+ /* 6, 2 -> */ {12, 0},
+ /* 7, 2 -> */ {10, 0},
+ /* 8, 2 -> */ {6, 4},
+ /* 9, 2 -> */ {9, 2}, /* no alternatives */
+ /* 10, 2 -> */ {8, 6},
+ /* 11, 2 -> */ {-1,-1}, /* does not exist */
+ /* 12, 2 -> */ {-1,-1}, /* does not exist */
+ /* 0, 3 -> */ {0, 3}, /* no alternatives */
+ /* 1, 3 -> */ {1, 3}, /* no alternatives */
+ /* 2, 3 -> */ {2, 3}, /* no alternatives */
+ /* 3, 3 -> */ {4, 0},
+ /* 4, 3 -> */ {4, 3}, /* no alternatives */
+ /* 5, 3 -> */ {8, 5},
+ /* 6, 3 -> */ {6, 3}, /* no alternatives */
+ /* 7, 3 -> */ {6, 6},
+ /* 8, 3 -> */ {4, 5},
+ /* 9, 3 -> */ {9, 0},
+ /* 10, 3 -> */ {5, 6},
+ /* 11, 3 -> */ {-1,-1}, /* does not exist */
+ /* 12, 3 -> */ {-1,-1}, /* does not exist */
+ /* 0, 4 -> */ {0, 4}, /* no alternatives */
+ /* 1, 4 -> */ {1, 4}, /* no alternatives */
+ /* 2, 4 -> */ {2, 4}, /* no alternatives */
+ /* 3, 4 -> */ {3, 4}, /* no alternatives */
+ /* 4, 4 -> */ {8, 1},
+ /* 5, 4 -> */ {5, 2},
+ /* 6, 4 -> */ {8, 2},
+ /* 7, 4 -> */ {7, 4}, /* no alternatives */
+ /* 8, 4 -> */ {5, 1},
+ /* 9, 4 -> */ {9, 4}, /* no alternatives */
+ /* 10, 4 -> */ {10, 4}, /* no alternatives */
+ /* 11, 4 -> */ {-1,-1}, /* does not exist */
+ /* 12, 4 -> */ {-1,-1}, /* does not exist */
+ /* 0, 5 -> */ {0, 5}, /* no alternatives */
+ /* 1, 5 -> */ {1, 5}, /* no alternatives */
+ /* 2, 5 -> */ {2, 5}, /* no alternatives */
+ /* 3, 5 -> */ {3, 5}, /* no alternatives */
+ /* 4, 5 -> */ {7, 0},
+ /* 5, 5 -> */ {10, 1},
+ /* 6, 5 -> */ {7, 1},
+ /* 7, 5 -> */ {7, 5}, /* no alternatives */
+ /* 8, 5 -> */ {5, 3},
+ /* 9, 5 -> */ {9, 5}, /* no alternatives */
+ /* 10, 5 -> */ {10, 5}, /* no alternatives */
+ /* 11, 5 -> */ {-1,-1}, /* does not exist */
+ /* 12, 5 -> */ {-1,-1}, /* does not exist */
+ /* 0, 6 -> */ {0, 6}, /* no alternatives */
+ /* 1, 6 -> */ {1, 6}, /* no alternatives */
+ /* 2, 6 -> */ {2, 6}, /* no alternatives */
+ /* 3, 6 -> */ {3, 6}, /* no alternatives */
+ /* 4, 6 -> */ {7, 2},
+ /* 5, 6 -> */ {10, 3},
+ /* 6, 6 -> */ {7, 3},
+ /* 7, 6 -> */ {7, 6}, /* no alternatives */
+ /* 8, 6 -> */ {10, 2},
+ /* 9, 6 -> */ {9, 6}, /* no alternatives */
+ /* 10, 6 -> */ {10, 6}, /* no alternatives */
+ /* 11, 6 -> */ {-1,-1}, /* does not exist */
+ /* 12, 6 -> */ {-1,-1}, /* does not exist */
+};
+static const MetamapEntry metamap_P[] = {
+ /* 0, 0 -> */ {0, 0}, /* no alternatives */
+ /* 1, 0 -> */ {1, 0}, /* no alternatives */
+ /* 2, 0 -> */ {2, 0}, /* no alternatives */
+ /* 3, 0 -> */ {3, 0}, /* no alternatives */
+ /* 4, 0 -> */ {3, 4},
+ /* 5, 0 -> */ {2, 5},
+ /* 6, 0 -> */ {2, 3},
+ /* 7, 0 -> */ {8, 4},
+ /* 8, 0 -> */ {9, 5},
+ /* 9, 0 -> */ {9, 4},
+ /* 10, 0 -> */ {4, 9},
+ /* 11, 0 -> */ {4, 8},
+ /* 12, 0 -> */ {6, 3},
+ /* 0, 1 -> */ {0, 1}, /* no alternatives */
+ /* 1, 1 -> */ {1, 1}, /* no alternatives */
+ /* 2, 1 -> */ {2, 1}, /* no alternatives */
+ /* 3, 1 -> */ {3, 1}, /* no alternatives */
+ /* 4, 1 -> */ {2, 10},
+ /* 5, 1 -> */ {3, 2},
+ /* 6, 1 -> */ {2, 4},
+ /* 7, 1 -> */ {8, 10},
+ /* 8, 1 -> */ {9, 2},
+ /* 9, 1 -> */ {9, 10},
+ /* 10, 1 -> */ {7, 4},
+ /* 11, 1 -> */ {8, 2},
+ /* 12, 1 -> */ {6, 4},
+ /* 0, 2 -> */ {0, 2}, /* no alternatives */
+ /* 1, 2 -> */ {1, 2}, /* no alternatives */
+ /* 2, 2 -> */ {2, 2}, /* no alternatives */
+ /* 3, 2 -> */ {5, 1},
+ /* 4, 2 -> */ {4, 2}, /* no alternatives */
+ /* 5, 2 -> */ {8, 6},
+ /* 6, 2 -> */ {6, 2}, /* no alternatives */
+ /* 7, 2 -> */ {6, 7},
+ /* 8, 2 -> */ {4, 6},
+ /* 9, 2 -> */ {8, 1},
+ /* 10, 2 -> */ {5, 7},
+ /* 11, 2 -> */ {-1,-1}, /* does not exist */
+ /* 12, 2 -> */ {-1,-1}, /* does not exist */
+ /* 0, 3 -> */ {0, 3}, /* no alternatives */
+ /* 1, 3 -> */ {1, 3}, /* no alternatives */
+ /* 2, 3 -> */ {6, 0},
+ /* 3, 3 -> */ {3, 3}, /* no alternatives */
+ /* 4, 3 -> */ {4, 3}, /* no alternatives */
+ /* 5, 3 -> */ {5, 8},
+ /* 6, 3 -> */ {12, 0},
+ /* 7, 3 -> */ {10, 0},
+ /* 8, 3 -> */ {6, 8},
+ /* 9, 3 -> */ {9, 3}, /* no alternatives */
+ /* 10, 3 -> */ {8, 9},
+ /* 11, 3 -> */ {-1,-1}, /* does not exist */
+ /* 12, 3 -> */ {-1,-1}, /* does not exist */
+ /* 0, 4 -> */ {0, 4}, /* no alternatives */
+ /* 1, 4 -> */ {1, 4}, /* no alternatives */
+ /* 2, 4 -> */ {6, 1},
+ /* 3, 4 -> */ {4, 0},
+ /* 4, 4 -> */ {4, 4}, /* no alternatives */
+ /* 5, 4 -> */ {5, 6},
+ /* 6, 4 -> */ {12, 1},
+ /* 7, 4 -> */ {6, 9},
+ /* 8, 4 -> */ {6, 6},
+ /* 9, 4 -> */ {9, 0},
+ /* 10, 4 -> */ {5, 9},
+ /* 11, 4 -> */ {-1,-1}, /* does not exist */
+ /* 12, 4 -> */ {-1,-1}, /* does not exist */
+ /* 0, 5 -> */ {0, 5}, /* no alternatives */
+ /* 1, 5 -> */ {1, 5}, /* no alternatives */
+ /* 2, 5 -> */ {5, 0},
+ /* 3, 5 -> */ {3, 5}, /* no alternatives */
+ /* 4, 5 -> */ {8, 8},
+ /* 5, 5 -> */ {5, 5}, /* no alternatives */
+ /* 6, 5 -> */ {6, 5}, /* no alternatives */
+ /* 7, 5 -> */ {7, 5}, /* no alternatives */
+ /* 8, 5 -> */ {11, 0},
+ /* 9, 5 -> */ {8, 0},
+ /* 10, 5 -> */ {7, 6},
+ /* 11, 5 -> */ {-1,-1}, /* does not exist */
+ /* 12, 5 -> */ {-1,-1}, /* does not exist */
+ /* 0, 6 -> */ {0, 6}, /* no alternatives */
+ /* 1, 6 -> */ {1, 6}, /* no alternatives */
+ /* 2, 6 -> */ {2, 6}, /* no alternatives */
+ /* 3, 6 -> */ {3, 6}, /* no alternatives */
+ /* 4, 6 -> */ {11, 1},
+ /* 5, 6 -> */ {5, 4},
+ /* 6, 6 -> */ {7, 0},
+ /* 7, 6 -> */ {10, 5},
+ /* 8, 6 -> */ {5, 2},
+ /* 9, 6 -> */ {9, 6}, /* no alternatives */
+ /* 10, 6 -> */ {10, 6}, /* no alternatives */
+ /* 11, 6 -> */ {-1,-1}, /* does not exist */
+ /* 12, 6 -> */ {-1,-1}, /* does not exist */
+ /* 0, 7 -> */ {0, 7}, /* no alternatives */
+ /* 1, 7 -> */ {1, 7}, /* no alternatives */
+ /* 2, 7 -> */ {2, 7}, /* no alternatives */
+ /* 3, 7 -> */ {3, 7}, /* no alternatives */
+ /* 4, 7 -> */ {7, 1},
+ /* 5, 7 -> */ {10, 2},
+ /* 6, 7 -> */ {7, 2},
+ /* 7, 7 -> */ {7, 7}, /* no alternatives */
+ /* 8, 7 -> */ {4, 10},
+ /* 9, 7 -> */ {9, 7}, /* no alternatives */
+ /* 10, 7 -> */ {10, 7}, /* no alternatives */
+ /* 11, 7 -> */ {-1,-1}, /* does not exist */
+ /* 12, 7 -> */ {-1,-1}, /* does not exist */
+ /* 0, 8 -> */ {0, 8}, /* no alternatives */
+ /* 1, 8 -> */ {1, 8}, /* no alternatives */
+ /* 2, 8 -> */ {2, 8}, /* no alternatives */
+ /* 3, 8 -> */ {3, 8}, /* no alternatives */
+ /* 4, 8 -> */ {8, 5},
+ /* 5, 8 -> */ {5, 3},
+ /* 6, 8 -> */ {8, 3},
+ /* 7, 8 -> */ {7, 8}, /* no alternatives */
+ /* 8, 8 -> */ {4, 5},
+ /* 9, 8 -> */ {9, 8}, /* no alternatives */
+ /* 10, 8 -> */ {10, 8}, /* no alternatives */
+ /* 11, 8 -> */ {-1,-1}, /* does not exist */
+ /* 12, 8 -> */ {-1,-1}, /* does not exist */
+ /* 0, 9 -> */ {0, 9}, /* no alternatives */
+ /* 1, 9 -> */ {1, 9}, /* no alternatives */
+ /* 2, 9 -> */ {2, 9}, /* no alternatives */
+ /* 3, 9 -> */ {3, 9}, /* no alternatives */
+ /* 4, 9 -> */ {7, 3},
+ /* 5, 9 -> */ {10, 4},
+ /* 6, 9 -> */ {10, 1},
+ /* 7, 9 -> */ {10, 10},
+ /* 8, 9 -> */ {10, 3},
+ /* 9, 9 -> */ {9, 9}, /* no alternatives */
+ /* 10, 9 -> */ {10, 9}, /* no alternatives */
+ /* 11, 9 -> */ {-1,-1}, /* does not exist */
+ /* 12, 9 -> */ {-1,-1}, /* does not exist */
+ /* 0, 10 -> */ {0, 10}, /* no alternatives */
+ /* 1, 10 -> */ {1, 10}, /* no alternatives */
+ /* 2, 10 -> */ {4, 1},
+ /* 3, 10 -> */ {3, 10}, /* no alternatives */
+ /* 4, 10 -> */ {8, 7},
+ /* 5, 10 -> */ {5, 10}, /* no alternatives */
+ /* 6, 10 -> */ {6, 10}, /* no alternatives */
+ /* 7, 10 -> */ {7, 10}, /* no alternatives */
+ /* 8, 10 -> */ {4, 7},
+ /* 9, 10 -> */ {9, 1},
+ /* 10, 10 -> */ {7, 9},
+ /* 11, 10 -> */ {-1,-1}, /* does not exist */
+ /* 12, 10 -> */ {-1,-1}, /* does not exist */
+};
+static const MetamapEntry metamap_F[] = {
+ /* 0, 0 -> */ {0, 0}, /* no alternatives */
+ /* 1, 0 -> */ {1, 0}, /* no alternatives */
+ /* 2, 0 -> */ {2, 0}, /* no alternatives */
+ /* 3, 0 -> */ {3, 0}, /* no alternatives */
+ /* 4, 0 -> */ {3, 3},
+ /* 5, 0 -> */ {2, 4},
+ /* 6, 0 -> */ {2, 2},
+ /* 7, 0 -> */ {8, 3},
+ /* 8, 0 -> */ {9, 4},
+ /* 9, 0 -> */ {9, 3},
+ /* 10, 0 -> */ {4, 9},
+ /* 11, 0 -> */ {4, 8},
+ /* 12, 0 -> */ {6, 2},
+ /* 0, 1 -> */ {0, 1}, /* no alternatives */
+ /* 1, 1 -> */ {1, 1}, /* no alternatives */
+ /* 2, 1 -> */ {2, 1}, /* no alternatives */
+ /* 3, 1 -> */ {3, 1}, /* no alternatives */
+ /* 4, 1 -> */ {2, 10},
+ /* 5, 1 -> */ {2, 6},
+ /* 6, 1 -> */ {2, 3},
+ /* 7, 1 -> */ {8, 10},
+ /* 8, 1 -> */ {9, 6},
+ /* 9, 1 -> */ {9, 10},
+ /* 10, 1 -> */ {7, 3},
+ /* 11, 1 -> */ {8, 6},
+ /* 12, 1 -> */ {6, 3},
+ /* 0, 2 -> */ {0, 2}, /* no alternatives */
+ /* 1, 2 -> */ {1, 2}, /* no alternatives */
+ /* 2, 2 -> */ {6, 0},
+ /* 3, 2 -> */ {3, 2}, /* no alternatives */
+ /* 4, 2 -> */ {4, 2}, /* no alternatives */
+ /* 5, 2 -> */ {5, 8},
+ /* 6, 2 -> */ {12, 0},
+ /* 7, 2 -> */ {10, 0},
+ /* 8, 2 -> */ {6, 8},
+ /* 9, 2 -> */ {9, 2}, /* no alternatives */
+ /* 10, 2 -> */ {8, 9},
+ /* 11, 2 -> */ {-1,-1}, /* does not exist */
+ /* 12, 2 -> */ {-1,-1}, /* does not exist */
+ /* 0, 3 -> */ {0, 3}, /* no alternatives */
+ /* 1, 3 -> */ {1, 3}, /* no alternatives */
+ /* 2, 3 -> */ {6, 1},
+ /* 3, 3 -> */ {4, 0},
+ /* 4, 3 -> */ {4, 3}, /* no alternatives */
+ /* 5, 3 -> */ {5, 5},
+ /* 6, 3 -> */ {12, 1},
+ /* 7, 3 -> */ {6, 9},
+ /* 8, 3 -> */ {6, 5},
+ /* 9, 3 -> */ {9, 0},
+ /* 10, 3 -> */ {5, 9},
+ /* 11, 3 -> */ {-1,-1}, /* does not exist */
+ /* 12, 3 -> */ {-1,-1}, /* does not exist */
+ /* 0, 4 -> */ {0, 4}, /* no alternatives */
+ /* 1, 4 -> */ {1, 4}, /* no alternatives */
+ /* 2, 4 -> */ {5, 0},
+ /* 3, 4 -> */ {3, 4}, /* no alternatives */
+ /* 4, 4 -> */ {8, 8},
+ /* 5, 4 -> */ {5, 4}, /* no alternatives */
+ /* 6, 4 -> */ {6, 4}, /* no alternatives */
+ /* 7, 4 -> */ {7, 4}, /* no alternatives */
+ /* 8, 4 -> */ {11, 0},
+ /* 9, 4 -> */ {8, 0},
+ /* 10, 4 -> */ {7, 5},
+ /* 11, 4 -> */ {-1,-1}, /* does not exist */
+ /* 12, 4 -> */ {-1,-1}, /* does not exist */
+ /* 0, 5 -> */ {0, 5}, /* no alternatives */
+ /* 1, 5 -> */ {1, 5}, /* no alternatives */
+ /* 2, 5 -> */ {2, 5}, /* no alternatives */
+ /* 3, 5 -> */ {3, 5}, /* no alternatives */
+ /* 4, 5 -> */ {11, 1},
+ /* 5, 5 -> */ {5, 3},
+ /* 6, 5 -> */ {7, 0},
+ /* 7, 5 -> */ {10, 4},
+ /* 8, 5 -> */ {4, 6},
+ /* 9, 5 -> */ {9, 5}, /* no alternatives */
+ /* 10, 5 -> */ {10, 5}, /* no alternatives */
+ /* 11, 5 -> */ {-1,-1}, /* does not exist */
+ /* 12, 5 -> */ {-1,-1}, /* does not exist */
+ /* 0, 6 -> */ {0, 6}, /* no alternatives */
+ /* 1, 6 -> */ {1, 6}, /* no alternatives */
+ /* 2, 6 -> */ {5, 1},
+ /* 3, 6 -> */ {3, 6}, /* no alternatives */
+ /* 4, 6 -> */ {8, 5},
+ /* 5, 6 -> */ {5, 6}, /* no alternatives */
+ /* 6, 6 -> */ {6, 6}, /* no alternatives */
+ /* 7, 6 -> */ {7, 6}, /* no alternatives */
+ /* 8, 6 -> */ {4, 5},
+ /* 9, 6 -> */ {8, 1},
+ /* 10, 6 -> */ {7, 7},
+ /* 11, 6 -> */ {-1,-1}, /* does not exist */
+ /* 12, 6 -> */ {-1,-1}, /* does not exist */
+ /* 0, 7 -> */ {0, 7}, /* no alternatives */
+ /* 1, 7 -> */ {1, 7}, /* no alternatives */
+ /* 2, 7 -> */ {2, 7}, /* no alternatives */
+ /* 3, 7 -> */ {3, 7}, /* no alternatives */
+ /* 4, 7 -> */ {4, 7}, /* no alternatives */
+ /* 5, 7 -> */ {4, 10},
+ /* 6, 7 -> */ {7, 1},
+ /* 7, 7 -> */ {10, 6},
+ /* 8, 7 -> */ {8, 7}, /* no alternatives */
+ /* 9, 7 -> */ {9, 7}, /* no alternatives */
+ /* 10, 7 -> */ {10, 7}, /* no alternatives */
+ /* 11, 7 -> */ {-1,-1}, /* does not exist */
+ /* 12, 7 -> */ {-1,-1}, /* does not exist */
+ /* 0, 8 -> */ {0, 8}, /* no alternatives */
+ /* 1, 8 -> */ {1, 8}, /* no alternatives */
+ /* 2, 8 -> */ {2, 8}, /* no alternatives */
+ /* 3, 8 -> */ {3, 8}, /* no alternatives */
+ /* 4, 8 -> */ {8, 4},
+ /* 5, 8 -> */ {5, 2},
+ /* 6, 8 -> */ {8, 2},
+ /* 7, 8 -> */ {7, 8}, /* no alternatives */
+ /* 8, 8 -> */ {4, 4},
+ /* 9, 8 -> */ {9, 8}, /* no alternatives */
+ /* 10, 8 -> */ {10, 8}, /* no alternatives */
+ /* 11, 8 -> */ {-1,-1}, /* does not exist */
+ /* 12, 8 -> */ {-1,-1}, /* does not exist */
+ /* 0, 9 -> */ {0, 9}, /* no alternatives */
+ /* 1, 9 -> */ {1, 9}, /* no alternatives */
+ /* 2, 9 -> */ {2, 9}, /* no alternatives */
+ /* 3, 9 -> */ {3, 9}, /* no alternatives */
+ /* 4, 9 -> */ {7, 2},
+ /* 5, 9 -> */ {10, 3},
+ /* 6, 9 -> */ {10, 1},
+ /* 7, 9 -> */ {10, 10},
+ /* 8, 9 -> */ {10, 2},
+ /* 9, 9 -> */ {9, 9}, /* no alternatives */
+ /* 10, 9 -> */ {10, 9}, /* no alternatives */
+ /* 11, 9 -> */ {-1,-1}, /* does not exist */
+ /* 12, 9 -> */ {-1,-1}, /* does not exist */
+ /* 0, 10 -> */ {0, 10}, /* no alternatives */
+ /* 1, 10 -> */ {1, 10}, /* no alternatives */
+ /* 2, 10 -> */ {4, 1},
+ /* 3, 10 -> */ {3, 10}, /* no alternatives */
+ /* 4, 10 -> */ {5, 7},
+ /* 5, 10 -> */ {5, 10}, /* no alternatives */
+ /* 6, 10 -> */ {6, 10}, /* no alternatives */
+ /* 7, 10 -> */ {7, 10}, /* no alternatives */
+ /* 8, 10 -> */ {6, 7},
+ /* 9, 10 -> */ {9, 1},
+ /* 10, 10 -> */ {7, 9},
+ /* 11, 10 -> */ {-1,-1}, /* does not exist */
+ /* 12, 10 -> */ {-1,-1}, /* does not exist */
+};
+static const MetamapEntry *const metamap[] = {
+ metamap_H,
+ metamap_T,
+ metamap_P,
+ metamap_F,
+};
diff --git a/hat.c b/hat.c
new file mode 100644
index 0000000..d59f81e
--- /dev/null
+++ b/hat.c
@@ -0,0 +1,1248 @@
+/*
+ * Code to generate patches of the aperiodic 'hat' tiling discovered
+ * in 2023.
+ *
+ * aux/doc/hats.html contains an explanation of the basic ideas of
+ * this algorithm, which can't really be put in a source file because
+ * it just has too many complicated diagrams. So read that first,
+ * because the comments in here will refer to it.
+ *
+ * Discoverers' website: https://cs.uwaterloo.ca/~csk/hat/
+ * Preprint of paper: https://arxiv.org/abs/2303.10798
+ */
+
+#include <assert.h>
+#include <math.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "puzzles.h"
+#include "hat.h"
+
+/*
+ * Coordinate system:
+ *
+ * The output of this code lives on the tiling known to grid.c as
+ * 'Kites', which can be viewed as a tiling of hexagons each of which
+ * is subdivided into six kites sharing their pointy vertex, or
+ * (equivalently) a tiling of equilateral triangles each subdivided
+ * into three kits sharing their blunt vertex.
+ *
+ * We express coordinates in this system relative to the basis (1, r)
+ * where r = (1 + sqrt(3)i) / 2 is a primitive 6th root of unity. This
+ * gives us a system in which two integer coordinates can address any
+ * grid point, provided we scale up so that the side length of the
+ * equilateral triangles in the tiling is 6.
+ */
+
+typedef struct Point {
+ int x, y; /* represents x + yr */
+} Point;
+
+static inline Point pointscale(int scale, Point a)
+{
+ Point r = { scale * a.x, scale * a.y };
+ return r;
+}
+
+static inline Point pointadd(Point a, Point b)
+{
+ Point r = { a.x + b.x, a.y + b.y };
+ return r;
+}
+
+/*
+ * We identify a single kite by the coordinates of its four vertices.
+ * This allows us to construct the coordinates of an adjacent kite by
+ * taking affine transformations of the original kite's vertices.
+ *
+ * This is a useful way to do it because it means that if you reflect
+ * the kite (by swapping its left and right vertices) then these
+ * transformations also perform in a reflected way. This will be
+ * useful in the code below that outputs the coordinates of each hat,
+ * because this way it can work by walking around its 8 kites using a
+ * fixed set of steps, and if the hat is reflected, then we just
+ * reflect the starting kite before doing that, and everything still
+ * works.
+ */
+
+typedef struct Kite {
+ Point centre, left, right, outer;
+} Kite;
+
+static inline Kite kite_left(Kite k)
+{
+ Kite r;
+ r.centre = k.centre;
+ r.right = k.left;
+ r.outer = pointadd(pointscale(2, k.left), pointscale(-1, k.outer));
+ r.left = pointadd(pointadd(k.centre, k.left), pointscale(-1, k.right));
+ return r;
+}
+
+static inline Kite kite_right(Kite k)
+{
+ Kite r;
+ r.centre = k.centre;
+ r.left = k.right;
+ r.outer = pointadd(pointscale(2, k.right), pointscale(-1, k.outer));
+ r.right = pointadd(pointadd(k.centre, k.right), pointscale(-1, k.left));
+ return r;
+}
+
+static inline Kite kite_forward_left(Kite k)
+{
+ Kite r;
+ r.outer = k.outer;
+ r.right = k.left;
+ r.centre = pointadd(pointscale(2, k.left), pointscale(-1, k.centre));
+ r.left = pointadd(pointadd(k.right, k.left), pointscale(-1, k.centre));
+ return r;
+}
+
+static inline Kite kite_forward_right(Kite k)
+{
+ Kite r;
+ r.outer = k.outer;
+ r.left = k.right;
+ r.centre = pointadd(pointscale(2, k.right), pointscale(-1, k.centre));
+ r.right = pointadd(pointadd(k.left, k.right), pointscale(-1, k.centre));
+ return r;
+}
+
+typedef enum KiteStep { KS_LEFT, KS_RIGHT, KS_F_LEFT, KS_F_RIGHT } KiteStep;
+
+static inline Kite kite_step(Kite k, KiteStep step)
+{
+ switch (step) {
+ case KS_LEFT: return kite_left(k);
+ case KS_RIGHT: return kite_right(k);
+ case KS_F_LEFT: return kite_forward_left(k);
+ default /* case KS_F_RIGHT */: return kite_forward_right(k);
+ }
+}
+
+/*
+ * Function to enumerate the kites in a rectangular region, in a
+ * serpentine-raster fashion so that every kite delivered shares an
+ * edge with a recent previous one.
+ */
+#define KE_NKEEP 3
+typedef struct KiteEnum {
+ /* Fields private to the enumerator */
+ int state;
+ int x, y, w, h;
+ unsigned curr_index;
+
+ /* Fields the client can legitimately read out */
+ Kite *curr;
+ Kite recent[KE_NKEEP];
+ unsigned last_index;
+ KiteStep last_step; /* step that got curr from recent[last_index] */
+} KiteEnum;
+
+static void first_kite(KiteEnum *s, int w, int h)
+{
+ Kite start = { {0,0}, {0, 3}, {3, 0}, {2, 2} };
+ size_t i;
+
+ for (i = 0; i < KE_NKEEP; i++)
+ s->recent[i] = start; /* initialise to *something* */
+ s->curr_index = 0;
+ s->curr = &s->recent[s->curr_index];
+ s->state = 1;
+ s->w = w;
+ s->h = h;
+ s->x = 0;
+ s->y = 0;
+}
+static bool next_kite(KiteEnum *s)
+{
+ unsigned lastbut1 = s->last_index;
+ s->last_index = s->curr_index;
+ s->curr_index = (s->curr_index + 1) % KE_NKEEP;
+ s->curr = &s->recent[s->curr_index];
+
+ switch (s->state) {
+ /* States 1,2,3 walk rightwards along the upper side of a
+ * horizontal grid line with a pointy kite end at the start
+ * point */
+ case 1:
+ s->last_step = KS_F_RIGHT;
+ s->state = 2;
+ break;
+
+ case 2:
+ if (s->x+1 >= s->w) {
+ s->last_step = KS_F_RIGHT;
+ s->state = 4;
+ break;
+ }
+ s->last_step = KS_RIGHT;
+ s->state = 3;
+ s->x++;
+ break;
+
+ case 3:
+ s->last_step = KS_RIGHT;
+ s->state = 1;
+ break;
+
+ /* State 4 is special: we've just moved up into a row below a
+ * grid line, but we can't produce the rightmost tile of that
+ * row because it's not adjacent any tile so far emitted. So
+ * instead, emit the second-rightmost tile, and next time,
+ * we'll emit the rightmost. */
+ case 4:
+ s->last_step = KS_LEFT;
+ s->state = 5;
+ break;
+
+ /* And now we have to emit the third-rightmost tile relative
+ * to the last but one tile we emitted (the one from state 2,
+ * not state 4). */
+ case 5:
+ s->last_step = KS_RIGHT;
+ s->last_index = lastbut1;
+ s->state = 6;
+ break;
+
+ /* Now states 6-8 handle the general case of walking leftwards
+ * along the lower side of a line, starting from a
+ * right-angled kite end. */
+ case 6:
+ if (s->x <= 0) {
+ if (s->y+1 >= s->h) {
+ s->state = 0;
+ return false;
+ }
+ s->last_step = KS_RIGHT;
+ s->state = 9;
+ s->y++;
+ break;
+ }
+ s->last_step = KS_F_RIGHT;
+ s->state = 7;
+ s->x--;
+ break;
+
+ case 7:
+ s->last_step = KS_RIGHT;
+ s->state = 8;
+ break;
+
+ case 8:
+ s->last_step = KS_RIGHT;
+ s->state = 6;
+ break;
+
+ /* States 9,10,11 walk rightwards along the upper side of a
+ * horizontal grid line with a right-angled kite end at the
+ * start point. This time there's no awkward transition from
+ * the previous row. */
+ case 9:
+ s->last_step = KS_RIGHT;
+ s->state = 10;
+ break;
+
+ case 10:
+ s->last_step = KS_RIGHT;
+ s->state = 11;
+ break;
+
+ case 11:
+ if (s->x+1 >= s->w) {
+ /* Another awkward transition to the next row, where we
+ * have to generate it based on the previous state-9 tile.
+ * But this time at least we generate the rightmost tile
+ * of the new row, so the next states will be simple. */
+ s->last_step = KS_F_RIGHT;
+ s->last_index = lastbut1;
+ s->state = 12;
+ break;
+ }
+ s->last_step = KS_F_RIGHT;
+ s->state = 9;
+ s->x++;
+ break;
+
+ /* States 12,13,14 walk leftwards along the upper edge of a
+ * horizontal grid line with a pointy kite end at the start
+ * point */
+ case 12:
+ s->last_step = KS_F_RIGHT;
+ s->state = 13;
+ break;
+
+ case 13:
+ if (s->x <= 0) {
+ if (s->y+1 >= s->h) {
+ s->state = 0;
+ return false;
+ }
+ s->last_step = KS_LEFT;
+ s->state = 1;
+ s->y++;
+ break;
+ }
+ s->last_step = KS_RIGHT;
+ s->state = 14;
+ s->x--;
+ break;
+
+ case 14:
+ s->last_step = KS_RIGHT;
+ s->state = 12;
+ break;
+
+ default:
+ return false;
+ }
+
+ *s->curr = kite_step(s->recent[s->last_index], s->last_step);
+ return true;
+}
+
+/*
+ * Assorted useful definitions.
+ */
+typedef enum TileType { TT_H, TT_T, TT_P, TT_F, TT_KITE, TT_HAT } TileType;
+static const char tilechars[] = "HTPF";
+
+#define HAT_KITES 8 /* number of kites in a hat */
+#define MT_MAXEXPAND 13 /* largest number of metatiles in any expansion */
+
+/*
+ * Definitions for the autogenerated hat-tables.h header file that
+ * defines all the lookup tables.
+ */
+typedef struct MetatilePossibleParent {
+ TileType type;
+ unsigned index;
+} MetatilePossibleParent;
+
+typedef struct KitemapEntry {
+ int kite, hat, meta; /* all -1 if impossible */
+} KitemapEntry;
+
+typedef struct MetamapEntry {
+ int meta, meta2;
+} MetamapEntry;
+
+static inline size_t kitemap_index(KiteStep step, unsigned kite,
+ unsigned hat, unsigned meta)
+{
+ return step + 4 * (kite + 8 * (hat + 4 * meta));
+}
+
+static inline size_t metamap_index(unsigned meta, unsigned meta2)
+{
+ return meta2 * MT_MAXEXPAND + meta;
+}
+
+/*
+ * The actual tables.
+ */
+#include "hat-tables.h"
+
+/*
+ * Coordinate system for tracking kites within a randomly selected
+ * part of the recursively expanded hat tiling.
+ *
+ * HatCoords will store an array of HatCoord, in little-endian
+ * arrangement. So hc->c[0] will always have type TT_KITE and index a
+ * single kite within a hat; hc->c[1] will have type TT_HAT and index
+ * a hat within a first-order metatile; hc->c[2] will be the smallest
+ * metatile containing this hat, and hc->c[3, 4, 5, ...] will be
+ * higher-order metatiles as needed.
+ *
+ * The last coordinate stored, hc->c[hc->nc-1], will have a tile type
+ * but no index (represented by index==-1). This means "we haven't
+ * decided yet what this level of metatile needs to be". If we need to
+ * refer to this level during the step_coords algorithm, we make it up
+ * at random, based on a table of what metatiles each type can
+ * possibly be part of, at what index.
+ */
+typedef struct HatCoord {
+ int index; /* index within that tile, or -1 if not yet known */
+ TileType type; /* type of this tile */
+} HatCoord;
+
+typedef struct HatCoords {
+ HatCoord *c;
+ size_t nc, csize;
+} HatCoords;
+
+static HatCoords *hc_new(void)
+{
+ HatCoords *hc = snew(HatCoords);
+ hc->nc = hc->csize = 0;
+ hc->c = NULL;
+ return hc;
+}
+
+static void hc_free(HatCoords *hc)
+{
+ if (hc) {
+ sfree(hc->c);
+ sfree(hc);
+ }
+}
+
+static void hc_make_space(HatCoords *hc, size_t size)
+{
+ if (hc->csize < size) {
+ hc->csize = hc->csize * 5 / 4 + 16;
+ if (hc->csize < size)
+ hc->csize = size;
+ hc->c = sresize(hc->c, hc->csize, HatCoord);
+ }
+}
+
+static HatCoords *hc_copy(HatCoords *hc_in)
+{
+ HatCoords *hc_out = hc_new();
+ hc_make_space(hc_out, hc_in->nc);
+ memcpy(hc_out->c, hc_in->c, hc_in->nc * sizeof(*hc_out->c));
+ hc_out->nc = hc_in->nc;
+ return hc_out;
+}
+
+/*
+ * HatCoordContext is the shared context of a whole run of the
+ * algorithm. Its 'prototype' HatCoords object represents the
+ * coordinates of the starting kite, and is extended as necessary; any
+ * other HatCoord that needs extending will copy the higher-order
+ * values from ctx->prototype as needed, so that once each choice has
+ * been made, it remains consistent.
+ *
+ * When we're inventing a random piece of tiling in the first place,
+ * we append to ctx->prototype by choosing a random (but legal)
+ * higher-level metatile for the current topmost one to turn out to be
+ * part of. When we're replaying a generation whose parameters are
+ * already stored, we don't have a random_state, and we make fixed
+ * decisions if not enough coordinates were provided.
+ *
+ * (Of course another approach would be to reject grid descriptions
+ * that didn't define enough coordinates! But that would involve a
+ * whole extra iteration over the whole grid region just for
+ * validation, and that seems like more timewasting than really
+ * needed. So we tolerate short descriptions, and do something
+ * deterministic with them.)
+ */
+
+typedef struct HatCoordContext {
+ random_state *rs;
+ HatCoords *prototype;
+} HatCoordContext;
+
+static void init_coords_random(HatCoordContext *ctx, random_state *rs)
+{
+ ctx->rs = rs;
+ ctx->prototype = hc_new();
+ hc_make_space(ctx->prototype, 3);
+ ctx->prototype->c[0].type = TT_KITE;
+ ctx->prototype->c[1].type = TT_HAT;
+ ctx->prototype->c[2].type = random_upto(rs, 4);
+ ctx->prototype->c[2].index = -1;
+ ctx->prototype->c[1].index = random_upto(
+ rs, hats_in_metatile[ctx->prototype->c[2].type]);
+ ctx->prototype->c[0].index = random_upto(rs, HAT_KITES);
+ ctx->prototype->nc = 3;
+}
+
+static inline int metatile_char_to_enum(char metatile)
+{
+ return (metatile == 'H' ? TT_H :
+ metatile == 'T' ? TT_T :
+ metatile == 'P' ? TT_P :
+ metatile == 'F' ? TT_F : -1);
+}
+
+static void init_coords_params(HatCoordContext *ctx,
+ const struct HatPatchParams *hp)
+{
+ size_t i;
+
+ ctx->rs = NULL;
+ ctx->prototype = hc_new();
+
+ assert(hp->ncoords >= 3);
+
+ hc_make_space(ctx->prototype, hp->ncoords + 1);
+ ctx->prototype->nc = hp->ncoords + 1;
+
+ for (i = 0; i < hp->ncoords; i++)
+ ctx->prototype->c[i].index = hp->coords[i];
+
+ ctx->prototype->c[hp->ncoords].type =
+ metatile_char_to_enum(hp->final_metatile);
+ ctx->prototype->c[hp->ncoords].index = -1;
+
+ ctx->prototype->c[0].type = TT_KITE;
+ ctx->prototype->c[1].type = TT_HAT;
+
+ for (i = hp->ncoords - 1; i > 1; i--) {
+ TileType metatile = ctx->prototype->c[i+1].type;
+ assert(hp->coords[i] < nchildren[metatile]);
+ ctx->prototype->c[i].type = children[metatile][hp->coords[i]];
+ }
+
+ assert(hp->coords[0] < 8);
+}
+
+static HatCoords *initial_coords(HatCoordContext *ctx)
+{
+ return hc_copy(ctx->prototype);
+}
+
+/*
+ * Extend hc until it has at least n coordinates in, by copying from
+ * ctx->prototype if needed, and extending ctx->prototype if needed in
+ * order to do that.
+ */
+static void ensure_coords(HatCoordContext *ctx, HatCoords *hc, size_t n)
+{
+ if (ctx->prototype->nc < n) {
+ hc_make_space(ctx->prototype, n);
+ while (ctx->prototype->nc < n) {
+ TileType type = ctx->prototype->c[ctx->prototype->nc - 1].type;
+ assert(ctx->prototype->c[ctx->prototype->nc - 1].index == -1);
+ const MetatilePossibleParent *parents = permitted_parents[type];
+ size_t parent_index;
+ if (ctx->rs) {
+ parent_index = random_upto(ctx->rs, n_permitted_parents[type]);
+ } else {
+ parent_index = 0;
+ }
+ ctx->prototype->c[ctx->prototype->nc - 1].index =
+ parents[parent_index].index;
+ ctx->prototype->c[ctx->prototype->nc].index = -1;
+ ctx->prototype->c[ctx->prototype->nc].type =
+ parents[parent_index].type;
+ ctx->prototype->nc++;
+ }
+ }
+
+ hc_make_space(hc, n);
+ while (hc->nc < n) {
+ assert(hc->c[hc->nc - 1].index == -1);
+ assert(hc->c[hc->nc - 1].type == ctx->prototype->c[hc->nc - 1].type);
+ hc->c[hc->nc - 1].index = ctx->prototype->c[hc->nc - 1].index;
+ hc->c[hc->nc].index = -1;
+ hc->c[hc->nc].type = ctx->prototype->c[hc->nc].type;
+ hc->nc++;
+ }
+}
+
+static void cleanup_coords(HatCoordContext *ctx)
+{
+ hc_free(ctx->prototype);
+}
+
+#ifdef DEBUG_COORDS
+static inline void debug_coords(const char *prefix, HatCoords *hc,
+ const char *suffix)
+{
+ const char *sep = "";
+ static const char *const types[] = {"H","T","P","F","kite","hat"};
+
+ fputs(prefix, stderr);
+ for (size_t i = 0; i < hc->nc; i++) {
+ fprintf(stderr, "%s %s ", sep, types[hc->c[i].type]);
+ sep = " .";
+ if (hc->c[i].index == -1)
+ fputs("?", stderr);
+ else
+ fprintf(stderr, "%d", hc->c[i].index);
+ }
+ fputs(suffix, stderr);
+}
+#else
+#define debug_coords(p,c,s) ((void)0)
+#endif
+
+/*
+ * The actual system for finding the coordinates of an adjacent kite.
+ */
+
+/*
+ * Kitemap step: ensure we have enough coordinates to know two levels
+ * of meta-tiling, and use the kite map for the outer layer to move
+ * around the individual kites. If this fails, return NULL.
+ */
+static HatCoords *try_step_coords_kitemap(
+ HatCoordContext *ctx, HatCoords *hc_in, KiteStep step)
+{
+ ensure_coords(ctx, hc_in, 4);
+ debug_coords(" try kitemap ", hc_in, "\n");
+ unsigned kite = hc_in->c[0].index;
+ unsigned hat = hc_in->c[1].index;
+ unsigned meta = hc_in->c[2].index;
+ TileType meta2type = hc_in->c[3].type;
+ const KitemapEntry *ke = &kitemap[meta2type][
+ kitemap_index(step, kite, hat, meta)];
+ if (ke->kite >= 0) {
+ /*
+ * Success! We've got coordinates for the next kite in this
+ * direction.
+ */
+ HatCoords *hc_out = hc_copy(hc_in);
+
+ hc_out->c[2].index = ke->meta;
+ hc_out->c[2].type = children[meta2type][ke->meta];
+ hc_out->c[1].index = ke->hat;
+ hc_out->c[1].type = TT_HAT;
+ hc_out->c[0].index = ke->kite;
+ hc_out->c[0].type = TT_KITE;
+
+ debug_coords(" success! ", hc_out, "\n");
+ return hc_out;
+ }
+
+ return NULL;
+}
+
+/*
+ * Recursive metamap step. Try using the metamap to rewrite the
+ * coordinates at hc->c[depth] and hc->c[depth+1] (using the metamap
+ * for the tile type described in hc->c[depth+2]). If successful,
+ * recurse back down to see if this led to a successful step via the
+ * kitemap. If even that fails (so that we need to try a higher-order
+ * metamap rewrite), return NULL.
+ */
+static HatCoords *try_step_coords_metamap(
+ HatCoordContext *ctx, HatCoords *hc_in, KiteStep step, size_t depth)
+{
+ HatCoords *hc_tmp = NULL, *hc_out;
+
+ ensure_coords(ctx, hc_in, depth+3);
+#ifdef DEBUG_COORDS
+ fprintf(stderr, " try meta %-4d", (int)depth);
+ debug_coords("", hc_in, "\n");
+#endif
+ unsigned meta_orig = hc_in->c[depth].index;
+ unsigned meta2_orig = hc_in->c[depth+1].index;
+ TileType meta3type = hc_in->c[depth+2].type;
+
+ unsigned meta = meta_orig, meta2 = meta2_orig;
+
+ while (true) {
+ const MetamapEntry *me;
+ HatCoords *hc_curr = hc_tmp ? hc_tmp : hc_in;
+
+ if (depth > 2)
+ hc_out = try_step_coords_metamap(ctx, hc_curr, step, depth - 1);
+ else
+ hc_out = try_step_coords_kitemap(ctx, hc_curr, step);
+ if (hc_out) {
+ hc_free(hc_tmp);
+ return hc_out;
+ }
+
+ me = &metamap[meta3type][metamap_index(meta, meta2)];
+ assert(me->meta != -1);
+ if (me->meta == meta_orig && me->meta2 == meta2_orig) {
+ hc_free(hc_tmp);
+ return NULL;
+ }
+
+ meta = me->meta;
+ meta2 = me->meta2;
+
+ /*
+ * We must do the rewrite in a copy of hc_in. It's not
+ * _necessarily_ obvious that that's the case (any successful
+ * rewrite leaves the coordinates still valid and still
+ * referring to the same kite, right?). But the problem is
+ * that we might do a rewrite at this level more than once,
+ * and in between, a metamap rewrite at the next level down
+ * might have modified _one_ of the two coordinates we're
+ * messing about with. So it's easiest to let the recursion
+ * just use a separate copy.
+ */
+ if (!hc_tmp)
+ hc_tmp = hc_copy(hc_in);
+
+ hc_tmp->c[depth+1].index = meta2;
+ hc_tmp->c[depth+1].type = children[meta3type][meta2];
+ hc_tmp->c[depth].index = meta;
+ hc_tmp->c[depth].type = children[hc_tmp->c[depth+1].type][meta];
+
+ debug_coords(" rewritten -> ", hc_tmp, "\n");
+ }
+}
+
+/*
+ * The top-level algorithm for finding the next tile.
+ */
+static HatCoords *step_coords(HatCoordContext *ctx, HatCoords *hc_in,
+ KiteStep step)
+{
+ HatCoords *hc_out;
+ size_t depth;
+
+#ifdef DEBUG_COORDS
+ static const char *const directions[] = {
+ " left\n", " right\n", " forward left\n", " forward right\n" };
+ debug_coords("step start ", hc_in, directions[step]);
+#endif
+
+ /*
+ * First, just try a kitemap step immediately. If that succeeds,
+ * we're done.
+ */
+ if ((hc_out = try_step_coords_kitemap(ctx, hc_in, step)) != NULL)
+ return hc_out;
+
+ /*
+ * Otherwise, try metamap rewrites at successively higher layers
+ * until one works. Each one will recurse back down to the
+ * kitemap, as described above.
+ */
+ for (depth = 2;; depth++) {
+ if ((hc_out = try_step_coords_metamap(
+ ctx, hc_in, step, depth)) != NULL)
+ return hc_out;
+ }
+}
+
+/*
+ * Generate a random set of parameters for a tiling of a given size.
+ * To do this, we iterate over the whole tiling via first_kite and
+ * next_kite, and for each kite, calculate its coordinates. But then
+ * we throw the coordinates away and don't do anything with them!
+ *
+ * But the side effect of _calculating_ all those coordinates is that
+ * we found out how far ctx->prototype needed to be extended, and did
+ * so, pulling random choices out of our random_state. So after this
+ * iteration, ctx->prototype contains everything we need to replicate
+ * the same piece of tiling next time.
+ */
+void hat_tiling_randomise(struct HatPatchParams *hp, int w, int h,
+ random_state *rs)
+{
+ HatCoordContext ctx[1];
+ HatCoords *coords[KE_NKEEP];
+ KiteEnum s[1];
+ size_t i;
+
+ init_coords_random(ctx, rs);
+ for (i = 0; i < lenof(coords); i++)
+ coords[i] = NULL;
+
+ first_kite(s, w, h);
+ coords[s->curr_index] = initial_coords(ctx);
+
+ while (next_kite(s)) {
+ hc_free(coords[s->curr_index]);
+ coords[s->curr_index] = step_coords(
+ ctx, coords[s->last_index], s->last_step);
+ }
+
+ hp->ncoords = ctx->prototype->nc - 1;
+ hp->coords = snewn(hp->ncoords, unsigned char);
+ for (i = 0; i < hp->ncoords; i++)
+ hp->coords[i] = ctx->prototype->c[i].index;
+ hp->final_metatile = tilechars[ctx->prototype->c[hp->ncoords].type];
+
+ cleanup_coords(ctx);
+ for (i = 0; i < lenof(coords); i++)
+ hc_free(coords[i]);
+}
+
+const char *hat_tiling_params_invalid(const struct HatPatchParams *hp)
+{
+ TileType metatile;
+ size_t i;
+
+ if (hp->ncoords < 3)
+ return "Grid parameters require at least three coordinates";
+ if (metatile_char_to_enum(hp->final_metatile) < 0)
+ return "Grid parameters contain an invalid final metatile";
+ if (hp->coords[0] >= 8)
+ return "Grid parameters contain an invalid kite index";
+
+ metatile = metatile_char_to_enum(hp->final_metatile);
+ for (i = hp->ncoords - 1; i > 1; i--) {
+ if (hp->coords[i] >= nchildren[metatile])
+ return "Grid parameters contain an invalid metatile index";
+ metatile = children[metatile][hp->coords[i]];
+ }
+
+ if (hp->coords[1] >= hats_in_metatile[metatile])
+ return "Grid parameters contain an invalid hat index";
+
+ return NULL;
+}
+
+/*
+ * For each kite generated by hat_tiling_generate, potentially
+ * generate an output hat and give it to our caller.
+ *
+ * We do this by starting from kite #0 of each hat, and tracing round
+ * the boundary. If the whole boundary is within the caller's bounding
+ * region, we return it; if it goes off the edge, we don't.
+ *
+ * (Of course, every hat we _do_ want to return will have all its
+ * kites inside the rectangle, so its kite #0 will certainly be caught
+ * by this iteration.)
+ */
+static void maybe_report_hat(int w, int h, Kite kite, HatCoords *hc,
+ hat_tile_callback_fn cb, void *cbctx)
+{
+ Point vertices[14];
+ size_t i, j;
+ bool reversed = false;
+ int coords[28];
+
+ /* Only iterate from kite #0 of a hat */
+ if (hc->c[0].index != 0)
+ return;
+
+ /*
+ * Identify reflected hats: they are always hat #3 of an H
+ * metatile. If we find one, reflect the starting kite so that the
+ * kite_step operations below will go in the other direction.
+ */
+ if (hc->c[2].type == TT_H && hc->c[1].index == 3) {
+ reversed = true;
+ Point tmp = kite.left;
+ kite.left = kite.right;
+ kite.right = tmp;
+ }
+
+ vertices[0] = kite.centre;
+ vertices[1] = kite.right;
+ vertices[2] = kite.outer;
+ vertices[3] = kite.left;
+ kite = kite_left(kite); /* now on kite #1 */
+ kite = kite_forward_right(kite); /* now on kite #2 */
+ vertices[4] = kite.centre;
+ kite = kite_right(kite); /* now on kite #3 */
+ vertices[5] = kite.right;
+ vertices[6] = kite.outer;
+ kite = kite_forward_left(kite); /* now on kite #4 */
+ vertices[7] = kite.left;
+ vertices[8] = kite.centre;
+ kite = kite_right(kite); /* now on kite #5 */
+ kite = kite_right(kite); /* now on kite #6 */
+ kite = kite_right(kite); /* now on kite #7 */
+ vertices[9] = kite.right;
+ vertices[10] = kite.outer;
+ vertices[11] = kite.left;
+ kite = kite_left(kite); /* now on kite #6 again */
+ vertices[12] = kite.outer;
+ vertices[13] = kite.left;
+
+ if (reversed) {
+ /* For a reversed kite, also reverse the vertex order, so that
+ * we report every polygon in a consistent orientation */
+ for (i = 0, j = 13; i < j; i++, j--) {
+ Point tmp = vertices[i];
+ vertices[i] = vertices[j];
+ vertices[j] = tmp;
+ }
+ }
+
+ /*
+ * Convert from our internal coordinate system into the orthogonal
+ * one used in this module's external API. In the same loop, we
+ * might as well do the bounds check.
+ */
+ for (i = 0; i < 14; i++) {
+ Point v = vertices[i];
+ int x = (v.x * 2 + v.y) / 3, y = v.y;
+
+ if (x < 0 || x > 4*w || y < 0 || y > 6*h)
+ return; /* a vertex of this kite is out of bounds */
+
+ coords[2*i] = x;
+ coords[2*i+1] = y;
+ }
+
+ cb(cbctx, 14, coords);
+}
+
+/*
+ * Generate a hat tiling from a previously generated set of parameters.
+ */
+void hat_tiling_generate(const struct HatPatchParams *hp, int w, int h,
+ hat_tile_callback_fn cb, void *cbctx)
+{
+ HatCoordContext ctx[1];
+ HatCoords *coords[KE_NKEEP];
+ KiteEnum s[1];
+ size_t i;
+
+ init_coords_params(ctx, hp);
+ for (i = 0; i < lenof(coords); i++)
+ coords[i] = NULL;
+
+ first_kite(s, w, h);
+ coords[s->curr_index] = initial_coords(ctx);
+ maybe_report_hat(w, h, *s->curr, coords[s->curr_index], cb, cbctx);
+
+ while (next_kite(s)) {
+ hc_free(coords[s->curr_index]);
+ coords[s->curr_index] = step_coords(
+ ctx, coords[s->last_index], s->last_step);
+ maybe_report_hat(w, h, *s->curr, coords[s->curr_index], cb, cbctx);
+ }
+
+ cleanup_coords(ctx);
+ for (i = 0; i < lenof(coords); i++)
+ hc_free(coords[i]);
+}
+
+#ifdef TEST_HAT
+
+#include <stdarg.h>
+
+static HatCoords *hc_construct_v(TileType type, va_list ap)
+{
+ HatCoords *hc = hc_new();
+ while (true) {
+ int index = va_arg(ap, int);
+
+ hc_make_space(hc, hc->nc + 1);
+ hc->c[hc->nc].type = type;
+ hc->c[hc->nc].index = index;
+ hc->nc++;
+
+ if (index < 0)
+ return hc;
+
+ type = va_arg(ap, TileType);
+ }
+}
+
+static HatCoords *hc_construct(TileType type, ...)
+{
+ HatCoords *hc;
+ va_list ap;
+
+ va_start(ap, type);
+ hc = hc_construct_v(type, ap);
+ va_end(ap);
+
+ return hc;
+}
+
+static bool hc_equal(HatCoords *hc1, HatCoords *hc2)
+{
+ size_t i;
+
+ if (hc1->nc != hc2->nc)
+ return false;
+
+ for (i = 0; i < hc1->nc; i++) {
+ if (hc1->c[i].type != hc2->c[i].type ||
+ hc1->c[i].index != hc2->c[i].index)
+ return false;
+ }
+
+ return true;
+}
+
+static bool hc_expect(const char *file, int line, HatCoords *hc,
+ TileType type, ...)
+{
+ bool equal;
+ va_list ap;
+ HatCoords *hce;
+
+ va_start(ap, type);
+ hce = hc_construct_v(type, ap);
+ va_end(ap);
+
+ equal = hc_equal(hc, hce);
+
+ if (!equal) {
+ fprintf(stderr, "%s:%d: coordinate mismatch\n", file, line);
+ debug_coords(" expected: ", hce, "\n");
+ debug_coords(" actual: ", hc, "\n");
+ }
+
+ hc_free(hce);
+ return equal;
+}
+
+#define EXPECT(hc, ...) do { \
+ if (!hc_expect(__FILE__, __LINE__, hc, __VA_ARGS__)) \
+ fails++; \
+ } while (0)
+
+static bool unit_tests(void)
+{
+ int fails = 0;
+ HatCoordContext ctx[1];
+ HatCoords *hc_in, *hc_out;
+
+ ctx->rs = NULL;
+ ctx->prototype = hc_construct(TT_KITE, 0, TT_HAT, 0, TT_H, -1);
+
+ /* Simple steps within a hat */
+
+ hc_in = hc_construct(TT_KITE, 6, TT_HAT, 2, TT_H, 1, TT_H, -1);
+ hc_out = step_coords(ctx, hc_in, KS_LEFT);
+ EXPECT(hc_out, TT_KITE, 5, TT_HAT, 2, TT_H, 1, TT_H, -1);
+ hc_free(hc_in);
+ hc_free(hc_out);
+
+ hc_in = hc_construct(TT_KITE, 6, TT_HAT, 2, TT_H, 1, TT_H, -1);
+ hc_out = step_coords(ctx, hc_in, KS_RIGHT);
+ EXPECT(hc_out, TT_KITE, 7, TT_HAT, 2, TT_H, 1, TT_H, -1);
+ hc_free(hc_in);
+ hc_free(hc_out);
+
+ hc_in = hc_construct(TT_KITE, 5, TT_HAT, 2, TT_H, 1, TT_H, -1);
+ hc_out = step_coords(ctx, hc_in, KS_F_LEFT);
+ EXPECT(hc_out, TT_KITE, 2, TT_HAT, 2, TT_H, 1, TT_H, -1);
+ hc_free(hc_in);
+ hc_free(hc_out);
+
+ hc_in = hc_construct(TT_KITE, 5, TT_HAT, 2, TT_H, 1, TT_H, -1);
+ hc_out = step_coords(ctx, hc_in, KS_F_RIGHT);
+ EXPECT(hc_out, TT_KITE, 1, TT_HAT, 2, TT_H, 1, TT_H, -1);
+ hc_free(hc_in);
+ hc_free(hc_out);
+
+ /* Step between hats in the same kitemap, which can change the
+ * metatile type at layer 2 */
+
+ hc_in = hc_construct(TT_KITE, 6, TT_HAT, 2, TT_H, 1, TT_H, -1);
+ hc_out = step_coords(ctx, hc_in, KS_F_LEFT);
+ EXPECT(hc_out, TT_KITE, 3, TT_HAT, 0, TT_H, 0, TT_H, -1);
+ hc_free(hc_in);
+ hc_free(hc_out);
+
+ hc_in = hc_construct(TT_KITE, 7, TT_HAT, 2, TT_H, 1, TT_H, -1);
+ hc_out = step_coords(ctx, hc_in, KS_F_RIGHT);
+ EXPECT(hc_out, TT_KITE, 4, TT_HAT, 0, TT_T, 3, TT_H, -1);
+ hc_free(hc_in);
+ hc_free(hc_out);
+
+ /* Step off the edge of one kitemap, necessitating a metamap
+ * rewrite of layers 2,3 to get into a different kitemap where
+ * that step can be made */
+
+ hc_in = hc_construct(TT_KITE, 6, TT_HAT, 0, TT_P, 2, TT_P, 3, TT_P, -1);
+ hc_out = step_coords(ctx, hc_in, KS_F_RIGHT);
+ /* Working:
+ * kite 6 . hat 0 . P 2 . P 3 . P ?
+ * -> kite 6 . hat 0 . P 6 . H 0 . P ? (P metamap says 2.3 = 6.0)
+ */
+ EXPECT(hc_out, TT_KITE, 7, TT_HAT, 1, TT_H, 1, TT_H, 0, TT_P, -1);
+ hc_free(hc_in);
+ hc_free(hc_out);
+
+ cleanup_coords(ctx);
+ return fails == 0;
+}
+
+typedef struct pspoint {
+ float x, y;
+} pspoint;
+
+static inline pspoint pscoords(Point p)
+{
+ pspoint q = { p.x + p.y / 2.0F, p.y * sqrt(0.75) };
+ return q;
+}
+
+typedef struct psbbox {
+ bool started;
+ pspoint bl, tr;
+} psbbox;
+
+static inline void psbbox_add(psbbox *bbox, pspoint p)
+{
+ if (!bbox->started || bbox->bl.x > p.x)
+ bbox->bl.x = p.x;
+ if (!bbox->started || bbox->tr.x < p.x)
+ bbox->tr.x = p.x;
+ if (!bbox->started || bbox->bl.y > p.y)
+ bbox->bl.y = p.y;
+ if (!bbox->started || bbox->tr.y < p.y)
+ bbox->tr.y = p.y;
+ bbox->started = true;
+}
+
+static void header(psbbox *bbox)
+{
+ float xext = bbox->tr.x - bbox->bl.x, yext = bbox->tr.y - bbox->bl.y;
+ float ext = (xext > yext ? xext : yext);
+ float scale = 500 / ext;
+ float ox = 287 - scale * (bbox->bl.x + bbox->tr.x) / 2;
+ float oy = 421 - scale * (bbox->bl.y + bbox->tr.y) / 2;
+
+ printf("%%!PS-Adobe-2.0\n%%%%Creator: hat-test from Simon Tatham's "
+ "Portable Puzzle Collection\n%%%%Pages: 1\n"
+ "%%%%BoundingBox: %f %f %f %f\n"
+ "%%%%EndComments\n%%%%Page: 1 1\n",
+ ox + scale * bbox->bl.x - 20, oy + scale * bbox->bl.y - 20,
+ ox + scale * bbox->tr.x + 20, oy + scale * bbox->tr.y + 20);
+
+ printf("%f %f translate %f dup scale\n", ox, oy, scale);
+ printf("%f setlinewidth\n", 0.1);
+ printf("/thick { %f setlinewidth } def\n", 0.7);
+ printf("0 setgray 1 setlinejoin 1 setlinecap\n");
+}
+
+static void bbox_add_kite(Kite k, psbbox *bbox)
+{
+ pspoint p[4];
+ size_t i;
+
+ p[0] = pscoords(k.centre);
+ p[1] = pscoords(k.left);
+ p[2] = pscoords(k.outer);
+ p[3] = pscoords(k.right);
+
+ for (i = 0; i < 4; i++)
+ psbbox_add(bbox, p[i]);
+}
+
+static void fill_kite(Kite k, HatCoords *hc)
+{
+ pspoint p[4];
+ size_t i;
+
+ p[0] = pscoords(k.centre);
+ p[1] = pscoords(k.left);
+ p[2] = pscoords(k.outer);
+ p[3] = pscoords(k.right);
+
+ printf("newpath");
+ for (i = 0; i < 4; i++)
+ printf(" %f %f %s", p[i].x, p[i].y, i ? "lineto" : "moveto");
+ printf(" closepath gsave");
+ if (hc) {
+ const char *colour = "0 setgray";
+ if (hc->c[2].type == TT_H) {
+ colour = (hc->c[1].index == 3 ? "0 0.5 0.8 setrgbcolor" :
+ "0.6 0.8 1 setrgbcolor");
+ } else if (hc->c[2].type == TT_F) {
+ colour = "0.7 setgray";
+ } else {
+ colour = "1 setgray";
+ }
+ printf(" %s fill grestore\n", colour);
+ }
+}
+
+static void stroke_kite(Kite k, HatCoords *hc)
+{
+ pspoint p[4];
+ size_t i;
+
+ p[0] = pscoords(k.centre);
+ p[1] = pscoords(k.left);
+ p[2] = pscoords(k.outer);
+ p[3] = pscoords(k.right);
+
+ printf("newpath");
+ for (i = 0; i < 4; i++)
+ printf(" %f %f %s", p[i].x, p[i].y, i ? "lineto" : "moveto");
+ printf(" closepath");
+ printf(" stroke\n");
+
+ if (hc->c[2].type == TT_H && hc->c[1].index == 3) {
+ pspoint t = p[1]; p[1] = p[3]; p[3] = t;
+ }
+ #define LINE(a,b) printf("gsave newpath %f %f moveto %f %f lineto thick " \
+ "stroke grestore\n", p[a].x, p[a].y, p[b].x, p[b].y)
+ switch (hc->c[0].index) {
+ case 0: LINE(1, 2); LINE(2, 3); LINE(3, 0); break;
+ case 1: LINE(0, 1); break;
+ case 2: LINE(0, 1); break;
+ case 3: LINE(2, 3); LINE(3, 0); break;
+ case 4: LINE(0, 1); LINE(1, 2); break;
+ case 6: LINE(1, 2); LINE(2, 3); break;
+ case 7: LINE(1, 2); LINE(2, 3); LINE(3, 0); break;
+ }
+ #undef LINE
+}
+
+static void trailer(void)
+{
+ printf("showpage\n");
+ printf("%%%%Trailer\n");
+ printf("%%%%EOF\n");
+}
+
+int main(int argc, char **argv)
+{
+ psbbox bbox[1];
+ KiteEnum s[1];
+ HatCoordContext ctx[1];
+ HatCoords *coords[KE_NKEEP];
+ random_state *rs = random_new("12345", 5);
+ int w = 10, h = 10;
+ size_t i;
+
+ if (argc > 1 && !strcmp(argv[1], "--test")) {
+ return unit_tests() ? 0 : 1;
+ }
+
+ for (i = 0; i < lenof(coords); i++)
+ coords[i] = NULL;
+
+ init_coords_random(ctx, rs);
+
+ bbox->started = false;
+
+ first_kite(s, w, h);
+ coords[s->curr_index] = initial_coords(ctx);
+ bbox_add_kite(*s->curr, bbox);
+ while (next_kite(s)) {
+ hc_free(coords[s->curr_index]);
+ coords[s->curr_index] = step_coords(
+ ctx, coords[s->last_index], s->last_step);
+ bbox_add_kite(*s->curr, bbox);
+ }
+ for (i = 0; i < lenof(coords); i++) {
+ hc_free(coords[i]);
+ coords[i] = NULL;
+ }
+
+ header(bbox);
+
+ first_kite(s, w, h);
+ coords[s->curr_index] = initial_coords(ctx);
+ fill_kite(*s->curr, coords[s->curr_index]);
+ while (next_kite(s)) {
+ hc_free(coords[s->curr_index]);
+ coords[s->curr_index] = step_coords(
+ ctx, coords[s->last_index], s->last_step);
+ fill_kite(*s->curr, coords[s->curr_index]);
+ }
+ for (i = 0; i < lenof(coords); i++) {
+ hc_free(coords[i]);
+ coords[i] = NULL;
+ }
+
+ first_kite(s, w, h);
+ coords[s->curr_index] = initial_coords(ctx);
+ stroke_kite(*s->curr, coords[s->curr_index]);
+ while (next_kite(s)) {
+ hc_free(coords[s->curr_index]);
+ coords[s->curr_index] = step_coords(
+ ctx, coords[s->last_index], s->last_step);
+ stroke_kite(*s->curr, coords[s->curr_index]);
+ }
+ for (i = 0; i < lenof(coords); i++) {
+ hc_free(coords[i]);
+ coords[i] = NULL;
+ }
+
+ trailer();
+
+ cleanup_coords(ctx);
+
+ return 0;
+}
+#endif
diff --git a/hat.h b/hat.h
new file mode 100644
index 0000000..39e2d31
--- /dev/null
+++ b/hat.h
@@ -0,0 +1,67 @@
+#ifndef PUZZLES_HAT_H
+#define PUZZLES_HAT_H
+
+struct HatPatchParams {
+ /*
+ * A patch of hat tiling is identified by giving the coordinates
+ * of the kite in one corner, using a multi-level coordinate
+ * system based on metatile expansions. Coordinates are a sequence
+ * of small non-negative integers. The valid range for each
+ * coordinate depends on the next coordinate, or on final_metatile
+ * if it's the last one in the list. The largest valid range is
+ * {0,...,12}.
+ *
+ * 'final_metatile' is one of the characters 'H', 'T', 'P' or 'F'.
+ */
+ size_t ncoords;
+ unsigned char *coords;
+ char final_metatile;
+};
+
+/*
+ * Fill in HatPatchParams with a randomly selected set of coordinates,
+ * in enough detail to generate a patch of tiling covering an area of
+ * w x h 'squares' of a kite tiling.
+ *
+ * The kites grid is considered to be oriented so that it includes
+ * horizontal lines and not vertical ones. So each of the smallest
+ * equilateral triangles in the grid has a bounding rectangle whose
+ * height is sqrt(3)/2 times its width, and either the top or the
+ * bottom of that bounding rectangle is the horizontal edge of the
+ * triangle. A 'square' of a kite tiling (for convenience of choosing
+ * grid dimensions) counts as one of those bounding rectangles.
+ *
+ * The 'coords' field of the structure will be filled in with a new
+ * dynamically allocated array. Any previous pointer in that field
+ * will be overwritten.
+ */
+void hat_tiling_randomise(struct HatPatchParams *params, int w, int h,
+ random_state *rs);
+
+/*
+ * Validate a HatPatchParams to ensure it contains no illegal
+ * coordinates. Returns NULL if it's acceptable, or an error string if
+ * not.
+ */
+const char *hat_tiling_params_invalid(const struct HatPatchParams *params);
+
+/*
+ * Generate the actual set of hat tiles from a HatPatchParams, passing
+ * each one to a callback. The callback receives the vertices of each
+ * point, as a sequence of 2*nvertices integers, with x,y coordinates
+ * interleaved.
+ *
+ * The x coordinates are measured in units of 1/4 of the side length
+ * of the smallest equilateral triangle, or equivalently, 1/2 the
+ * length of one of the long edges of a single kite. The y coordinates
+ * are measured in units of 1/6 the height of the triangle, which is
+ * also 1/2 the length of the short edge of a kite. Therefore, you can
+ * expect x to go up to 4*w and y up to 6*h.
+ */
+typedef void (*hat_tile_callback_fn)(void *ctx, size_t nvertices,
+ int *coords);
+
+void hat_tiling_generate(const struct HatPatchParams *params, int w, int h,
+ hat_tile_callback_fn cb, void *cbctx);
+
+#endif
diff --git a/loopy.c b/loopy.c
index c627f2b..86f6d5e 100644
--- a/loopy.c
+++ b/loopy.c
@@ -280,6 +280,7 @@ static void check_caches(const solver_state* sstate);
A("Great-Great-Dodecagonal",GREATGREATDODECAGONAL,2,2) \
A("Kagome",KAGOME,3,3) \
A("Compass-Dodecagonal",COMPASSDODECAGONAL,2,2) \
+ A("Hats",HATS,6,6) \
/* end of list */
#define GRID_NAME(title,type,amin,omin) title,
@@ -564,6 +565,7 @@ static const game_params loopy_presets_more[] = {
{ 5, 4, DIFF_HARD, LOOPY_GRID_GREATDODECAGONAL },
{ 5, 3, DIFF_HARD, LOOPY_GRID_GREATGREATDODECAGONAL },
{ 5, 4, DIFF_HARD, LOOPY_GRID_COMPASSDODECAGONAL },
+ { 10, 10, DIFF_HARD, LOOPY_GRID_HATS },
#endif
};
@@ -2299,7 +2301,7 @@ static int dline_deductions(solver_state *sstate)
* on that. We check this with an assertion, in case someone decides to
* make a grid which has larger faces than this. Note, this algorithm
* could get quite expensive if there are many large faces. */
-#define MAX_FACE_SIZE 12
+#define MAX_FACE_SIZE 14
for (i = 0; i < g->num_faces; i++) {
int maxs[MAX_FACE_SIZE][MAX_FACE_SIZE];