summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLex Neva <lexelby@users.noreply.github.com>2023-02-22 20:22:49 -0500
committerGitHub <noreply@github.com>2023-02-22 20:22:49 -0500
commit8cdfaf099864e76a487ce77712ee54682e4a091f (patch)
tree6fd43b320f53d4f81a40c0097091f8e4baaa31ac
parente559af72480858c32f5df57f7f6a0d653718ebf8 (diff)
parent92dff9f359f19c57ce63046a85cbd40746e50a32 (diff)
Merge pull request #1803 from inkstitch/lexelby/smoothing
Meander fill
-rw-r--r--Makefile3
-rwxr-xr-xbin/inkstitch-tiles-gettext21
-rw-r--r--lib/debug.py55
-rw-r--r--lib/elements/fill_stitch.py56
-rw-r--r--lib/elements/satin_column.py8
-rw-r--r--lib/extensions/params.py63
-rw-r--r--lib/stitches/contour_fill.py9
-rw-r--r--lib/stitches/meander_fill.py177
-rw-r--r--lib/stitches/running_stitch.py6
-rw-r--r--lib/svg/tags.py3
-rw-r--r--lib/tiles.py188
-rw-r--r--lib/utils/clamp_path.py121
-rw-r--r--lib/utils/geometry.py7
-rw-r--r--lib/utils/list.py23
-rw-r--r--lib/utils/prng.py28
-rw-r--r--lib/utils/smoothing.py84
-rw-r--r--lib/utils/string.py7
-rw-r--r--tiles/N3-11a/tile.json5
-rw-r--r--tiles/N3-11a/tile.svg119
-rw-r--r--tiles/N3-12/tile.json5
-rw-r--r--tiles/N3-12/tile.svg31
-rw-r--r--tiles/N3-16a/tile.json5
-rw-r--r--tiles/N3-16a/tile.svg31
-rw-r--r--tiles/N3-17/tile.json5
-rw-r--r--tiles/N3-17/tile.svg24
-rw-r--r--tiles/N3-18-modified/tile.json5
-rw-r--r--tiles/N3-18-modified/tile.svg36
-rw-r--r--tiles/N3-18/tile.json5
-rw-r--r--tiles/N3-18/tile.svg36
-rw-r--r--tiles/N3-20/tile.json5
-rw-r--r--tiles/N3-20/tile.svg38
-rw-r--r--tiles/N3-23b/tile.json5
-rw-r--r--tiles/N3-23b/tile.svg39
-rw-r--r--tiles/N3-25c/tile.json5
-rw-r--r--tiles/N3-25c/tile.svg39
-rw-r--r--tiles/N3-26b/tile.json5
-rw-r--r--tiles/N3-26b/tile.svg40
-rw-r--r--tiles/N3-27/tile.json5
-rw-r--r--tiles/N3-27/tile.svg39
-rw-r--r--tiles/N3-30a/tile.json5
-rw-r--r--tiles/N3-30a/tile.svg55
-rw-r--r--tiles/N3-51b/tile.json5
-rw-r--r--tiles/N3-51b/tile.svg144
-rw-r--r--tiles/N3-57f-modified/tile.json5
-rw-r--r--tiles/N3-57f-modified/tile.svg89
-rw-r--r--tiles/N3-58b/tile.json5
-rw-r--r--tiles/N3-58b/tile.svg51
-rw-r--r--tiles/N3-6/tile.json5
-rw-r--r--tiles/N3-6/tile.svg26
-rw-r--r--tiles/N3-7/tile.json5
-rw-r--r--tiles/N3-7/tile.svg31
-rw-r--r--tiles/N3-8a-modified/tile.json5
-rw-r--r--tiles/N3-8a-modified/tile.svg20
-rw-r--r--tiles/N3-8a/tile.json5
-rw-r--r--tiles/N3-8a/tile.svg22
-rw-r--r--tiles/N3-8b/tile.json5
-rw-r--r--tiles/N3-8b/tile.svg31
-rw-r--r--tiles/N4-13b/tile.json5
-rw-r--r--tiles/N4-13b/tile.svg38
-rw-r--r--tiles/N4-13c/tile.json5
-rw-r--r--tiles/N4-13c/tile.svg35
-rw-r--r--tiles/N4-13d/tile.json5
-rw-r--r--tiles/N4-13d/tile.svg53
-rw-r--r--tiles/N4-13e/tile.json5
-rw-r--r--tiles/N4-13e/tile.svg44
-rw-r--r--tiles/N4-13f/tile.json5
-rw-r--r--tiles/N4-13f/tile.svg39
-rw-r--r--tiles/N4-16a/tile.json5
-rw-r--r--tiles/N4-16a/tile.svg48
-rw-r--r--tiles/N4-19/tile.json5
-rw-r--r--tiles/N4-19/tile.svg43
-rw-r--r--tiles/N4-20/tile.json5
-rw-r--r--tiles/N4-20/tile.svg55
-rw-r--r--tiles/N4-21c/tile.json5
-rw-r--r--tiles/N4-21c/tile.svg39
-rw-r--r--tiles/N4-22/tile.json5
-rw-r--r--tiles/N4-22/tile.svg41
-rw-r--r--tiles/N4-23a/tile.json5
-rw-r--r--tiles/N4-23a/tile.svg57
-rw-r--r--tiles/N4-23c/tile.json5
-rw-r--r--tiles/N4-23c/tile.svg41
-rw-r--r--tiles/N4-27/tile.json5
-rw-r--r--tiles/N4-27/tile.svg48
-rw-r--r--tiles/N4-29e/tile.json5
-rw-r--r--tiles/N4-29e/tile.svg34
-rw-r--r--tiles/N4-29f/tile.json5
-rw-r--r--tiles/N4-29f/tile.svg41
-rw-r--r--tiles/N4-31/tile.json5
-rw-r--r--tiles/N4-31/tile.svg30
-rw-r--r--tiles/N4-38/tile.json5
-rw-r--r--tiles/N4-38/tile.svg60
-rw-r--r--tiles/N4-42e/tile.json5
-rw-r--r--tiles/N4-42e/tile.svg35
-rw-r--r--tiles/N4-44/tile.json5
-rw-r--r--tiles/N4-44/tile.svg45
-rw-r--r--tiles/N4-52/tile.json5
-rw-r--r--tiles/N4-52/tile.svg45
-rw-r--r--tiles/N4-54d/tile.json5
-rw-r--r--tiles/N4-54d/tile.svg44
-rw-r--r--tiles/N4-5a-2/tile.json5
-rw-r--r--tiles/N4-5a-2/tile.svg29
-rw-r--r--tiles/N4-5a/tile.json5
-rw-r--r--tiles/N4-5a/tile.svg40
-rw-r--r--tiles/N4-82/tile.json5
-rw-r--r--tiles/N4-82/tile.svg36
-rw-r--r--tiles/N4-85d/tile.json5
-rw-r--r--tiles/N4-85d/tile.svg49
-rw-r--r--tiles/N5-1e1/tile.json5
-rw-r--r--tiles/N5-1e1/tile.svg39
-rw-r--r--tiles/N5-1q2/tile.json5
-rw-r--r--tiles/N5-1q2/tile.svg30
-rw-r--r--tiles/N5-1t/tile.json5
-rw-r--r--tiles/N5-1t/tile.svg28
-rw-r--r--tiles/N6-1/tile.json5
-rw-r--r--tiles/N6-1/tile.svg16
-rw-r--r--tiles/N6-2/tile.json5
-rw-r--r--tiles/N6-2/tile.svg47
-rw-r--r--tiles/N6-5b/tile.json5
-rw-r--r--tiles/N6-5b/tile.svg60
-rw-r--r--tiles/N6-6a/tile.json5
-rw-r--r--tiles/N6-6a/tile.svg60
-rw-r--r--tiles/N6-6c/tile.json5
-rw-r--r--tiles/N6-6c/tile.svg197
-rw-r--r--tiles/NC5-11a/tile.json5
-rw-r--r--tiles/NC5-11a/tile.svg35
-rw-r--r--tiles/NC5-20a/tile.json5
-rw-r--r--tiles/NC5-20a/tile.svg31
-rw-r--r--tiles/P3-1/tile.json5
-rw-r--r--tiles/P3-1/tile.svg26
-rw-r--r--tiles/P3-12/tile.json5
-rw-r--r--tiles/P3-12/tile.svg28
-rw-r--r--tiles/P4-1/tile.json5
-rw-r--r--tiles/P4-1/tile.svg72
-rw-r--r--tiles/P4-10/tile.json5
-rw-r--r--tiles/P4-10/tile.svg38
-rw-r--r--tiles/P4-15/tile.json5
-rw-r--r--tiles/P4-15/tile.svg99
-rw-r--r--tiles/P4-19/tile.json5
-rw-r--r--tiles/P4-19/tile.svg74
-rw-r--r--tiles/P4-23/tile.json5
-rw-r--r--tiles/P4-23/tile.svg39
-rw-r--r--tiles/P4-24/tile.json5
-rw-r--r--tiles/P4-24/tile.svg39
-rw-r--r--tiles/P4-25/tile.json5
-rw-r--r--tiles/P4-25/tile.svg39
-rw-r--r--tiles/P4-43-modified/tile.json5
-rw-r--r--tiles/P4-43-modified/tile.svg30
-rw-r--r--tiles/P4-43/tile.json5
-rw-r--r--tiles/P4-43/tile.svg23
-rw-r--r--tiles/P4-47/tile.json5
-rw-r--r--tiles/P4-47/tile.svg26
-rw-r--r--tiles/P5-10_11/tile.json5
-rw-r--r--tiles/P5-10_11/tile.svg29
-rw-r--r--tiles/P5-19/tile.json5
-rw-r--r--tiles/P5-19/tile.svg31
-rw-r--r--tiles/P5-23_24/tile.json5
-rw-r--r--tiles/P5-23_24/tile.svg27
-rw-r--r--tiles/P5-4/tile.json5
-rw-r--r--tiles/P5-4/tile.svg26
-rw-r--r--tiles/P6-6_11/tile.json5
-rw-r--r--tiles/P6-6_11/tile.svg28
-rw-r--r--tiles/diamond-square/tile.json5
-rw-r--r--tiles/diamond-square/tile.svg128
-rw-r--r--tiles/hexagon/tile.json5
-rw-r--r--tiles/hexagon/tile.svg27
-rw-r--r--tiles/weird-one/tile.json5
-rw-r--r--tiles/weird-one/tile.svg110
167 files changed, 4681 insertions, 45 deletions
diff --git a/Makefile b/Makefile
index c81e2a98..64d6bed8 100644
--- a/Makefile
+++ b/Makefile
@@ -19,11 +19,12 @@ messages.po: inx
sed -i 's/charset=CHARSET/charset=UTF-8/g' messages-inx.po
bin/pyembroidery-gettext > pyembroidery-format-descriptions.py
bin/inkstitch-fonts-gettext > inkstitch-fonts-metadata.py
+ bin/inkstitch-tiles-gettext > inkstitch-tiles-metadata.py
# After the inx files are finished building, we don't need the src/ folder anymore.
# We don't want babel to grab possible translation strings from that folder, so let's remove it
rm -rf src/
pybabel extract -o messages-babel.po -F babel.conf --add-location=full --add-comments=l10n,L10n,L10N --sort-by-file --strip-comments -k N_ -k '$$gettext' .
- rm pyembroidery-format-descriptions.py inkstitch-fonts-metadata.py
+ rm pyembroidery-format-descriptions.py inkstitch-fonts-metadata.py inkstitch-tiles-metadata.py
cd electron && yarn --link-duplicates --pure-lockfile
find electron/src -name '*.html' -o -name '*.js' -o -name '*.vue' | xargs electron/node_modules/.bin/gettext-extract --quiet --attribute v-translate --output messages-vue.po
msgcat -o messages.po messages-babel.po messages-vue.po messages-inx.po
diff --git a/bin/inkstitch-tiles-gettext b/bin/inkstitch-tiles-gettext
new file mode 100755
index 00000000..e125dabf
--- /dev/null
+++ b/bin/inkstitch-tiles-gettext
@@ -0,0 +1,21 @@
+#!/usr/bin/env python
+
+import os
+import json
+
+# generate fake python code containing the names and descriptions of all built-
+# in tiles as gettext calls so that pybabel will extract them into messages.po
+
+tiles_dir = os.path.join(os.path.dirname(__file__), "..", "tiles")
+
+for tile in sorted(os.listdir(tiles_dir)):
+ with open(os.path.join(tiles_dir, tile, "tile.json")) as tile_json:
+ tile_metadata = json.load(tile_json)
+
+ print("# L10N name of tile in tiles/%s" % tile)
+ print("_(%s)" % repr(tile_metadata.get("name", "")))
+
+ if tile_metadata.get("description", ""):
+ print("# L10N description of tile in tiles/%s" % tile)
+ print("_(%s)" % repr(tile_metadata.get("description", "")))
+
diff --git a/lib/debug.py b/lib/debug.py
index 0d6af104..4751e6af 100644
--- a/lib/debug.py
+++ b/lib/debug.py
@@ -21,12 +21,46 @@ from .svg.tags import INKSCAPE_GROUPMODE, INKSCAPE_LABEL
def check_enabled(func):
def decorated(self, *args, **kwargs):
if self.enabled:
- func(self, *args, **kwargs)
+ return func(self, *args, **kwargs)
+
+ return decorated
+
+
+def _unwrap(arg):
+ if callable(arg):
+ return arg()
+ else:
+ return arg
+
+
+def unwrap_arguments(func):
+ def decorated(self, *args, **kwargs):
+ unwrapped_args = [_unwrap(arg) for arg in args]
+ unwrapped_kwargs = {name: _unwrap(value) for name, value in kwargs.items()}
+
+ return func(self, *unwrapped_args, **unwrapped_kwargs)
return decorated
class Debug(object):
+ """Tools to help debug Ink/Stitch
+
+ This class contains methods to log strings and SVG elements. Strings are
+ logged to debug.log, and SVG elements are stored in debug.svg to aid in
+ debugging stitch algorithms.
+
+ All functionality is gated by self.enabled. If debugging is not enabled,
+ then debug calls will consume very few resources. Any method argument
+ can be a callable, in which case it is called and the return value is
+ logged instead. This way one can log potentially expensive expressions
+ by wrapping them in a lambda:
+
+ debug.log(lambda: some_expensive_function(some_argument))
+
+ The lambda is only called if debugging is enabled.
+ """
+
def __init__(self):
self.enabled = False
self.last_log_time = None
@@ -145,6 +179,7 @@ class Debug(object):
tree.write(debug_svg)
@check_enabled
+ @unwrap_arguments
def add_layer(self, name="Debug"):
layer = etree.Element("g", {
INKSCAPE_GROUPMODE: "layer",
@@ -155,6 +190,7 @@ class Debug(object):
self.current_layer = layer
@check_enabled
+ @unwrap_arguments
def open_group(self, name="Group"):
group = etree.Element("g", {
INKSCAPE_LABEL: name
@@ -164,11 +200,13 @@ class Debug(object):
self.group_stack.append(group)
@check_enabled
+ @unwrap_arguments
def close_group(self):
if self.group_stack:
self.group_stack.pop()
@check_enabled
+ @unwrap_arguments
def log(self, message, *args):
if self.last_log_time:
message = "(+%s) %s" % (datetime.now() - self.last_log_time, message)
@@ -201,6 +239,7 @@ class Debug(object):
return decorated
@check_enabled
+ @unwrap_arguments
def log_svg_element(self, element):
if self.current_layer is None:
self.add_layer()
@@ -211,11 +250,13 @@ class Debug(object):
self.current_layer.append(element)
@check_enabled
+ @unwrap_arguments
def log_line_string(self, line_string, name=None, color=None):
"""Add a Shapely LineString to the SVG log."""
self.log_line_strings([line_string], name, color)
@check_enabled
+ @unwrap_arguments
def log_line_strings(self, line_strings, name=None, color=None):
path = line_strings_to_path(line_strings)
path.set('style', str(inkex.Style({"stroke": color or "#000000", "stroke-width": "0.3", "fill": None})))
@@ -226,6 +267,7 @@ class Debug(object):
self.log_svg_element(path)
@check_enabled
+ @unwrap_arguments
def log_line(self, start, end, name="line", color=None):
self.log_svg_element(etree.Element("path", {
"d": "M%s,%s %s,%s" % (start + end),
@@ -234,6 +276,17 @@ class Debug(object):
}))
@check_enabled
+ @unwrap_arguments
+ def log_point(self, point, name="point", color=None):
+ self.log_svg_element(etree.Element("circle", {
+ "cx": str(point.x),
+ "cy": str(point.y),
+ "r": "1",
+ "style": str(inkex.Style({"fill": "#000000"})),
+ }))
+
+ @check_enabled
+ @unwrap_arguments
def log_graph(self, graph, name="Graph", color=None):
d = ""
diff --git a/lib/elements/fill_stitch.py b/lib/elements/fill_stitch.py
index 77b4ac7c..c6762ad1 100644
--- a/lib/elements/fill_stitch.py
+++ b/lib/elements/fill_stitch.py
@@ -17,8 +17,10 @@ from ..i18n import _
from ..marker import get_marker_elements
from ..stitch_plan import StitchGroup
from ..stitches import auto_fill, contour_fill, guided_fill, legacy_fill
+from ..stitches.meander_fill import meander_fill
from ..svg import PIXELS_PER_MM
from ..svg.tags import INKSCAPE_LABEL
+from .. import tiles
from ..utils import cache, version
from .element import EmbroideryElement, param
from .validation import ValidationError, ValidationWarning
@@ -107,7 +109,7 @@ class FillStitch(EmbroideryElement):
@property
@param('fill_method', _('Fill method'), type='dropdown', default=0,
- options=[_("Auto Fill"), _("Contour Fill"), _("Guided Fill"), _("Legacy Fill")], sort_index=2)
+ options=[_("Auto Fill"), _("Contour Fill"), _("Guided Fill"), _("Legacy Fill"), _("Meander Fill")], sort_index=2)
def fill_method(self):
return self.get_int_param('fill_method', 0)
@@ -138,11 +140,37 @@ class FillStitch(EmbroideryElement):
return self.get_boolean_param('avoid_self_crossing', False)
@property
+ @param('smoothness_mm', _('Smoothness'),
+ tooltip=_(
+ 'Smooth the stitch path. Smoothness limits how far the smoothed stitch path ' +
+ 'is allowed to deviate from the original path. Try low numbers like 0.2. ' +
+ 'Hint: a lower running stitch tolerance may be needed too.'
+ ),
+ type='integer',
+ unit='mm',
+ default=0,
+ select_items=[('fill_method', 1), ('fill_method', 4)],
+ sort_index=5)
+ def smoothness(self):
+ return self.get_float_param('smoothness_mm', 0)
+
+ @property
@param('clockwise', _('Clockwise'), type='boolean', default=True, select_items=[('fill_method', 1)], sort_index=5)
def clockwise(self):
return self.get_boolean_param('clockwise', True)
@property
+ @param('meander_pattern', _('Meander Pattern'), type='combo', default=0,
+ options=sorted(tiles.all_tiles()), select_items=[('fill_method', 4)], sort_index=3)
+ def meander_pattern(self):
+ return self.get_param('meander_pattern', None)
+
+ @property
+ @param('meander_scale_percent', _('Meander pattern scale'), type='float', unit="%", default=100, select_items=[('fill_method', 4)], sort_index=4)
+ def meander_scale(self):
+ return self.get_split_float_param('meander_scale_percent', (100, 100)) / 100
+
+ @property
@param('angle',
_('Angle of lines of stitches'),
tooltip=_('The angle increases in a counter-clockwise direction. 0 is horizontal. Negative angles are allowed.'),
@@ -194,6 +222,7 @@ class FillStitch(EmbroideryElement):
unit='mm',
sort_index=6,
type='float',
+ select_items=[('fill_method', 0), ('fill_method', 1), ('fill_method', 2), ('fill_method', 3)],
default=0.25)
def row_spacing(self):
return max(self.get_float_param("row_spacing_mm", 0.25), 0.1 * PIXELS_PER_MM)
@@ -210,6 +239,7 @@ class FillStitch(EmbroideryElement):
unit='mm',
sort_index=6,
type='float',
+ select_items=[('fill_method', 0), ('fill_method', 1), ('fill_method', 2), ('fill_method', 3)],
default=3.0)
def max_stitch_length(self):
return max(self.get_float_param("max_stitch_length_mm", 3.0), 0.1 * PIXELS_PER_MM)
@@ -375,12 +405,13 @@ class FillStitch(EmbroideryElement):
@property
@param('running_stitch_length_mm',
- _('Running stitch length (traversal between sections)'),
- tooltip=_('Length of stitches around the outline of the fill region used when moving from section to section.'),
+ _('Running stitch length'),
+ tooltip=_(
+ 'Length of stitches around the outline of the fill region used when moving from section to section. Also used for meander fill.'),
unit='mm',
type='float',
default=1.5,
- select_items=[('fill_method', 0), ('fill_method', 2)],
+ select_items=[('fill_method', 0), ('fill_method', 2), ('fill_method', 4)],
sort_index=6)
def running_stitch_length(self):
return max(self.get_float_param("running_stitch_length_mm", 1.5), 0.01)
@@ -475,12 +506,12 @@ class FillStitch(EmbroideryElement):
@property
@param('expand_mm',
_('Expand'),
- tooltip=_('Expand the shape before fill stitching, to compensate for gaps between shapes.'),
+ tooltip=_('Expand the shape before fill stitching, to compensate for gaps between shapes. Negative values contract instead.'),
unit='mm',
type='float',
default=0,
sort_index=5,
- select_items=[('fill_method', 0), ('fill_method', 2)])
+ select_items=[('fill_method', 0), ('fill_method', 2), ('fill_method', 4)])
def expand(self):
return self.get_float_param('expand_mm', 0)
@@ -571,13 +602,15 @@ class FillStitch(EmbroideryElement):
stitch_groups.extend(underlay_stitch_groups)
fill_shapes = self.fill_shape(shape)
- for fill_shape in fill_shapes.geoms:
+ for i, fill_shape in enumerate(fill_shapes.geoms):
if self.fill_method == 0:
stitch_groups.extend(self.do_auto_fill(fill_shape, previous_stitch_group, start, end))
if self.fill_method == 1:
stitch_groups.extend(self.do_contour_fill(fill_shape, previous_stitch_group, start))
elif self.fill_method == 2:
stitch_groups.extend(self.do_guided_fill(fill_shape, previous_stitch_group, start, end))
+ elif self.fill_method == 4:
+ stitch_groups.extend(self.do_meander_fill(fill_shape, i, start, end))
except ExitThread:
raise
except Exception:
@@ -651,9 +684,11 @@ class FillStitch(EmbroideryElement):
if self.contour_strategy == 0:
stitches = contour_fill.inner_to_outer(
tree,
+ polygon,
self.row_spacing,
self.max_stitch_length,
self.running_stitch_tolerance,
+ self.smoothness,
starting_point,
self.avoid_self_crossing
)
@@ -707,6 +742,13 @@ class FillStitch(EmbroideryElement):
))
return [stitch_group]
+ def do_meander_fill(self, shape, i, starting_point, ending_point):
+ stitch_group = StitchGroup(
+ color=self.color,
+ tags=("meander_fill", "meander_fill_top"),
+ stitches=meander_fill(self, shape, i, starting_point, ending_point))
+ return [stitch_group]
+
@cache
def _get_guide_lines(self, multiple=False):
guide_lines = get_marker_elements(self.node, "guide-line", False, True)
diff --git a/lib/elements/satin_column.py b/lib/elements/satin_column.py
index 4028ad27..eba63c6c 100644
--- a/lib/elements/satin_column.py
+++ b/lib/elements/satin_column.py
@@ -783,7 +783,7 @@ class SatinColumn(EmbroideryElement):
# pre-cache ramdomised parameters to avoid property calls in loop
if use_random:
- seed = prng.joinArgs(self.random_seed, "satin-points")
+ seed = prng.join_args(self.random_seed, "satin-points")
offset_proportional_min = np.array(offset_proportional) - self.random_width_decrease
offset_range = (self.random_width_increase + self.random_width_decrease)
spacing_sigma = spacing * self.random_zigzag_spacing
@@ -857,7 +857,7 @@ class SatinColumn(EmbroideryElement):
if to_travel <= 0:
if use_random:
- roll = prng.uniformFloats(seed, cycle)
+ roll = prng.uniform_floats(seed, cycle)
offset_prop = offset_proportional_min + roll[0:2] * offset_range
to_travel = spacing + ((roll[2] - 0.5) * 2 * spacing_sigma)
else:
@@ -987,7 +987,7 @@ class SatinColumn(EmbroideryElement):
if last_point is not None:
split_points, _ = self.get_split_points(
last_point, a, last_short_point, a_short, max_stitch_length, last_count,
- length_sigma, random_phase, min_split_length, prng.joinArgs(seed, 'satin-split', 2*i))
+ length_sigma, random_phase, min_split_length, prng.join_args(seed, 'satin-split', 2 * i))
patch.add_stitches(split_points, ("satin_column", "satin_split_stitch"))
patch.add_stitch(a_short)
@@ -995,7 +995,7 @@ class SatinColumn(EmbroideryElement):
split_points, last_count = self.get_split_points(
a, b, a_short, b_short, max_stitch_length, None,
- length_sigma, random_phase, min_split_length, prng.joinArgs(seed, 'satin-split', 2*i+1))
+ length_sigma, random_phase, min_split_length, prng.join_args(seed, 'satin-split', 2 * i + 1))
patch.add_stitches(split_points, ("satin_column", "satin_split_stitch"))
patch.add_stitch(b_short)
diff --git a/lib/extensions/params.py b/lib/extensions/params.py
index 1262ceb6..e342c592 100644
--- a/lib/extensions/params.py
+++ b/lib/extensions/params.py
@@ -17,7 +17,7 @@ import wx
from wx.lib.scrolledpanel import ScrolledPanel
from ..commands import is_command, is_command_symbol
-from ..elements import (FillStitch, Clone, EmbroideryElement, Polyline,
+from ..elements import (Clone, EmbroideryElement, FillStitch, Polyline,
SatinColumn, Stroke)
from ..elements.clone import is_clone
from ..gui import PresetsPanel, SimulatorPreview, WarningPanel
@@ -129,9 +129,12 @@ class ParamsTab(ScrolledPanel):
if event:
event.Skip()
- def update_choice_state(self, event=None):
+ def update_choice_state(self, event=None, combo=False):
input = event.GetEventObject()
- selection = input.GetSelection()
+ if combo:
+ selection = input.GetClientData(input.GetSelection()).id
+ else:
+ selection = input.GetSelection()
param = self.inputs_to_params[input]
@@ -143,6 +146,15 @@ class ParamsTab(ScrolledPanel):
if event:
event.Skip()
+ def update_combo_state(self, event=None):
+ self.update_choice_state(event, True)
+
+ def get_combo_value_index(self, param, options):
+ for option in options:
+ if option.id == param:
+ return options.index(option)
+ return 0
+
def pair_changed(self, value):
new_value = not value
@@ -187,11 +199,15 @@ class ParamsTab(ScrolledPanel):
for name, input in self.param_inputs.items():
if input in self.changed_inputs and input != self.toggle_checkbox:
- try:
- values[name] = input.GetValue()
- except AttributeError:
- # dropdown
+ # there are two types of combo boxes:
+ # 1. multiple values for the same param on selected elements - 2. param type
+ # multiple values will be handled with the GetValue() method
+ if name in self.dict_of_choices and self.dict_of_choices[name]['param'].type == 'combo':
+ values[name] = input.GetClientData(input.GetSelection()).id
+ elif isinstance(input, wx.Choice):
values[name] = input.GetSelection()
+ else:
+ values[name] = input.GetValue()
return values
@@ -234,12 +250,16 @@ class ParamsTab(ScrolledPanel):
def load_preset(self, preset):
preset_data = preset.get(self.name, {})
+ # print(self.param_inputs, '\n\n', preset_data.items(), file=sys.stderr)
+
for name, value in preset_data.items():
if name in self.param_inputs:
- try:
- self.param_inputs[name].SetValue(value)
- except AttributeError:
+ if name in self.dict_of_choices and self.dict_of_choices[name]['param'].type == 'combo':
+ self.param_inputs[name].SetSelection(self.get_combo_value_index(value, self.dict_of_choices[name]["param"].options))
+ elif isinstance(self.param_inputs[name], wx.Choice):
self.param_inputs[name].SetSelection(int(value))
+ else:
+ self.param_inputs[name].SetValue(value)
self.changed_inputs.add(self.param_inputs[name])
self.update_toggle_state()
@@ -299,16 +319,21 @@ class ParamsTab(ScrolledPanel):
def update_choice_widgets(self, choice_tuple=None):
if choice_tuple is None: # update all choices
for choice in self.dict_of_choices.values():
- self.update_choice_widgets(
- (choice["param"].name, choice["widget"].GetSelection()))
+ if choice["param"].type == "combo":
+ self.update_choice_widgets((choice["param"].name, choice["widget"].GetClientData(choice["widget"].GetSelection()).id))
+ else:
+ self.update_choice_widgets((choice["param"].name, choice["widget"].GetSelection()))
else:
choice = self.dict_of_choices[choice_tuple[0]]
last_selection = choice["last_initialized_choice"]
- current_selection = choice["widget"].GetSelection()
+ if choice["param"].type == "combo":
+ current_selection = choice["widget"].GetClientData(choice["widget"].GetSelection()).id
+ else:
+ current_selection = choice["widget"].GetSelection()
+
if last_selection != -1 and last_selection != current_selection: # Hide the old widgets
for widget in self.choice_widgets[(choice["param"].name, last_selection)]:
widget.Hide()
- # self.settings_grid.Detach(widget)
for widgets in grouper(self.choice_widgets[choice_tuple], 4):
widgets[0].Show(True)
@@ -375,6 +400,16 @@ class ParamsTab(ScrolledPanel):
input.Bind(wx.EVT_CHOICE, self.update_choice_state)
self.dict_of_choices[param.name] = {
"param": param, "widget": input, "last_initialized_choice": 1}
+ elif param.type == 'combo':
+ input = wx.ComboBox(self, wx.ID_ANY, choices=[], style=wx.CB_READONLY)
+ for option in param.options:
+ input.Append(option.name, option)
+ value = self.get_combo_value_index(param.values[0], param.options)
+ input.SetSelection(value)
+ input.Bind(wx.EVT_COMBOBOX, self.changed)
+ input.Bind(wx.EVT_COMBOBOX, self.update_combo_state)
+ self.dict_of_choices[param.name] = {
+ "param": param, "widget": input, "last_initialized_choice": 1}
elif len(param.values) > 1:
input = wx.ComboBox(self, wx.ID_ANY, choices=sorted(
str(value) for value in param.values), style=wx.CB_DROPDOWN)
diff --git a/lib/stitches/contour_fill.py b/lib/stitches/contour_fill.py
index 885a7e6c..f5f2a3ee 100644
--- a/lib/stitches/contour_fill.py
+++ b/lib/stitches/contour_fill.py
@@ -12,9 +12,11 @@ from shapely.validation import make_valid
from ..stitch_plan import Stitch
from ..utils import DotDict
+from ..utils.clamp_path import clamp_path_to_polygon
from ..utils.geometry import (cut, ensure_geometry_collection,
ensure_multi_polygon, reverse_line_string,
roll_linear_ring)
+from ..utils.smoothing import smooth_path
from ..utils.threading import check_stop_flag
from .running_stitch import running_stitch
@@ -406,11 +408,16 @@ def _find_path_inner_to_outer(tree, node, offset, starting_point, avoid_self_cro
return LineString(result_coords)
-def inner_to_outer(tree, offset, stitch_length, tolerance, starting_point, avoid_self_crossing):
+def inner_to_outer(tree, polygon, offset, stitch_length, tolerance, smoothness, starting_point, avoid_self_crossing):
"""Fill a shape with spirals, from innermost to outermost."""
stitch_path = _find_path_inner_to_outer(tree, 'root', offset, starting_point, avoid_self_crossing)
points = [Stitch(*point) for point in stitch_path.coords]
+
+ if smoothness > 0:
+ smoothed = smooth_path(points, smoothness)
+ points = clamp_path_to_polygon(smoothed, polygon)
+
stitches = running_stitch(points, stitch_length, tolerance)
return stitches
diff --git a/lib/stitches/meander_fill.py b/lib/stitches/meander_fill.py
new file mode 100644
index 00000000..964a7a41
--- /dev/null
+++ b/lib/stitches/meander_fill.py
@@ -0,0 +1,177 @@
+from itertools import combinations
+
+import networkx as nx
+from shapely.geometry import MultiPoint, Point
+from shapely.ops import nearest_points
+
+from .running_stitch import running_stitch
+from .. import tiles
+from ..debug import debug
+from ..utils.clamp_path import clamp_path_to_polygon
+from ..utils.geometry import Point as InkStitchPoint, ensure_geometry_collection
+from ..utils.list import poprandom
+from ..utils.prng import iter_uniform_floats
+from ..utils.smoothing import smooth_path
+from ..utils.threading import check_stop_flag
+
+
+def meander_fill(fill, shape, shape_index, starting_point, ending_point):
+ debug.log(f"meander pattern: {fill.meander_pattern}")
+ tile = get_tile(fill.meander_pattern)
+ if not tile:
+ return []
+
+ debug.log(f"tile name: {tile.name}")
+
+ debug.log_line_strings(lambda: ensure_geometry_collection(shape.boundary).geoms, 'Meander shape')
+ graph = tile.to_graph(shape, fill.meander_scale)
+ debug.log_graph(graph, 'Meander graph')
+ ensure_connected(graph)
+ start, end = find_starting_and_ending_nodes(graph, shape, starting_point, ending_point)
+ rng = iter_uniform_floats(fill.random_seed, 'meander-fill', shape_index)
+
+ return post_process(generate_meander_path(graph, start, end, rng), shape, fill)
+
+
+def get_tile(tile_id):
+ all_tiles = {tile.id: tile for tile in tiles.all_tiles()}
+
+ try:
+ return all_tiles.get(tile_id, all_tiles.popitem()[1])
+ except KeyError:
+ return None
+
+
+def ensure_connected(graph):
+ """If graph is unconnected, add edges to make it connected."""
+
+ # TODO: combine this with possible_jumps() in lib/stitches/utils/autoroute.py
+ possible_connections = []
+ for component1, component2 in combinations(nx.connected_components(graph), 2):
+ points1 = MultiPoint([Point(node) for node in component1])
+ points2 = MultiPoint([Point(node) for node in component2])
+
+ start_point, end_point = nearest_points(points1, points2)
+ possible_connections.append(((start_point.x, start_point.y), (end_point.x, end_point.y), start_point.distance(end_point)))
+
+ if possible_connections:
+ for start, end in nx.k_edge_augmentation(graph, 1, avail=possible_connections):
+ check_stop_flag()
+ graph.add_edge(start, end)
+
+
+def find_starting_and_ending_nodes(graph, shape, starting_point, ending_point):
+ if starting_point is None:
+ starting_point = shape.exterior.coords[0]
+ starting_point = Point(starting_point)
+
+ if ending_point is None:
+ ending_point = starting_point
+ else:
+ ending_point = Point(ending_point)
+
+ all_points = MultiPoint(list(graph))
+
+ starting_node = nearest_points(starting_point, all_points)[1].coords[0]
+ ending_node = nearest_points(ending_point, all_points)[1].coords[0]
+
+ if starting_node == ending_node:
+ # We need a path to start with, so pick a new ending node
+ all_points = all_points.difference(Point(starting_node))
+ ending_node = nearest_points(ending_point, all_points)[1].coords[0]
+
+ return starting_node, ending_node
+
+
+def find_initial_path(graph, start, end):
+ # We need some path to start with. We could use
+ # nx.all_simple_paths(graph, start, end) and choose the first one.
+ # However, that tends to pick a really "orderly" path. Shortest
+ # path looks more random.
+
+ # TODO: handle if this can't find a path
+ return nx.shortest_path(graph, start, end)
+
+
+@debug.time
+def generate_meander_path(graph, start, end, rng):
+ path = find_initial_path(graph, start, end)
+ path_edges = list(zip(path[:-1], path[1:]))
+ graph.remove_edges_from(path_edges)
+ graph_nodes = set(graph) - set(path)
+
+ edges_to_consider = list(path_edges)
+ meander_path = path_edges
+ while edges_to_consider:
+ while edges_to_consider:
+ check_stop_flag()
+
+ edge = poprandom(edges_to_consider, rng)
+ edges_to_consider.extend(replace_edge(meander_path, edge, graph, graph_nodes))
+
+ edge_pairs = list(zip(meander_path[:-1], meander_path[1:]))
+ while edge_pairs:
+ check_stop_flag()
+
+ edge1, edge2 = poprandom(edge_pairs, rng)
+ edges_to_consider.extend(replace_edge_pair(meander_path, edge1, edge2, graph, graph_nodes))
+ break
+
+ return path_to_points(meander_path)
+
+
+def replace_edge(path, edge, graph, graph_nodes):
+ subgraph = graph.subgraph(graph_nodes | set(edge))
+ new_path = None
+ for new_path in nx.all_simple_edge_paths(subgraph, edge[0], edge[1], 7):
+ if len(new_path) > 1:
+ break
+ if new_path is None or len(new_path) == 1:
+ return []
+ i = path.index(edge)
+ path[i:i + 1] = new_path
+ graph.remove_edges_from(new_path)
+ # do I need to remove the last one too?
+ graph_nodes.difference_update(start for start, end in new_path)
+ # debug.log(f"found new path of length {len(new_path)} at position {i}")
+
+ return new_path
+
+
+def replace_edge_pair(path, edge1, edge2, graph, graph_nodes):
+ subgraph = graph.subgraph(graph_nodes | {edge1[0], edge2[1]})
+ new_path = None
+ for new_path in nx.all_simple_edge_paths(subgraph, edge1[0], edge2[1], 10):
+ if len(new_path) > 2:
+ break
+ if new_path is None or len(new_path) <= 2:
+ return []
+ i = path.index(edge1)
+ path[i:i + 2] = new_path
+ graph.remove_edges_from(new_path)
+ # do I need to remove the last one too?
+ graph_nodes.difference_update(start for start, end in new_path)
+ # debug.log(f"found new pair path of length {len(new_path)} at position {i}")
+
+ return new_path
+
+
+@debug.time
+def post_process(points, shape, fill):
+ debug.log(f"smoothness: {fill.smoothness}")
+ # debug.log_line_string(LineString(points), "pre-smoothed", "#FF0000")
+ smoothed_points = smooth_path(points, fill.smoothness)
+ smoothed_points = [InkStitchPoint.from_tuple(point) for point in smoothed_points]
+
+ stitches = running_stitch(smoothed_points, fill.running_stitch_length, fill.running_stitch_tolerance)
+ stitches = clamp_path_to_polygon(stitches, shape)
+
+ return stitches
+
+
+def path_to_points(path):
+ points = [start for start, end in path]
+ if path:
+ points.append(path[-1][1])
+
+ return points
diff --git a/lib/stitches/running_stitch.py b/lib/stitches/running_stitch.py
index 8ba53498..1dbfcaaf 100644
--- a/lib/stitches/running_stitch.py
+++ b/lib/stitches/running_stitch.py
@@ -24,7 +24,7 @@ def split_segment_even_n(a, b, segments: int, jitter_sigma: float = 0.0, random_
splits = np.array(range(1, segments)) / segments
if random_seed is not None:
- jitters = (prng.nUniformFloats(len(splits), random_seed) * 2) - 1
+ jitters = (prng.n_uniform_floats(len(splits), random_seed) * 2) - 1
splits = splits + jitters * (jitter_sigma / segments)
# sort the splits in case a bad roll transposes any of them
@@ -39,12 +39,12 @@ def split_segment_even_dist(a, b, max_length: float, jitter_sigma: float = 0.0,
def split_segment_random_phase(a, b, length: float, length_sigma: float, random_seed: str) -> typing.List[shgeo.Point]:
line = shgeo.LineString([a, b])
- progress = length * prng.uniformFloats(random_seed, "phase")[0]
+ progress = length * prng.uniform_floats(random_seed, "phase")[0]
splits = [progress]
distance = line.length
if progress >= distance:
return []
- for x in prng.iterUniformFloats(random_seed):
+ for x in prng.iter_uniform_floats(random_seed):
progress += length * (1 + length_sigma * (x - 0.5) * 2)
if progress >= distance:
break
diff --git a/lib/svg/tags.py b/lib/svg/tags.py
index 64f6c2f3..5a7d31c2 100644
--- a/lib/svg/tags.py
+++ b/lib/svg/tags.py
@@ -66,8 +66,11 @@ inkstitch_attribs = [
'guided_fill_strategy',
'join_style',
'avoid_self_crossing',
+ 'smoothness_mm',
'clockwise',
'reverse',
+ 'meander_pattern',
+ 'meander_scale_percent',
'expand_mm',
'fill_underlay',
'fill_underlay_angle',
diff --git a/lib/tiles.py b/lib/tiles.py
new file mode 100644
index 00000000..683804a6
--- /dev/null
+++ b/lib/tiles.py
@@ -0,0 +1,188 @@
+import os
+from math import ceil, floor
+
+import inkex
+import json
+import lxml
+import networkx as nx
+from shapely.geometry import LineString
+from shapely.prepared import prep
+
+from .debug import debug
+from .i18n import _
+from .svg import apply_transforms
+from .utils import Point, cache, get_bundled_dir, guess_inkscape_config_path
+from .utils.threading import check_stop_flag
+
+
+class Tile:
+ def __init__(self, path):
+ self._load_tile(path)
+
+ def _load_tile(self, tile_path):
+ self.tile_svg = inkex.load_svg(os.path.join(tile_path, "tile.svg"))
+ self._load_metadata(tile_path)
+ self.tile = None
+ self.width = None
+ self.height = None
+ self.shift0 = None
+ self.shift1 = None
+
+ def __lt__(self, other):
+ return self.name < other.name
+
+ def __repr__(self):
+ return f"Tile({self.name}, {self.id})"
+
+ __str__ = __repr__
+
+ def _load_metadata(self, tile_path):
+ with open(os.path.join(tile_path, "tile.json"), "rb") as tile_json:
+ tile_metadata = json.load(tile_json)
+ self.name = _(tile_metadata.get('name'))
+ self.id = tile_metadata.get('id')
+
+ def _get_name(self, tile_path):
+ return os.path.splitext(os.path.basename(tile_path))[0]
+
+ def _load(self):
+ self._load_paths(self.tile_svg)
+ self._load_dimensions(self.tile_svg)
+ self._load_parallelogram(self.tile_svg)
+
+ def _load_paths(self, tile_svg):
+ path_elements = tile_svg.findall('.//svg:path', namespaces=inkex.NSS)
+ self.tile = self._path_elements_to_line_strings(path_elements)
+ # self.center, ignore, ignore = self._get_center_and_dimensions(self.tile)
+
+ def _load_dimensions(self, tile_svg):
+ svg_element = tile_svg.getroot()
+ self.width = svg_element.viewport_width
+ self.height = svg_element.viewport_height
+
+ def _load_parallelogram(self, tile_svg):
+ parallelogram_elements = tile_svg.findall(".//svg:*[@class='para']", namespaces=inkex.NSS)
+ if parallelogram_elements:
+ path_element = parallelogram_elements[0]
+ path = apply_transforms(path_element.get_path(), path_element)
+ subpaths = path.to_superpath()
+ subpath = subpaths[0]
+ points = [Point.from_tuple(p[1]) for p in subpath]
+ self.shift0 = points[1] - points[0]
+ self.shift1 = points[2] - points[1]
+ else:
+ self.shift0 = Point(self.width, 0)
+ self.shift1 = Point(0, self.height)
+
+ def _path_elements_to_line_strings(self, path_elements):
+ lines = []
+ for path_element in path_elements:
+ path = apply_transforms(path_element.get_path(), path_element)
+ for subpath in path.to_superpath():
+ # We only care about the endpoints of each subpath. They're
+ # supposed to be simple line segments.
+ lines.append([Point.from_tuple(subpath[0][1]), Point.from_tuple(subpath[-1][1])])
+
+ return lines
+
+ def _get_center_and_dimensions(self, shape):
+ min_x, min_y, max_x, max_y = shape.bounds
+ center = Point((max_x + min_x) / 2, (max_y + min_y) / 2)
+ width = max_x - min_x
+ height = max_y - min_y
+
+ return center, width, height
+
+ def _translate_tile(self, shift):
+ translated_tile = []
+
+ for start, end in self.tile:
+ start += shift
+ end += shift
+ translated_tile.append((start.as_int().as_tuple(), end.as_int().as_tuple()))
+
+ return translated_tile
+
+ def _scale(self, x_scale, y_scale):
+ self.shift0 = self.shift0.scale(x_scale, y_scale)
+ self.shift1 = self.shift1.scale(x_scale, y_scale)
+
+ scaled_tile = []
+ for start, end in self.tile:
+ start = start.scale(x_scale, y_scale)
+ end = end.scale(x_scale, y_scale)
+ scaled_tile.append((start, end))
+ self.tile = scaled_tile
+
+ @debug.time
+ def to_graph(self, shape, scale):
+ """Apply this tile to a shape, repeating as necessary.
+
+ Return value:
+ networkx.Graph with edges corresponding to lines in the pattern.
+ Each edge has an attribute 'line_string' with the LineString
+ representation of this edge.
+ """
+ self._load()
+ x_scale, y_scale = scale
+ self._scale(x_scale, y_scale)
+
+ shape_center, shape_width, shape_height = self._get_center_and_dimensions(shape)
+ shape_diagonal = Point(shape_width, shape_height).length()
+ prepared_shape = prep(shape)
+
+ return self._generate_graph(prepared_shape, shape_center, shape_diagonal)
+
+ def _generate_graph(self, shape, shape_center, shape_diagonal):
+ graph = nx.Graph()
+ tiles0 = ceil(shape_diagonal / self.shift0.length()) + 2
+ tiles1 = ceil(shape_diagonal / self.shift1.length()) + 2
+ for repeat0 in range(floor(-tiles0 / 2), ceil(tiles0 / 2)):
+ for repeat1 in range(floor(-tiles1 / 2), ceil(tiles1 / 2)):
+ check_stop_flag()
+
+ shift0 = repeat0 * self.shift0
+ shift1 = repeat1 * self.shift1
+ this_tile = self._translate_tile(shift0 + shift1 + shape_center)
+ for line in this_tile:
+ line_string = LineString(line)
+ if shape.contains(line_string):
+ graph.add_edge(line[0], line[1])
+
+ self._remove_dead_ends(graph)
+
+ return graph
+
+ def _remove_dead_ends(self, graph):
+ graph.remove_edges_from(nx.selfloop_edges(graph))
+ while True:
+ dead_end_nodes = [node for node, degree in graph.degree() if degree <= 1]
+
+ if dead_end_nodes:
+ graph.remove_nodes_from(dead_end_nodes)
+ else:
+ return
+
+
+def all_tile_paths():
+ return [os.path.join(guess_inkscape_config_path(), 'tiles'),
+ get_bundled_dir('tiles')]
+
+
+@cache
+def all_tiles():
+ tiles = []
+ for tiles_path in all_tile_paths():
+ try:
+ for tile_dir in sorted(os.listdir(tiles_path)):
+ try:
+ tiles.append(Tile(os.path.join(tiles_path, tile_dir)))
+ except (OSError, lxml.etree.XMLSyntaxError, json.JSONDecodeError, KeyError) as exc:
+ debug.log(f"error loading tile {tiles_path}/{tile_dir}: {exc}")
+ except Exception as exc:
+ debug.log(f"unexpected error loading tile {tiles_path}/{tile_dir}: {exc}")
+ raise
+ except FileNotFoundError:
+ pass
+
+ return tiles
diff --git a/lib/utils/clamp_path.py b/lib/utils/clamp_path.py
new file mode 100644
index 00000000..e5ef78d8
--- /dev/null
+++ b/lib/utils/clamp_path.py
@@ -0,0 +1,121 @@
+from shapely.geometry import LineString, Point as ShapelyPoint, MultiPolygon
+from shapely.prepared import prep
+from .geometry import Point, ensure_multi_line_string
+
+
+def path_to_segments(path):
+ """Convert a path of Points into a list of segments as LineStrings"""
+ for start, end in zip(path[:-1], path[1:]):
+ yield LineString((start, end))
+
+
+def segments_to_path(segments):
+ """Convert a list of contiguous LineStrings into a list of Points."""
+ coords = [segments[0].coords[0]]
+
+ for segment in segments:
+ coords.extend(segment.coords[1:])
+
+ return [Point(x, y) for x, y in coords]
+
+
+def fix_starting_point(border_pieces):
+ """Reconnect the starting point of a polygon border's pieces.
+
+ When splitting a polygon border with two lines, we want to get two
+ pieces. However, that's not quite how Shapely works. The outline
+ of the polygon is a LinearRing that starts and ends at the same place,
+ but Shapely still knows where that starting point is and splits there
+ too.
+
+ We don't want that third piece, so we'll reconnect the segments that
+ touch the starting point.
+ """
+
+ if len(border_pieces) == 3:
+ # Fortunately, Shapely keeps the starting point of the LinearRing
+ # as the starting point of the first segment. That means it's also
+ # the ending point of the last segment. Reconnecting is super simple:
+ return [border_pieces[1],
+ LineString(border_pieces[2].coords[:] + border_pieces[0].coords[1:])]
+ else:
+ # We probably cut exactly at the starting point.
+ return border_pieces
+
+
+def adjust_line_end(line, end):
+ """Reverse line if necessary to ensure that it ends near end."""
+
+ line_start = ShapelyPoint(*line.coords[0])
+ line_end = ShapelyPoint(*line.coords[-1])
+
+ if line_end.distance(end) < line_start.distance(end):
+ return line
+ else:
+ return LineString(line.coords[::-1])
+
+
+def find_border(polygon, point):
+ for border in polygon.interiors:
+ if border.intersects(point):
+ return border
+ else:
+ return polygon.exterior
+
+
+def clamp_path_to_polygon(path, polygon):
+ """Constrain a path to a Polygon.
+
+ Description: https://gis.stackexchange.com/questions/428848/clamp-linestring-to-polygon
+ """
+
+ path = LineString(path)
+
+ # This splits the path at the points where it intersects with the polygon
+ # border and returns the pieces in the same order as the original path.
+ split_path = ensure_multi_line_string(path.difference(polygon.boundary))
+
+ # contains() checks can fail without this.
+ buffered_polygon = prep(polygon.buffer(1e-9))
+
+ last_segment_inside = None
+ was_inside = False
+ result = []
+
+ for segment in split_path.geoms:
+ if buffered_polygon.contains(segment):
+ if not was_inside:
+ if last_segment_inside is not None:
+ # The path crossed out of the polygon, and now it's crossed
+ # back in. We need to add a path along the border between
+ # the exiting and entering points.
+
+ # First, find the two points. Buffer them just a bit to
+ # ensure intersection with the border.
+ x, y = last_segment_inside.coords[-1]
+ exit_point = ShapelyPoint(x, y).buffer(0.01, resolution=1)
+ x, y = segment.coords[0]
+ entry_point = ShapelyPoint(x, y).buffer(0.01, resolution=1)
+
+ if not exit_point.intersects(entry_point):
+ # Now break the border into pieces using those points.
+ border = find_border(polygon, exit_point)
+ border_pieces = border.difference(MultiPolygon((entry_point, exit_point))).geoms
+ border_pieces = fix_starting_point(border_pieces)
+
+ # Pick the shortest way to get from the exiting to the
+ # entering point along the border.
+ shorter = min(border_pieces, key=lambda piece: piece.length)
+
+ # We don't know which direction the polygon border
+ # piece should be. adjust_line_end() will figure
+ # that out.
+ result.append(adjust_line_end(shorter, entry_point))
+
+ result.append(segment)
+ was_inside = True
+ last_segment_inside = segment
+ else:
+ was_inside = False
+
+ return segments_to_path(result)
diff --git a/lib/utils/geometry.py b/lib/utils/geometry.py
index 789f8720..8f34c467 100644
--- a/lib/utils/geometry.py
+++ b/lib/utils/geometry.py
@@ -220,6 +220,9 @@ class Point:
def rotate(self, angle):
return self.__class__(self.x * math.cos(angle) - self.y * math.sin(angle), self.y * math.cos(angle) + self.x * math.sin(angle))
+ def scale(self, x_scale, y_scale):
+ return self.__class__(self.x * x_scale, self.y * y_scale)
+
def as_int(self):
return self.__class__(int(round(self.x)), int(round(self.y)))
@@ -238,3 +241,7 @@ class Point:
def line_string_to_point_list(line_string):
return [Point(*point) for point in line_string.coords]
+
+
+def coordinate_list_to_point_list(coordinate_list):
+ return [Point.from_tuple(coords) for coords in coordinate_list]
diff --git a/lib/utils/list.py b/lib/utils/list.py
new file mode 100644
index 00000000..efa3969e
--- /dev/null
+++ b/lib/utils/list.py
@@ -0,0 +1,23 @@
+import random
+
+
+def _uniform_rng():
+ while True:
+ yield random.uniform(0, 1)
+
+
+_rng = _uniform_rng()
+
+
+def poprandom(sequence, rng=_rng):
+ index = int(round(next(rng) * (len(sequence) - 1)))
+ item = sequence[index]
+
+ # It's O(1) to pop the last item, and O(n) to pop any other item. So we'll
+ # always pop the last item and put it in the slot vacated by the item we're
+ # popping.
+ last_item = sequence.pop()
+ if index < len(sequence):
+ sequence[index] = last_item
+
+ return item
diff --git a/lib/utils/prng.py b/lib/utils/prng.py
index 2ec037c6..33102205 100644
--- a/lib/utils/prng.py
+++ b/lib/utils/prng.py
@@ -3,7 +3,7 @@ from math import ceil
from itertools import count, chain
import numpy as np
-# Framework for reproducable pseudo-random number generation.
+# Framework for reproducible pseudo-random number generation.
# Unlike python's random module (which uses a stateful generator based on global variables),
# a counter-mode PRNG like uniformFloats can be used to generate multiple, independent random streams
@@ -13,7 +13,7 @@ import numpy as np
# Using multiple counters for n-dimentional random streams is also possible and is useful for grid-like structures.
-def joinArgs(*args):
+def join_args(*args):
# Stringifies parameters into a slash-separated string for use in hash keys.
# Idempotent and associative.
return "/".join([str(x) for x in args])
@@ -22,37 +22,37 @@ def joinArgs(*args):
MAX_UNIFORM_INT = 2 ** 32 - 1
-def uniformInts(*args):
+def uniform_ints(*args):
# Single pseudo-random drawing determined by the joined parameters.
# To get a longer sequence of random numbers, call this loop with a counter as one of the parameters.
# Returns 8 uniformly random uint32.
- s = joinArgs(*args)
+ s = join_args(*args)
# blake2s is python's fastest hash algorithm for small inputs and is designed to be usable as a PRNG.
h = blake2s(s.encode()).hexdigest()
nums = []
for i in range(0, 64, 8):
- nums.append(int(h[i:i+8], 16))
+ nums.append(int(h[i:i + 8], 16))
return np.array(nums)
-def uniformFloats(*args):
+def uniform_floats(*args):
# Single pseudo-random drawing determined by the joined parameters.
# To get a longer sequence of random numbers, call this loop with a counter as one of the parameters.
# Returns an array of 8 floats in the range [0,1]
- return uniformInts(*args) / MAX_UNIFORM_INT
+ return uniform_ints(*args) / MAX_UNIFORM_INT
-def nUniformFloats(n: int, *args):
+def n_uniform_floats(n: int, *args):
# returns a fixed number (which may exceed 8) of floats in the range [0,1]
- seed = joinArgs(*args)
- nBlocks = ceil(n/8)
- blocks = [uniformFloats(seed, x) for x in range(nBlocks)]
+ seed = join_args(*args)
+ nBlocks = ceil(n / 8)
+ blocks = [uniform_floats(seed, x) for x in range(nBlocks)]
return np.concatenate(blocks)[0:n]
-def iterUniformFloats(*args):
+def iter_uniform_floats(*args):
# returns an infinite sequence of floats in the range [0,1]
- seed = joinArgs(*args)
- blocks = map(lambda x: list(uniformFloats(seed, x)), count(0))
+ seed = join_args(*args)
+ blocks = map(lambda x: list(uniform_floats(seed, x)), count(0))
return chain.from_iterable(blocks)
diff --git a/lib/utils/smoothing.py b/lib/utils/smoothing.py
new file mode 100644
index 00000000..9d43a9f1
--- /dev/null
+++ b/lib/utils/smoothing.py
@@ -0,0 +1,84 @@
+import numpy as np
+from scipy.interpolate import splprep, splev
+
+from .geometry import Point, coordinate_list_to_point_list
+from ..stitches.running_stitch import running_stitch
+from ..debug import debug
+
+
+def _remove_duplicate_coordinates(coords_array):
+ """Remove consecutive duplicate points from an array.
+
+ Arguments:
+ coords_array -- numpy.array
+
+ Returns:
+ a numpy.array of coordinates, minus consecutive duplicates
+ """
+
+ differences = np.diff(coords_array, axis=0)
+ zero_differences = np.isclose(differences, 0)
+ keepers = np.r_[True, np.any(zero_differences == False, axis=1)] # noqa: E712
+
+ return coords_array[keepers]
+
+
+@debug.time
+def smooth_path(path, smoothness=1.0):
+ """Smooth a path of coordinates.
+
+ Arguments:
+ path -- an iterable of coordinate tuples or Points
+ smoothness -- float, how much smoothing to apply. Bigger numbers
+ smooth more.
+
+ Returns:
+ A list of Points.
+ """
+ from ..debug import debug
+
+ if smoothness == 0:
+ # s of exactly zero seems to indicate a default level of smoothing
+ # in splprep, so we'll just exit instead.
+ return path
+
+ # Smoothing seems to look nicer if the line segments in the path are mostly
+ # similar in length. If we have some especially long segments, then the
+ # smoothed path sometimes diverges more from the original path as the
+ # spline curve struggles to fit the path. This can be especially bad at
+ # the start and end.
+ #
+ # Fortunately, we can convert the path to segments that are mostly the same
+ # length by using the running stitch algorithm.
+ path = running_stitch(coordinate_list_to_point_list(path), 5 * smoothness, smoothness / 2)
+
+ # splprep blows up on duplicated consecutive points with "Invalid inputs"
+ coords = _remove_duplicate_coordinates(np.array(path))
+ num_points = len(coords)
+
+ if num_points <= 3:
+ # splprep throws an error unless num_points > k
+ return path
+
+ # s is explained in this issue: https://github.com/scipy/scipy/issues/11916
+ # the smoothness parameter limits how much the smoothed path can deviate
+ # from the original path. The standard deviation of the distance between
+ # the smoothed path and the original path is equal to the smoothness.
+ # In practical terms, if smoothness is 1mm, then the smoothed path can be
+ # up to 1mm away from the original path.
+ s = num_points * (smoothness ** 2)
+
+ # .T transposes the array (for some reason splprep expects
+ # [[x1, x2, ...], [y1, y2, ...]]
+ tck, fp, ier, msg = splprep(coords.T, s=s, k=3, nest=-1, full_output=1)
+ if ier > 0:
+ debug.log(f"error {ier} smoothing path: {msg}")
+ return path
+
+ # Evaluate the spline curve at many points along its length to produce the
+ # smoothed point list. 2 * num_points seems to be a good number, but it
+ # does produce a lot of points.
+ smoothed_x_values, smoothed_y_values = splev(np.linspace(0, 1, int(num_points * 2)), tck[0])
+ coords = np.array([smoothed_x_values, smoothed_y_values]).T
+
+ return [Point(x, y) for x, y in coords]
diff --git a/lib/utils/string.py b/lib/utils/string.py
index cb852ce3..e9204076 100644
--- a/lib/utils/string.py
+++ b/lib/utils/string.py
@@ -8,3 +8,10 @@ def string_to_floats(string, delimiter=","):
floats = string.split(delimiter)
return [float(num) for num in floats]
+
+
+def remove_suffix(string, suffix):
+ if string.endswith(suffix):
+ return string[:-len(suffix)]
+ else:
+ return string
diff --git a/tiles/N3-11a/tile.json b/tiles/N3-11a/tile.json
new file mode 100644
index 00000000..d894e7c4
--- /dev/null
+++ b/tiles/N3-11a/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-11a",
+ "name": "N3-11a",
+ "description": ""
+}
diff --git a/tiles/N3-11a/tile.svg b/tiles/N3-11a/tile.svg
new file mode 100644
index 00000000..165fb8ce
--- /dev/null
+++ b/tiles/N3-11a/tile.svg
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="31.922428"
+ height="25.147964"
+ viewBox="0 0 31.922428 25.147964"
+ version="1.1"
+ id="svg44"
+ sodipodi:docname="N3-11a.svg"
+ inkscape:version="1.2.2 (1:1.2.2+202212051550+b0a8486541)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <g
+ id="g876">
+ <polygon
+ class="para"
+ points="39.173412,40.586728 28.610192,75.474675 97.853038,96.439722 108.41626,61.551775 "
+ style="stroke:none"
+ id="polygon4"
+ transform="matrix(0.4,0,0,0.4,-11.444077,-16.234691)" />
+ <path
+ d="m 15.961213,11.170599 h 2.539082"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path6" />
+ <path
+ d="M 18.500295,11.170599 H 28.540241"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path8" />
+ <path
+ d="M 28.540241,11.170599 18.073857,4.1930088"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path10" />
+ <path
+ d="M 15.961213,2.7845798 V 11.170599"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path12" />
+ <path
+ d="M 15.961213,11.170599 H 3.3821852"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path14" />
+ <path
+ d="M 3.3821852,11.170599 15.961213,2.7845798"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path16"
+ sodipodi:nodetypes="cc" />
+ <path
+ d="M 3.3821852,2.7845798 H 15.961213"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path18" />
+ <path
+ d="M 3.3821852,11.170599 V 2.7845798"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path20"
+ sodipodi:nodetypes="cc" />
+ <path
+ d="m 1.2695412,9.7621688 2.112644,1.4084302"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path22"
+ sodipodi:nodetypes="cc" />
+ <path
+ d="M 31.079323,11.170599 H 28.540241"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path26" />
+ <path
+ d="m 3.3821852,11.170599 8.3537398,5.56916"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path28" />
+ <path
+ d="M 13.848569,18.148188 11.735925,16.739759"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path30"
+ sodipodi:nodetypes="cc" />
+ <path
+ d="M 24.314953,25.125777 18.500295,11.170599"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path34" />
+ <path
+ d="m 18.500295,11.170599 -4.651726,6.977589"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path36" />
+ <path
+ d="M 28.966679,18.148188 18.500295,11.170599"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path38" />
+ <path
+ d="m 24.314953,25.125777 4.651726,-6.977589"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path40" />
+ </g>
+ <defs
+ id="defs48" />
+ <sodipodi:namedview
+ id="namedview46"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ showgrid="false"
+ inkscape:zoom="30.668986"
+ inkscape:cx="16.710693"
+ inkscape:cy="15.259716"
+ inkscape:current-layer="svg44" />
+ <style
+ type="text/css"
+ id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+</svg>
diff --git a/tiles/N3-12/tile.json b/tiles/N3-12/tile.json
new file mode 100644
index 00000000..69372fad
--- /dev/null
+++ b/tiles/N3-12/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-12",
+ "name": "N3-12",
+ "description": ""
+}
diff --git a/tiles/N3-12/tile.svg b/tiles/N3-12/tile.svg
new file mode 100644
index 00000000..fb2bab94
--- /dev/null
+++ b/tiles/N3-12/tile.svg
@@ -0,0 +1,31 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="25.254175" height="50.588352" viewBox="0 0 25.254175 50.588352" version="1.1" id="svg40" sodipodi:docname="N3-12.svg">
+ <defs id="defs44"/>
+ <sodipodi:namedview id="namedview42" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="66.746125,19.394546 66.746125,145.66542 98.313844,145.66542 98.313844,19.394546 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-20.384906,-7.717818)"/>
+ <path d="M 12.627087,25.294175 H 25.254175" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 20.940565,12.667088 12.627087,25.294175" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 17.152439,12.667088 H 8.313478" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="m 8.313478,12.667088 4.313609,12.627087" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="m 12.838829,0.04 4.31361,12.627088" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 20.940565,37.921263 12.627087,25.294175" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 17.152439,37.921263 H 8.313478" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 8.313478,37.921263 12.627087,25.294175" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="m 12.838829,50.548351 4.31361,-12.627088" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 12.838829,50.548351 H 0.211742" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 12.838829,0.04 H 0.211742" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 0,25.294175 H 12.627087" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 8.313478,12.667088 H 4.525351" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 12.838829,0.04 4.525351,12.667088" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 8.313478,37.921263 H 4.525351" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 12.838829,50.548351 4.525351,37.921263" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N3-16a/tile.json b/tiles/N3-16a/tile.json
new file mode 100644
index 00000000..400caedc
--- /dev/null
+++ b/tiles/N3-16a/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-16a",
+ "name": "N3-16a",
+ "description": ""
+}
diff --git a/tiles/N3-16a/tile.svg b/tiles/N3-16a/tile.svg
new file mode 100644
index 00000000..64d7a2c8
--- /dev/null
+++ b/tiles/N3-16a/tile.svg
@@ -0,0 +1,31 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="34.050388" height="36.015934" viewBox="0 0 34.050388 36.015934" version="1.1" id="svg40" sodipodi:docname="N3-16a.svg">
+ <defs id="defs44"/>
+ <sodipodi:namedview id="namedview42" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="78.462251,51.720893 50.115794,100.8184 106.80871,133.55007 135.15516,84.452562 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-20.011677,-20.688357)"/>
+ <path d="M 17.042515,16.365835 H 28.381096" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 28.381096,16.365835 20.822042,3.2731678" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 20.822042,3.2731678 17.042515,16.365835" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 17.042515,3.2731678 H 9.48346" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="m 9.48346,3.2731678 5.669291,9.8195002" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 15.152751,13.092668 1.889764,3.273167" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 28.381096,16.365835 h 3.77953" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 22.711806,26.18534 20.822042,22.91217" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 20.822042,22.91217 17.042515,16.365835" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 32.160626,16.365835 -9.44882,9.819505" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 5.703932,22.91217 0.03464102,13.092668" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 20.822042,22.91217 H 9.48346" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 17.042515,36.00484 20.822042,22.91217" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 9.48346,22.91217 H 5.703932" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 15.152751,13.092668 H 0.03464102" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 15.152751,13.092668 5.703932,22.91217" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N3-17/tile.json b/tiles/N3-17/tile.json
new file mode 100644
index 00000000..c5ee9c4f
--- /dev/null
+++ b/tiles/N3-17/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-17",
+ "name": "N3-17",
+ "description": ""
+}
diff --git a/tiles/N3-17/tile.svg b/tiles/N3-17/tile.svg
new file mode 100644
index 00000000..71b571c2
--- /dev/null
+++ b/tiles/N3-17/tile.svg
@@ -0,0 +1,24 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="23.061552" height="23.083738" viewBox="0 0 23.061552 23.083738" version="1.1" id="svg26" sodipodi:docname="N3-17.svg">
+ <defs id="defs30"/>
+ <sodipodi:namedview id="namedview28" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="63.271963,42.306916 42.306916,63.271963 73.754486,94.719533 94.719533,73.754486 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-16.922766,-14.804074)"/>
+ <path d="m 10.482524,12.601216 h 4.19301" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 14.675534,12.601216 h 8.386018" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="m 10.482524,4.215198 v 8.386018" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 10.482524,0.02218801 2.0965056,12.601216" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 2.0965056,12.601216 H 10.482524" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 2.0965056,8.408207 v 4.193009" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 6.2895146,20.987235 H 14.675534" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 14.675534,20.987235 2.0965056,12.601216" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 14.675534,20.987235 V 12.601216" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N3-18-modified/tile.json b/tiles/N3-18-modified/tile.json
new file mode 100644
index 00000000..1e661e9f
--- /dev/null
+++ b/tiles/N3-18-modified/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-18-modified",
+ "name": "N3-18-modified",
+ "description": ""
+}
diff --git a/tiles/N3-18-modified/tile.svg b/tiles/N3-18-modified/tile.svg
new file mode 100644
index 00000000..6fd21056
--- /dev/null
+++ b/tiles/N3-18-modified/tile.svg
@@ -0,0 +1,36 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="48.34219" height="44.009502" viewBox="0 0 48.34219 44.009502" version="1.1" id="svg50" sodipodi:docname="N3-18-modified.svg">
+ <defs id="defs54"/>
+ <sodipodi:namedview id="namedview52" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="39.451055,77.726556 127.15177,149.594 154.49826,116.22276 66.797541,44.355308 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-13.457116,-15.828098)"/>
+ <path d="M 25.332747,22.961764 H 35.10564" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 32.43027,9.6132649 25.332747,22.961764" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="m 33.1851,32.544087 1.92054,-9.582323" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 25.332747,22.961764 H 21.491675" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 21.491675,22.961764 33.1851,32.544087" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 33.1851,32.544087 H 46.79907" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 46.79907,32.544087 35.10564,22.961764" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="m 46.04423,28.777917 0.75484,3.76617" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="m 22.657377,9.6132649 2.67537,13.3484991" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 10.963948,0.03093886 22.657377,9.6132649" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 13.639318,13.379438 22.657377,9.6132649" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 25.332747,22.961764 13.639318,13.379438" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 13.639318,13.379438 11.718782,3.7971119" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 13.639318,13.379438 H 0.02535324" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="m 35.10564,42.126417 11.69343,-9.58233" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 24.167045,36.310267 21.491675,22.961764" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="m 33.1851,32.544087 -9.018055,3.76618" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 33.1851,32.544087 1.92054,9.58233" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 21.491675,22.961764 H 11.718782" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="m 13.639318,13.379438 -1.920536,9.582326" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 0.02535324,13.379438 11.718782,22.961764" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N3-18/tile.json b/tiles/N3-18/tile.json
new file mode 100644
index 00000000..98c6a524
--- /dev/null
+++ b/tiles/N3-18/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-18",
+ "name": "N3-18",
+ "description": ""
+}
diff --git a/tiles/N3-18/tile.svg b/tiles/N3-18/tile.svg
new file mode 100644
index 00000000..453e8600
--- /dev/null
+++ b/tiles/N3-18/tile.svg
@@ -0,0 +1,36 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="49.147415" height="40.220436" viewBox="0 0 49.147415 40.220436" version="1.1" id="svg50" sodipodi:docname="N3-18.svg">
+ <defs id="defs54"/>
+ <sodipodi:namedview id="namedview52" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="36.302068,80.183518 124.62884,138.27695 147.45417,103.57272 59.127399,45.479288 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-9.8342536,-15.090344)"/>
+ <path d="m 26.916993,21.660903 h 8.435694" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 29.364709,7.7792095 26.916993,21.660903" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="m 32.011479,29.406693 3.341208,-7.74579" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 26.916993,21.660903 H 20.234577" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="m 20.234577,21.660903 11.776902,7.74579" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 32.011479,29.406693 H 47.129585" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 47.129585,29.406693 35.352687,21.660903" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="m 44.482815,23.270791 2.64677,6.135902" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 20.929015,7.7792095 26.916993,21.660903" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 9.1521134,0.03341951 20.929015,7.7792095" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 15.14009,13.915112 20.929015,7.7792095" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 26.916993,21.660903 15.14009,13.915112" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 15.14009,13.915112 11.798882,6.1693215" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 15.14009,13.915112 H 0.02198036" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="m 35.352687,37.152483 11.776898,-7.74579" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 26.222554,35.542593 20.234577,21.660903" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="m 32.011479,29.406693 -5.788925,6.1359" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 32.011479,29.406693 3.341208,7.74579" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 20.234577,21.660903 H 11.798882" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="m 15.14009,13.915112 -3.341208,7.745791" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 0.02198036,13.915112 11.798882,21.660903" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N3-20/tile.json b/tiles/N3-20/tile.json
new file mode 100644
index 00000000..3732df2f
--- /dev/null
+++ b/tiles/N3-20/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-20",
+ "name": "N3-20",
+ "description": ""
+}
diff --git a/tiles/N3-20/tile.svg b/tiles/N3-20/tile.svg
new file mode 100644
index 00000000..7b941ea9
--- /dev/null
+++ b/tiles/N3-20/tile.svg
@@ -0,0 +1,38 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="37.026718" height="42.499813" viewBox="0 0 37.026718 42.499813" version="1.1" id="svg54" sodipodi:docname="N3-20.svg">
+ <defs id="defs58"/>
+ <sodipodi:namedview id="namedview56" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="56.541909,70.693316 117.5502,155.81141 148.99777,134.84636 87.989479,49.728269 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-22.594576,-19.858026)"/>
+ <path d="m 18.513362,21.249912 h 12.57903" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 25.180242,16.805319 -4.64376,3.095843" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="m 20.536482,19.901162 -2.02312,1.34875" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="m 31.092392,29.635932 -12.57903,-8.38602" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 25.180242,16.805319 H 12.601216" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 12.601216,16.805319 v 8.386023" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 12.601216,25.191342 5.912146,-3.94143" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 12.601216,16.805319 V 8.419301" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="m 12.601216,8.419301 12.579026,8.386018" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 0.02218801,8.419301 H 12.601216" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 12.601216,16.805319 0.02218801,8.419301" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 0.02218801,16.805319 H 12.601216" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 37.004532,34.080522 -5.91214,3.94142" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="m 31.092392,38.021942 -6.66689,4.44459" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 12.601216,8.419301 V 0.03328201" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 12.601216,0.03328201 6.689073,3.974711" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 6.689073,3.974711 0.02218801,8.419301" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 18.513362,29.635932 v -8.38602" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="m 18.513362,29.635932 v 8.38601" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 31.092392,38.021942 H 18.513362" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="m 18.513362,29.635932 12.57903,8.38601" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 31.092392,29.635932 H 18.513362" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="m 31.092392,29.635932 v 8.38601" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N3-23b/tile.json b/tiles/N3-23b/tile.json
new file mode 100644
index 00000000..9e506053
--- /dev/null
+++ b/tiles/N3-23b/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-23b",
+ "name": "N3-23b",
+ "description": ""
+}
diff --git a/tiles/N3-23b/tile.svg b/tiles/N3-23b/tile.svg
new file mode 100644
index 00000000..96a7c37a
--- /dev/null
+++ b/tiles/N3-23b/tile.svg
@@ -0,0 +1,39 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="33.928886" height="53.985729" viewBox="0 0 33.928886 53.985729" version="1.1" id="svg56" sodipodi:docname="N3-23b.svg">
+ <defs id="defs60"/>
+ <sodipodi:namedview id="namedview58" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="82.682478,135.08763 27.112197,17.820849 56.364126,3.9589707 111.93441,121.22575 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-10.844879,-0.049324)"/>
+ <path d="M 16.964442,27.759996 H 28.665214" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 21.255843,21.697784 16.964442,18.186638" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="m 16.964442,18.186638 v 9.573358" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 28.665214,27.759996 16.964442,37.333355" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 16.964442,37.333355 V 33.304748" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 16.964442,33.304748 V 27.759996" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 28.665214,37.333355 H 16.964442" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 28.665214,37.333355 16.964442,46.906714" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 16.964442,42.878107 V 37.333355" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 28.665214,46.906714 H 16.964442" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 28.665214,37.333355 v 4.028607" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="m 28.665214,41.361962 v 5.544752" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 16.964442,46.906714 7.409371,6.062212" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 9.5550712,12.124425 6.4371012,9.573359" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="m 6.4371012,9.573359 -4.2914,-3.511146" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 2.1457012,21.180323 7.40937,-9.055898" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 2.1457012,21.180323 16.964442,18.186638" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 16.964442,18.186638 -3.11797,-2.551067" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 13.846472,15.635571 9.5550712,12.124425" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 9.5550712,27.242535 16.964442,18.186638" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 16.964442,33.304748 9.5550712,27.242535" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 6.4371012,9.573359 V 0" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="M 13.846472,0.517461 6.4371012,9.573359" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 6.4371012,9.573359 21.255843,6.579674" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N3-25c/tile.json b/tiles/N3-25c/tile.json
new file mode 100644
index 00000000..769e79ce
--- /dev/null
+++ b/tiles/N3-25c/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-25c",
+ "name": "N3-25c",
+ "description": ""
+}
diff --git a/tiles/N3-25c/tile.svg b/tiles/N3-25c/tile.svg
new file mode 100644
index 00000000..11912579
--- /dev/null
+++ b/tiles/N3-25c/tile.svg
@@ -0,0 +1,39 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="36.498352" height="36.498352" viewBox="0 0 36.498352 36.498352" version="1.1" id="svg56" sodipodi:docname="N3-25c.svg">
+ <defs id="defs60"/>
+ <sodipodi:namedview id="namedview58" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="82.936205,136.3868 45.140929,82.936205 98.591521,45.140929 136.3868,98.591521 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-18.056371,-18.056371)"/>
+ <path d="M 18.249174,18.249174 H 28.939291" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 28.939291,18.249174 21.380237,10.690119" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 21.380237,10.690119 18.249174,7.559055" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 18.249174,7.559055 V 18.249174" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 18.249174,18.249174 V 28.939291" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 18.249174,28.939291 7.559055,-7.559054" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 25.808229,21.380237 3.131062,-3.131063" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 18.249174,18.249174 H 7.559055" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="m 7.559055,18.249174 7.559055,7.559055" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 15.11811,25.808229 3.131064,3.131062" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 18.249174,7.559055 10.690119,15.11811" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 10.690119,15.11811 7.559055,18.249174" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 36.498351,10.690119 H 21.380237" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 25.808229,36.498351 V 21.380237" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 0,25.808229 H 15.11811" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 10.690119,0 V 15.11811" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 25.808229,21.380237 H 36.498351" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 15.11811,25.808229 V 36.498351" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 10.690119,15.11811 H 0" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 21.380237,10.690119 V 0" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="m 3.131063,7.559055 7.559056,7.559055" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 33.367281,28.939291 25.808229,21.380237" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="m 28.939291,3.131063 -7.559054,7.559056" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 7.559055,33.367281 15.11811,25.808229" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N3-26b/tile.json b/tiles/N3-26b/tile.json
new file mode 100644
index 00000000..bad658a0
--- /dev/null
+++ b/tiles/N3-26b/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-26b",
+ "name": "N3-26b",
+ "description": ""
+}
diff --git a/tiles/N3-26b/tile.svg b/tiles/N3-26b/tile.svg
new file mode 100644
index 00000000..2a972d13
--- /dev/null
+++ b/tiles/N3-26b/tile.svg
@@ -0,0 +1,40 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="36.699471" height="35.59684" viewBox="0 0 36.699471 35.59684" version="1.1" id="svg58" sodipodi:docname="N3-26b.svg">
+ <defs id="defs62"/>
+ <sodipodi:namedview id="namedview60" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="62.652299,39.147754 52.832799,90.171376 85.564468,109.06901 95.383968,58.045391 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-11.293619,-9.95517)"/>
+ <path d="M 18.349735,19.688184 H 31.442402" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 30.133135,18.932278 23.586802,15.152751" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 23.586802,15.152751 18.349735,12.129129" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="m 18.349735,12.129129 v 7.559055" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 36.679469,7.593696 23.586802,15.152751" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 30.133135,3.814168 23.586802,15.152751" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 30.133135,3.814168 17.040468,11.373223" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="m 17.040468,11.373223 1.309267,0.755906" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 23.586802,0.03464102 17.040468,11.373223" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 13.112668,31.782672 19.659001,20.444089" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 19.659001,20.444089 6.566334,28.003144" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 13.112668,16.664562 6.566334,28.003144" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 19.659001,20.444089 18.349735,19.688184" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 18.349735,19.688184 13.112668,16.664562" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 13.112668,16.664562 0.02,24.223617" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 13.112668,16.664562 6.566334,12.885034" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 18.349735,12.129129 H 5.257067" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 32.751669,28.003144 19.659001,35.5622" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 26.205335,24.223617 19.659001,35.5622" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 26.205335,24.223617 13.112668,31.782672" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 26.205335,24.223617 24.159606,23.042515" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 24.159606,23.042515 19.659001,20.444089" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="m 17.040468,11.373223 -3.9278,-2.267716" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 13.112668,9.105507 10.494134,7.593696" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="M 23.586802,0.03464102 10.494134,7.593696" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N3-27/tile.json b/tiles/N3-27/tile.json
new file mode 100644
index 00000000..6133ad1d
--- /dev/null
+++ b/tiles/N3-27/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-27",
+ "name": "N3-27",
+ "description": ""
+}
diff --git a/tiles/N3-27/tile.svg b/tiles/N3-27/tile.svg
new file mode 100644
index 00000000..920c93cb
--- /dev/null
+++ b/tiles/N3-27/tile.svg
@@ -0,0 +1,39 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="52.948029" height="65.483345" viewBox="0 0 52.948029 65.483345" version="1.1" id="svg104" sodipodi:docname="N3-27.svg" inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)">
+ <defs id="defs108"/>
+ <sodipodi:namedview id="namedview106" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" showgrid="false" inkscape:zoom="8.6609567" inkscape:cx="21.995261" inkscape:cy="25.863194" inkscape:current-layer="svg104"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="30.685825,39.742972 87.378738,137.93798 125.17401,116.11687 68.4811,17.92186 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-8.460161,-0.62241)"/>
+ <path d="M 30.270862,26.185335 22.711807,21.821113" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="m 22.711807,21.821113 v 8.728445" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="m 30.270862,34.913781 -7.559055,4.364222" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 22.711807,39.278003 V 30.549558" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 30.270862,43.642226 H 15.152752" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="m 15.152752,43.642226 7.559055,-4.364223" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 30.270862,34.913781 v 8.728445" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 30.270862,43.642226 c -2.519685,1.45474 -5.03937,2.909481 -7.559055,4.364222" style="stroke:#000000;stroke-width:0.08px" id="path26" sodipodi:nodetypes="cc"/>
+ <path d="M 22.711807,13.092668 15.152752,26.185335" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 15.152752,26.185335 7.559055,-4.364222" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 22.711807,13.092668 15.152752,17.45689" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 15.152752,17.45689 7.593696,21.821113" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="m 7.593696,21.821113 7.559056,4.364222" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="M 15.152752,17.45689 7.593696,13.092668" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="m 22.711807,48.006448 7.559055,4.364224" style="stroke:#000000;stroke-width:0.08px" id="path62"/>
+ <path d="M 15.152752,17.45689 V 8.728445" style="stroke:#000000;stroke-width:0.08px" id="path68"/>
+ <path d="M 37.829917,48.006448 V 39.278003" style="stroke:#000000;stroke-width:0.08px" id="path72"/>
+ <path d="m 37.829917,39.278003 -7.559055,4.364223" style="stroke:#000000;stroke-width:0.08px" id="path80"/>
+ <path d="M 37.829917,48.006448 H 22.711807" style="stroke:#000000;stroke-width:0.08px" id="path82"/>
+ <path d="M 22.711807,4.364223 15.152752,17.45689" style="stroke:#000000;stroke-width:0.08px" id="path86"/>
+ <path d="M 7.593696,39.278003 H 22.711807" style="stroke:#000000;stroke-width:0.08px" id="path90"/>
+ <path d="M 22.711807,39.278003 15.152752,34.913781" style="stroke:#000000;stroke-width:0.08px" id="path92"/>
+ <path d="M 15.152752,34.913781 22.711807,21.821113" style="stroke:#000000;stroke-width:0.08px" id="path96"/>
+ <path d="M 15.152752,26.185335 7.593696,30.549558" style="stroke:#000000;stroke-width:0.08px" id="path98"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N3-30a/tile.json b/tiles/N3-30a/tile.json
new file mode 100644
index 00000000..226adc4e
--- /dev/null
+++ b/tiles/N3-30a/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-30a",
+ "name": "N3-30a",
+ "description": ""
+}
diff --git a/tiles/N3-30a/tile.svg b/tiles/N3-30a/tile.svg
new file mode 100644
index 00000000..3f96a97e
--- /dev/null
+++ b/tiles/N3-30a/tile.svg
@@ -0,0 +1,55 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="45.928909" height="53.345856" viewBox="0 0 45.928909 53.345856" version="1.1" id="svg88" sodipodi:docname="N3-30a.svg">
+ <defs id="defs92"/>
+ <sodipodi:namedview id="namedview90" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="79.450363,37.957775 40.305256,105.75909 96.998169,138.49076 136.14328,70.689444 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-10.272834,-9.084371)"/>
+ <path d="M 25.016873,26.205335 H 35.455568" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 35.455568,26.205335 27.896513,13.112667" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="m 27.896513,13.112667 -2.87964,13.092668" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 38.335208,13.112667 H 33.655793" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="m 33.655793,13.112667 h -5.75928" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 35.455568,26.205335 2.87964,-13.092668" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 35.455568,26.205335 h 4.67942" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="m 40.134988,26.205335 h 5.75928" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 45.894268,26.205335 38.335208,13.112667" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 27.896513,13.112667 H 23.217098" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 23.217098,13.112667 h -5.75928" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="m 17.457818,13.112667 5.219347,9.040176" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 22.677165,22.152843 2.270171,3.932051" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="m 24.947336,26.084894 0.06954,0.120441" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 30.236221,35.24551 27.896513,31.193018" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 27.896513,31.193018 -2.87964,-4.987683" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 40.134988,26.205335 30.236221,35.24551" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 40.134988,26.205335 5.21934,9.040175" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 45.354328,35.24551 H 30.236221" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 33.115861,40.233196 30.236221,35.24551" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 10.438695,27.140526 H 0" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="m 7.559055,40.233196 2.87964,-13.09267" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="m 12.23847,40.233196 h 5.75928" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 17.99775,40.233196 12.778403,31.193018" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="M 12.778403,31.193018 10.438695,27.140526" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="M 22.677165,40.233196 H 17.99775" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ <path d="m 19.797525,53.325856 2.87964,-13.09266" style="stroke:#000000;stroke-width:0.08px" id="path58"/>
+ <path d="M 30.236221,53.325856 22.677165,40.233196" style="stroke:#000000;stroke-width:0.08px" id="path60"/>
+ <path d="M 33.115861,40.233196 H 22.677165" style="stroke:#000000;stroke-width:0.08px" id="path62"/>
+ <path d="M 33.655793,13.112667 28.436445,4.072492" style="stroke:#000000;stroke-width:0.08px" id="path64"/>
+ <path d="m 43.554558,4.072492 -9.898765,9.040175" style="stroke:#000000;stroke-width:0.08px" id="path66"/>
+ <path d="m 12.778403,13.112667 h 4.679415" style="stroke:#000000;stroke-width:0.08px" id="path68"/>
+ <path d="M 23.217098,13.112667 15.658043,0.02" style="stroke:#000000;stroke-width:0.08px" id="path70"/>
+ <path d="M 23.217098,13.112667 26.096738,0.02" style="stroke:#000000;stroke-width:0.08px" id="path72"/>
+ <path d="M 17.457818,13.112667 7.559055,22.152843" style="stroke:#000000;stroke-width:0.08px" id="path74"/>
+ <path d="M 22.677165,22.152843 H 7.559055" style="stroke:#000000;stroke-width:0.08px" id="path76"/>
+ <path d="M 10.438695,27.140526 7.559055,22.152843" style="stroke:#000000;stroke-width:0.08px" id="path78"/>
+ <path d="m 22.677165,22.152843 -9.898762,9.040175" style="stroke:#000000;stroke-width:0.08px" id="path80"/>
+ <path d="M 27.896513,31.193018 H 12.778403" style="stroke:#000000;stroke-width:0.08px" id="path82"/>
+ <path d="M 27.896513,31.193018 17.99775,40.233196" style="stroke:#000000;stroke-width:0.08px" id="path84"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N3-51b/tile.json b/tiles/N3-51b/tile.json
new file mode 100644
index 00000000..8ea879e7
--- /dev/null
+++ b/tiles/N3-51b/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-51b",
+ "name": "N3-51b",
+ "description": ""
+}
diff --git a/tiles/N3-51b/tile.svg b/tiles/N3-51b/tile.svg
new file mode 100644
index 00000000..bd708549
--- /dev/null
+++ b/tiles/N3-51b/tile.svg
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="53.50716"
+ height="42.817043"
+ viewBox="0 0 53.50716 42.817043"
+ version="1.1"
+ id="svg120"
+ sodipodi:docname="N3-51b.svg"
+ inkscape:version="1.2.2 (1:1.2.2+202212051550+b0a8486541)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs124" />
+ <sodipodi:namedview
+ id="namedview122"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ showgrid="false"
+ inkscape:zoom="21.936622"
+ inkscape:cx="26.964042"
+ inkscape:cy="25.026642"
+ inkscape:current-layer="svg120" />
+ <style
+ type="text/css"
+ id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon
+ class="para"
+ points="92.490484,79.127836 92.490484,25.677245 12.314597,25.677245 12.314597,79.127836 "
+ style="stroke:none"
+ id="polygon4"
+ transform="matrix(0.4,0,0,0.4,5.7925633,0.44750427)" />
+ <path
+ d="m 26.75358,21.408521 h 5.345059"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path6" />
+ <path
+ d="m 32.098639,21.408521 h 5.345059"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path8" />
+ <path
+ d="M 37.443698,21.408521 26.75358,10.718402"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path10" />
+ <path
+ d="M 26.75358,10.718402 V 21.408521"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path12" />
+ <path
+ d="M 37.443698,21.408521 V 10.718402"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path22" />
+ <path
+ d="M 16.063461,10.718402 26.75358,21.408521"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path34" />
+ <path
+ d="M 16.063461,21.408521 H 21.40852"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path36" />
+ <path
+ d="m 21.40852,21.408521 h 5.34506"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path38" />
+ <path
+ d="M 16.063461,10.718402 V 21.408521"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path40" />
+ <path
+ d="M 16.063461,21.408521 H 10.718402"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path42" />
+ <path
+ d="M 5.3733433,21.408521 16.063461,10.718402"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path46" />
+ <path
+ d="m 10.718402,32.098639 h 5.345059"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path60" />
+ <path
+ d="M 10.718402,21.408521 V 32.098639"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path66" />
+ <path
+ d="M 21.40852,21.408521 10.718402,32.098639"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path68" />
+ <path
+ d="M 21.40852,32.098639 H 16.063461"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path70" />
+ <path
+ d="M 21.40852,21.408521 V 32.098639"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path72" />
+ <path
+ d="m 21.40852,32.098639 h 5.34506"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path74" />
+ <path
+ d="m 26.75358,32.098639 h 5.345059"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path76" />
+ <path
+ d="M 32.098639,32.098639 21.40852,21.408521"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path78" />
+ <path
+ d="M 37.443698,32.098639 H 32.098639"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path84" />
+ <path
+ d="m 37.443698,32.098639 h 5.345059"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path88" />
+ <path
+ d="M 32.098639,32.098639 42.788757,21.408521"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path96" />
+ <path
+ d="m 37.443698,21.408521 h 5.345059"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path100" />
+ <path
+ d="M 32.098639,32.098639 V 21.408521"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path102" />
+</svg>
diff --git a/tiles/N3-57f-modified/tile.json b/tiles/N3-57f-modified/tile.json
new file mode 100644
index 00000000..b0ddb9c9
--- /dev/null
+++ b/tiles/N3-57f-modified/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-57f-modified",
+ "name": "N3-57f-modified",
+ "description": ""
+}
diff --git a/tiles/N3-57f-modified/tile.svg b/tiles/N3-57f-modified/tile.svg
new file mode 100644
index 00000000..6c41a2c7
--- /dev/null
+++ b/tiles/N3-57f-modified/tile.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="52.37067"
+ height="75.590553"
+ viewBox="0 0 52.37067 75.590553"
+ version="1.1"
+ id="svg108"
+ sodipodi:docname="N3-57f-modified.svg"
+ inkscape:version="1.2.2 (1:1.2.2+202212051550+b0a8486541)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs112" />
+ <sodipodi:namedview
+ id="namedview110"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ showgrid="false"
+ inkscape:zoom="10.169064"
+ inkscape:cx="34.024764"
+ inkscape:cy="33.926426"
+ inkscape:current-layer="svg108" />
+ <style
+ type="text/css"
+ id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon
+ class="para"
+ points="41.376715,74.108384 74.108384,130.8013 106.84005,74.108384 74.108384,17.41547 "
+ style="stroke:none"
+ id="polygon4"
+ transform="matrix(0.32,0,0,0.32,2.4706527,14.080593)" />
+ <path
+ d="M 36.659469,37.795276 H 26.185336 15.711202"
+ style="stroke:#000000;stroke-width:0.064px"
+ id="path6"
+ sodipodi:nodetypes="ccc" />
+ <path
+ d="M 36.659469,37.795276 31.422402,34.771654 26.185336,31.748031"
+ style="stroke:#000000;stroke-width:0.064px"
+ id="path8"
+ sodipodi:nodetypes="ccc" />
+ <path
+ d="M 36.659469,25.700787 26.185336,31.748031"
+ style="stroke:#000000;stroke-width:0.064px"
+ id="path18" />
+ <path
+ d="M 26.185336,31.748031 V 19.653543"
+ style="stroke:#000000;stroke-width:0.064px"
+ id="path22" />
+ <path
+ d="m 36.659469,37.795276 -5.237067,3.023622 -5.237066,3.023622"
+ style="stroke:#000000;stroke-width:0.064px"
+ id="path28"
+ sodipodi:nodetypes="ccc" />
+ <path
+ d="M 26.185336,43.84252 V 55.937008"
+ style="stroke:#000000;stroke-width:0.064px"
+ id="path42" />
+ <path
+ d="M 26.185336,43.84252 20.948269,40.818898 15.711202,37.795276"
+ style="stroke:#000000;stroke-width:0.064px"
+ id="path68"
+ sodipodi:nodetypes="ccc" />
+ <path
+ d="M 26.185336,31.748031 15.711202,25.700787"
+ style="stroke:#000000;stroke-width:0.064px"
+ id="path98" />
+ <path
+ d="m 15.711202,37.795276 5.237067,-3.023622 5.237067,-3.023623"
+ style="stroke:#000000;stroke-width:0.064px"
+ id="path104"
+ sodipodi:nodetypes="ccc" />
+</svg>
diff --git a/tiles/N3-58b/tile.json b/tiles/N3-58b/tile.json
new file mode 100644
index 00000000..8246e2a0
--- /dev/null
+++ b/tiles/N3-58b/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-58b",
+ "name": "N3-58b",
+ "description": ""
+}
diff --git a/tiles/N3-58b/tile.svg b/tiles/N3-58b/tile.svg
new file mode 100644
index 00000000..8c653828
--- /dev/null
+++ b/tiles/N3-58b/tile.svg
@@ -0,0 +1,51 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="35.706306" height="45.614197" viewBox="0 0 35.706306 45.614197" version="1.1" id="svg80" sodipodi:docname="N3-58b.svg">
+ <defs id="defs84"/>
+ <sodipodi:namedview id="namedview82" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="109.761,63.123164 77.365051,109.88269 31.397824,78.035662 63.793775,31.276135 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-11.993924,-8.4523329)"/>
+ <path d="M 22.717031,19.779432 23.796896,6.6867641" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 23.796896,6.6867641 16.237841,19.779432" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="m 16.237841,19.779432 h 6.47919" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 12.998246,14.168289 23.796896,6.6867641" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 16.237841,19.779432 12.998246,14.168289" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 12.998246,14.168289 1.1197296,19.779432" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 1.1197296,19.779432 h 6.479191" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 7.5989206,19.779432 H 16.237841" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 10.838516,25.390575 22.717031,19.779432" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 7.5989206,19.779432 3.2395954,5.611143" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 10.838516,25.390575 0.03986463,32.872099" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 0.03986463,32.872099 7.5989206,19.779432" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 1.1197296,19.779432 0.03986463,32.872099" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 1.1197296,19.779432 10.721773,8.1021881" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="m 10.721773,8.1021881 2.276473,6.0661009" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 10.721773,8.1021881 4.3301396,7.0406201" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 7.6864766,0.01405405 10.721773,8.1021881" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 14.078111,1.0756211 12.998246,14.168289" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 9.7586506,38.483243 10.838516,25.390575" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="m 10.838516,25.390575 2.276472,6.066101" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="m 13.114988,31.456676 3.035296,8.088134" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 19.506621,32.518244 18.426756,45.610908" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="m 13.114988,31.456676 6.391633,1.061568" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="m 19.506621,32.518244 3.21041,-12.738812" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="M 22.717031,19.779432 13.114988,31.456676" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="M 10.838516,25.390575 3.2794606,38.483243" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ <path d="M 12.998246,14.168289 20.557301,1.0756211" style="stroke:#000000;stroke-width:0.08px" id="path58"/>
+ <path d="M 31.385136,26.9071 19.506621,32.518244" style="stroke:#000000;stroke-width:0.08px" id="path60"/>
+ <path d="m 19.506621,32.518244 h 6.47919" style="stroke:#000000;stroke-width:0.08px" id="path62"/>
+ <path d="M 19.506621,32.518244 29.108664,20.841" style="stroke:#000000;stroke-width:0.08px" id="path64"/>
+ <path d="m 29.108664,20.841 2.276472,6.0661" style="stroke:#000000;stroke-width:0.08px" id="path66"/>
+ <path d="M 29.108664,20.841 22.717031,19.779432" style="stroke:#000000;stroke-width:0.08px" id="path68"/>
+ <path d="m 23.796896,6.6867641 2.276472,6.0661009" style="stroke:#000000;stroke-width:0.08px" id="path70"/>
+ <path d="M 26.073368,12.752865 29.108664,20.841" style="stroke:#000000;stroke-width:0.08px" id="path72"/>
+ <path d="m 26.073368,12.752865 6.391634,1.061568" style="stroke:#000000;stroke-width:0.08px" id="path74"/>
+ <path d="M 35.675411,1.0756211 26.073368,12.752865" style="stroke:#000000;stroke-width:0.08px" id="path76"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N3-6/tile.json b/tiles/N3-6/tile.json
new file mode 100644
index 00000000..721f894c
--- /dev/null
+++ b/tiles/N3-6/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-6",
+ "name": "N3-6",
+ "description": ""
+}
diff --git a/tiles/N3-6/tile.svg b/tiles/N3-6/tile.svg
new file mode 100644
index 00000000..873f35fb
--- /dev/null
+++ b/tiles/N3-6/tile.svg
@@ -0,0 +1,26 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="29.527719" height="32.609737" viewBox="0 0 29.527719 32.609737" version="1.1" id="svg30" sodipodi:docname="N3-6.svg">
+ <defs id="defs34"/>
+ <sodipodi:namedview id="namedview32" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="72.141791,108.02427 33.437089,49.967222 64.884659,29.002175 103.58936,87.059228 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-11.908024,-11.60087)"/>
+ <path d="M 15.497266,15.804419 H 28.076294" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 28.076294,24.190438 15.497266,15.804419" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 15.497266,15.804419 20.335353,4.193009" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="m 12.594413,0.967617 2.902853,14.836802" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 15.497266,32.576457 28.076294,24.190438" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 15.497266,24.190438 V 15.804419" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 28.076294,24.190438 H 15.497266" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="m 15.497266,24.190438 v 8.386019" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="m 7.7563246,12.579028 7.7409414,3.225391" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 12.594413,0.967617 7.7563246,12.579028" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 7.7563246,12.579028 0.01538462,9.353636" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N3-7/tile.json b/tiles/N3-7/tile.json
new file mode 100644
index 00000000..a2e82586
--- /dev/null
+++ b/tiles/N3-7/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-7",
+ "name": "N3-7",
+ "description": ""
+}
diff --git a/tiles/N3-7/tile.svg b/tiles/N3-7/tile.svg
new file mode 100644
index 00000000..68c23c52
--- /dev/null
+++ b/tiles/N3-7/tile.svg
@@ -0,0 +1,31 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="27.079876" height="27.079876" viewBox="0 0 27.079876 27.079876" version="1.1" id="svg40" sodipodi:docname="N3-7.svg">
+ <defs id="defs44"/>
+ <sodipodi:namedview id="namedview42" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="66.284553,100.08968 32.479431,66.284553 66.284553,32.479431 100.08968,66.284553 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-12.973883,-12.973883)"/>
+ <path d="m 13.539938,13.539938 h 6.761025" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 20.300963,13.539938 h 6.761024" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 27.061987,13.539938 13.539938,6.7789135" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 13.539938,6.7789135 V 13.539938" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="m 13.539938,13.539938 v 6.761025" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 13.539938,20.300963 v 6.761024" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 13.539938,27.061987 20.300963,13.539938" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 13.539938,13.539938 H 6.7789135" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 6.7789135,13.539938 H 0.01788854" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 0.01788854,13.539938 13.539938,20.300963" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 13.539938,6.7789135 V 0.01788854" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 13.539938,0.01788854 6.7789135,13.539938" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 27.061987,6.7789135 H 13.539938" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 20.300963,27.061987 V 13.539938" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 0.01788854,20.300963 H 13.539938" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 6.7789135,0.01788854 V 13.539938" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N3-8a-modified/tile.json b/tiles/N3-8a-modified/tile.json
new file mode 100644
index 00000000..f1eedce0
--- /dev/null
+++ b/tiles/N3-8a-modified/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-8a-modified",
+ "name": "N3-8a-modified",
+ "description": ""
+}
diff --git a/tiles/N3-8a-modified/tile.svg b/tiles/N3-8a-modified/tile.svg
new file mode 100644
index 00000000..f892d36d
--- /dev/null
+++ b/tiles/N3-8a-modified/tile.svg
@@ -0,0 +1,20 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="30.236221" height="24.188976" viewBox="0 0 30.236221 24.188976" version="1.1" id="svg18" sodipodi:docname="N3-8a-mistake.svg">
+ <defs id="defs22"/>
+ <sodipodi:namedview id="namedview20" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="89.901703,112.57887 52.106428,87.382018 74.783593,52.106428 112.57887,77.303278 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-17.818949,-20.842571)"/>
+ <path d="M 15.11811,12.094488 H 30.236221" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 15.11811,2.0157478 V 12.094488" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 15.11811,22.173229 V 12.094488" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 15.11811,12.094488 H 0" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="m 6.047244,16.125984 9.070866,6.047245" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N3-8a/tile.json b/tiles/N3-8a/tile.json
new file mode 100644
index 00000000..870cc679
--- /dev/null
+++ b/tiles/N3-8a/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-8a",
+ "name": "N3-8a",
+ "description": ""
+}
diff --git a/tiles/N3-8a/tile.svg b/tiles/N3-8a/tile.svg
new file mode 100644
index 00000000..c03aef24
--- /dev/null
+++ b/tiles/N3-8a/tile.svg
@@ -0,0 +1,22 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="25.180244" height="20.868546" viewBox="0 0 25.180244 20.868546" version="1.1" id="svg3519" sodipodi:docname="N3-8a.svg" inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)">
+ <defs id="defs3523"/>
+ <sodipodi:namedview id="namedview3521" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" showgrid="false" inkscape:zoom="0.95542912" inkscape:cx="347.48784" inkscape:cy="340.16129" inkscape:current-layer="svg3519"/>
+ <style type="text/css" id="style3299">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="64.644673,45.776131 96.092243,66.741177 77.223701,96.092243 45.776131,75.127196 " id="polygon3517" style="stroke:none" transform="matrix(0.4,0,0,0.4,-14.826262,-18.310452)"/>
+ <path d="M 12.579028,9.0948376 H 25.158056" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 12.579028,0.7088186 v 8.386019" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 25.158056,9.0948376 12.579028,17.480856" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 12.579028,17.480856 V 9.0948376" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 12.579028,9.0948376 H 0" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 5.031611,12.449245 7.547417,5.031611" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 12.579028,17.480856 5.031611,3.354408" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N3-8b/tile.json b/tiles/N3-8b/tile.json
new file mode 100644
index 00000000..ed3d7971
--- /dev/null
+++ b/tiles/N3-8b/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N3-8b",
+ "name": "N3-8b",
+ "description": ""
+}
diff --git a/tiles/N3-8b/tile.svg b/tiles/N3-8b/tile.svg
new file mode 100644
index 00000000..20d11a33
--- /dev/null
+++ b/tiles/N3-8b/tile.svg
@@ -0,0 +1,31 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="28.091679" height="38.074986" viewBox="0 0 28.091679 38.074986" version="1.1" id="svg40" sodipodi:docname="N3-8b.svg">
+ <defs id="defs44"/>
+ <sodipodi:namedview id="namedview42" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="64.884659,108.02427 103.58936,49.967222 72.141791,29.002175 33.437089,87.059228 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-13.35945,-8.3677975)"/>
+ <path d="M 14.04584,19.037492 H 26.624868" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 26.624868,19.037492 -6.289514,-4.19301" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 20.335354,14.844482 14.04584,10.651473" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="m 14.04584,10.651473 v 8.386019" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 26.624868,19.037492 14.04584,27.423511" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 14.04584,27.423511 V 19.037492" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 14.04584,19.037492 H 1.4668116" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="m 1.4668116,19.037492 6.289514,4.193009" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="m 7.7563256,23.230501 6.2895144,4.19301" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 1.4668116,19.037492 14.04584,10.651473" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 20.335354,14.844482 7.74094,-3.225391" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 23.238206,0.00768046 20.335354,14.844482" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 4.8534726,38.067303 7.7563256,23.230501" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 7.7563256,23.230501 0.01538461,26.455893" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 12.594413,34.841912 7.7563256,23.230501" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 15.497266,3.2330725 20.335354,14.844482" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-13b/tile.json b/tiles/N4-13b/tile.json
new file mode 100644
index 00000000..dd43c835
--- /dev/null
+++ b/tiles/N4-13b/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-13b",
+ "name": "N4-13b",
+ "description": ""
+}
diff --git a/tiles/N4-13b/tile.svg b/tiles/N4-13b/tile.svg
new file mode 100644
index 00000000..d8a5020e
--- /dev/null
+++ b/tiles/N4-13b/tile.svg
@@ -0,0 +1,38 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="34.378338" height="32.39476" viewBox="0 0 34.378338 32.39476" version="1.1" id="svg54" sodipodi:docname="N4-13b-awesome.svg">
+ <defs id="defs58"/>
+ <sodipodi:namedview id="namedview56" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="31.413804,9.7338548 -3.0971356,32.741148 -31.413804,-9.7338548 3.0971356,-32.741148 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,18.428023,15.371477)"/>
+ <path d="M 18.428023,15.371477 27.63094,9.2361991" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 23.029481,6.16856 18.428023,9.2361991" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 18.428023,9.2361991 V 15.371477" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 18.428023,15.371477 9.225105,9.2361991" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 9.225105,9.2361991 13.826564,6.16856" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 13.826564,6.16856 4.601459,3.0676391" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 23.029481,0.03328201 13.826564,6.16856" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 28.692815,14.663561 24.091356,17.7312" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 24.091356,17.7312 18.428023,15.371477" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 18.428023,15.371477 20.551773,26.2262" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 20.551773,26.2262 4.601458,-3.067639" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 25.153231,23.158561 24.091356,17.7312" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 34.356149,17.023283 -9.202918,6.135278" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="m 20.551773,26.2262 -9.202917,6.135278" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="m 4.623647,24.574394 9.202917,-6.135278" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 13.826564,18.439116 9.225105,15.371477" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 9.225105,15.371477 4.623647,18.439116" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 9.225105,9.2361991 0.02218801,15.371477" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 9.225105,15.371477 V 9.2361991" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="m 18.428023,15.371477 -4.601459,3.067639" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="m 13.826564,18.439116 1.061875,5.427362" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="m 14.888439,23.866478 -4.601458,3.067639" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="M 14.888439,23.866478 20.551773,26.2262" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-13c/tile.json b/tiles/N4-13c/tile.json
new file mode 100644
index 00000000..a7865243
--- /dev/null
+++ b/tiles/N4-13c/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-13c",
+ "name": "N4-13c",
+ "description": ""
+}
diff --git a/tiles/N4-13c/tile.svg b/tiles/N4-13c/tile.svg
new file mode 100644
index 00000000..6eee2afd
--- /dev/null
+++ b/tiles/N4-13c/tile.svg
@@ -0,0 +1,35 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="35.476974" height="34.932159" viewBox="0 0 35.476974 34.93216" version="1.1" id="svg70" sodipodi:docname="N4-13c-awesome.svg" inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)">
+ <defs id="defs74"/>
+ <sodipodi:namedview id="namedview72" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" showgrid="false" inkscape:zoom="25.190414" inkscape:cx="23.87813" inkscape:cy="15.124801" inkscape:current-layer="svg70"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-46.807002,-14.503578 4.6147749,-48.784763 46.807002,14.503578 -4.6147749,48.784763 " style="stroke:none" id="polygon4" transform="matrix(0.32,0,0,0.32,19.215214,16.481597)"/>
+ <path d="M 19.215214,16.481597 21.95771,14.653265" style="stroke:#000000;stroke-width:0.064px" id="path6"/>
+ <path d="m 21.95771,14.653265 5.484988,-3.65666" style="stroke:#000000;stroke-width:0.064px" id="path8"/>
+ <path d="M 19.215214,9.1682749 V 16.481597" style="stroke:#000000;stroke-width:0.064px" id="path12"/>
+ <path d="M 19.215214,16.481597 8.2452348,9.1682749" style="stroke:#000000;stroke-width:0.064px" id="path14"/>
+ <path d="M 8.2452348,9.1682749 13.730226,5.5116153" style="stroke:#000000;stroke-width:0.064px" id="path16"/>
+ <path d="m 13.730226,5.5116153 5.484988,3.6566596" style="stroke:#000000;stroke-width:0.064px" id="path18"/>
+ <path d="m 16.472718,3.6832853 -2.742492,1.82833" style="stroke:#000000;stroke-width:0.064px" id="path22"/>
+ <path d="m 10.98773,21.966585 2.742496,-1.828332" style="stroke:#000000;stroke-width:0.064px" id="path24" sodipodi:nodetypes="cc"/>
+ <path d="m 13.730226,20.138253 5.484988,-3.656656" style="stroke:#000000;stroke-width:0.064px" id="path28"/>
+ <path d="m 21.95771,14.653265 1.265768,6.469476" style="stroke:#000000;stroke-width:0.064px" id="path30"/>
+ <path d="m 23.223478,21.122741 -5.484992,3.656657" style="stroke:#000000;stroke-width:0.064px" id="path32"/>
+ <path d="M 17.738486,24.779398 10.98773,21.966585" style="stroke:#000000;stroke-width:0.064px" id="path34"/>
+ <path d="M 19.004254,31.248874 17.738486,24.779398" style="stroke:#000000;stroke-width:0.064px" id="path40"/>
+ <path d="m 23.223478,21.122741 6.750752,2.812817" style="stroke:#000000;stroke-width:0.064px" id="path52"/>
+ <path d="M 29.97423,23.935558 27.442698,10.996605" style="stroke:#000000;stroke-width:0.064px" id="path54"/>
+ <path d="M 13.730226,20.138253 8.2452348,16.481597" style="stroke:#000000;stroke-width:0.064px" id="path56"/>
+ <path d="M 8.2452348,16.481597 2.7602464,20.138253" style="stroke:#000000;stroke-width:0.064px" id="path58"/>
+ <path d="M 8.2452348,9.1682749 5.5027404,10.996605" style="stroke:#000000;stroke-width:0.064px" id="path60"/>
+ <path d="m 5.5027404,10.996605 -5.48498999,3.65666" style="stroke:#000000;stroke-width:0.064px" id="path62"/>
+ <path d="M 8.2452348,16.481597 V 9.1682749" style="stroke:#000000;stroke-width:0.064px" id="path64"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-13d/tile.json b/tiles/N4-13d/tile.json
new file mode 100644
index 00000000..43d3040b
--- /dev/null
+++ b/tiles/N4-13d/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-13d",
+ "name": "N4-13d",
+ "description": ""
+}
diff --git a/tiles/N4-13d/tile.svg b/tiles/N4-13d/tile.svg
new file mode 100644
index 00000000..8032cafa
--- /dev/null
+++ b/tiles/N4-13d/tile.svg
@@ -0,0 +1,53 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="41.212658" height="43.979401" viewBox="0 0 41.212658 43.979401" version="1.1" id="svg2288" sodipodi:docname="N4-13d-awesome.svg" inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)">
+ <defs id="defs2292"/>
+ <sodipodi:namedview id="namedview2290" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" showgrid="false" inkscape:zoom="26.320208" inkscape:cx="-5.205126" inkscape:cy="33.586361" inkscape:current-layer="svg2288"/>
+ <style type="text/css" id="style2204">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="38.080661,-28.13166 -11.321278,45.971249 -38.080661,28.13166 11.321278,-45.971249 " style="stroke:none" id="polygon2206" transform="matrix(0.4,0,0,0.4,25.13484,25.008707)"/>
+ <path d="m 25.13484,25.008707 5.351877,-3.567918" style="stroke:#000000;stroke-width:0.08px" id="path2208"/>
+ <path d="m 30.486717,21.440789 5.351877,-3.567918" style="stroke:#000000;stroke-width:0.08px" id="path2210"/>
+ <path d="M 35.838594,17.872871 30.486717,14.304954" style="stroke:#000000;stroke-width:0.08px" id="path2212"/>
+ <path d="M 30.486717,14.304954 25.13484,17.872871" style="stroke:#000000;stroke-width:0.08px" id="path2214"/>
+ <path d="m 25.13484,17.872871 v 7.135836" style="stroke:#000000;stroke-width:0.08px" id="path2216"/>
+ <path d="M 25.13484,25.008707 14.431087,17.872871" style="stroke:#000000;stroke-width:0.08px" id="path2218"/>
+ <path d="m 19.782964,14.304954 5.351876,3.567917" style="stroke:#000000;stroke-width:0.08px" id="path2220"/>
+ <path d="M 30.486717,7.169118 25.13484,10.737036" style="stroke:#000000;stroke-width:0.08px" id="path2222"/>
+ <path d="m 19.782964,14.304954 5.351876,3.567917" style="stroke:#000000;stroke-width:0.08px" id="path2224"/>
+ <path d="M 30.486717,14.304954 V 7.169118" style="stroke:#000000;stroke-width:0.08px" id="path2226"/>
+ <path d="m 30.486717,7.169118 10.703754,7.135836" style="stroke:#000000;stroke-width:0.08px" id="path2228"/>
+ <path d="m 41.190471,14.304954 -2.452944,1.635295" style="stroke:#000000;stroke-width:0.08px" id="path2230"/>
+ <path d="m 38.737527,15.940249 -2.898933,1.932622" style="stroke:#000000;stroke-width:0.08px" id="path2232"/>
+ <path d="M 35.838594,17.872871 30.486717,14.304954" style="stroke:#000000;stroke-width:0.08px" id="path2234"/>
+ <path d="m 13.196038,24.185341 5.351877,3.567918" style="stroke:#000000;stroke-width:0.08px" id="path2236"/>
+ <path d="M 18.547915,27.753259 25.13484,25.008707" style="stroke:#000000;stroke-width:0.08px" id="path2238"/>
+ <path d="M 22.664743,37.633647 17.312867,34.065729" style="stroke:#000000;stroke-width:0.08px" id="path2242"/>
+ <path d="m 17.312867,34.065729 1.235048,-6.31247" style="stroke:#000000;stroke-width:0.08px" id="path2244"/>
+ <path d="m 10.725941,36.810281 0.79396,-4.058016" style="stroke:#000000;stroke-width:0.08px" id="path2246"/>
+ <path d="m 13.196038,24.185341 5.351877,3.567918" style="stroke:#000000;stroke-width:0.08px" id="path2248"/>
+ <path d="m 18.547915,27.753259 -1.235048,6.31247" style="stroke:#000000;stroke-width:0.08px" id="path2250"/>
+ <path d="m 17.312867,34.065729 -6.586926,2.744552" style="stroke:#000000;stroke-width:0.08px" id="path2252"/>
+ <path d="m 10.725942,36.810281 10.703753,7.135836" style="stroke:#000000;stroke-width:0.08px" id="path2254"/>
+ <path d="m 21.429695,43.946117 1.235048,-6.31247" style="stroke:#000000;stroke-width:0.08px" id="path2256"/>
+ <path d="m 17.312867,34.065729 -6.586926,2.744552" style="stroke:#000000;stroke-width:0.08px" id="path2258"/>
+ <path d="m 30.486717,7.169118 10.703754,7.135836" style="stroke:#000000;stroke-width:0.08px" id="path2260"/>
+ <path d="M 0.02218801,29.674446 10.725942,36.810281" style="stroke:#000000;stroke-width:0.08px" id="path2262"/>
+ <path d="M 19.782964,0.03328201 30.486717,7.169118" style="stroke:#000000;stroke-width:0.08px" id="path2264"/>
+ <path d="M 30.486717,7.169118 25.13484,10.737036" style="stroke:#000000;stroke-width:0.08px" id="path2266"/>
+ <path d="m 10.725941,36.810281 0.79396,-4.058016" style="stroke:#000000;stroke-width:0.08px" id="path2268"/>
+ <path d="M 35.838594,32.144543 25.13484,25.008707" style="stroke:#000000;stroke-width:0.08px" id="path2270"/>
+ <path d="m 30.486717,21.440789 5.351877,3.567918" style="stroke:#000000;stroke-width:0.08px" id="path2272"/>
+ <path d="m 41.190471,14.304954 -2.452944,1.635295" style="stroke:#000000;stroke-width:0.08px" id="path2274"/>
+ <path d="m 38.737527,15.940249 -2.898933,1.932622" style="stroke:#000000;stroke-width:0.08px" id="path2276"/>
+ <path d="m 35.838594,17.872871 -5.351877,3.567918" style="stroke:#000000;stroke-width:0.08px" id="path2278"/>
+ <path d="m 25.13484,25.008707 -1.235048,6.31247" style="stroke:#000000;stroke-width:0.08px" id="path2280"/>
+ <path d="m 23.899792,31.321177 5.351877,3.567918" style="stroke:#000000;stroke-width:0.08px" id="path2282"/>
+ <path d="m 22.664743,37.633647 1.235049,-6.31247" style="stroke:#000000;stroke-width:0.08px" id="path2284" sodipodi:nodetypes="cc"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-13e/tile.json b/tiles/N4-13e/tile.json
new file mode 100644
index 00000000..15ea45b6
--- /dev/null
+++ b/tiles/N4-13e/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-13e",
+ "name": "N4-13e",
+ "description": ""
+}
diff --git a/tiles/N4-13e/tile.svg b/tiles/N4-13e/tile.svg
new file mode 100644
index 00000000..89acd87f
--- /dev/null
+++ b/tiles/N4-13e/tile.svg
@@ -0,0 +1,44 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="39.558758" height="49.599438" viewBox="0 0 39.558758 49.599438" version="1.1" id="svg66" sodipodi:docname="N4-13e-awesome.svg">
+ <defs id="defs70"/>
+ <sodipodi:namedview id="namedview68" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="46.752967,-34.538228 -13.899531,56.440519 -46.752967,34.538228 13.899531,-56.440519 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,19.824506,26.316031)"/>
+ <path d="m 19.824506,26.316031 6.570688,-4.380458" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 26.395194,21.935573 6.570687,-4.380458" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 32.965881,17.555115 26.395194,13.174657" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="m 26.395194,13.174657 -6.570688,4.380458" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="m 19.824506,17.555115 v 8.760916" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 19.824506,26.316031 13.253819,21.935573" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 13.253819,13.174657 6.570687,4.380458" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 26.395194,4.41374 19.824506,8.794198" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 26.395194,13.174657 V 4.41374" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 26.395194,4.41374 6.570687,4.380458" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 32.965881,8.794198 6.570687,4.380459" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="m 39.536568,13.174657 -6.570687,4.380458" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 13.253819,21.935573 -1.516312,7.750042" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="m 11.737507,29.685615 -1.516313,7.750041" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 10.221194,37.435656 3.650507,33.055198" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 0.02218801,39.397235 2.134194,40.805239" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="m 2.134194,40.805239 6.570688,4.380458" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 8.704882,45.185697 1.516312,-7.750041" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="m 8.704882,45.185697 6.570687,4.380459" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 19.824506,0.03328201 25.409591,3.756672" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 25.409591,3.756672 26.395194,4.41374" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 26.395194,30.69649 19.824506,26.316031" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="m 26.395194,21.935573 6.570687,4.380458" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="m 11.737507,29.685615 6.570687,4.380458" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="m 18.308194,34.066073 8.087,-3.369583" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="m 26.395194,30.69649 -1.516313,7.750041" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ <path d="M 23.362569,46.196572 16.791882,41.816114" style="stroke:#000000;stroke-width:0.08px" id="path58"/>
+ <path d="m 16.791882,41.816114 1.516312,-7.750041" style="stroke:#000000;stroke-width:0.08px" id="path60"/>
+ <path d="m 16.791882,41.816114 -8.087,3.369583" style="stroke:#000000;stroke-width:0.08px" id="path62"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-13f/tile.json b/tiles/N4-13f/tile.json
new file mode 100644
index 00000000..46e27a4c
--- /dev/null
+++ b/tiles/N4-13f/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-13f",
+ "name": "N4-13f",
+ "description": ""
+}
diff --git a/tiles/N4-13f/tile.svg b/tiles/N4-13f/tile.svg
new file mode 100644
index 00000000..fc8bd5b0
--- /dev/null
+++ b/tiles/N4-13f/tile.svg
@@ -0,0 +1,39 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="38.188961" height="25.405973" viewBox="0 0 38.188961 25.405973" version="1.1" id="svg56" sodipodi:docname="N4-13f-awesome.svg">
+ <defs id="defs60"/>
+ <sodipodi:namedview id="namedview58" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="47.6362,21.171644 -47.6362,21.171644 -47.6362,-21.171644 47.6362,-21.171644 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,19.09448,12.702987)"/>
+ <path d="M 19.09448,12.702987 25.445973,8.4686581" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 25.445973,8.4686581 31.797467,4.2343293" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 19.09448,4.2343293 V 12.702987" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 19.09448,12.702987 12.742987,8.4686581" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 12.742987,8.4686581 6.391493,4.2343293" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 0.04,8.4686581 V 0" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 12.742987,8.4686581 6.391493,12.702987" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 6.391493,12.702987 0.04,8.4686581" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 6.391493,21.171645 0.04,16.937316" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 6.391493,12.702987 v 8.468658" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 6.391493,21.171645 6.351494,-4.234329" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 12.742987,16.937316 19.09448,12.702987" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 31.797467,21.171645 25.445973,16.937316" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 25.445973,16.937316 19.09448,21.171645" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="m 12.742987,16.937316 6.351493,4.234329" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 25.445973,16.937316 V 8.4686581" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="m 25.445973,8.4686581 6.351494,4.2343289" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 31.797467,12.702987 4.76362,3.175747" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="m 36.561087,15.878734 1.587873,1.058582" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="m 38.14896,16.937316 -6.351493,4.234329" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 31.797467,12.702987 38.14896,8.4686581" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 38.14896,8.4686581 V 0" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="M 38.14896,25.405974 V 16.937316" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 0.04,25.405974 V 16.937316" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-16a/tile.json b/tiles/N4-16a/tile.json
new file mode 100644
index 00000000..0d7bd2b1
--- /dev/null
+++ b/tiles/N4-16a/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-16a",
+ "name": "N4-16a",
+ "description": ""
+}
diff --git a/tiles/N4-16a/tile.svg b/tiles/N4-16a/tile.svg
new file mode 100644
index 00000000..3482fc98
--- /dev/null
+++ b/tiles/N4-16a/tile.svg
@@ -0,0 +1,48 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="43.333385" height="33.381905" viewBox="0 0 43.333385 33.381905" version="1.1" id="svg74" sodipodi:docname="N4-16a-awesome.svg">
+ <defs id="defs78"/>
+ <sodipodi:namedview id="namedview76" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="54.116731,-31.244309 18.03891,31.244309 -54.116731,31.244309 -18.03891,-31.244309 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,21.666693,16.698272)"/>
+ <path d="m 21.666693,16.698272 h 9.620752" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 31.287445,16.698272 26.477069,8.3664564" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 26.477069,8.3664564 H 21.666693" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 21.666693,8.3664564 V 16.698272" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 36.097821,8.3664564 31.287445,16.698272" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 26.477069,8.3664564 28.882257,4.200548" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 28.882257,4.200548 7.215564,4.1659084" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="m 31.287445,16.698272 h 9.620752" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 43.313386,12.532364 36.097821,8.3664564" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 36.097821,25.030088 31.287445,16.698272" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 31.287445,16.698272 -4.810376,8.331816" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="m 26.477069,25.030088 2.405188,4.165908" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 26.477069,25.030088 H 21.666693" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 21.666693,25.030088 V 16.698272" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 21.666693,16.698272 H 12.045941" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 12.045941,16.698272 2.405188,-4.165908" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 14.451129,12.532364 16.856317,8.3664564" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 16.856317,8.3664564 h 4.810376" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 36.097821,8.3664564 40.908197,0.03464102" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="m 12.045941,16.698272 2.405188,4.165908" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="m 14.451129,20.86418 2.405188,4.165908" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="m 16.856317,25.030088 h 4.810376" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="m 21.666693,33.361904 4.810376,-8.331816" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="m 16.856317,25.030088 -2.405188,4.165908" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="M 14.451129,4.200548 21.666693,0.03464102" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="M 21.666693,0.03464102 26.477069,8.3664564" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ <path d="M 16.856317,8.3664564 14.451129,4.200548" style="stroke:#000000;stroke-width:0.08px" id="path58"/>
+ <path d="m 2.425189,16.698272 h 9.620752" style="stroke:#000000;stroke-width:0.08px" id="path60"/>
+ <path d="M 14.451129,12.532364 7.235565,8.3664564" style="stroke:#000000;stroke-width:0.08px" id="path62"/>
+ <path d="M 7.235565,25.030088 2.425189,16.698272" style="stroke:#000000;stroke-width:0.08px" id="path64"/>
+ <path d="M 14.451129,20.86418 7.235565,25.030088" style="stroke:#000000;stroke-width:0.08px" id="path66"/>
+ <path d="M 0.02,29.195996 7.235565,25.030088" style="stroke:#000000;stroke-width:0.08px" id="path68"/>
+ <path d="m 7.235565,25.030088 4.810376,8.331816" style="stroke:#000000;stroke-width:0.08px" id="path70"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-19/tile.json b/tiles/N4-19/tile.json
new file mode 100644
index 00000000..723a3260
--- /dev/null
+++ b/tiles/N4-19/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-19",
+ "name": "N4-19",
+ "description": ""
+}
diff --git a/tiles/N4-19/tile.svg b/tiles/N4-19/tile.svg
new file mode 100644
index 00000000..0b2682ac
--- /dev/null
+++ b/tiles/N4-19/tile.svg
@@ -0,0 +1,43 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="33.192379" height="41.410477" viewBox="0 0 33.192379 41.410477" version="1.1" id="svg64" sodipodi:docname="N4-19.svg">
+ <defs id="defs68"/>
+ <sodipodi:namedview id="namedview66" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-11.50291,-28.757275 -34.50873,28.757275 11.50291,28.757275 34.50873,-28.757275 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,16.59619,20.705238)"/>
+ <path d="m 16.59619,20.705238 h 9.202328" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 25.798518,20.705238 V 18.404656" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 25.798518,18.404656 18.436656,12.883259" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 18.436656,12.883259 16.59619,11.50291" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="m 16.59619,11.50291 v 9.202328" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 18.436656,12.883259 23.958052,5.521397" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 25.798518,6.901746 v 11.50291" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 16.59619,11.50291 V 0" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 25.798518,18.404656 33.16038,12.883259" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 33.16038,12.883259 27.638984,5.521397" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 5.553396,35.889079 0.032,28.527217" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 7.393862,34.50873 V 23.00582" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 7.393862,23.00582 0.032,28.527217" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 7.393862,20.705238 V 23.00582" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 9.2343276,35.889079 14.755724,28.527217" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 14.755724,28.527217 1.840466,1.380349" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="m 16.59619,29.907566 v 11.50291" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 7.393862,23.00582 7.361862,5.521397" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 16.59619,20.705238 H 7.393862" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 16.59619,29.907566 V 20.705238" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 23.958052,35.889079 18.436656,28.527217" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 18.436656,28.527217 16.59619,29.907566" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="m 25.798518,23.00582 -7.361862,5.521397" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 25.798518,20.705238 V 23.00582" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="M 7.393862,20.705238 V 18.404656" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="m 7.393862,18.404656 7.361862,-5.521397" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ <path d="M 14.755724,12.883259 16.59619,11.50291" style="stroke:#000000;stroke-width:0.08px" id="path58"/>
+ <path d="M 14.755724,12.883259 9.2343276,5.521397" style="stroke:#000000;stroke-width:0.08px" id="path60"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-20/tile.json b/tiles/N4-20/tile.json
new file mode 100644
index 00000000..051a99ee
--- /dev/null
+++ b/tiles/N4-20/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-20",
+ "name": "N4-20",
+ "description": ""
+}
diff --git a/tiles/N4-20/tile.svg b/tiles/N4-20/tile.svg
new file mode 100644
index 00000000..ed0504a9
--- /dev/null
+++ b/tiles/N4-20/tile.svg
@@ -0,0 +1,55 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="40.3638" height="40.3638" viewBox="0 0 40.3638 40.3638" version="1.1" id="svg88" sodipodi:docname="N4-20.svg">
+ <defs id="defs92"/>
+ <sodipodi:namedview id="namedview90" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-50.403303,0 -9.9255044e-15,50.403303 50.403303,-9.9255044e-15 -9.9255044e-15,-50.403303 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,20.181901,20.181901)"/>
+ <path d="m 20.181901,20.181901 h 8.064528" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 28.246429,20.181901 h 2.016133" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 30.262562,20.181901 V 18.165769" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 30.262562,18.165769 20.181901,12.117372" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="m 20.181901,12.117372 v 8.064529" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 30.262562,10.10124 H 20.181901" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 20.181901,10.10124 v 2.016132" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 30.262562,18.165769 V 10.10124" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 20.181901,10.10124 H 18.165769" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 18.165769,10.10124 12.117372,20.181901" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 12.117372,20.181901 h 8.064529" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 10.10124,10.10124 V 20.181901" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 10.10124,20.181901 h 2.016132" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 18.165769,10.10124 H 10.10124" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="m 10.10124,20.181901 v 2.016132" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 10.10124,22.198033 10.080661,6.048396" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 20.181901,28.246429 V 20.181901" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 10.10124,30.262562 H 20.181901" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 20.181901,30.262562 V 28.246429" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="m 10.10124,22.198033 v 8.064529" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="m 20.181901,30.262562 h 2.016132" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 22.198033,30.262562 28.246429,20.181901" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="M 30.262562,30.262562 V 20.181901" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="m 22.198033,30.262562 h 8.064529" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="M 40.343222,20.181901 H 32.278694" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="M 32.278694,20.181901 H 30.262562" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ <path d="m 30.262562,18.165769 10.08066,-6.048397" style="stroke:#000000;stroke-width:0.08px" id="path58"/>
+ <path d="M 38.32709,30.262562 32.278694,20.181901" style="stroke:#000000;stroke-width:0.08px" id="path60"/>
+ <path d="M 30.262562,2.0367118 20.181901,8.0851078" style="stroke:#000000;stroke-width:0.08px" id="path62"/>
+ <path d="M 20.181901,8.0851078 V 0.02057983" style="stroke:#000000;stroke-width:0.08px" id="path64"/>
+ <path d="M 20.181901,10.10124 V 8.0851078" style="stroke:#000000;stroke-width:0.08px" id="path66"/>
+ <path d="M 18.165769,10.10124 12.117372,0.02057983" style="stroke:#000000;stroke-width:0.08px" id="path68"/>
+ <path d="m 2.0367118,10.10124 6.048396,10.080661" style="stroke:#000000;stroke-width:0.08px" id="path70"/>
+ <path d="M 8.0851078,20.181901 H 0.02057983" style="stroke:#000000;stroke-width:0.08px" id="path72"/>
+ <path d="M 10.10124,20.181901 H 8.0851078" style="stroke:#000000;stroke-width:0.08px" id="path74"/>
+ <path d="M 10.10124,22.198033 0.02057983,28.246429" style="stroke:#000000;stroke-width:0.08px" id="path76"/>
+ <path d="M 10.10124,38.32709 20.181901,32.278694" style="stroke:#000000;stroke-width:0.08px" id="path78"/>
+ <path d="m 20.181901,32.278694 v 8.064528" style="stroke:#000000;stroke-width:0.08px" id="path80"/>
+ <path d="m 20.181901,30.262562 v 2.016132" style="stroke:#000000;stroke-width:0.08px" id="path82"/>
+ <path d="m 22.198033,30.262562 6.048396,10.08066" style="stroke:#000000;stroke-width:0.08px" id="path84"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-21c/tile.json b/tiles/N4-21c/tile.json
new file mode 100644
index 00000000..44d20830
--- /dev/null
+++ b/tiles/N4-21c/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-21c",
+ "name": "N4-21c",
+ "description": ""
+}
diff --git a/tiles/N4-21c/tile.svg b/tiles/N4-21c/tile.svg
new file mode 100644
index 00000000..c167b8b9
--- /dev/null
+++ b/tiles/N4-21c/tile.svg
@@ -0,0 +1,39 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="35.388756" height="26.510698" viewBox="0 0 35.388756 26.510698" version="1.1" id="svg56" sodipodi:docname="N4-21c.svg">
+ <defs id="defs60"/>
+ <sodipodi:namedview id="namedview58" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="0,33.138371 -44.184495,0 1.0876108e-14,-33.138371 44.184495,0 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,17.694378,13.255349)"/>
+ <path d="m 17.694378,13.255349 h 8.836899" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 26.531277,13.255349 V 9.2787444" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 26.531277,9.2787444 V 3.976605" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 26.531277,3.976605 17.694378,9.2787444" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 17.694378,9.2787444 V 13.255349" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 17.694378,0 V 9.2787444" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 26.531277,13.255349 v 3.976605" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="m 26.531277,17.231954 v 5.302139" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 26.531277,22.534093 17.694378,17.231954" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 17.694378,17.231954 V 13.255349" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 17.694378,26.510698 V 17.231954" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 17.694378,13.255349 H 8.8574787" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 8.8574787,13.255349 V 9.2787444" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 8.8574787,9.2787444 V 3.976605" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 8.8574787,3.976605 17.694378,9.2787444" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 8.8574787,13.255349 v 3.976605" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="m 8.8574787,17.231954 v 5.302139" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 8.8574787,22.534093 17.694378,17.231954" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 8.8574787,9.2787444 0.02057983,3.976605" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 8.8574787,13.255349 H 0.02057983" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="m 26.531277,17.231954 8.836899,5.302139" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="m 26.531277,13.255349 h 8.836899" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="M 26.531277,9.2787444 35.368176,3.976605" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 8.8574787,17.231954 0.02057983,22.534093" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-22/tile.json b/tiles/N4-22/tile.json
new file mode 100644
index 00000000..89035c70
--- /dev/null
+++ b/tiles/N4-22/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-22",
+ "name": "N4-22",
+ "description": ""
+}
diff --git a/tiles/N4-22/tile.svg b/tiles/N4-22/tile.svg
new file mode 100644
index 00000000..6441eae2
--- /dev/null
+++ b/tiles/N4-22/tile.svg
@@ -0,0 +1,41 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="34.724155" height="33.917282" viewBox="0 0 34.724155 33.917282" version="1.1" id="svg60" sodipodi:docname="N4-22-awesome.svg">
+ <defs id="defs64"/>
+ <sodipodi:namedview id="namedview62" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="22.397963,35.996267 -41.949907,6.1323173 -22.397963,-35.996267 41.949907,-6.1323173 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,17.944192,17.065848)"/>
+ <path d="M 17.944192,17.065848 H 25.76497" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 25.76497,17.065848 V 5.334681" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 21.854581,8.6401309 17.944192,11.945581" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="m 17.944192,11.945581 v 5.120267" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 25.76497,17.065848 V 28.797014" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 25.76497,28.797014 17.944192,22.186115" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 17.944192,22.186115 V 17.065848" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 33.585747,17.065848 H 25.76497" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="m 33.585747,11.945581 v 5.120267" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 25.76497,28.797014 3.910388,-3.305449" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 29.675358,25.491565 3.910389,-3.30545" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 33.585747,22.186115 V 17.065848" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 14.033803,25.491565 8.9850071,19.518775" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 8.9850071,19.518775 17.944192,11.945581" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="m 17.944192,22.186115 -3.910389,3.30545" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 8.9850071,19.518775 0.02582248,27.091969" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="m 3.9362105,13.545985 5.0487966,5.97279" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 17.944192,11.945581 7.8465995,10.240535" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="m 7.8465995,10.240535 -3.910389,3.30545" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 0.02582248,16.851434 3.9362105,13.545985" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 7.8465995,0 V 5.120268" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 7.8465995,10.240535 V 5.120268" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="M 25.76497,33.917282 V 28.797014" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 21.854581,8.6401309 16.805785,2.667341" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="M 16.805785,2.667341 7.8465995,10.240535" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="M 17.944192,33.917282 V 22.186115" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-23a/tile.json b/tiles/N4-23a/tile.json
new file mode 100644
index 00000000..16f0db91
--- /dev/null
+++ b/tiles/N4-23a/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-23a",
+ "name": "N4-23a",
+ "description": ""
+}
diff --git a/tiles/N4-23a/tile.svg b/tiles/N4-23a/tile.svg
new file mode 100644
index 00000000..9f7bd953
--- /dev/null
+++ b/tiles/N4-23a/tile.svg
@@ -0,0 +1,57 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="36.997437" height="64.012161" viewBox="0 0 36.997437 64.012161" version="1.1" id="svg92" sodipodi:docname="N4-23a.svg">
+ <defs id="defs96"/>
+ <sodipodi:namedview id="namedview94" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-46.171797,4.1995207e-14 4.1995207e-14,79.971898 46.171797,0 0,-79.971898 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,18.488719,32.0234)"/>
+ <path d="m 18.488719,32.0234 1.846872,1.066292" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 20.335591,33.089692 7.387487,4.265168" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="m 27.723078,37.35486 7.387488,-4.265168" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 35.110566,33.089692 29.56995,25.625648" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="m 29.56995,25.625648 -3.693743,2.132584" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 25.876207,27.758232 18.488719,32.0234" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 36.957438,21.36048 29.56995,25.625648" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 35.110566,33.089692 36.957438,32.0234" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 9.2543596,26.69194 18.488719,32.0234" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 25.876207,27.758232 20.335591,20.294188" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 20.335591,20.294188 18.488719,21.36048" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 18.488719,21.36048 9.2543596,26.69194" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 27.723078,16.029021 -7.387487,4.265167" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 27.723078,48.01778 V 45.885196" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 27.723078,45.885196 V 37.35486" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 20.335591,33.089692 -3.693744,8.530336" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="m 16.641847,41.620028 3.693744,2.132584" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 20.335591,43.752612 7.387487,4.265168" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 9.2543596,26.69194 V 37.35486" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="m 9.2543596,37.35486 7.3874874,4.265168" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 27.723078,58.6807 V 48.01778" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="m 20.335591,43.752612 -3.693744,8.530336" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="m 16.641847,52.282948 1.846872,1.066292" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="m 18.488719,53.34924 9.234359,5.33146" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="m 9.2543596,37.35486 v 2.132584" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="M 9.2543596,39.487444 V 48.01778" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ <path d="m 9.2543596,48.01778 7.3874874,4.265168" style="stroke:#000000;stroke-width:0.08px" id="path58"/>
+ <path d="m 27.723078,45.885196 9.23436,-1.066292" style="stroke:#000000;stroke-width:0.08px" id="path60"/>
+ <path d="M 36.957438,40.553736 V 32.0234" style="stroke:#000000;stroke-width:0.08px" id="path62"/>
+ <path d="M 16.641847,1.100933 18.488719,0.03464102" style="stroke:#000000;stroke-width:0.08px" id="path64"/>
+ <path d="M 9.2543596,16.029021 V 13.896437" style="stroke:#000000;stroke-width:0.08px" id="path66"/>
+ <path d="M 9.2543596,26.69194 V 16.029021" style="stroke:#000000;stroke-width:0.08px" id="path68"/>
+ <path d="m 0.02,21.36048 9.2343596,5.33146" style="stroke:#000000;stroke-width:0.08px" id="path70"/>
+ <path d="M 9.2543596,13.896437 18.488719,12.830145" style="stroke:#000000;stroke-width:0.08px" id="path72"/>
+ <path d="M 18.488719,12.830145 V 8.564977" style="stroke:#000000;stroke-width:0.08px" id="path74"/>
+ <path d="M 18.488719,8.564977 V 0.03464102" style="stroke:#000000;stroke-width:0.08px" id="path76"/>
+ <path d="M 18.488719,21.36048 V 12.830145" style="stroke:#000000;stroke-width:0.08px" id="path78"/>
+ <path d="M 18.488719,8.564977 27.723078,7.498685" style="stroke:#000000;stroke-width:0.08px" id="path80"/>
+ <path d="M 27.723078,16.029021 V 7.498685" style="stroke:#000000;stroke-width:0.08px" id="path82"/>
+ <path d="M 0.02,32.0234 9.2543596,26.69194" style="stroke:#000000;stroke-width:0.08px" id="path84"/>
+ <path d="M 0.02,40.553736 9.2543596,39.487444" style="stroke:#000000;stroke-width:0.08px" id="path86"/>
+ <path d="m 18.488719,53.34924 -7.387487,4.265168" style="stroke:#000000;stroke-width:0.08px" id="path88"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-23c/tile.json b/tiles/N4-23c/tile.json
new file mode 100644
index 00000000..15c40458
--- /dev/null
+++ b/tiles/N4-23c/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-23c",
+ "name": "N4-23c",
+ "description": ""
+}
diff --git a/tiles/N4-23c/tile.svg b/tiles/N4-23c/tile.svg
new file mode 100644
index 00000000..074147ef
--- /dev/null
+++ b/tiles/N4-23c/tile.svg
@@ -0,0 +1,41 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="26.225336" height="37.795277" viewBox="0 0 26.225336 37.795277" version="1.1" id="svg60" sodipodi:docname="N4-23c.svg">
+ <defs id="defs64"/>
+ <sodipodi:namedview id="namedview62" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-24.548752,42.519685 24.548752,14.173228 24.548752,-42.519685 -24.548752,-14.173228 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,13.112668,18.897638)"/>
+ <path d="m 13.112668,18.897638 6.546334,3.779528" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 19.659002,22.677166 6.546334,-3.779528" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 26.205336,18.897638 19.659002,15.11811" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="m 19.659002,15.11811 -6.546334,3.779528" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 26.205336,11.338583 19.659002,15.11811" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 6.5663342,15.11811 6.5463338,3.779528" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 19.659002,15.11811 13.112668,11.338583" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 13.112668,11.338583 6.5663342,15.11811" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 19.659002,30.236221 V 22.677166" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 13.112668,18.897638 v 7.559055" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 13.112668,26.456693 6.546334,3.779528" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="m 6.5663342,15.11811 v 7.559056" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 6.5663342,22.677166 6.5463338,3.779527" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="m 13.112668,26.456693 v 7.559055" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 0.02,18.897638 6.5663342,15.11811" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 6.5663342,15.11811 V 7.559055" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 0.02,26.456693 6.5663342,22.677166" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 13.112668,11.338583 V 3.779528" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 0.02,34.015748 6.5663342,30.236221" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 6.5663342,30.236221 0.02,26.456693" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 6.5663342,30.236221 13.112668,26.456693" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 6.5663342,37.795276 V 30.236221" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="M 19.659002,7.559055 V 0" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="m 13.112668,3.779528 6.546334,3.779527" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="M 19.659002,15.11811 V 7.559055" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="M 19.659002,7.559055 26.205336,3.779528" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-27/tile.json b/tiles/N4-27/tile.json
new file mode 100644
index 00000000..88996486
--- /dev/null
+++ b/tiles/N4-27/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-27",
+ "name": "N4-27",
+ "description": ""
+}
diff --git a/tiles/N4-27/tile.svg b/tiles/N4-27/tile.svg
new file mode 100644
index 00000000..915d8687
--- /dev/null
+++ b/tiles/N4-27/tile.svg
@@ -0,0 +1,48 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="22.764601" height="37.820869" viewBox="0 0 22.764601 37.820869" version="1.1" id="svg74" sodipodi:docname="N4-27.svg">
+ <defs id="defs78"/>
+ <sodipodi:namedview id="namedview76" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-15.166993,-43.811552 -15.166993,43.811552 15.166993,43.811552 15.166993,-43.811552 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,10.61869,20.258191)"/>
+ <path d="m 10.61869,20.258191 6.066797,6.066797" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 22.752284,20.258191 14.423683,17.562677" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 14.423683,17.562677 10.61869,20.258191" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="m 20.49048,11.49588 -6.066797,6.066797" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 4.5518925,26.324988 10.61869,20.258191" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 10.61869,20.258191 2.2900884,17.562677" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 14.423683,17.562677 8.3568858,11.49588" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 8.3568858,11.49588 2.2900884,17.562677" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 16.685487,26.324988 8.3568858,29.020501" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 8.3568858,29.020501 4.5518925,26.324988" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 20.49048,29.020501 -6.066797,6.066797" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 14.423683,35.087298 8.3568858,29.020501" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 8.3568858,11.49588 6.0667972,6.066797" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 20.49048,11.49588 12.161879,8.8003675" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 12.161879,8.8003675 8.3568858,11.49588" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 18.228676,2.7335695 -6.066797,6.066798" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 12.161879,8.8003675 20.49048,11.49588" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 14.423683,35.087298 20.49048,29.020501" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 18.228676,37.782811 14.423683,35.087298" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 14.423683,0.03805649 6.0950817,2.7335695" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 12.161879,8.8003675 6.0950817,2.7335695" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 8.3568858,29.020501 2.2900884,35.087298" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="m 4.5518925,26.324988 3.8049933,2.695513" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 2.2900884,17.562677 8.3568858,11.49588" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="M 8.3568858,11.49588 0.02828427,8.8003675" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="M 6.0950817,2.7335695 0.02828427,8.8003675" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ <path d="M 0.02828427,8.8003675 8.3568858,11.49588" style="stroke:#000000;stroke-width:0.08px" id="path58"/>
+ <path d="M 8.3568858,11.49588 12.161879,8.8003675" style="stroke:#000000;stroke-width:0.08px" id="path60"/>
+ <path d="m 8.3568858,29.020501 6.0667972,6.066797" style="stroke:#000000;stroke-width:0.08px" id="path62"/>
+ <path d="M 14.423683,35.087298 6.0950817,37.782811" style="stroke:#000000;stroke-width:0.08px" id="path64"/>
+ <path d="M 6.0950817,37.782811 2.2900884,35.087298" style="stroke:#000000;stroke-width:0.08px" id="path66"/>
+ <path d="m 14.423683,35.087298 3.804993,2.695513" style="stroke:#000000;stroke-width:0.08px" id="path68"/>
+ <path d="m 2.2900884,35.087298 3.8049933,2.695513" style="stroke:#000000;stroke-width:0.08px" id="path70"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-29e/tile.json b/tiles/N4-29e/tile.json
new file mode 100644
index 00000000..a762ab37
--- /dev/null
+++ b/tiles/N4-29e/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-29e",
+ "name": "N4-29e",
+ "description": ""
+}
diff --git a/tiles/N4-29e/tile.svg b/tiles/N4-29e/tile.svg
new file mode 100644
index 00000000..a098471e
--- /dev/null
+++ b/tiles/N4-29e/tile.svg
@@ -0,0 +1,34 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="31.509726" height="21.699108" viewBox="0 0 31.509726 21.699108" version="1.1" id="svg46" sodipodi:docname="N4-29e.svg">
+ <defs id="defs50"/>
+ <sodipodi:namedview id="namedview48" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-26.224771,-19.466844 -26.224771,19.466844 26.224771,19.466844 26.224771,-19.466844 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,16.504141,10.416958)"/>
+ <path d="M 16.504141,10.416958 26.99405,16.473309" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 31.489725,13.87773 20.999816,7.8213785" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 20.999816,7.8213785 16.504141,10.416958" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="m 26.99405,16.473309 v 5.191159" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 20.999816,18.203695 16.504141,15.608116" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 16.504141,15.608116 V 10.416958" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 26.99405,0.89983412 V 6.0909924" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 26.99405,6.0909924 20.999816,2.6302202" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 20.999816,7.8213785 V 2.6302202" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 6.014233,0.89983412 V 6.0909924" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 6.014233,6.0909924 16.504141,0.03464102" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 20.999816,2.6302202 10.509908,8.6865716" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 10.509908,8.6865716 6.014233,6.0909924" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 10.509908,8.6865716 V 13.87773" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="m 10.509908,13.87773 5.994233,-3.460772" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 10.509908,13.87773 0.02,7.8213785" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 6.014233,16.473309 10.509908,13.87773" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 6.014233,16.473309 v 5.191159" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 6.014233,21.664468 16.504141,15.608116" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-29f/tile.json b/tiles/N4-29f/tile.json
new file mode 100644
index 00000000..624de3a8
--- /dev/null
+++ b/tiles/N4-29f/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-29f",
+ "name": "N4-29f",
+ "description": ""
+}
diff --git a/tiles/N4-29f/tile.svg b/tiles/N4-29f/tile.svg
new file mode 100644
index 00000000..cf0984e4
--- /dev/null
+++ b/tiles/N4-29f/tile.svg
@@ -0,0 +1,41 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="29.872923" height="35.786514" viewBox="0 0 29.872923 35.786514" version="1.1" id="svg60" sodipodi:docname="N4-29f.svg">
+ <defs id="defs64"/>
+ <sodipodi:namedview id="namedview62" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-22.767231,-38.074208 -22.767231,38.074208 22.767231,38.074208 22.767231,-38.074208 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,14.151384,19.071745)"/>
+ <path d="m 14.151384,19.071745 9.106893,5.257867" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 29.852923,20.522191 20.746031,15.264324" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 20.746031,15.264324 18.233784,16.71477" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="m 18.233784,16.71477 -4.0824,2.356975" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="m 27.340677,11.456903 -6.594646,3.807421" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 23.258277,24.329612 v 7.614841" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 23.258277,31.944453 20.746031,30.494007" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 20.746031,30.494007 14.151384,26.686586" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 14.151384,26.686586 V 19.071745" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 20.746031,0.03464102 11.639138,5.292508" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 11.639138,5.292508 9.1268921,3.842062" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 9.1268921,3.842062 5.044492,1.485087" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 27.340677,3.842062 18.233784,9.099929" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 18.233784,9.099929 11.639138,5.292508" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 18.233784,9.099929 V 16.71477" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 18.233784,16.71477 9.1268921,11.456903" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 9.1268921,11.456903 V 3.842062" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 5.044492,24.329612 6.594646,-3.807421" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 11.639138,20.522191 2.532246,15.264324" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="m 11.639138,20.522191 2.512246,-1.450446" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 9.1268921,11.456903 2.532246,15.264324" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="m 5.044492,24.329612 v 7.614841" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="m 5.044492,31.944453 9.106892,-5.257867" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="m 20.746031,30.494007 -9.106893,5.257867" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="M 9.1268921,34.301428 5.044492,31.944453" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="M 9.1268921,3.842062 0.02,9.099929" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-31/tile.json b/tiles/N4-31/tile.json
new file mode 100644
index 00000000..21644fb9
--- /dev/null
+++ b/tiles/N4-31/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-31",
+ "name": "N4-31",
+ "description": ""
+}
diff --git a/tiles/N4-31/tile.svg b/tiles/N4-31/tile.svg
new file mode 100644
index 00000000..e4c15534
--- /dev/null
+++ b/tiles/N4-31/tile.svg
@@ -0,0 +1,30 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="20.334429" height="20.533606" viewBox="0 0 20.334429 20.533606" version="1.1" id="svg38" sodipodi:docname="N4-31-awesome.svg">
+ <defs id="defs42"/>
+ <sodipodi:namedview id="namedview40" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-25.318034,-21.926061 -25.318034,21.926061 25.318034,21.926061 25.318034,-21.926061 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,10.167214,8.8050653)"/>
+ <path d="M 10.167214,8.8050653 H 20.294428" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 20.294428,8.8050653 V 2.9581158" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 20.294428,2.9581158 15.230821,0.03464102" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 15.230821,0.03464102 10.167214,8.8050653" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 5.1036072,17.575489 0.04,20.498964" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 5.1036072,17.575489 0.04,8.8050653" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 5.1036072,17.575489 10.167214,14.652015" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 10.167214,14.652015 V 8.8050653" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 10.167214,8.8050653 H 0.04" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 15.230821,17.575489 10.167214,14.652015" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 15.230821,17.575489 20.294428,8.8050653" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 20.294428,20.498964 15.230821,17.575489" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 0.04,8.8050653 V 2.9581158" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 10.167214,8.8050653 5.1036072,0.03464102" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 5.1036072,0.03464102 0.04,2.9581158" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-38/tile.json b/tiles/N4-38/tile.json
new file mode 100644
index 00000000..ea8f0012
--- /dev/null
+++ b/tiles/N4-38/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-38",
+ "name": "N4-38",
+ "description": ""
+}
diff --git a/tiles/N4-38/tile.svg b/tiles/N4-38/tile.svg
new file mode 100644
index 00000000..b3e7c589
--- /dev/null
+++ b/tiles/N4-38/tile.svg
@@ -0,0 +1,60 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="57.566338" height="46.354561" viewBox="0 0 57.566338 46.354561" version="1.1" id="svg98" sodipodi:docname="N4-38.svg">
+ <defs id="defs102"/>
+ <sodipodi:namedview id="namedview100" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="33.395786,33.395786 -57.843199,57.843199 -33.395786,-33.395786 57.843199,-57.843199 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,28.783168,23.17728)"/>
+ <path d="m 28.783168,23.17728 11.56864,6.679157" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 40.351808,29.856437 2.822944,-4.889482" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 43.174752,24.966955 44.208021,23.17728" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 44.208021,23.17728 40.351808,16.498123" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 40.351808,16.498123 28.783168,23.17728" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 28.783168,23.17728 V 36.535595" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 28.783168,36.535595 h 5.645888" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="m 34.429056,36.535595 h 2.066539" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="m 36.495595,36.535595 3.856213,-6.679158" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 28.783168,23.17728 -11.56864,6.679157" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 17.214528,29.856437 0.803701,1.392051" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="m 18.018229,31.248488 2.019243,3.497432" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 20.037472,34.74592 1.033269,1.789675" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="m 21.070741,36.535595 h 7.712427" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 28.783168,23.17728 17.214528,16.498123" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 17.214528,16.498123 -2.822944,4.889482" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 14.391584,21.387605 13.358315,23.17728" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 13.358315,23.17728 3.856213,6.679157" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 28.783168,23.17728 V 9.818965" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 28.783168,9.818965 H 23.13728" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 23.13728,9.818965 H 21.070741" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="m 21.070741,9.818965 -3.856213,6.679158" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="M 40.351808,16.498123 37.528864,11.60864" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 37.528864,11.60864 36.495595,9.818965" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="M 36.495595,9.818965 H 28.783168" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="m 44.208021,23.17728 5.645888,-9.778965" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ <path d="M 50.887178,11.60864 44.208021,7.752427" style="stroke:#000000;stroke-width:0.08px" id="path58"/>
+ <path d="M 44.208021,7.752427 37.528864,11.60864" style="stroke:#000000;stroke-width:0.08px" id="path60"/>
+ <path d="M 36.495595,36.535595 H 47.787371" style="stroke:#000000;stroke-width:0.08px" id="path62"/>
+ <path d="M 49.853909,28.823168 43.174752,24.966955" style="stroke:#000000;stroke-width:0.08px" id="path64"/>
+ <path d="m 21.070741,36.535595 1.153155,1.997322" style="stroke:#000000;stroke-width:0.08px" id="path66"/>
+ <path d="m 22.223896,38.532917 4.492733,7.781643" style="stroke:#000000;stroke-width:0.08px" id="path68"/>
+ <path d="M 34.429056,44.248021 V 36.535595" style="stroke:#000000;stroke-width:0.08px" id="path70"/>
+ <path d="M 13.358315,23.17728 11.489536,26.4141" style="stroke:#000000;stroke-width:0.08px" id="path72"/>
+ <path d="M 11.489536,26.4141 7.712427,32.956245" style="stroke:#000000;stroke-width:0.08px" id="path74"/>
+ <path d="m 6.679158,34.74592 6.679157,3.856213" style="stroke:#000000;stroke-width:0.08px" id="path76"/>
+ <path d="M 13.358315,38.602133 20.037472,34.74592" style="stroke:#000000;stroke-width:0.08px" id="path78"/>
+ <path d="M 21.070741,9.818965 H 9.778965" style="stroke:#000000;stroke-width:0.08px" id="path80"/>
+ <path d="m 7.712427,17.531392 6.679157,3.856213" style="stroke:#000000;stroke-width:0.08px" id="path82"/>
+ <path d="M 36.495595,9.818965 30.849706,0.04" style="stroke:#000000;stroke-width:0.08px" id="path84"/>
+ <path d="M 23.13728,2.106539 V 9.818965" style="stroke:#000000;stroke-width:0.08px" id="path86"/>
+ <path d="M 0,46.31456 H 11.291776" style="stroke:#000000;stroke-width:0.08px" id="path88"/>
+ <path d="M 13.358315,46.31456 V 38.602133" style="stroke:#000000;stroke-width:0.08px" id="path90"/>
+ <path d="M 57.566336,0.04 H 46.27456" style="stroke:#000000;stroke-width:0.08px" id="path92"/>
+ <path d="M 44.208021,0.04 V 7.752427" style="stroke:#000000;stroke-width:0.08px" id="path94"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-42e/tile.json b/tiles/N4-42e/tile.json
new file mode 100644
index 00000000..986efb23
--- /dev/null
+++ b/tiles/N4-42e/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-42e",
+ "name": "N4-42e",
+ "description": ""
+}
diff --git a/tiles/N4-42e/tile.svg b/tiles/N4-42e/tile.svg
new file mode 100644
index 00000000..edc5ba37
--- /dev/null
+++ b/tiles/N4-42e/tile.svg
@@ -0,0 +1,35 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="34.011124" height="19.785473" viewBox="0 0 34.011124 19.785473" version="1.1" id="svg48" sodipodi:docname="N4-42e.svg">
+ <defs id="defs52"/>
+ <sodipodi:namedview id="namedview50" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-18.75887,-24.631841 -18.75887,24.631841 18.75887,24.631841 18.75887,-24.631841 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,18.387975,9.8927365)"/>
+ <path d="M 18.387975,9.8927365 H 28.892942" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 34.003127,6.4442787 19.517222,3.4884578" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 19.517222,3.4884578 18.996031,6.4442787" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 18.996031,6.4442787 18.387975,9.8927365" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 30.630245,0.04 H 23.877052" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 23.877052,0.04 H 20.125278" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 20.125278,0.04 19.517222,3.4884578" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 20.125278,0.04 H 15.623149" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 20.125278,19.745473 H 15.623149" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 15.623149,19.745473 H 6.6188911" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 0.00799714,16.297015 14.493902,13.341194" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="m 14.493902,13.341194 0.521191,2.955821" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 15.015093,16.297015 0.608056,3.448458" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 6.3822981,9.8927365 H 13.885846" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="m 13.885846,9.8927365 0.608056,3.4484575" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 30.630245,19.745473 H 20.125278" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 15.015093,16.297015 29.500998,13.341194" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 13.885846,9.8927365 h 4.502129" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 18.996031,6.4442787 4.5101261,3.4884578" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 15.623149,0.04 H 5.1181821" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-44/tile.json b/tiles/N4-44/tile.json
new file mode 100644
index 00000000..a23ac860
--- /dev/null
+++ b/tiles/N4-44/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-44",
+ "name": "N4-44",
+ "description": ""
+}
diff --git a/tiles/N4-44/tile.svg b/tiles/N4-44/tile.svg
new file mode 100644
index 00000000..4de95bbd
--- /dev/null
+++ b/tiles/N4-44/tile.svg
@@ -0,0 +1,45 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="35.608139" height="35.073841" viewBox="0 0 35.608139 35.073841" version="1.1" id="svg68" sodipodi:docname="N4-44.svg">
+ <defs id="defs72"/>
+ <sodipodi:namedview id="namedview70" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="12.824518,-43.622194 30.058497,34.115259 -12.824518,43.622194 -30.058497,-34.115259 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,18.438027,17.448878)"/>
+ <path d="m 18.438027,17.448878 h 4.499066" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 22.937093,17.448878 27.01463,15.54749" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 31.092168,13.646103 22.937093,9.843329" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 22.937093,9.843329 18.438027,7.7453805" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 18.438027,7.7453805 V 17.448878" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 18.438027,17.448878 H 13.938962" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 13.938962,17.448878 5.783886,13.646103" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 5.783886,13.646103 18.438027,7.7453805" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="m 5.783886,3.9426062 h 4.499066" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 10.282952,3.9426062 8.155075,3.8027743" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 9.8614243,19.350265 13.938962,17.448878" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="m 22.937093,17.448878 -5.783887,6.892967" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 17.153206,24.341845 -3.190907,3.802774" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 13.962299,28.144619 9.8614243,19.350265" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 0,28.144619 H 13.962299" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 8.178413,35.037587 5.783886,-6.892968" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="m 29.830684,31.234813 h 4.499065" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 29.830684,31.234813 H 25.331619" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 25.331619,31.234813 21.254081,33.1362" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="m 21.254081,33.1362 -4.077538,1.901387" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 14.36049,2.0412192 18.438027,0.13983224" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="m 14.36049,2.0412192 -4.077538,1.901387" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="M 22.937093,9.843329 35.591234,3.9426062" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="m 22.937093,0.13983224 h 4.499065" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="M 22.937093,9.843329 V 0.13983224" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="M 22.937093,0.13983224 H 18.438027" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ <path d="M 31.115506,24.341845 27.01463,15.54749" style="stroke:#000000;stroke-width:0.08px" id="path58"/>
+ <path d="m 17.153206,24.341845 h 13.9623" style="stroke:#000000;stroke-width:0.08px" id="path60"/>
+ <path d="m 25.331619,31.234813 5.783887,-6.892968" style="stroke:#000000;stroke-width:0.08px" id="path62"/>
+ <path d="M 17.153206,24.341845 21.254081,33.1362" style="stroke:#000000;stroke-width:0.08px" id="path64"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-52/tile.json b/tiles/N4-52/tile.json
new file mode 100644
index 00000000..93cff640
--- /dev/null
+++ b/tiles/N4-52/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-52",
+ "name": "N4-52",
+ "description": ""
+}
diff --git a/tiles/N4-52/tile.svg b/tiles/N4-52/tile.svg
new file mode 100644
index 00000000..ce66e4e6
--- /dev/null
+++ b/tiles/N4-52/tile.svg
@@ -0,0 +1,45 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="45.781956" height="43.139114" viewBox="0 0 45.781956 43.139114" version="1.1" id="svg68" sodipodi:docname="N4-52.svg">
+ <defs id="defs72"/>
+ <sodipodi:namedview id="namedview70" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="13.720218,-53.923891 -55.487157,4.1479917 -13.720218,53.923891 55.487157,-4.1479917 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,23.587094,21.569556)"/>
+ <path d="m 23.587094,21.569556 h 4.885899" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 28.472993,21.569556 h 5.222856" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="m 33.695849,21.569556 1.43355,-8.130063" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 35.129399,13.439493 26.249401,6.4708664" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="m 26.249401,6.4708664 -0.90694,5.1435096" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 25.342461,11.614376 -1.755367,9.95518" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 27.097828,1.6591964 -0.848427,4.81167" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 35.129399,13.439493 36.358156,6.4708664" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 33.695849,21.569556 H 43.804604" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 43.804604,21.569556 0.585122,-3.318393" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 33.793754,31.524736 -5.320761,-9.95518" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="m 18.462143,31.524736 1.755367,-9.95518" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 20.21751,21.569556 h 3.369584" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 33.793754,31.524736 H 26.717626" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 26.717626,31.524736 H 18.462143" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 32.038387,41.479916 -5.320761,-9.95518" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="m 16.706776,41.479916 0.848427,-4.81167" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 17.555203,36.668246 0.264768,-1.501573" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="m 17.819971,35.166673 0.642172,-3.641937" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 26.815531,41.479916 H 16.706776" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 10.108755,21.569556 H 0" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 7.446449,36.668246 8.675205,29.69962" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="m 8.675205,29.69962 1.43355,-8.130064" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 17.555203,36.668246 8.675205,29.69962" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="M 20.21751,21.569556 H 15.331611" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="M 15.331611,21.569556 H 10.108755" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ <path d="M 25.342461,11.614376 H 17.086978" style="stroke:#000000;stroke-width:0.08px" id="path58"/>
+ <path d="M 17.086978,11.614376 11.766217,1.6591964" style="stroke:#000000;stroke-width:0.08px" id="path60"/>
+ <path d="M 17.086978,11.614376 H 10.01085" style="stroke:#000000;stroke-width:0.08px" id="path62"/>
+ <path d="M 15.331611,21.569556 10.01085,11.614376" style="stroke:#000000;stroke-width:0.08px" id="path64"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-54d/tile.json b/tiles/N4-54d/tile.json
new file mode 100644
index 00000000..306b7eb1
--- /dev/null
+++ b/tiles/N4-54d/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-54d",
+ "name": "N4-54d",
+ "description": ""
+}
diff --git a/tiles/N4-54d/tile.svg b/tiles/N4-54d/tile.svg
new file mode 100644
index 00000000..6bcc6b4b
--- /dev/null
+++ b/tiles/N4-54d/tile.svg
@@ -0,0 +1,44 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="30.331474" height="38.426754" viewBox="0 0 30.331474 38.426754" version="1.1" id="svg66" sodipodi:docname="N4-54d.svg">
+ <defs id="defs70"/>
+ <sodipodi:namedview id="namedview68" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-25.001773,-36.294351 -35.90738,25.554424 25.001773,36.294351 35.90738,-25.554424 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,15.550382,16.672672)"/>
+ <path d="m 15.550382,16.672672 h 3.768174" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 19.318556,16.672672 H 28.11096" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="m 28.11096,16.672672 0.654337,-3.710927" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 28.765297,12.961745 17.077167,8.0138431" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 17.077167,8.0138431 15.550382,16.672672" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 13.369261,29.042427 1.526785,-8.658829" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 14.896046,20.383598 0.654336,-3.710926" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="m 19.318556,16.672672 2.84311,12.369755" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 22.161666,29.042427 H 13.369261" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 28.11096,16.672672 26.584175,25.3315" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 26.584175,25.3315 -0.654336,3.710927" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 25.929839,29.042427 H 22.161666" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 24.403054,37.701255 1.526785,-8.658828" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 13.369261,29.042427 9.8283358,27.753635" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 9.8283358,27.753635 1.5661783,24.746456" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 1.5661783,24.746456 0.654336,-3.710927" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 2.2205143,21.035529 14.896046,20.383598" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 9.8283358,27.753635 2.9259813,38.405002" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 1.5661783,24.746456 0.03939231,33.405284" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 30.292082,4.3029166 28.765297,12.961745" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 26.523908,4.3029166 H 17.731504" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 17.731504,4.3029166 17.077167,8.0138431" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="M 17.731504,4.3029166 14.190579,3.0141254" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 14.190579,3.0141254 7.2882242,13.665492" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="m 7.2882242,13.665492 8.2621578,3.00718" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="M 5.9284213,0.00694593 4.4016363,8.6657743" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ <path d="M 4.4016363,8.6657743 3.7472993,12.376701" style="stroke:#000000;stroke-width:0.08px" id="path58"/>
+ <path d="m 3.7472993,12.376701 3.5409249,1.288791" style="stroke:#000000;stroke-width:0.08px" id="path60"/>
+ <path d="m 2.2205143,21.035529 1.526785,-8.658828" style="stroke:#000000;stroke-width:0.08px" id="path62"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-5a-2/tile.json b/tiles/N4-5a-2/tile.json
new file mode 100644
index 00000000..4dbbb921
--- /dev/null
+++ b/tiles/N4-5a-2/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-5a-2",
+ "name": "N4-5a-2",
+ "description": ""
+}
diff --git a/tiles/N4-5a-2/tile.svg b/tiles/N4-5a-2/tile.svg
new file mode 100644
index 00000000..ba044be8
--- /dev/null
+++ b/tiles/N4-5a-2/tile.svg
@@ -0,0 +1,29 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="43.54388" height="20.792471" viewBox="0 0 43.54388 20.792472" version="1.1" id="svg36" sodipodi:docname="N4-5a-2.svg">
+ <defs id="defs40"/>
+ <sodipodi:namedview id="namedview38" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="13.709567,-15.08542 24.591298,2.1514598 -13.709567,15.08542 -24.591298,-2.1514598 " style="stroke:none" id="polygon4" transform="matrix(0.6,0,0,0.6,21.31953,11.681219)"/>
+ <path d="m 21.31953,11.681219 h 7.433859" style="stroke:#000000;stroke-width:0.12px" id="path6"/>
+ <path d="M 28.753389,11.681219 29.54527,2.6299664" style="stroke:#000000;stroke-width:0.12px" id="path8"/>
+ <path d="M 29.54527,2.6299664 13.99861,10.390343" style="stroke:#000000;stroke-width:0.12px" id="path10"/>
+ <path d="m 13.99861,10.390343 7.32092,1.290876" style="stroke:#000000;stroke-width:0.12px" id="path12"/>
+ <path d="m 21.31953,11.681219 -0.791882,9.051252" style="stroke:#000000;stroke-width:0.12px" id="path14"/>
+ <path d="M 20.527648,20.732471 36.07431,12.972095" style="stroke:#000000;stroke-width:0.12px" id="path16"/>
+ <path d="M 36.07431,12.972095 28.753389,11.681219" style="stroke:#000000;stroke-width:0.12px" id="path18"/>
+ <path d="M 29.54527,2.6299664 43.508167,12.972095" style="stroke:#000000;stroke-width:0.12px" id="path20"/>
+ <path d="M 20.527648,20.732471 6.5647517,10.390343" style="stroke:#000000;stroke-width:0.12px" id="path22"/>
+ <path d="M 6.5647517,10.390343 H 13.99861" style="stroke:#000000;stroke-width:0.12px" id="path24"/>
+ <path d="M 20.527648,20.732471 H 13.093791" style="stroke:#000000;stroke-width:0.12px" id="path26"/>
+ <path d="M 0.03571196,0.04821468 13.99861,10.390343" style="stroke:#000000;stroke-width:0.12px" id="path28"/>
+ <path d="M 14.790492,1.3390906 13.99861,10.390343" style="stroke:#000000;stroke-width:0.12px" id="path30"/>
+ <path d="M 29.54527,2.6299664 22.224349,1.3390906" style="stroke:#000000;stroke-width:0.12px" id="path32"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-5a/tile.json b/tiles/N4-5a/tile.json
new file mode 100644
index 00000000..4eb487e9
--- /dev/null
+++ b/tiles/N4-5a/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-5a",
+ "name": "N4-5a",
+ "description": ""
+}
diff --git a/tiles/N4-5a/tile.svg b/tiles/N4-5a/tile.svg
new file mode 100644
index 00000000..52cceab3
--- /dev/null
+++ b/tiles/N4-5a/tile.svg
@@ -0,0 +1,40 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="27.62339" height="18.537838" viewBox="0 0 27.62339 18.537838" version="1.1" id="svg58" sodipodi:docname="N4-5a.svg">
+ <defs id="defs62"/>
+ <sodipodi:namedview id="namedview60" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="22.407101,12.936746 -24.066886,15.811578 -22.407101,-12.936746 24.066886,-15.811578 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,12.649009,12.173207)"/>
+ <path d="m 12.649009,12.173207 h 5.975227" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 18.624236,12.173207 22.275764,5.8485756" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 22.275764,5.8485756 9.6613955,6.9985087" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 9.6613955,6.9985087 12.649009,12.173207" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 12.649009,12.173207 8.9974814,18.497838" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 8.9974814,18.497838 21.611849,17.347905" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 21.611849,17.347905 18.624236,12.173207" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 21.611849,17.347905 18.624236,12.173207" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 22.275764,5.8485756 27.587076,17.347905" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 9.6613955,6.9985087 12.649009,12.173207" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 12.649009,12.173207 8.9974814,18.497838" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 8.9974814,18.497838 5.3459538,10.592049" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 5.3459538,10.592049 3.6861686,6.9985087" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 3.6861686,6.9985087 H 9.6613955" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 0.03464102,13.32314 3.6861686,6.9985087" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 3.6861686,6.9985087 5.3459538,10.592049" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="m 5.3459538,10.592049 3.6515276,7.905789" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 8.9974814,18.497838 H 3.0222545" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 6.4366699,0.01677256 9.6613955,6.9985087" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 9.6613955,6.9985087 H 3.6861686" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 13.312923,0.67387756 9.6613955,6.9985087" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 9.6613955,6.9985087 22.275764,5.8485756" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="M 13.312923,0.67387756 9.6613955,6.9985087" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 9.6613955,6.9985087 6.4366699,0.01677256" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="M 3.0222545,18.497838 H 8.9974814" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-82/tile.json b/tiles/N4-82/tile.json
new file mode 100644
index 00000000..476539aa
--- /dev/null
+++ b/tiles/N4-82/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-82",
+ "name": "N4-82",
+ "description": ""
+}
diff --git a/tiles/N4-82/tile.svg b/tiles/N4-82/tile.svg
new file mode 100644
index 00000000..243d6608
--- /dev/null
+++ b/tiles/N4-82/tile.svg
@@ -0,0 +1,36 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="34.511963" height="48.114979" viewBox="0 0 34.511963 48.114979" version="1.1" id="svg50" sodipodi:docname="N4-82.svg">
+ <defs id="defs54"/>
+ <sodipodi:namedview id="namedview52" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="43.139955,15.03159 -7.3120519,-45.094771 -43.139955,-15.03159 7.3120519,45.094771 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,17.255982,24.05749)"/>
+ <path d="m 17.255982,24.05749 h 8.140521" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 25.396503,24.05749 h 4.07026" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 30.88035,16.040642 H 18.669569" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="m 18.669569,16.040642 -0.706794,4.008424" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 17.962775,20.049066 17.255982,24.05749" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 19.376362,12.032218 -0.706793,4.008424" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 13.356221,0.00694593 11.235841,12.032218" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 11.235841,12.032218 H 7.165581" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 19.376362,12.032218 H 11.235841" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 15.135602,36.082762 1.413587,-8.016848" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 16.549189,28.065914 H 4.338407" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 17.962775,20.049066 H 5.751994" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 5.751994,20.049066 5.045201,24.05749" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 16.549189,28.065914 17.255982,24.05749" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 7.165581,12.032218 5.751994,20.049066" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 25.396503,24.05749 -2.12038,12.025272" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 23.276123,36.082762 H 19.205862" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 19.205862,36.082762 h -4.07026" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="m 33.537024,24.05749 -2.12038,12.025272" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="m 27.346383,36.082762 h -4.07026" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 19.205862,36.082762 17.085483,48.108034" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N4-85d/tile.json b/tiles/N4-85d/tile.json
new file mode 100644
index 00000000..3729007e
--- /dev/null
+++ b/tiles/N4-85d/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N4-85d",
+ "name": "N4-85d",
+ "description": ""
+}
diff --git a/tiles/N4-85d/tile.svg b/tiles/N4-85d/tile.svg
new file mode 100644
index 00000000..6714431e
--- /dev/null
+++ b/tiles/N4-85d/tile.svg
@@ -0,0 +1,49 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="22.66276" height="45.16552" viewBox="0 0 22.66276 45.16552" version="1.1" id="svg76" sodipodi:docname="N4-85d.svg">
+ <defs id="defs80"/>
+ <sodipodi:namedview id="namedview78" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-28.228449,-32.93319 -28.228449,32.93319 28.228449,32.93319 28.228449,-32.93319 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,11.33138,22.582759)"/>
+ <path d="M 11.33138,22.582759 H 22.62276" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 22.62276,22.582759 V 18.818966" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 22.62276,18.818966 18.858966,15.055173" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 18.858966,15.055173 11.33138,22.582759" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 11.33138,22.582759 V 11.291379" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 11.33138,11.291379 h 3.763793" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 15.095173,11.291379 3.763793,3.763794" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 22.62276,18.818966 V 7.527586" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="m 18.858966,7.527586 -3.763793,3.763793" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 11.33138,0 V 11.291379" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 0.04,45.165518 V 33.874139" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="m 0.04,22.582759 v 11.29138" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 0.04,33.874139 H 3.8037937" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="m 3.8037937,33.874139 3.7637931,3.763793" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="m 11.33138,26.346552 v 11.29138" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 3.8037937,33.874139 7.5675868,30.110345" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 7.5675868,30.110345 11.33138,26.346552" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 7.5675868,30.110345 0.04,22.582759" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 0.04,22.582759 H 11.33138" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="m 11.33138,22.582759 v 3.763793" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 22.62276,45.165518 V 33.874139" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 22.62276,33.874139 H 18.858966" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="m 18.858966,33.874139 -3.763793,3.763793" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 18.858966,33.874139 15.095173,30.110345" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="M 15.095173,30.110345 11.33138,26.346552" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="m 22.62276,22.582759 v 11.29138" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ <path d="M 15.095173,30.110345 22.62276,22.582759" style="stroke:#000000;stroke-width:0.08px" id="path58"/>
+ <path d="M 0.04,22.582759 V 18.818966" style="stroke:#000000;stroke-width:0.08px" id="path60"/>
+ <path d="M 0.04,18.818966 V 7.527586" style="stroke:#000000;stroke-width:0.08px" id="path62"/>
+ <path d="M 0.04,18.818966 3.8037937,15.055173" style="stroke:#000000;stroke-width:0.08px" id="path64"/>
+ <path d="M 3.8037937,15.055173 11.33138,22.582759" style="stroke:#000000;stroke-width:0.08px" id="path66"/>
+ <path d="M 11.33138,11.291379 H 7.5675868" style="stroke:#000000;stroke-width:0.08px" id="path68"/>
+ <path d="M 7.5675868,11.291379 3.8037937,15.055173" style="stroke:#000000;stroke-width:0.08px" id="path70"/>
+ <path d="m 3.8037937,7.527586 3.7637931,3.763793" style="stroke:#000000;stroke-width:0.08px" id="path72"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N5-1e1/tile.json b/tiles/N5-1e1/tile.json
new file mode 100644
index 00000000..0b7bdc84
--- /dev/null
+++ b/tiles/N5-1e1/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N5-1e1",
+ "name": "N5-1e1",
+ "description": ""
+}
diff --git a/tiles/N5-1e1/tile.svg b/tiles/N5-1e1/tile.svg
new file mode 100644
index 00000000..5af8aaa0
--- /dev/null
+++ b/tiles/N5-1e1/tile.svg
@@ -0,0 +1,39 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="87.723335" height="58.095192" viewBox="0 0 87.723335 58.095192" version="1.1" id="svg70" sodipodi:docname="N5-1e1.svg" inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)">
+ <defs id="defs74"/>
+ <sodipodi:namedview id="namedview72" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" showgrid="false" inkscape:zoom="15.135154" inkscape:cx="35.975848" inkscape:cy="28.344608" inkscape:current-layer="svg70"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-96.753675,-70.756963 -109.65417,-48.412659 96.753675,70.756963 109.65417,48.412659 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,43.861668,28.302785)"/>
+ <path d="m 43.861668,28.302785 h 6.880261" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 43.861668,22.344304 v 5.958481" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="m 81.703105,52.13671 -3.44013,-5.958481" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 86.863302,49.157469 81.703105,52.13671" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="m 36.981407,22.344304 h 6.880261" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 19.780753,22.344304 h 6.880262" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 26.661015,22.344304 c 3.440131,0 6.880261,0 10.320392,0" style="stroke:#000000;stroke-width:0.08px" id="path26" sodipodi:nodetypes="cc"/>
+ <path d="m 24.940949,13.406582 -5.160196,2.979241" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="m 19.780753,16.385823 v 5.958481" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 18.060688,7.448101 H 7.740296" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="m 7.740296,7.448101 5.160196,8.937722" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 12.900492,16.385823 h 6.880261" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 4.300165,1.48962 7.740296,7.448101" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 45.581733,37.240507 H 55.902125" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 55.902125,37.240507 50.741929,28.302785" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="m 43.861668,28.302785 -5.160196,2.979241" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 59.342256,43.198988 55.902125,37.240507" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="m 64.502452,34.261266 v 5.958481" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="m 64.502452,40.219747 -5.160196,2.979241" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ <path d="M 78.262975,46.178229 H 67.942583" style="stroke:#000000;stroke-width:0.08px" id="path58"/>
+ <path d="M 67.942583,46.178229 64.502452,40.219747" style="stroke:#000000;stroke-width:0.08px" id="path60"/>
+ <path d="M 73.102779,55.11595 67.942583,46.178229" style="stroke:#000000;stroke-width:0.08px" id="path62"/>
+ <path d="m 81.703105,52.13671 v 5.958481" style="stroke:#000000;stroke-width:0.08px" id="path64"/>
+ <path d="m 26.661015,22.344304 5.160196,8.937722" style="stroke:#000000;stroke-width:0.08px" id="path66"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N5-1q2/tile.json b/tiles/N5-1q2/tile.json
new file mode 100644
index 00000000..fa85b838
--- /dev/null
+++ b/tiles/N5-1q2/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N5-1q2",
+ "name": "N5-1q2",
+ "description": ""
+}
diff --git a/tiles/N5-1q2/tile.svg b/tiles/N5-1q2/tile.svg
new file mode 100644
index 00000000..ba6802ed
--- /dev/null
+++ b/tiles/N5-1q2/tile.svg
@@ -0,0 +1,30 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="30.964874" height="24.014212" viewBox="0 0 30.964874 24.014212" version="1.1" id="svg38" sodipodi:docname="N5-1q2-awesome.svg">
+ <defs id="defs42"/>
+ <sodipodi:namedview id="namedview40" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="34.869349,0 -11.623116,29.938849 -34.869349,0 11.623116,-29.938849 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,13.94774,12.007106)"/>
+ <path d="m 13.94774,12.007106 7.694075,5.98777" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 21.641815,17.994876 1.604417,-5.98777" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 23.246232,12.007106 21.641815,6.0193365" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 21.641815,6.0193365 H 12.343321" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 12.343321,6.0193365 13.94774,12.007106" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 23.246232,0.03156715 21.641815,6.0193365" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 12.343321,6.0193365 13.94774,0.03156715" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 30.940307,6.0193365 23.246232,12.007106" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 4.6492465,23.982645 12.343321,17.994876" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 12.343321,17.994876 1.604419,5.987769" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 13.94774,12.007106 -1.604419,5.98777" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 3.0448284,6.0193365 4.6492465,12.007106" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 4.6492465,12.007106 -1.6044181,5.98777" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 4.6492465,12.007106 H 13.94774" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 12.343321,6.0193365 4.6492465,0.03156715" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N5-1t/tile.json b/tiles/N5-1t/tile.json
new file mode 100644
index 00000000..f1df35cb
--- /dev/null
+++ b/tiles/N5-1t/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N5-1t",
+ "name": "N5-1t",
+ "description": ""
+}
diff --git a/tiles/N5-1t/tile.svg b/tiles/N5-1t/tile.svg
new file mode 100644
index 00000000..b6e551ef
--- /dev/null
+++ b/tiles/N5-1t/tile.svg
@@ -0,0 +1,28 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="27.357389" height="26.323864" viewBox="0 0 27.357389 26.323864" version="1.1" id="svg34" sodipodi:docname="N5-1t.svg">
+ <defs id="defs38"/>
+ <sodipodi:namedview id="namedview36" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-34.196737,-6.7534477 -18.554945,29.508302 34.196737,6.7534477 18.554945,-29.508302 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,13.678695,14.520543)"/>
+ <path d="M 13.678695,14.520543 H 26.192129" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 26.192129,14.520543 23.554927,8.4068228" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 23.554927,8.4068228 17.29821,6.1295642" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 17.29821,6.1295642 11.041493,8.4068228" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="m 11.041493,8.4068228 2.637202,6.1137202" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 26.192129,14.520543 -2.637202,6.113721" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 17.29821,22.911523 11.041493,20.634264" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="m 11.041493,20.634264 2.637202,-6.113721" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 2.4542538,17.508765 11.041493,8.4068228" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 11.041493,20.634264 5.0914556,23.622485" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 5.0914556,23.622485 2.4542538,17.508765" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 11.041493,8.4068228 4.7847763,6.1295642" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 19.935412,0.01584319 17.29821,6.1295642" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N6-1/tile.json b/tiles/N6-1/tile.json
new file mode 100644
index 00000000..b8333705
--- /dev/null
+++ b/tiles/N6-1/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N6-1",
+ "name": "N6-1",
+ "description": ""
+}
diff --git a/tiles/N6-1/tile.svg b/tiles/N6-1/tile.svg
new file mode 100644
index 00000000..922e9ed7
--- /dev/null
+++ b/tiles/N6-1/tile.svg
@@ -0,0 +1,16 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="22.078529" height="108.16628" viewBox="0 0 22.078529 108.16628" version="1.1" id="svg1587" sodipodi:docname="hex_N6-1.svg" inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)">
+ <defs id="defs1591"/>
+ <sodipodi:namedview id="namedview1589" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" showgrid="false" inkscape:zoom="4.4026633" inkscape:cx="6.019084" inkscape:cy="65.187815" inkscape:current-layer="svg1587"/>
+ <style type="text/css" id="style1103">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <path id="polygon1415" style="fill:none;stroke:#000000;stroke-width:0.48;stroke-linejoin:round" d="M 11.700155,19.647654 7.4226433,12.397253 m 7.2068637,88.136877 4.166068,7.51579 M 14.629507,100.53413 4.4932913,93.283734 m -1.125272,-19.71176 4.166068,7.51579 M 11.588711,4.881473 7.4226433,12.397253 m 14.4137277,0 -10.136216,7.250401 m 0,0 -4.1660677,7.51579 m 7.2068637,4.68019 -7.2068637,-4.68019 M 0.43866735,46.609814 10.574887,39.359414 M 18.795575,0.20128097 11.588711,4.881473 m 0,0 L 4.3818433,0.20128097 M 14.629507,100.53413 18.907019,93.283734 m 0,0 -4.166068,-7.51578 m 7.206864,-4.68019 -7.206864,4.68019 m 0,0 -7.2068637,-4.68019 m -4.166068,-7.51579 4.277512,-7.2504 m -4.166064,-7.51578 7.2068637,-4.68019 m 7.09542,19.44637 -10.1362197,-7.2504 m 0,0 -4.166064,-7.51578 m 18.4683477,-31.64235 -7.206864,4.68019 m 0,0 -4.166068,7.51578 m 0,0 4.277512,7.2504 m -4.166064,7.51579 7.206864,4.68019 m -3.0408,-12.19598 -4.166064,7.51579" sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccc"/>
+ <polygon class="para" points="391.0429,8.9730035 300.9571,8.9730035 300.9571,683.027 391.0429,683.027 " id="polygon1585" transform="matrix(0.16,0,0,0.16,-43.891761,-1.213971)" style="display:inline" inkscape:label="parallelogram"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N6-2/tile.json b/tiles/N6-2/tile.json
new file mode 100644
index 00000000..5fe7eff1
--- /dev/null
+++ b/tiles/N6-2/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N6-2",
+ "name": "N6-2",
+ "description": ""
+}
diff --git a/tiles/N6-2/tile.svg b/tiles/N6-2/tile.svg
new file mode 100644
index 00000000..57dce497
--- /dev/null
+++ b/tiles/N6-2/tile.svg
@@ -0,0 +1,47 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="89.433968" height="19.078739" viewBox="0 0 89.433968 19.078739" version="1.1" id="svg72" sodipodi:docname="N6-2.svg">
+ <defs id="defs76"/>
+ <sodipodi:namedview id="namedview74" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-111.73193,-15.655596 -111.73193,15.655596 111.73193,15.655596 111.73193,-15.655596 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,44.709677,9.5393699)"/>
+ <path d="M 44.709677,9.5393699 51.161681,6.5307513" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 51.161681,6.5307513 55.711464,0.26851281" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="m 39.817081,3.2771314 4.892596,6.2622385" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 62.163467,15.801608 55.711464,12.79299" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 55.711464,12.79299 51.161681,6.5307513" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 55.711464,0.26851281 62.163467,3.2771314" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 62.163467,3.2771314 4.892597,6.2622385" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 67.056064,9.5393699 62.163467,15.801608" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 67.056064,9.5393699 73.508067,6.5307513" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 73.508067,6.5307513 78.05785,0.26851281" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 84.509853,3.2771314 78.05785,0.26851281" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 39.817081,3.2771314 33.365078,6.2857499" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 33.365078,6.2857499 28.815295,12.547989" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="m 28.815295,12.547989 4.549783,6.262238" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="m 33.365078,18.810227 6.452003,-3.008619" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 39.817081,15.801608 44.709677,9.5393699" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 28.815295,0.02351141 33.365078,6.2857499" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 28.815295,12.547989 22.363292,9.5393699" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 22.363292,9.5393699 17.470695,3.2771314" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 17.470695,3.2771314 11.018691,6.2857499" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 11.018691,6.2857499 6.4689087,12.547989" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="m 6.4689087,12.547989 4.5497823,6.262238" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="m 11.018691,18.810227 6.452004,-3.008619" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 17.470695,15.801608 22.363292,9.5393699" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="M 0.01690473,9.5393699 6.4689087,12.547989" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="M 51.161681,19.055228 55.711464,12.79299" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ <path d="M 73.508067,19.055228 78.05785,12.79299" style="stroke:#000000;stroke-width:0.08px" id="path58"/>
+ <path d="M 78.05785,12.79299 73.508067,6.5307513" style="stroke:#000000;stroke-width:0.08px" id="path60"/>
+ <path d="M 84.509853,15.801608 78.05785,12.79299" style="stroke:#000000;stroke-width:0.08px" id="path62"/>
+ <path d="M 84.509853,3.2771314 89.40245,9.5393699" style="stroke:#000000;stroke-width:0.08px" id="path64"/>
+ <path d="M 89.40245,9.5393699 84.509853,15.801608" style="stroke:#000000;stroke-width:0.08px" id="path66"/>
+ <path d="M 6.4689087,0.02351141 11.018691,6.2857499" style="stroke:#000000;stroke-width:0.08px" id="path68"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N6-5b/tile.json b/tiles/N6-5b/tile.json
new file mode 100644
index 00000000..8c908ca8
--- /dev/null
+++ b/tiles/N6-5b/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N6-5b",
+ "name": "N6-5b",
+ "description": ""
+}
diff --git a/tiles/N6-5b/tile.svg b/tiles/N6-5b/tile.svg
new file mode 100644
index 00000000..5f5bdb28
--- /dev/null
+++ b/tiles/N6-5b/tile.svg
@@ -0,0 +1,60 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="35.037594" height="69.091568" viewBox="0 0 35.037594 69.091568" version="1.1" id="svg98" sodipodi:docname="N6-5b.svg">
+ <defs id="defs102"/>
+ <sodipodi:namedview id="namedview100" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-31.335416,83.757774 -31.335416,-83.757774 31.335416,-83.757774 31.335416,83.757774 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,17.584446,33.541747)"/>
+ <path d="m 17.584446,33.541747 7.49424,2.008076" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 25.078686,35.549823 7.494241,-2.008076" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 32.572927,33.541747 30.118612,24.382119" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 30.118612,24.382119 27.533001,22.374044" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 27.533001,22.374044 20.03876,24.382119" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 20.03876,24.382119 -2.454314,9.159628" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 35.027242,46.717526 27.533001,44.70945" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 27.533001,44.70945 25.078686,35.549823" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 20.03876,46.717526 27.533001,44.70945" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 32.572927,55.877153 -2.585611,2.008076" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 29.987316,57.885229 22.493075,55.877153" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 22.493075,55.877153 20.03876,46.717526" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 22.493075,55.877153 -7.494241,2.008076" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="m 14.998834,57.885229 2.454315,9.159627" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="m 20.03876,69.052932 7.494241,-2.008076" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 27.533001,67.044856 2.454315,-9.159627" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 14.998834,57.885229 7.5045938,55.877153" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 7.5045938,55.877153 9.9589086,46.717526" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 9.9589086,46.717526 12.54452,44.70945" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="m 12.54452,44.70945 7.49424,2.008076" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="m 12.54452,44.70945 2.454314,-9.159627" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="m 14.998834,35.549823 2.585612,-2.008076" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="M 35.027242,2.046713 27.533001,0.03863703" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 27.533001,0.03863703 20.03876,2.046713" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="m 20.03876,2.046713 2.454315,9.159627" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="m 22.493075,11.20634 2.585611,2.008076" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ <path d="M 25.078686,13.214416 32.572927,11.20634" style="stroke:#000000;stroke-width:0.08px" id="path58"/>
+ <path d="m 25.078686,13.214416 2.454315,9.159628" style="stroke:#000000;stroke-width:0.08px" id="path60"/>
+ <path d="M 17.453149,0.03863703 20.03876,2.046713" style="stroke:#000000;stroke-width:0.08px" id="path62"/>
+ <path d="M 35.027242,69.052932 27.533001,67.044856" style="stroke:#000000;stroke-width:0.08px" id="path64"/>
+ <path d="M 17.453149,67.044856 9.9589086,69.052932" style="stroke:#000000;stroke-width:0.08px" id="path66"/>
+ <path d="m 4.9189828,57.885229 2.585611,-2.008076" style="stroke:#000000;stroke-width:0.08px" id="path68"/>
+ <path d="M 0.01035276,35.549823 7.5045938,33.541747" style="stroke:#000000;stroke-width:0.08px" id="path70"/>
+ <path d="M 7.5045938,33.541747 5.0502788,24.382119" style="stroke:#000000;stroke-width:0.08px" id="path72"/>
+ <path d="m 7.5045938,33.541747 7.4942402,2.008076" style="stroke:#000000;stroke-width:0.08px" id="path74"/>
+ <path d="M 9.9589086,46.717526 2.4646678,44.70945" style="stroke:#000000;stroke-width:0.08px" id="path76"/>
+ <path d="M 5.0502788,24.382119 12.54452,22.374044" style="stroke:#000000;stroke-width:0.08px" id="path78"/>
+ <path d="m 12.54452,22.374044 7.49424,2.008075" style="stroke:#000000;stroke-width:0.08px" id="path80"/>
+ <path d="m 22.493075,11.20634 -7.494241,2.008076" style="stroke:#000000;stroke-width:0.08px" id="path82"/>
+ <path d="M 14.998834,13.214416 12.54452,22.374044" style="stroke:#000000;stroke-width:0.08px" id="path84"/>
+ <path d="m 7.5045938,11.20634 7.4942402,2.008076" style="stroke:#000000;stroke-width:0.08px" id="path86"/>
+ <path d="M 17.453149,0.03863703 9.9589086,2.046713" style="stroke:#000000;stroke-width:0.08px" id="path88"/>
+ <path d="M 9.9589086,2.046713 7.5045938,11.20634" style="stroke:#000000;stroke-width:0.08px" id="path90"/>
+ <path d="M 9.9589086,2.046713 2.4646678,0.03863703" style="stroke:#000000;stroke-width:0.08px" id="path92"/>
+ <path d="M 0.01035276,13.214416 7.5045938,11.20634" style="stroke:#000000;stroke-width:0.08px" id="path94"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N6-6a/tile.json b/tiles/N6-6a/tile.json
new file mode 100644
index 00000000..2cd74f31
--- /dev/null
+++ b/tiles/N6-6a/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N6-6a",
+ "name": "N6-6a",
+ "description": ""
+}
diff --git a/tiles/N6-6a/tile.svg b/tiles/N6-6a/tile.svg
new file mode 100644
index 00000000..6f2764a2
--- /dev/null
+++ b/tiles/N6-6a/tile.svg
@@ -0,0 +1,60 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="45.13686" height="38.33868" viewBox="0 0 45.13686 38.33868" version="1.1" id="svg98" sodipodi:docname="N6-6a.svg">
+ <defs id="defs102"/>
+ <sodipodi:namedview id="namedview100" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="56.321072,28.160536 -56.321072,28.160536 -56.321072,-28.160536 56.321072,-28.160536 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,22.568429,19.16934)"/>
+ <path d="m 22.568429,22.548604 5.068896,4.505686" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 27.637325,27.05429 33.832643,16.448662" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 33.832643,16.448662 V 9.6901339" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 33.832643,9.6901339 27.637325,11.28439" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="m 27.637325,11.28439 -5.068896,4.505686" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 22.568429,15.790076 v 6.758528" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 27.637325,4.525861 V 11.28439" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 33.832643,9.6901339 38.90154,5.184448" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 33.832643,9.6901339 38.90154,5.184448" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 38.90154,5.184448 6.195318,10.605628" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 45.096858,15.790076 v 6.758528" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 45.096858,22.548604 38.90154,20.954348" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 38.90154,20.954348 33.832643,16.448662" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 45.096858,15.790076 38.90154,5.184448" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 22.568429,0.02017598 16.373111,10.625803" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 16.373111,10.625803 v 6.758529" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="m 16.373111,17.384332 6.195318,-1.594256" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 11.304215,28.648546 5.068896,4.505686" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 16.373111,33.154232 22.568429,22.548604" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="m 16.373111,17.384332 -5.068896,4.505685" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="m 11.304215,21.890017 v 6.758529" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 11.304215,21.890017 5.108897,11.28439" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="M 5.108897,11.28439 V 4.525861" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="m 11.304215,6.120117 2.64005,2.346712" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ <path d="m 13.944265,8.466829 2.428846,2.158974" style="stroke:#000000;stroke-width:0.08px" id="path54"/>
+ <path d="M 0.04,15.790076 5.108897,11.28439" style="stroke:#000000;stroke-width:0.08px" id="path56"/>
+ <path d="m 5.108897,11.28439 6.195318,10.605627" style="stroke:#000000;stroke-width:0.08px" id="path58"/>
+ <path d="m 11.304215,21.890017 v 6.758529" style="stroke:#000000;stroke-width:0.08px" id="path60"/>
+ <path d="M 11.304215,28.648546 10.363854,28.406561" style="stroke:#000000;stroke-width:0.08px" id="path62"/>
+ <path d="M 10.363854,28.406561 5.108897,27.05429" style="stroke:#000000;stroke-width:0.08px" id="path64"/>
+ <path d="M 5.108897,27.05429 0.04,22.548604" style="stroke:#000000;stroke-width:0.08px" id="path66"/>
+ <path d="M 0.04,22.548604 V 15.790076" style="stroke:#000000;stroke-width:0.08px" id="path68"/>
+ <path d="M 0.04,22.548604 5.108897,27.05429" style="stroke:#000000;stroke-width:0.08px" id="path70"/>
+ <path d="m 5.108897,27.05429 v 6.758529" style="stroke:#000000;stroke-width:0.08px" id="path72"/>
+ <path d="m 0.04,15.790076 v 6.758528" style="stroke:#000000;stroke-width:0.08px" id="path74"/>
+ <path d="M 5.108897,11.28439 0.04,15.790076" style="stroke:#000000;stroke-width:0.08px" id="path76"/>
+ <path d="M 45.096858,22.548604 V 15.790076" style="stroke:#000000;stroke-width:0.08px" id="path78"/>
+ <path d="m 11.304215,6.120117 2.64005,2.346712" style="stroke:#000000;stroke-width:0.08px" id="path80"/>
+ <path d="M 16.373111,10.625803 22.568429,0.02017598" style="stroke:#000000;stroke-width:0.08px" id="path82"/>
+ <path d="m 27.637325,27.05429 v 6.758529" style="stroke:#000000;stroke-width:0.08px" id="path84"/>
+ <path d="M 33.832643,32.218563 38.90154,27.712877" style="stroke:#000000;stroke-width:0.08px" id="path86"/>
+ <path d="M 38.90154,27.712877 V 20.954348" style="stroke:#000000;stroke-width:0.08px" id="path88"/>
+ <path d="m 38.90154,27.712877 6.195318,10.605627" style="stroke:#000000;stroke-width:0.08px" id="path90"/>
+ <path d="M 22.568429,22.548604 16.373111,33.154232" style="stroke:#000000;stroke-width:0.08px" id="path92"/>
+ <path d="m 5.108897,27.05429 5.254957,1.352271" style="stroke:#000000;stroke-width:0.08px" id="path94"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/N6-6c/tile.json b/tiles/N6-6c/tile.json
new file mode 100644
index 00000000..aeb5754b
--- /dev/null
+++ b/tiles/N6-6c/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "N6-6c",
+ "name": "N6-6c",
+ "description": ""
+}
diff --git a/tiles/N6-6c/tile.svg b/tiles/N6-6c/tile.svg
new file mode 100644
index 00000000..2e9aafef
--- /dev/null
+++ b/tiles/N6-6c/tile.svg
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="66.042435"
+ height="38.332268"
+ viewBox="0 0 66.042435 38.332268"
+ version="1.1"
+ id="svg150"
+ sodipodi:docname="N6-6c.svg"
+ inkscape:version="1.2.2 (1:1.2.2+202212051550+b0a8486541)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs154" />
+ <sodipodi:namedview
+ id="namedview152"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ showgrid="false"
+ inkscape:zoom="14.735686"
+ inkscape:cx="42.10866"
+ inkscape:cy="23.344688"
+ inkscape:current-layer="svg150" />
+ <style
+ type="text/css"
+ id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon
+ class="para"
+ points="-82.453042,27.484347 -82.453042,-27.484347 82.453042,-27.484347 82.453042,27.484347 "
+ style="stroke:none"
+ id="polygon4"
+ transform="matrix(0.39147488,-0.08214267,0.08214267,0.39147488,33.048984,19.619852)" />
+ <path
+ d="m 33.726275,22.847682 5.744799,3.287836"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path6" />
+ <path
+ d="M 39.471074,26.135518 43.263122,14.763459"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path8" />
+ <path
+ d="M 43.263122,14.763459 41.908539,8.3077998"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path10" />
+ <path
+ d="M 41.908539,8.3077998 36.310381,11.072313"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path12" />
+ <path
+ d="m 36.310381,11.072313 -3.938688,5.31971"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path14" />
+ <path
+ d="m 32.371693,16.392023 1.354582,6.455659"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path16" />
+ <path
+ d="m 43.263122,14.763459 5.744799,3.287836"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path18" />
+ <path
+ d="M 49.007921,18.051295 52.799969,6.6792357"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path20" />
+ <path
+ d="m 52.799969,6.6792357 5.744799,3.2878362"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path26" />
+ <path
+ d="M 58.544768,9.9670719 62.336816,-1.4049869"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path28" />
+ <path
+ d="M 2.2955012,33.659702 0.94091861,27.204043"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path36" />
+ <path
+ d="M 0.94091861,27.204043 4.8796081,21.884333"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path40" />
+ <path
+ d="M 4.8796081,21.884333 3.5250255,15.428675"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path42" />
+ <path
+ d="M 4.8796081,21.884333 12.922935,30.77299"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path44" />
+ <path
+ d="m 12.922935,30.77299 1.354583,6.45566"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path46" />
+ <path
+ d="M 8.040301,36.947538 2.2955012,33.659702"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path48" />
+ <path
+ d="m 12.922935,30.77299 3.93869,-5.319709"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path50" />
+ <path
+ d="m 16.861625,25.453281 8.043327,8.888658"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path52" />
+ <path
+ d="m 24.904952,34.341939 3.938689,-5.319711"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path54" />
+ <path
+ d="M 9.7622423,15.709787 3.5250255,15.428675"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path60" />
+ <path
+ d="m 20.389676,12.823075 1.354583,6.45566"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path66" />
+ <path
+ d="M 21.744259,19.278735 15.507042,18.997623"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path68" />
+ <path
+ d="M 15.507042,18.997623 9.7622423,15.709787"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path70" />
+ <path
+ d="m 24.328366,7.5033662 8.043327,8.8886568"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path74" />
+ <path
+ d="M 33.726275,22.847682 27.489059,22.56657"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path76" />
+ <path
+ d="m 27.489059,22.56657 -5.7448,-3.287835"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path78" />
+ <path
+ d="M 28.843641,29.022228 27.489059,22.56657"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path82" />
+ <path
+ d="m 39.471074,26.135518 1.354583,6.455659"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path84" />
+ <path
+ d="M 16.861625,25.453281 15.507042,18.997623"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path90" />
+ <path
+ d="m 57.315244,28.198099 -1.354582,-6.45566"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path112" />
+ <path
+ d="m 55.960662,21.742439 -5.598158,2.764514"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path114" />
+ <path
+ d="m 50.362504,24.506953 c -1.312896,1.773238 -2.625792,3.546473 -3.938689,5.31971"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path116"
+ sodipodi:nodetypes="cc" />
+ <path
+ d="M 65.497508,13.658217 59.89935,16.42273"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path124" />
+ <path
+ d="m 59.89935,16.42273 -3.938688,5.319709"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path126" />
+ <path
+ d="M 58.544768,9.9670719 59.89935,16.42273"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path130" />
+ <path
+ d="M 52.799969,6.6792357 49.007921,18.051295"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path134" />
+ <path
+ d="m 49.007921,18.051295 1.354583,6.455658"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path136" />
+</svg>
diff --git a/tiles/NC5-11a/tile.json b/tiles/NC5-11a/tile.json
new file mode 100644
index 00000000..c4a1a4d2
--- /dev/null
+++ b/tiles/NC5-11a/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "NC5-11a",
+ "name": "NC5-11a",
+ "description": ""
+}
diff --git a/tiles/NC5-11a/tile.svg b/tiles/NC5-11a/tile.svg
new file mode 100644
index 00000000..99592336
--- /dev/null
+++ b/tiles/NC5-11a/tile.svg
@@ -0,0 +1,35 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="26.032589" height="22.524881" viewBox="0 0 26.032589 22.524881" version="1.1" id="svg48" sodipodi:docname="NC5-11a.svg">
+ <defs id="defs52"/>
+ <sodipodi:namedview id="namedview50" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="8.1135331,14.053052 -24.340599,14.053052 -8.1135331,-14.053052 24.340599,-14.053052 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,13.016294,11.262441)"/>
+ <path d="M 13.016294,11.262441 H 25.997947" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 21.670729,7.5149606 H 19.507121" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 19.507121,7.5149606 18.425316,9.3887008" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 18.425316,9.3887008 13.016294,11.262441" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 25.997947,11.262441 19.507121,0.02" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 18.425316,5.6412204 1.081805,1.8737402" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 19.507121,0.02 13.016294,11.262441" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 6.5254675,22.504882 0.03464102,11.262441" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 7.6072719,16.883662 6.5254675,15.009921" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 6.5254675,15.009921 H 4.3618587" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 6.5254675,22.504882 13.016294,11.262441" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="m 13.016294,11.262441 -5.4090221,1.87374" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 7.6072719,13.136181 -1.0818044,1.87374" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 13.016294,11.262441 H 0.03464102" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 13.016294,11.262441 8.6890763,7.5149606" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 13.016294,11.262441 6.5254675,0.02" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 13.016294,11.262441 14.098098,5.6412204" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 19.507121,22.504882 13.016294,11.262441" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 13.016294,11.262441 11.93449,16.883662" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="m 17.343512,15.009921 -4.327218,-3.74748" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/NC5-20a/tile.json b/tiles/NC5-20a/tile.json
new file mode 100644
index 00000000..2605018e
--- /dev/null
+++ b/tiles/NC5-20a/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "NC5-20a",
+ "name": "NC5-20a",
+ "description": ""
+}
diff --git a/tiles/NC5-20a/tile.svg b/tiles/NC5-20a/tile.svg
new file mode 100644
index 00000000..619bcfa3
--- /dev/null
+++ b/tiles/NC5-20a/tile.svg
@@ -0,0 +1,31 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="29.971895" height="29.971895" viewBox="0 0 29.971895 29.971895" version="1.1" id="svg40" sodipodi:docname="NC5-20a.svg">
+ <defs id="defs44"/>
+ <sodipodi:namedview id="namedview42" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-18.732436,-18.732436 -18.732436,18.732436 18.732436,18.732436 18.732436,-18.732436 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,14.985948,14.985948)"/>
+ <path d="M 14.985948,14.985948 H 29.971896" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 22.478922,7.4929738 21.475054,11.239461" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="m 21.475054,11.239461 -6.489106,3.746487" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="m 18.732435,6.4891056 3.746487,1.0038682" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 14.985948,0 V 14.985948" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 11.239461,23.48279 7.4929738,22.478922" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 14.985948,29.971896 V 14.985948" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 14.985948,14.985948 8.496842,18.732435" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 8.496842,18.732435 7.4929738,22.478922" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 14.985948,14.985948 H 0" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 23.48279,18.732435 -1.003868,3.746487" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="m 14.985948,14.985948 3.746487,6.489106" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 18.732435,21.475054 3.746487,1.003868" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 14.985948,14.985948 11.239461,8.496842" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 11.239461,8.496842 7.4929738,7.4929738" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 7.4929738,7.4929738 6.4891056,11.239461" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/P3-1/tile.json b/tiles/P3-1/tile.json
new file mode 100644
index 00000000..520db529
--- /dev/null
+++ b/tiles/P3-1/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "P3-1",
+ "name": "P3-1",
+ "description": ""
+}
diff --git a/tiles/P3-1/tile.svg b/tiles/P3-1/tile.svg
new file mode 100644
index 00000000..0af42603
--- /dev/null
+++ b/tiles/P3-1/tile.svg
@@ -0,0 +1,26 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="26.456692" height="26.225334" viewBox="0 0 26.456692 26.225334" version="1.1" id="svg30" sodipodi:docname="P3-1.svg">
+ <defs id="defs34"/>
+ <sodipodi:namedview id="namedview32" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="64.659565,57.742549 45.761927,90.474218 83.557202,90.474218 102.45484,57.742549 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-18.304771,-16.530686)"/>
+ <path d="m 11.338582,13.112668 h 15.11811" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 18.897637,8.748445 -7.559055,4.364223" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 18.897637,0.02 11.338582,13.112668" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 3.7795272,26.205335 11.338582,13.112668" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 11.338582,13.112668 3.7795272,17.47689" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 18.897637,26.205335 11.338582,13.112668" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 11.338582,13.112668 v 8.728445" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 18.897637,17.47689 11.338582,13.112668" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 11.338582,13.112668 3.7795272,8.748445" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 11.338582,13.112668 3.7795272,0.02" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 11.338582,13.112668 V 4.384222" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/P3-12/tile.json b/tiles/P3-12/tile.json
new file mode 100644
index 00000000..5145ac80
--- /dev/null
+++ b/tiles/P3-12/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "P3-12",
+ "name": "P3-12",
+ "description": ""
+}
diff --git a/tiles/P3-12/tile.svg b/tiles/P3-12/tile.svg
new file mode 100644
index 00000000..3c12e0b0
--- /dev/null
+++ b/tiles/P3-12/tile.svg
@@ -0,0 +1,28 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="25.254175" height="25.334175" viewBox="0 0 25.254175 25.334175" version="1.1" id="svg34" sodipodi:docname="P3-12.svg">
+ <defs id="defs38"/>
+ <sodipodi:namedview id="namedview36" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="77.567774,93.351634 46.000055,93.351634 46.000055,30.216196 77.567774,30.216196 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-12.086478,-12.046478)"/>
+ <path d="M 12.627088,12.667088 H 25.254175" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 20.940566,0.04 12.627088,12.667088" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 20.940566,25.294175 H 8.313478" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="m 8.313478,25.294175 4.31361,-12.627087" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="m 12.627088,12.667088 8.313478,12.627087" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 0,12.667088 H 12.627088" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 12.627088,12.667088 8.313478,25.294175" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="m 8.313478,25.294175 v 0" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="m 8.313478,25.294175 v 0" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 12.627088,12.667088 8.313478,0.04" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 12.627088,12.667088 20.940566,0.04" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="m 8.313478,0.04 v 0" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 20.940566,25.294175 12.627088,12.667088" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/P4-1/tile.json b/tiles/P4-1/tile.json
new file mode 100644
index 00000000..fa1fc31f
--- /dev/null
+++ b/tiles/P4-1/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "P4-1",
+ "name": "P4-1",
+ "description": ""
+}
diff --git a/tiles/P4-1/tile.svg b/tiles/P4-1/tile.svg
new file mode 100644
index 00000000..8d1d072e
--- /dev/null
+++ b/tiles/P4-1/tile.svg
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="51.288441"
+ height="30.236219"
+ viewBox="0 0 51.288441 30.236219"
+ version="1.1"
+ id="svg32"
+ sodipodi:docname="P4-1.svg"
+ inkscape:version="1.2.2 (1:1.2.2+202212051550+b0a8486541)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs36" />
+ <sodipodi:namedview
+ id="namedview34"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ showgrid="false"
+ inkscape:zoom="18.688769"
+ inkscape:cx="25.416334"
+ inkscape:cy="24.720729"
+ inkscape:current-layer="svg32" />
+ <style
+ type="text/css"
+ id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon
+ class="para"
+ points="128.95238,195.54474 224.34182,195.54474 224.34182,157.74946 128.95238,157.74946 "
+ style="stroke:none"
+ id="polygon4"
+ transform="matrix(0.32,0,0,0.32,-31.537485,-41.376566)" />
+ <path
+ d="M 24.989587,15.150506 35.014827,9.3624344"
+ style="stroke:#000000;stroke-width:0.064px"
+ id="path6" />
+ <path
+ d="M 24.989587,9.1032664 V 15.150506"
+ style="stroke:#000000;stroke-width:0.064px"
+ id="path12" />
+ <path
+ d="M 4.4902108,21.456922 14.964347,15.409674"
+ style="stroke:#000000;stroke-width:0.064px"
+ id="path16" />
+ <path
+ d="M 14.964347,15.409674 4.4902108,9.3624344"
+ style="stroke:#000000;stroke-width:0.064px"
+ id="path18" />
+ <path
+ d="m 14.964347,15.409674 10.02524,5.78808"
+ style="stroke:#000000;stroke-width:0.064px"
+ id="path20" />
+ <path
+ d="m 24.989587,15.150506 v 6.047248"
+ style="stroke:#000000;stroke-width:0.064px"
+ id="path26" />
+</svg>
diff --git a/tiles/P4-10/tile.json b/tiles/P4-10/tile.json
new file mode 100644
index 00000000..9cff628e
--- /dev/null
+++ b/tiles/P4-10/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "P4-10",
+ "name": "P4-10",
+ "description": ""
+}
diff --git a/tiles/P4-10/tile.svg b/tiles/P4-10/tile.svg
new file mode 100644
index 00000000..45d5d1db
--- /dev/null
+++ b/tiles/P4-10/tile.svg
@@ -0,0 +1,38 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="59.763741" height="35.747139" viewBox="0 0 59.763741 35.747139" version="1.1" id="svg54" sodipodi:docname="P4-10.svg">
+ <defs id="defs58"/>
+ <sodipodi:namedview id="namedview56" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="59.934268,96.816894 59.934268,133.69952 170.58215,133.69952 170.58215,96.816894 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,-16.22141,-29.966958)"/>
+ <path d="m 29.881876,16.136325 7.74535,-1.36571" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 37.627226,14.770615 6.63887,-1.17062" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 44.266096,13.599995 37.627226,0.01756535" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="m 29.881876,1.3832754 v 7.37652" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 29.881876,8.7597954 V 16.136325" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 44.266096,13.599995 7.74535,-1.36571" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 52.011446,12.234285 V 4.8577554" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="m 59.756796,20.976525 -7.74535,-1.36572" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="m 52.011446,19.610805 v -7.37652" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 7.7522969,12.234285 -7.74535099,1.36571" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 7.7522969,26.987335 v -7.37653" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="m 7.7522969,19.610805 v -7.37652" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 7.7522969,19.610805 7.7453491,1.36572" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="m 15.497646,20.976525 6.63888,1.17061" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="m 22.136526,22.147135 -6.63888,13.58244" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 22.136526,22.147135 7.74535,1.36572" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="m 29.881876,23.512855 v 7.37652" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="m 44.266096,28.353045 -6.63887,-13.58243" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="m 29.881876,16.136325 v 7.37653" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="m 52.011446,26.987335 v -7.37653" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="m 29.881876,8.7597954 -7.74535,-1.36571" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 7.7522969,12.234285 V 4.8577554" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="M 22.136526,7.3940854 15.497646,20.976525" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/P4-15/tile.json b/tiles/P4-15/tile.json
new file mode 100644
index 00000000..9684f913
--- /dev/null
+++ b/tiles/P4-15/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "P4-15",
+ "name": "P4-15",
+ "description": ""
+}
diff --git a/tiles/P4-15/tile.svg b/tiles/P4-15/tile.svg
new file mode 100644
index 00000000..f809c7f9
--- /dev/null
+++ b/tiles/P4-15/tile.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="61.291309"
+ height="65.39518"
+ viewBox="0 0 61.291309 65.39518"
+ version="1.1"
+ id="svg58"
+ sodipodi:docname="P4-15.svg"
+ inkscape:version="1.2.2 (1:1.2.2+202212051550+b0a8486541)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs62" />
+ <sodipodi:namedview
+ id="namedview60"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ showgrid="false"
+ inkscape:zoom="11.605118"
+ inkscape:cx="47.263631"
+ inkscape:cy="36.880281"
+ inkscape:current-layer="svg58" />
+ <style
+ type="text/css"
+ id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon
+ class="para"
+ points="173.36775,221.19252 90.431874,161.35786 140.19992,92.375153 223.1358,152.20981 "
+ style="stroke:none"
+ id="polygon4"
+ transform="matrix(0.4,0,0,0.4,-27.96301,-28.088668)" />
+ <path
+ d="m 34.750522,34.624867 13.49841,6.8081"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path6" />
+ <path
+ d="m 53.109782,23.962217 -11.72239,6.80811"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path12" />
+ <path
+ d="m 41.387392,30.770327 -6.63687,3.85454"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path14" />
+ <path
+ d="m 12.310612,30.770327 c -0.521626,2.504587 -1.043252,5.009174 -1.56488,7.51376"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path22"
+ sodipodi:nodetypes="cc" />
+ <path
+ d="m 12.310612,30.770327 10.71752,10.66264"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path26" />
+ <path
+ d="m 23.028132,41.432967 c 3.391478,3.374112 6.782954,6.748226 10.17443,10.12234"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path28"
+ sodipodi:nodetypes="cc" />
+ <path
+ d="m 41.387392,30.770327 -13.49841,-6.80811"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path34" />
+ <path
+ d="m 27.888982,23.962217 -6.4072,-3.23155 -6.4072,-3.23156"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path36"
+ sodipodi:nodetypes="ccc" />
+ <path
+ d="m 23.028132,41.432967 11.72239,-6.8081"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path40" />
+ <path
+ d="m 27.888982,23.962217 2.76397,-13.27121"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path42" />
+ <path
+ d="M 43.920082,62.217947 33.202562,51.555307"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path48" />
+ <path
+ d="m 48.248932,41.432967 -2.76397,13.27122"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path50" />
+</svg>
diff --git a/tiles/P4-19/tile.json b/tiles/P4-19/tile.json
new file mode 100644
index 00000000..8b87d33e
--- /dev/null
+++ b/tiles/P4-19/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "P4-19",
+ "name": "P4-19",
+ "description": ""
+}
diff --git a/tiles/P4-19/tile.svg b/tiles/P4-19/tile.svg
new file mode 100644
index 00000000..973cda8b
--- /dev/null
+++ b/tiles/P4-19/tile.svg
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="24.728792"
+ height="20.489323"
+ viewBox="0 0 24.728792 20.489323"
+ version="1.1"
+ id="svg3864"
+ sodipodi:docname="P4-19.svg"
+ inkscape:version="1.2.2 (1:1.2.2+202212051550+b0a8486541)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs3868" />
+ <sodipodi:namedview
+ id="namedview3866"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ showgrid="false"
+ inkscape:zoom="29.528948"
+ inkscape:cx="11.564923"
+ inkscape:cy="5.8586578"
+ inkscape:current-layer="svg3864" />
+ <style
+ type="text/css"
+ id="style3834">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon
+ class="para"
+ points="37.227389,78.182165 48.128127,93.750033 99.049371,58.094594 88.148632,42.526727 "
+ style="stroke:none"
+ id="polygon3836"
+ transform="matrix(0.4,0,0,0.4,-14.890956,-17.010691)" />
+ <path
+ d="m 12.364396,10.244661 h 6.626791"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path3838" />
+ <path
+ d="M 23.181591,4.0175142 H 14.630892"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path3840" />
+ <path
+ d="M 14.630892,4.0175142 12.364396,10.244661"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path3842" />
+ <path
+ d="m 2.8130934,18.279689 2.266496,-6.227147"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path3850"
+ sodipodi:nodetypes="cc" />
+ <path
+ d="m 9.439885,18.279689 c 0.974837,-2.678343 1.949674,-5.356685 2.924511,-8.035028"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path3856"
+ sodipodi:nodetypes="cc" />
+ <path
+ d="M 9.4398854,18.279689 H 2.8130934"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path3858" />
+</svg>
diff --git a/tiles/P4-23/tile.json b/tiles/P4-23/tile.json
new file mode 100644
index 00000000..ccd595d3
--- /dev/null
+++ b/tiles/P4-23/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "P4-23",
+ "name": "P4-23",
+ "description": ""
+}
diff --git a/tiles/P4-23/tile.svg b/tiles/P4-23/tile.svg
new file mode 100644
index 00000000..df678b29
--- /dev/null
+++ b/tiles/P4-23/tile.svg
@@ -0,0 +1,39 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="41.212536" height="29.744957" viewBox="0 0 41.212536 29.744957" version="1.1" id="svg56" sodipodi:docname="P4-23.svg">
+ <defs id="defs60"/>
+ <sodipodi:namedview id="namedview58" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-16.071583,-27.836798 -48.214748,27.836798 16.071583,27.836798 48.214748,-27.836798 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,20.606267,14.872478)"/>
+ <path d="M 20.606267,14.872478 H 30.89208" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 30.89208,14.872478 h 5.142906" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 36.034986,14.872478 33.463533,7.449332" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 33.463533,7.449332 25.749174,5.9647028" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 25.749174,5.9647028 20.606267,14.872478" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 41.177893,5.9647028 38.60644,1.5108151" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 38.60644,1.5108151 33.463533,7.449332" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 28.320627,1.5108151 25.749174,5.9647028" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 2.606094,28.234141 0.03464102,23.780253" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 2.606094,28.234141 7.749001,22.295624" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 7.749001,22.295624 5.177548,14.872478" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="m 12.891907,28.234141 2.571454,-4.453888" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 15.463361,23.780253 7.749001,22.295624" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="M 20.606267,14.872478 H 10.320454" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 10.320454,14.872478 H 5.177548" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 15.463361,23.780253 5.142906,-8.907775" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="M 28.320627,28.234141 25.749174,23.780253" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 25.749174,23.780253 20.606267,29.71877" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="M 25.749174,23.780253 20.606267,14.872478" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 33.463533,22.295624 30.89208,14.872478" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 10.320454,14.872478 7.749001,7.449332" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 20.606267,14.872478 15.463361,5.9647028" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="M 15.463361,5.9647028 12.891907,1.5108151" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 15.463361,5.9647028 20.606267,0.02618615" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/P4-24/tile.json b/tiles/P4-24/tile.json
new file mode 100644
index 00000000..1e35a17f
--- /dev/null
+++ b/tiles/P4-24/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "P4-24",
+ "name": "P4-24",
+ "description": ""
+}
diff --git a/tiles/P4-24/tile.svg b/tiles/P4-24/tile.svg
new file mode 100644
index 00000000..d2de4d4b
--- /dev/null
+++ b/tiles/P4-24/tile.svg
@@ -0,0 +1,39 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="44.22591" height="57.452221" viewBox="0 0 44.22591 57.45222" version="1.1" id="svg56" sodipodi:docname="P4-24.svg">
+ <defs id="defs60"/>
+ <sodipodi:namedview id="namedview58" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="23.010704,39.855709 -23.010704,13.285236 -23.010704,-39.855709 23.010704,-13.285236 " style="stroke:none" id="polygon4" transform="matrix(0.6,0,0,0.6,20.24942,25.537654)"/>
+ <path d="m 20.24942,25.537654 h 7.363425" style="stroke:#000000;stroke-width:0.12px" id="path6"/>
+ <path d="M 27.612845,25.537654 22.090277,9.5953704" style="stroke:#000000;stroke-width:0.12px" id="path8"/>
+ <path d="M 22.090277,9.5953704 H 11.045138" style="stroke:#000000;stroke-width:0.12px" id="path10"/>
+ <path d="M 11.045138,9.5953704 16.567707,19.16074" style="stroke:#000000;stroke-width:0.12px" id="path12"/>
+ <path d="m 16.567707,19.16074 3.681713,6.376914" style="stroke:#000000;stroke-width:0.12px" id="path14"/>
+ <path d="M 27.612845,25.537654 H 38.657984" style="stroke:#000000;stroke-width:0.12px" id="path16"/>
+ <path d="m 38.657984,25.537654 -5.52257,-9.565371" style="stroke:#000000;stroke-width:0.12px" id="path18"/>
+ <path d="M 16.567707,19.16074 5.5225691,31.914567" style="stroke:#000000;stroke-width:0.12px" id="path20"/>
+ <path d="m 5.5225691,31.914567 5.5225689,9.565371" style="stroke:#000000;stroke-width:0.12px" id="path22"/>
+ <path d="m 11.045138,41.479938 5.522569,-9.565371" style="stroke:#000000;stroke-width:0.12px" id="path24"/>
+ <path d="M 16.567707,31.914567 20.24942,25.537654" style="stroke:#000000;stroke-width:0.12px" id="path26"/>
+ <path d="M 11.045138,9.5953704 5.5225691,19.16074" style="stroke:#000000;stroke-width:0.12px" id="path28"/>
+ <path d="m 16.567707,31.914567 16.567707,3.188457" style="stroke:#000000;stroke-width:0.12px" id="path30"/>
+ <path d="m 33.135414,35.103024 5.52257,-9.56537" style="stroke:#000000;stroke-width:0.12px" id="path32"/>
+ <path d="m 29.453702,41.479938 3.681712,-6.376914" style="stroke:#000000;stroke-width:0.12px" id="path34"/>
+ <path d="M 11.045138,41.479938 H 22.090277" style="stroke:#000000;stroke-width:0.12px" id="path36"/>
+ <path d="m 22.090277,41.479938 h 7.363425" style="stroke:#000000;stroke-width:0.12px" id="path38"/>
+ <path d="M 5.5225691,0.03 11.045138,9.5953704" style="stroke:#000000;stroke-width:0.12px" id="path40"/>
+ <path d="M 11.045138,9.5953704 16.567707,0.03" style="stroke:#000000;stroke-width:0.12px" id="path42"/>
+ <path d="M 27.612845,57.422221 22.090277,41.479938" style="stroke:#000000;stroke-width:0.12px" id="path44"/>
+ <path d="m 38.657984,57.422221 -5.52257,-9.565369" style="stroke:#000000;stroke-width:0.12px" id="path46"/>
+ <path d="M 33.135414,47.856852 29.453702,41.479938" style="stroke:#000000;stroke-width:0.12px" id="path48"/>
+ <path d="M 44.180553,35.103024 33.135414,47.856852" style="stroke:#000000;stroke-width:0.12px" id="path50"/>
+ <path d="M 0,9.5953704 H 11.045138" style="stroke:#000000;stroke-width:0.12px" id="path52"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/P4-25/tile.json b/tiles/P4-25/tile.json
new file mode 100644
index 00000000..23e04510
--- /dev/null
+++ b/tiles/P4-25/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "P4-25",
+ "name": "P4-25",
+ "description": ""
+}
diff --git a/tiles/P4-25/tile.svg b/tiles/P4-25/tile.svg
new file mode 100644
index 00000000..882ad06e
--- /dev/null
+++ b/tiles/P4-25/tile.svg
@@ -0,0 +1,39 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="42.97826" height="49.599491" viewBox="0 0 42.97826 49.599491" version="1.1" id="svg56" sodipodi:docname="P4-25.svg">
+ <defs id="defs60"/>
+ <sodipodi:namedview id="namedview58" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-26.841545,15.496973 26.841545,46.49092 26.841545,-15.496973 -26.841545,-46.49092 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,21.48913,24.799746)"/>
+ <path d="M 21.48913,24.799746 32.941523,19.840715" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 32.941523,19.840715 31.509974,17.361199" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 22.920679,12.402167 21.48913,24.799746" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 22.920679,12.402167 H 20.057581" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 20.057581,12.402167 H 14.331385" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 14.331385,12.402167 -2.863099,4.959032" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 11.468286,17.361199 21.48913,24.799746" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="m 11.468286,17.361199 -1.431549,2.479516" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 10.036737,29.758778 21.48913,24.799746" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 10.036737,29.758778 1.431549,2.479516" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 20.057581,37.197325 21.48913,24.799746" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="m 20.057581,37.197325 h 2.863098" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 22.920679,37.197325 h 5.726197" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="m 28.646876,37.197325 2.863098,-4.959031" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 31.509974,32.238294 21.48913,24.799746" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="m 31.509974,32.238294 1.431549,-2.479516" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ <path d="m 28.646876,37.197325 2.863098,4.959031" style="stroke:#000000;stroke-width:0.08px" id="path38"/>
+ <path d="M 31.509974,42.156356 42.962366,37.197325" style="stroke:#000000;stroke-width:0.08px" id="path40"/>
+ <path d="m 31.509974,42.156356 1.10945,1.921625" style="stroke:#000000;stroke-width:0.08px" id="path42"/>
+ <path d="M 0.01589439,12.402167 11.468286,7.4431363" style="stroke:#000000;stroke-width:0.08px" id="path44"/>
+ <path d="M 11.468286,7.4431363 10.036737,4.9636203" style="stroke:#000000;stroke-width:0.08px" id="path46"/>
+ <path d="M 14.331385,12.402167 11.468286,7.4431363" style="stroke:#000000;stroke-width:0.08px" id="path48"/>
+ <path d="M 20.057581,12.402167 21.48913,0.00458831" style="stroke:#000000;stroke-width:0.08px" id="path50"/>
+ <path d="M 22.920679,37.197325 21.48913,49.594904" style="stroke:#000000;stroke-width:0.08px" id="path52"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/P4-43-modified/tile.json b/tiles/P4-43-modified/tile.json
new file mode 100644
index 00000000..27c7ce54
--- /dev/null
+++ b/tiles/P4-43-modified/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "P4-43-modified",
+ "name": "P4-43-modified",
+ "description": ""
+}
diff --git a/tiles/P4-43-modified/tile.svg b/tiles/P4-43-modified/tile.svg
new file mode 100644
index 00000000..477106ca
--- /dev/null
+++ b/tiles/P4-43-modified/tile.svg
@@ -0,0 +1,30 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="20.988546" height="21.047535" viewBox="0 0 20.988547 21.047535" version="1.1" id="svg38" sodipodi:docname="P4-43-mod.svg">
+ <defs id="defs42"/>
+ <sodipodi:namedview id="namedview40" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="19.688364,4.8585144 1.4855265,-12.986409 -19.688364,-4.8585144 -1.4855265,12.986409 " style="stroke:none" id="polygon4" transform="matrix(0.48,0,0,0.48,11.538132,8.5730723)"/>
+ <path d="m 11.538132,8.5730723 h 7.380711" style="stroke:#000000;stroke-width:0.096px" id="path6"/>
+ <path d="M 10.18148,0.00750885 11.538132,8.5730723" style="stroke:#000000;stroke-width:0.096px" id="path8"/>
+ <path d="M 0.01801346,3.9088985 11.538132,8.5730723" style="stroke:#000000;stroke-width:0.096px" id="path10"/>
+ <path d="M 11.538132,8.5730723 10.18148,0.00750885" style="stroke:#000000;stroke-width:0.096px" id="path12"/>
+ <path d="M 1.3746649,12.474462 H 8.755375" style="stroke:#000000;stroke-width:0.096px" id="path14"/>
+ <path d="M 8.755375,12.474462 11.538132,8.5730723" style="stroke:#000000;stroke-width:0.096px" id="path16"/>
+ <path d="M 11.538132,8.5730723 0.01801346,3.9088985" style="stroke:#000000;stroke-width:0.096px" id="path18"/>
+ <path d="M 18.918843,8.5730723 H 11.538132" style="stroke:#000000;stroke-width:0.096px" id="path20"/>
+ <path d="m 8.755375,12.474462 11.520119,4.664173" style="stroke:#000000;stroke-width:0.096px" id="path22"/>
+ <path d="M 20.275494,17.138635 18.918843,8.5730723" style="stroke:#000000;stroke-width:0.096px" id="path24"/>
+ <path d="M 8.755375,12.474462 H 1.3746649" style="stroke:#000000;stroke-width:0.096px" id="path26"/>
+ <path d="M 10.112027,21.040025 8.755375,12.474462" style="stroke:#000000;stroke-width:0.096px" id="path28"/>
+ <path d="M 20.275494,17.138635 8.755375,12.474462" style="stroke:#000000;stroke-width:0.096px" id="path30"/>
+ <path d="m 8.755375,12.474462 1.356652,8.565563" style="stroke:#000000;stroke-width:0.096px" id="path32"/>
+ <path d="m 18.918843,8.5730723 1.356651,8.5655627" style="stroke:#000000;stroke-width:0.096px" id="path34"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/P4-43/tile.json b/tiles/P4-43/tile.json
new file mode 100644
index 00000000..3af1b93d
--- /dev/null
+++ b/tiles/P4-43/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "P4-43",
+ "name": "P4-43",
+ "description": ""
+}
diff --git a/tiles/P4-43/tile.svg b/tiles/P4-43/tile.svg
new file mode 100644
index 00000000..18e260b3
--- /dev/null
+++ b/tiles/P4-43/tile.svg
@@ -0,0 +1,23 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="18.509253" height="16.357939" viewBox="0 0 18.509253 16.357939" version="1.1" id="svg24" sodipodi:docname="P4-43.svg">
+ <defs id="defs28"/>
+ <sodipodi:namedview id="namedview26" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-1.7676951,-19.304817 -12.76612,2.2510114 1.7676951,19.304817 12.76612,-2.2510114 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,10.212896,7.7219268)"/>
+ <path d="m 10.212896,7.7219268 h 8.296357" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 12.695727,0.90040437 10.212896,7.7219268" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 0,9.522736 H 8.2963569" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 8.2963569,9.522736 10.212896,7.7219268" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 10.212896,7.7219268 2.4828309,2.7012135" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 8.2963569,9.522736 7.7300651,5.020713" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 8.2963569,9.522736 5.8135258,16.344258" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 4.3993698,0.90040437 H 12.695727" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/P4-47/tile.json b/tiles/P4-47/tile.json
new file mode 100644
index 00000000..27acc39e
--- /dev/null
+++ b/tiles/P4-47/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "P4-47",
+ "name": "P4-47",
+ "description": ""
+}
diff --git a/tiles/P4-47/tile.svg b/tiles/P4-47/tile.svg
new file mode 100644
index 00000000..7d7df082
--- /dev/null
+++ b/tiles/P4-47/tile.svg
@@ -0,0 +1,26 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="19.109213" height="20.397865" viewBox="0 0 19.109213 20.397865" version="1.1" id="svg30" sodipodi:docname="P4-47.svg">
+ <defs id="defs34"/>
+ <sodipodi:namedview id="namedview32" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-14.488158,-21.765483 -14.488158,21.765483 14.488158,21.765483 14.488158,-21.765483 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,7.5041737,11.654397)"/>
+ <path d="m 7.5041737,11.654397 5.7952633,5.795264" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 19.0947,11.654397 11.61881,8.7434674" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 11.61881,8.7434674 7.5041737,11.654397" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 17.414074,2.9482041 11.61881,8.7434674" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 13.299437,0.03727405 5.8235474,2.9482041" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 11.61881,8.7434674 5.8235474,2.9482041" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 1.7089106,17.449661 7.5041737,11.654397" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 7.5041737,11.654397 0.02828427,8.7434674" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 5.8235474,2.9482041 0.02828427,8.7434674" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 13.299437,17.449661 -7.4758896,2.91093" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 5.8235474,20.360591 1.7089106,17.449661" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/P5-10_11/tile.json b/tiles/P5-10_11/tile.json
new file mode 100644
index 00000000..f52691af
--- /dev/null
+++ b/tiles/P5-10_11/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "P5-10_11",
+ "name": "P5-10_11",
+ "description": ""
+}
diff --git a/tiles/P5-10_11/tile.svg b/tiles/P5-10_11/tile.svg
new file mode 100644
index 00000000..8b578c95
--- /dev/null
+++ b/tiles/P5-10_11/tile.svg
@@ -0,0 +1,29 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="26.091629" height="28.257685" viewBox="0 0 26.091629 28.257685" version="1.1" id="svg36" sodipodi:docname="P5-10_11-awesome.svg">
+ <defs id="defs40"/>
+ <sodipodi:namedview id="namedview38" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-32.614537,-10.597105 -10.597105,32.614537 32.614537,10.597105 10.597105,-32.614537 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,13.045815,13.045815)"/>
+ <path d="M 13.045815,13.045815 18.488823,7.6028064" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 18.488823,7.6028064 13.045815,2.1597981" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 13.045815,2.1597981 5.4430085,3.3639643" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 5.4430085,3.3639643 6.6471747,10.966771" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="m 6.6471747,10.966771 6.3986403,2.079044" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 23.931832,2.1597981 18.488823,7.6028064" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 21.852787,19.444455 -7.602806,1.204166" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 14.249981,20.648621 13.045815,13.045815" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="m 18.488823,7.6028064 5.443009,5.4430086" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="m 23.931832,13.045815 -2.079045,6.39864" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 6.6471747,21.852787 14.249981,20.648621" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="m 14.249981,20.648621 1.204166,7.602806" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 6.6471747,10.966771 1.2041668,16.409779" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="m 1.2041668,16.409779 5.4430079,5.443008" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/P5-19/tile.json b/tiles/P5-19/tile.json
new file mode 100644
index 00000000..0041446f
--- /dev/null
+++ b/tiles/P5-19/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "P5-19",
+ "name": "P5-19",
+ "description": ""
+}
diff --git a/tiles/P5-19/tile.svg b/tiles/P5-19/tile.svg
new file mode 100644
index 00000000..25898245
--- /dev/null
+++ b/tiles/P5-19/tile.svg
@@ -0,0 +1,31 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="20.302076" height="34.333843" viewBox="0 0 20.302076 34.333843" version="1.1" id="svg40" sodipodi:docname="P5-19.svg">
+ <defs id="defs44"/>
+ <sodipodi:namedview id="namedview42" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-11.66201,-42.817305 -11.66201,42.817305 11.66201,42.817305 11.66201,-42.817305 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,10.972468,17.166922)"/>
+ <path d="m 10.972468,17.166922 h 9.329608" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="M 17.669572,9.9341771 11.962112,7.2727448" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 11.962112,7.2727448 8.3399642,9.9341771" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 8.3399642,9.9341771 10.972468,17.166922" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 18.659216,0.04 H 9.3296082" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 9.3296082,0.04 11.962112,7.2727448" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 9.3296082,34.293844 H 0" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 2.6325043,27.061099 8.3399642,24.399667" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="m 8.3399642,24.399667 3.6221478,2.661432" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 11.962112,27.061099 9.3296082,34.293844" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 1.64286,17.166922 h 9.329608" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 10.972468,17.166922 8.3399642,24.399667" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="M 18.659216,34.293844 H 9.3296082" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ <path d="m 11.962112,27.061099 5.70746,-2.661432" style="stroke:#000000;stroke-width:0.08px" id="path32"/>
+ <path d="M 8.3399642,9.9341771 2.6325043,7.2727448" style="stroke:#000000;stroke-width:0.08px" id="path34"/>
+ <path d="M 9.3296082,0.04 H 0" style="stroke:#000000;stroke-width:0.08px" id="path36"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/P5-23_24/tile.json b/tiles/P5-23_24/tile.json
new file mode 100644
index 00000000..20af6e96
--- /dev/null
+++ b/tiles/P5-23_24/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "P5-23_24",
+ "name": "P5-23_24",
+ "description": ""
+}
diff --git a/tiles/P5-23_24/tile.svg b/tiles/P5-23_24/tile.svg
new file mode 100644
index 00000000..8b16cc87
--- /dev/null
+++ b/tiles/P5-23_24/tile.svg
@@ -0,0 +1,27 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="24.326986" height="24.326986" viewBox="0 0 24.326986 24.326986" version="1.1" id="svg32" sodipodi:docname="P5-23_24.svg">
+ <defs id="defs36"/>
+ <sodipodi:namedview id="namedview34" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="28.10088,-13.846543 -13.846543,-28.10088 -28.10088,13.846543 13.846543,28.10088 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,12.163493,12.163493)"/>
+ <path d="M 12.163493,7.5238074 V 12.163493" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 12.163493,12.163493 h 4.639685" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 16.803178,12.163493 23.403845,6.6248757" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 17.865228,0.02420882 12.163493,7.5238074" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 7.5238074,12.163493 H 12.163493" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="M 12.163493,7.5238074 6.6248757,0.92314082" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 0.02420882,6.4617577 7.5238074,12.163493" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 12.163493,16.803178 V 12.163493" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="M 7.5238074,12.163493 0.92314082,17.70211" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 6.4617577,24.302777 12.163493,16.803178" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 12.163493,16.803178 5.538617,6.600667" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 24.302777,17.865228 16.803178,12.163493" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/P5-4/tile.json b/tiles/P5-4/tile.json
new file mode 100644
index 00000000..17e8a0ae
--- /dev/null
+++ b/tiles/P5-4/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "P5-4",
+ "name": "P5-4",
+ "description": ""
+}
diff --git a/tiles/P5-4/tile.svg b/tiles/P5-4/tile.svg
new file mode 100644
index 00000000..d412c436
--- /dev/null
+++ b/tiles/P5-4/tile.svg
@@ -0,0 +1,26 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="25.742979" height="24.349096" viewBox="0 0 25.742979 24.349096" version="1.1" id="svg30" sodipodi:docname="P5-4.svg">
+ <defs id="defs34"/>
+ <sodipodi:namedview id="namedview32" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-27.388346,-15.748838 -27.388346,15.552129 27.388346,15.748838 27.388346,-15.552129 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,14.436538,14.200804)"/>
+ <path d="M 14.436538,14.200804 21.94877,12.611273" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 21.94877,12.611273 1.553009,-0.328605" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="m 23.501779,12.282668 2.203107,-0.466161" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 25.704886,11.816507 21.94877,0.09088657" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 14.436538,1.6804176 11.306441,10.148293" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 11.306441,10.148293 3.130097,4.052511" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="M 11.306441,10.148293 3.7942093,11.737824" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="M 3.7942093,11.737824 0.03809327,12.532589" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="m 11.306441,22.668679 3.130097,-8.467875" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 25.704886,24.336894 21.94877,12.611273" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="M 3.7942093,11.737824 0.03809327,0.01220257" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/P6-6_11/tile.json b/tiles/P6-6_11/tile.json
new file mode 100644
index 00000000..0508dbc1
--- /dev/null
+++ b/tiles/P6-6_11/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "P6-6_11",
+ "name": "P6-6_11",
+ "description": ""
+}
diff --git a/tiles/P6-6_11/tile.svg b/tiles/P6-6_11/tile.svg
new file mode 100644
index 00000000..580f2324
--- /dev/null
+++ b/tiles/P6-6_11/tile.svg
@@ -0,0 +1,28 @@
+<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="31.527611" height="34.398746" viewBox="0 0 31.527611 34.398746" version="1.1" id="svg34" sodipodi:docname="P6-6_11.svg">
+ <defs id="defs38"/>
+ <sodipodi:namedview id="namedview36" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <style type="text/css" id="style2">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon class="para" points="-18.740178,14.760338 -25.565655,-32.45894 18.740178,-14.760338 25.565655,32.45894 " style="stroke:none" id="polygon4" transform="matrix(0.4,0,0,0.4,13.793671,15.501947)"/>
+ <path d="m 13.793671,15.501947 1.965318,1.134677" style="stroke:#000000;stroke-width:0.08px" id="path6"/>
+ <path d="m 15.758989,16.636624 1.965318,-1.134677" style="stroke:#000000;stroke-width:0.08px" id="path8"/>
+ <path d="M 17.724307,15.501947 19.846306,6.40463" style="stroke:#000000;stroke-width:0.08px" id="path10"/>
+ <path d="M 13.028798,0.01826651 8.9414809,7.9809063" style="stroke:#000000;stroke-width:0.08px" id="path12"/>
+ <path d="M 8.9414809,7.9809063 13.793671,15.501947" style="stroke:#000000;stroke-width:0.08px" id="path14"/>
+ <path d="m 15.758989,16.636624 v 2.269353" style="stroke:#000000;stroke-width:0.08px" id="path16"/>
+ <path d="m 15.758989,18.905977 6.817508,6.386365" style="stroke:#000000;stroke-width:0.08px" id="path18"/>
+ <path d="m 22.576497,25.292342 8.939507,-2.710954" style="stroke:#000000;stroke-width:0.08px" id="path20"/>
+ <path d="m 26.663814,15.060347 -8.939507,0.4416" style="stroke:#000000;stroke-width:0.08px" id="path22"/>
+ <path d="M 13.793671,15.501947 4.8541637,18.2129" style="stroke:#000000;stroke-width:0.08px" id="path24"/>
+ <path d="m 11.671672,26.868618 4.087317,-7.962641" style="stroke:#000000;stroke-width:0.08px" id="path26"/>
+ <path d="M 0.00197354,8.4225059 8.9414809,7.9809063" style="stroke:#000000;stroke-width:0.08px" id="path28"/>
+ <path d="m 20.454497,34.389659 2.122,-9.097317" style="stroke:#000000;stroke-width:0.08px" id="path30"/>
+ </svg> \ No newline at end of file
diff --git a/tiles/diamond-square/tile.json b/tiles/diamond-square/tile.json
new file mode 100644
index 00000000..79638133
--- /dev/null
+++ b/tiles/diamond-square/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "diamond-square",
+ "name": "diamonds and squares",
+ "description": ""
+}
diff --git a/tiles/diamond-square/tile.svg b/tiles/diamond-square/tile.svg
new file mode 100644
index 00000000..e6e70cbc
--- /dev/null
+++ b/tiles/diamond-square/tile.svg
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="6mm"
+ height="6mm"
+ viewBox="0 0 22.677165 22.677165"
+ id="svg8375"
+ version="1.1"
+ inkscape:version="1.2.2 (1:1.2.2+202212051550+b0a8486541)"
+ sodipodi:docname="diamond_square.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs
+ id="defs8377" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.288979"
+ inkscape:cx="15.276609"
+ inkscape:cy="14.760658"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="mm"
+ inkscape:window-width="1366"
+ inkscape:window-height="705"
+ inkscape:window-x="-4"
+ inkscape:window-y="-4"
+ inkscape:window-maximized="1"
+ inkscape:showpageshadow="2"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:lockguides="true"
+ showguides="true">
+ <sodipodi:guide
+ position="-4.4865223,26.832968"
+ orientation="0,-1"
+ id="guide292504"
+ inkscape:locked="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8380">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-16.731287,-16.731287)">
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.302362;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
+ d="m 16.731287,16.731287 h 7.559055"
+ id="path315"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.302362;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
+ d="m 16.731287,24.290342 h 7.559055"
+ id="path315-3"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.302362;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
+ d="m 24.290342,16.731287 v 7.559055"
+ id="path1017"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.302362;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
+ d="m 16.731287,16.731287 v 7.559055"
+ id="path1095"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.302362;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
+ d="m 28.06987,28.06987 h 7.559055"
+ id="path315-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.302362;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
+ d="m 28.06987,35.628925 h 7.559055"
+ id="path315-3-7"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.302362;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
+ d="m 35.628925,28.06987 v 7.559055"
+ id="path1017-5"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.302362;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
+ d="m 28.06987,28.06987 v 7.559055"
+ id="path1095-3"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.302362;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
+ d="M 24.290342,24.290342 28.06987,28.06987"
+ id="path1097"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.302362;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
+ d="m 28.06987,35.628925 -3.779528,3.779528"
+ id="path1192"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.302362;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
+ d="m 35.628925,35.628925 3.779528,3.779528"
+ id="path1539"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.302362;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
+ d="m 35.628925,28.06987 3.779528,-3.779528"
+ id="path1541"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/tiles/hexagon/tile.json b/tiles/hexagon/tile.json
new file mode 100644
index 00000000..30728c29
--- /dev/null
+++ b/tiles/hexagon/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "hexagon",
+ "name": "hexagonal lattice",
+ "description": ""
+}
diff --git a/tiles/hexagon/tile.svg b/tiles/hexagon/tile.svg
new file mode 100644
index 00000000..e5093ae7
--- /dev/null
+++ b/tiles/hexagon/tile.svg
@@ -0,0 +1,27 @@
+<!-- Created with Inkscape (http://www.inkscape.org/) --><svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" width="6.0310545mm" height="7.9648633mm" viewBox="0 0 22.794537 30.103419" id="svg8375" version="1.1" inkscape:version="1.2 (1:1.2.1+202207142221+cd75a1ee6d)" sodipodi:docname="hexagon.svg">
+ <defs id="defs8377"/>
+ <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="4.8626851" inkscape:cx="51.103453" inkscape:cy="71.771047" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false" units="mm" inkscape:window-width="1366" inkscape:window-height="705" inkscape:window-x="-4" inkscape:window-y="-4" inkscape:window-maximized="1" inkscape:showpageshadow="2" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1"/>
+ <metadata id="metadata8380">
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(-1.3803519,6.520392)">
+ <path id="rect113598" style="fill:#d70000;fill-opacity:0.356114;stroke-width:0.200314;stroke-dasharray:0.200314, 0.200314;stop-color:#000000" d="M 1.4977239,-2.6542115 H 24.174889 V 23.531111 H 1.4977239 Z" sodipodi:nodetypes="ccccc" class="para"/>
+ <path style="display:inline;vector-effect:none;fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.207664" d="M 5.2772513,10.438828 1.4977239,3.8919301" id="path463"/>
+ <path style="display:inline;vector-effect:none;fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.207664" d="M 12.836306,10.438828 H 5.2772513" id="path461"/>
+ <path style="display:inline;vector-effect:none;fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.207664" d="M 16.615834,3.8919301 12.836306,10.438828" id="path58963"/>
+ <path style="display:inline;vector-effect:none;fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.207664" d="M 5.2772513,-2.6542115 1.4977239,3.8919301" id="path457"/>
+ <path style="display:inline;vector-effect:none;fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.207664" d="M 12.836306,-2.6542115 H 5.2772513" id="path455"/>
+ <path style="display:inline;vector-effect:none;fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.207664" d="M 16.615834,3.8919301 12.836306,-2.6542115" id="path453" sodipodi:nodetypes="cc"/>
+ <path style="display:inline;vector-effect:none;fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.207664" d="M 24.174889,3.8919301 H 16.615834" id="path58961" sodipodi:nodetypes="cc"/>
+ <path style="display:inline;vector-effect:none;fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.207664" d="m 16.615834,16.984969 h 7.559055" id="path449"/>
+ <path style="display:inline;vector-effect:none;fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.207664" d="m 12.836306,10.438828 3.779528,6.546141" id="path58542"/>
+ <path style="display:inline;vector-effect:none;fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.207664" d="m 1.4977239,16.984969 3.7795274,6.546142" id="path445" sodipodi:nodetypes="cc"/>
+ <path style="display:inline;vector-effect:none;fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.207664" d="M 5.2772513,10.438828 1.4977239,16.984969" id="path58987"/>
+ <path style="display:inline;vector-effect:none;fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:0.207664" d="m 12.836306,23.531111 3.779528,-6.546142" id="path58981"/>
+ </g>
+</svg> \ No newline at end of file
diff --git a/tiles/weird-one/tile.json b/tiles/weird-one/tile.json
new file mode 100644
index 00000000..2445a7ec
--- /dev/null
+++ b/tiles/weird-one/tile.json
@@ -0,0 +1,5 @@
+{
+ "id": "weird-one",
+ "name": "weird one",
+ "description": ""
+}
diff --git a/tiles/weird-one/tile.svg b/tiles/weird-one/tile.svg
new file mode 100644
index 00000000..768d3ebe
--- /dev/null
+++ b/tiles/weird-one/tile.svg
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="26.671131"
+ height="26.917355"
+ viewBox="0 0 26.671132 26.917354"
+ version="1.1"
+ id="svg1847"
+ sodipodi:docname="weird_one.svg"
+ inkscape:version="1.2.2 (1:1.2.2+202212051550+b0a8486541)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs1851" />
+ <sodipodi:namedview
+ id="namedview1849"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ showgrid="false"
+ inkscape:zoom="35.660667"
+ inkscape:cx="11.847787"
+ inkscape:cy="9.5903984"
+ inkscape:current-layer="svg1847" />
+ <style
+ type="text/css"
+ id="style1805">
+polygon.tile { stroke: #000000; stroke-width:3; stroke-linejoin:round }
+polygon.ih1 { fill: #ffff80 }
+polygon.ih2 { fill: #8080ff }
+polygon.ih3 { fill: #ff8080 }
+polygon.ih4 { fill: #80ff80 }
+polygon.ih5 { fill: #ff80ff }
+polygon.ih6 { fill: #80ffff }
+polygon.para {opacity: 0.75; fill: #ff0000; stroke: #ff0000 }
+</style>
+ <polygon
+ class="para"
+ points="56.697636,16.653274 20.760388,31.028173 40.611439,80.655801 76.548687,66.280902 "
+ style="stroke:none"
+ id="polygon1807"
+ transform="matrix(0.4,0,0,0.4,-6.7021753,-5.3449652)" />
+ <path
+ d="m 12.759638,14.116849 h 5.955317"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path1809" />
+ <path
+ d="M 18.714955,14.116849 V 8.1615348"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path1811" />
+ <path
+ d="M 18.714955,0.22111277 12.759638,14.116849"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path1813" />
+ <path
+ d="m 12.759638,14.116849 13.895736,5.955315"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path1815" />
+ <path
+ d="M 22.342906,24.179278 18.235793,19.866809"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path1817" />
+ <path
+ d="m 18.235793,19.866809 c -1.825386,-1.916652 -3.65077,-3.833306 -5.476155,-5.74996"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path1819"
+ sodipodi:nodetypes="cc" />
+ <path
+ d="M 4.3400562,5.9710728 V 13.911493"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path1823" />
+ <path
+ d="M 4.3400562,13.911493 10.29537,0.01575677"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path1825" />
+ <path
+ d="M 4.3400562,19.866809 H 12.280476"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path1827" />
+ <path
+ d="m 12.280476,19.866809 h 5.955317"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path1829" />
+ <path
+ d="M 18.235793,19.866809 4.3400562,13.911493"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path1831" />
+ <path
+ d="m 12.280476,19.866809 v 5.955315"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path1833" />
+ <path
+ d="M 4.3400562,13.911493 8.6525242,9.8043788"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path1835" />
+ <path
+ d="M 8.6525242,9.8043788 12.759638,14.116849"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path1837" />
+ <path
+ d="M 8.6525242,9.8043788 C 12.222946,6.4039774 15.110478,3.653947 18.714955,0.22111277"
+ style="stroke:#000000;stroke-width:0.08px"
+ id="path1839"
+ sodipodi:nodetypes="cc" />
+</svg>