From 045de4aa3009b3631d45fab910349eca3fe89ef2 Mon Sep 17 00:00:00 2001
From: Paul McCarthy <pauld.mccarthy@gmail.com>
Date: Mon, 10 Apr 2017 18:20:11 +0100
Subject: [PATCH] Mesh and imagewrapper.naninfrange unit tests

---
 tests/test_imagewrapper.py        |   41 +
 tests/test_mesh.py                |  133 ++
 tests/testdata/test_mesh.vtk      | 1928 +++++++++++++++++++++++++++++
 tests/testdata/test_mesh_data.txt |  642 ++++++++++
 4 files changed, 2744 insertions(+)
 create mode 100644 tests/test_mesh.py
 create mode 100755 tests/testdata/test_mesh.vtk
 create mode 100644 tests/testdata/test_mesh_data.txt

diff --git a/tests/test_imagewrapper.py b/tests/test_imagewrapper.py
index 8e1151929..f733ff4a2 100644
--- a/tests/test_imagewrapper.py
+++ b/tests/test_imagewrapper.py
@@ -286,6 +286,47 @@ def test_sliceTupleToSliceObj():
             assert func(slices) == sliceobj
 
 
+def test_naninfrange():
+    # numinf, numnan, expectedResult
+    tests = [( 0,     0,    (0,      100)),
+             ( 0,     1,    (0,      100)),
+             ( 1,     0,    (0,      100)),
+             ( 1,     1,    (0,      100)),
+             ( 5,     5,    (0,      100)),
+             ( 0,    'all', (np.nan, np.nan)),
+             ('all',  0,    (np.nan, np.nan))]
+
+    # Test non floating point data as wll
+    data = np.linspace(0, 100, 100, dtype=np.uint32)
+    assert imagewrap.naninfrange(data) == (0, 100)
+
+    for numinf, numnan, expected in tests:
+        
+        data   = np.linspace(0, 100, 100)
+
+        if   numinf == 'all': data[:] = np.inf
+        elif numnan == 'all': data[:] = np.nan
+
+        nanoff = 1
+        if numinf != 'all':
+            for i in range(1, numinf + 1):
+                data[i] = np.inf
+            nanoff += numinf
+
+        if numnan != 'all':
+            for i in range(nanoff, numnan + nanoff):
+                data[i] = np.nan
+        
+        result = imagewrap.naninfrange(data)
+
+        if   np.isfinite(expected[0]): assert result[0] == expected[0]
+        elif np.isnan(   expected[0]): assert np.isnan(result[0])
+        elif np.isinf(   expected[0]): assert np.isinf(result[0])
+        if   np.isfinite(expected[1]): assert result[1] == expected[1]
+        elif np.isnan(   expected[1]): assert np.isnan(result[1])
+        elif np.isinf(   expected[1]): assert np.isinf(result[1]) 
+
+
 def test_adjustCoverage():
 
     # TODO Randomise
diff --git a/tests/test_mesh.py b/tests/test_mesh.py
new file mode 100644
index 000000000..c2d234fb1
--- /dev/null
+++ b/tests/test_mesh.py
@@ -0,0 +1,133 @@
+#!/usr/bin/env python
+#
+# test_mesh.py -
+#
+# Author: Paul McCarthy <pauldmccarthy@gmail.com>
+#
+
+
+import os.path as op
+import            shutil
+import            tempfile
+
+import numpy   as np
+import            pytest
+
+import fsl.data.mesh as fslmesh
+
+
+datadir = op.join(op.dirname(__file__), 'testdata')
+
+
+def test_create_mesh():
+
+    # Test:
+    #  - create from file
+    #  - create from inmem data
+    testbase = 'test_mesh.vtk'
+    testfile = op.join(datadir, testbase)
+    
+    verts, lens, indices = fslmesh.loadVTKPolydataFile(testfile) 
+
+    mesh1 = fslmesh.TriangleMesh(testfile)
+    mesh2 = fslmesh.TriangleMesh(verts, indices)
+
+    assert mesh1.name       == testbase
+    assert mesh2.name       == 'TriangleMesh'
+    assert mesh1.dataSource == testfile
+    assert mesh2.dataSource is None
+    
+    assert mesh1.vertices.shape == (642,  3)
+    assert mesh2.vertices.shape == (642,  3) 
+    assert mesh1.indices.shape  == (1280, 3)
+    assert mesh2.indices.shape  == (1280, 3)
+
+    minbounds = np.array([ 59.50759888,  88.43039703,  72.10890198])
+    maxbounds = np.array([ 77.72619629, 128.40600586,  94.82050323])
+
+    mesh1Bounds = mesh1.getBounds()
+    mesh2Bounds = mesh2.getBounds()
+
+    assert np.all(np.isclose(mesh1Bounds[0], minbounds))
+    assert np.all(np.isclose(mesh1Bounds[1], maxbounds))
+    assert np.all(np.isclose(mesh2Bounds[0], minbounds))
+    assert np.all(np.isclose(mesh2Bounds[1], maxbounds))
+
+
+def test_mesh_loadVertexData():
+
+    meshfile = op.join(datadir, 'test_mesh.vtk')
+    datafile = op.join(datadir, 'test_mesh_data.txt')
+    memdata  = np.random.randint(1, 100, 642)
+    mesh     = fslmesh.TriangleMesh(meshfile)
+
+    assert mesh.loadVertexData(datafile).shape == (642,)
+    assert np.all(mesh.loadVertexData('inmemdata', memdata) == memdata)
+
+    assert mesh.getVertexData(datafile).shape == (642,)
+    assert np.all(mesh.getVertexData('inmemdata') == memdata)
+
+    mesh.clearVertexData()
+    
+    assert mesh.getVertexData(datafile).shape == (642,)
+    assert np.all(mesh.loadVertexData('inmemdata', memdata) == memdata)
+
+
+def test_loadVTKPolydataFile():
+
+    testfile = op.join(datadir, 'test_mesh.vtk')
+    verts, lens, indices = fslmesh.loadVTKPolydataFile(testfile)
+
+    assert verts.shape   == (642, 3)
+    assert indices.shape == (3840, )
+    assert lens.shape    == (1280, )
+    assert np.all(lens == 3)
+
+
+def test_getFIRSTPrefix():
+
+    failures = [
+        'blob.txt',
+        'blob.vtk',
+        'blob.nii.gz']
+
+    passes = [
+        ('blurgh-L_Thal_first.vtk', 'blurgh'),
+        ('blurgh-L_Accu_first.vtk', 'blurgh'),
+        ('blurgh_bufuu-R_Hipp_first.vtk', 'blurgh_bufuu'),
+    ]
+
+    for f in failures:
+        with pytest.raises(ValueError):
+            fslmesh.getFIRSTPrefix(f)
+
+    for fname, expected in passes:
+        assert fslmesh.getFIRSTPrefix(fname) == expected
+            
+
+
+def test_findReferenceImage():
+
+    testdir  = tempfile.mkdtemp()
+    vtkfiles = ['struc-L_Thal_first.vtk',
+                'struc_first-L_Thal_first.vtk']
+
+    assert fslmesh.findReferenceImage('nofile') is None
+
+    try:
+
+        for fname in vtkfiles:
+
+            assert fslmesh.findReferenceImage(fname) is None
+
+            prefix   = fslmesh.getFIRSTPrefix(fname)
+            imgfname = op.join(testdir, '{}.nii.gz'.format(prefix))
+            fname    = op.join(testdir, fname)
+                
+            with open(fname,    'wt') as f: f.write(fname)
+            with open(imgfname, 'wt') as f: f.write(imgfname)
+
+            assert fslmesh.findReferenceImage(fname) == imgfname
+    
+    finally:
+        shutil.rmtree(testdir)
diff --git a/tests/testdata/test_mesh.vtk b/tests/testdata/test_mesh.vtk
new file mode 100755
index 000000000..72ff53830
--- /dev/null
+++ b/tests/testdata/test_mesh.vtk
@@ -0,0 +1,1928 @@
+# vtk DataFile Version 3.0
+this file was written using fslvtkio
+ASCII
+DATASET POLYDATA
+POINTS 642 float
+71.4026 114.588 85.3619
+65.0277 121.495 81.0363
+60.5684 104.217 80.6755
+65.809 100.084 85.3136
+67.0109 106.79 93.6355
+68.3017 110.158 78.8387
+66.3277 111.978 75.8676
+61.7368 111.402 89.0418
+68.8636 123.784 89.5841
+60.799 94.242 88.009
+62.8903 93.8018 75.4332
+75.8056 123.59 77.2233
+64.7878 118.658 90.3743
+68.0854 115.955 93.2327
+63.2594 109.035 93.5291
+60.7288 102.626 89.2006
+63.4681 98.6916 93.1567
+72.0768 119.761 74.4477
+67.8463 110.251 76.2694
+76.5715 116.17 75.5226
+63.1138 100.594 72.9141
+65.2061 100.383 77.1748
+66.9214 101.436 89.9874
+70.6985 111.12 90.43
+68.1577 107.984 85.4982
+64.9449 104.084 81.5215
+70.6938 114.266 80.9331
+62.9755 117.665 85.4428
+60.549 107.371 84.982
+62.5631 113.558 80.5373
+66.833 119.041 77.1435
+62.4468 106.527 77.1025
+75.2515 119.787 81.0367
+71.6586 119.789 87.5857
+72.1819 126.663 83.0591
+70.2257 126.251 78.268
+66.7485 125.537 85.103
+64.4689 94.6955 81.3571
+61.3638 89.3881 81.7056
+63.8816 92.5281 87.6291
+60.7158 96.6234 77.5998
+59.6963 97.6394 83.5192
+65.9944 118.032 92.9504
+65.3383 113.059 94.5792
+63.8066 114.164 92.4699
+64.9992 107.831 94.8205
+67.5128 111.448 93.8386
+68.5546 120.22 91.6522
+66.4078 122.162 90.6232
+63.042 115.159 89.9512
+62.3304 110.306 91.2982
+61.8449 105.723 91.6808
+63.1906 104.205 93.679
+61.877 100.902 91.5809
+65.142 102.874 93.6408
+60.98 107.018 89.2477
+60.8255 98.5229 88.725
+61.8419 96.3502 90.8698
+71.148 115.77 74.734
+72.6462 114.475 75.7519
+74.8774 117.806 73.757
+71.9991 114.061 77.5961
+67.9535 110.229 77.5086
+67.316 111.106 75.834
+69.2192 116.545 75.1609
+74.3794 122.003 75.2258
+77.255 119.507 76.0594
+65.3161 100.141 74.1278
+65.9492 104.357 76.4742
+65.0666 104.857 75.2271
+65.5755 105.325 78.1409
+64.7994 96.9323 75.7889
+62.8306 96.8634 72.6913
+64.3727 106.149 75.5764
+69.0734 106.128 90.3205
+69.8974 108.674 88.0743
+68.4047 104.489 87.9497
+69.6328 111.346 85.7412
+71.366 112.718 88.0455
+69.0658 109.227 92.3231
+67.3344 103.953 92.0714
+66.8629 100.727 87.5205
+66.8842 104.244 85.5238
+66.5993 106.775 83.3561
+68.6143 111.49 83.4423
+67.3603 109.669 81.5877
+70.7921 114.874 82.9052
+65.262 102.278 83.4591
+66.2121 107.375 80.0866
+69.6277 112.922 79.6822
+61.4054 112.688 85.2545
+61.0968 110.761 82.9583
+62.3378 115.659 83.1084
+61.2614 109.176 80.5581
+60.6613 106.134 82.7072
+60.8754 109.572 87.0208
+62.3034 114.746 87.3428
+63.6157 120.061 83.2854
+63.7695 117.72 80.7965
+64.4714 116.128 78.8383
+62.1993 110.709 78.4646
+64.3061 113.252 77.4372
+61.3394 105.486 78.7137
+66.0005 120.654 78.8926
+66.6641 115.692 76.4336
+64.0951 109.683 76.2195
+73.41 120.378 84.3936
+72.1799 123.551 85.3729
+74.2715 123.448 81.916
+70.1698 125.64 86.3808
+70.3951 121.895 88.7337
+72.2791 116.828 86.6736
+73.2356 117.297 83.4317
+76.1621 121.361 78.8296
+74.1652 125.753 79.8035
+71.6912 128.339 80.4314
+69.3245 127.992 84.7464
+68.3872 126.879 81.6575
+67.2983 125.805 88.0493
+73.2442 125.792 76.9976
+67.47 124.2 79.9314
+65.8113 123.766 82.9937
+63.6179 90.3953 81.0047
+62.9656 88.4304 85.6936
+64.4197 92.734 84.4677
+62.1583 91.9315 89.4188
+61.0022 91.4718 85.319
+61.7301 90.5546 77.6829
+63.9132 94.0089 78.4654
+64.8377 97.5777 83.6523
+65.2829 96.46 86.4724
+59.906 96.6224 80.6052
+60.4273 93.0766 82.7042
+60.7795 92.6269 79.2168
+59.9024 95.7882 85.8464
+59.5704 101.079 82.117
+60.1402 100.471 79.1686
+61.0651 94.8539 75.3484
+69.7556 113.509 92.1791
+70.1278 118.022 90.8061
+71.3491 115.61 89.4463
+74.0955 116.718 80.8681
+76.9491 117.467 78.488
+73.9557 115.561 78.4131
+64.0239 95.0235 90.7016
+65.6113 99.4936 91.9668
+65.3303 97.145 88.9008
+64.2673 99.3245 81.6428
+64.5164 102.86 79.377
+64.1266 97.6726 79.0712
+65.4824 122.56 87.9547
+63.7243 118.608 87.9089
+64.5537 121.929 85.4916
+68.5783 123.003 77.4405
+69.1344 119.728 75.4748
+71.3658 123.318 75.9067
+59.5976 102.445 84.3865
+60.2638 104.704 87.0424
+59.9977 100.082 86.3242
+61.6952 98.9935 74.8768
+62.7554 103.364 75.527
+60.8474 101.349 76.8969
+65.6142 115.608 93.9146
+64.4533 113.935 93.6564
+64.7847 116.237 92.8947
+63.5657 111.814 93.1465
+64.1689 111.414 94.0491
+66.7352 114.669 94.1858
+66.9766 116.876 93.4214
+65.15 118.18 91.8309
+64.2489 116.415 91.6961
+65.1856 110.544 94.8162
+66.5851 112.369 94.4842
+66.2353 109.822 94.2736
+67.8449 113.889 93.6734
+63.9979 108.885 94.4939
+66.0639 107.258 94.342
+67.216 109.087 93.7681
+67.2831 119.158 92.6689
+66.0428 120.049 91.878
+67.4523 121.438 91.7767
+65.5153 120.363 90.5226
+68.2739 118.101 92.5444
+68.673 122.13 90.7984
+67.6727 123.318 90.5152
+63.3289 114.697 91.2851
+62.9877 112.187 92.0606
+62.4277 112.835 90.8893
+62.8446 109.847 92.5062
+63.9112 116.9 90.3245
+62.243 113.279 89.6081
+61.9438 110.856 90.1712
+62.3567 104.993 92.8271
+62.4702 102.547 92.732
+61.8758 103.354 91.6743
+62.5894 100.06 92.58
+63.2816 101.452 93.352
+63.1365 106.678 93.657
+62.4521 107.372 92.6785
+61.3226 103.979 90.5723
+61.346 101.957 90.4748
+64.0814 103.444 94.133
+63.8653 106.219 94.4548
+65.1337 105.361 94.5898
+64.3227 100.695 93.5994
+66.1358 104.891 93.8647
+62.1447 108.122 91.5772
+61.4645 106.273 90.4933
+61.5989 108.643 90.3529
+60.7895 104.783 89.4124
+61.2488 109.259 89.1895
+61.29 99.8644 90.1844
+61.9028 98.7298 91.3484
+61.1762 97.413 89.9588
+62.567 97.6103 92.1633
+60.7844 100.716 88.9713
+60.5622 96.3549 88.5127
+61.1741 95.1798 89.4363
+71.6556 114.826 75.379
+74.0057 115.84 74.7497
+72.854 116.492 74.0875
+75.981 117.015 74.2633
+74.887 115.426 75.498
+70.1611 113.104 76.0775
+69.9737 113.622 75.559
+71.7577 117.748 74.3206
+73.4836 118.551 74.0342
+72.7771 114.46 76.6086
+70.2989 112.757 76.7533
+70.4319 112.604 77.4072
+68.0637 110.38 76.8255
+74.5277 115.074 76.7152
+69.7757 112.288 78.2226
+68.1147 110.373 78.0621
+69.3054 113.804 75.2497
+70.2038 116.243 74.7577
+68.5884 114.103 75.2224
+70.6354 118.418 74.7594
+67.7196 110.745 76.0807
+66.8334 111.447 75.7116
+67.7355 114.155 75.6276
+74.9068 119.818 74.2792
+76.4878 118.826 74.3857
+76.0536 120.77 75.0603
+77.5709 117.844 75.2552
+73.4627 120.642 74.6786
+75.3874 122.821 75.9873
+76.7247 121.541 76.4251
+65.8377 102.512 75.453
+65.4759 105.128 76.2233
+65.1017 102.617 74.5524
+66.2202 107.053 75.9562
+66.6223 107.293 76.5118
+65.9417 101.969 76.7054
+65.7116 100.339 75.4709
+64.3882 100.241 73.121
+64.1293 102.309 73.8387
+66.713 107.365 77.1053
+65.6405 104.167 77.2936
+66.5491 107.183 77.8566
+65.2424 102.403 77.8231
+66.8452 108.179 78.5716
+65.3414 98.4983 74.6448
+64.516 98.467 72.8536
+64.1378 96.7458 73.9488
+63.0166 98.6716 72.1089
+65.368 98.6519 76.4003
+63.8822 95.325 75.4606
+62.8945 95.1831 73.8481
+64.6988 105.464 75.3274
+66.1884 108.041 75.8116
+65.6845 108.265 75.5583
+63.7006 103.362 74.5065
+65.298 109.287 75.6117
+69.798 107.369 89.2033
+69.278 106.572 87.9184
+68.9031 105.167 89.0917
+68.4544 106.29 86.7813
+69.0472 107.959 86.8372
+70.4174 109.509 89.3677
+69.8091 108.523 90.331
+68.0243 103.873 90.0998
+67.9806 103.02 89.0607
+69.8393 109.878 86.9146
+70.7301 110.6 88.201
+70.4407 111.758 86.9694
+71.2205 111.801 89.3174
+68.9862 109.492 85.7467
+70.5251 112.912 85.6681
+71.3481 113.401 86.7417
+69.1162 107.654 91.3498
+68.2949 105.096 91.2467
+68.1033 106.633 92.1493
+67.2547 102.715 90.9906
+69.9222 110.096 91.3216
+68.0312 108.024 93.0211
+67.2726 105.363 92.9683
+67.6759 102.582 87.9066
+67.7812 104.359 86.6946
+66.9963 102.464 86.6118
+67.5978 106.005 85.7034
+67.0159 101.017 88.8139
+66.4063 100.458 86.3635
+66.3206 102.18 85.4647
+67.4976 109.167 83.6721
+67.9969 110.689 82.4878
+66.6836 108.403 82.5315
+68.7941 111.988 81.4143
+69.3502 112.678 82.186
+68.1778 109.71 84.5519
+67.356 107.513 84.4631
+65.8889 105.912 82.3739
+66.1801 107.206 81.6019
+69.7758 113.169 83.0965
+69.0045 111.281 84.5725
+70.0388 112.875 84.4326
+70.6895 114.688 81.7941
+70.8493 114.611 84.2222
+66.8393 105.643 84.5176
+65.9185 104.757 83.4093
+66.0256 103.387 84.4815
+65.0603 103.45 82.5224
+65.5558 101.203 84.4553
+66.8353 108.646 80.7522
+68.5435 111.124 80.6728
+67.9858 110.278 79.8863
+70.0738 113.547 80.3637
+65.4695 105.747 80.793
+67.3072 108.704 79.3789
+69.1804 111.497 79.1091
+61.1937 111.757 84.071
+61.646 113.23 82.9337
+61.6924 114.217 84.1591
+62.3282 114.357 81.9242
+61.8397 112.337 81.9161
+60.7283 109.299 84.0445
+60.8631 110.214 85.0132
+62.0926 115.036 85.2867
+62.4674 116.435 84.3297
+61.1821 110.165 81.7595
+60.625 108.499 82.8965
+60.8013 107.799 81.7042
+60.5742 106.813 83.8787
+61.8406 111.441 80.6851
+61.0207 106.801 80.589
+60.5868 105.486 81.5858
+61.117 111.078 86.1288
+61.7853 113.733 86.319
+61.5396 112.213 87.2042
+62.6539 116.158 86.343
+60.5515 108.61 85.9487
+61.2539 110.543 88.0659
+61.8155 113.189 88.3137
+63.1085 117.803 83.3061
+62.9157 116.626 81.9606
+63.4412 118.627 82.1057
+63.0509 115.647 80.7889
+63.2593 118.87 84.4132
+64.2166 120.685 82.1246
+64.2907 119.629 80.9514
+63.127 113.452 78.8432
+63.1099 111.855 78.0131
+64.3623 114.64 78.2058
+63.2473 110.591 77.2118
+62.4566 108.957 77.6564
+62.4181 112.274 79.5583
+63.3341 114.825 79.6253
+65.5929 117.313 77.9918
+65.3923 115.952 77.3943
+61.7441 108.28 78.4794
+61.6782 110.038 79.5145
+61.3435 107.469 79.53
+61.8566 106.11 77.8236
+60.8884 104.815 79.7293
+63.9725 116.91 79.7055
+65.3726 118.362 78.9344
+64.7693 119.157 79.8215
+66.4996 119.736 78.0657
+65.5384 121.037 80.0268
+65.557 114.588 76.9347
+64.1304 111.625 76.7128
+65.3696 112.698 76.3325
+63.1936 108.085 76.7249
+66.7568 117.468 76.7772
+66.5659 113.679 76.1942
+65.2547 110.825 76.0861
+72.863 121.979 84.7887
+73.2056 123.607 83.608
+73.7641 121.889 83.0148
+73.3154 125.064 82.4396
+72.2623 125.027 84.1211
+71.8582 121.797 86.3538
+72.3862 120.383 85.9341
+74.3109 120.437 82.5917
+74.7492 121.664 81.4981
+71.2436 124.688 85.7353
+71.1234 122.824 86.9886
+70.4007 123.971 87.6187
+71.1255 120.904 88.0919
+71.1245 126.259 84.6737
+69.4072 124.869 88.1496
+69.7251 122.894 89.3293
+72.7487 118.803 85.5498
+73.5512 118.887 83.9211
+72.6945 117.037 85.0526
+74.3391 118.847 82.464
+72.0918 118.465 87.0389
+71.8857 115.358 86.1101
+71.992 115.967 84.2846
+75.1624 122.581 80.3248
+74.3829 124.632 80.8527
+75.4342 123.73 79.2784
+73.2641 126.287 81.4252
+75.8372 120.66 80.0293
+76.3731 122.437 77.8584
+75.1397 124.911 78.3544
+70.5042 128.406 82.5787
+68.9339 127.745 83.0185
+69.8669 128.069 81.1276
+67.6689 126.428 83.4619
+67.9071 127.08 84.915
+70.809 127.623 83.8991
+71.9829 127.685 81.9115
+70.7565 127.637 79.3215
+69.3934 126.811 80.0478
+68.2088 127.273 86.587
+69.9311 127.039 85.6874
+68.8584 126.037 87.5829
+67.005 125.876 86.5731
+68.0718 124.961 89.0662
+72.9282 127.151 80.2591
+72.4138 127.452 78.6527
+73.9907 126.365 78.409
+71.6517 126.401 77.5429
+74.5987 124.735 77.0402
+67.9719 125.568 80.7962
+66.9817 125.545 82.4309
+66.4418 124.105 81.4173
+66.4414 124.904 83.8939
+68.792 125.462 79.2605
+66.1907 122.887 80.5286
+65.1985 122.645 81.9827
+63.4498 89.2097 83.1969
+63.9643 90.2224 84.8646
+64.1108 91.0237 83.1553
+64.2224 92.2887 85.9931
+63.7527 90.0234 86.7976
+62.1175 88.5062 83.769
+62.6117 88.8539 81.1646
+64.1392 92.1811 81.2741
+64.5127 93.3304 82.7346
+62.3896 89.7223 87.7002
+61.7778 89.7596 85.7212
+61.5944 91.3294 87.3798
+61.2488 90.018 83.7883
+63.3232 91.5534 88.6628
+61.3111 93.0075 88.7087
+60.8131 92.8665 86.747
+62.8844 90.0977 79.3235
+63.7546 92.2007 79.6649
+63.168 91.915 77.7522
+64.265 94.1284 80.0576
+61.3892 89.4022 79.3869
+62.317 92.145 76.183
+63.5725 94.0517 76.976
+64.8148 94.9635 83.8863
+64.6941 94.5486 85.4846
+65.2111 96.8827 84.9391
+64.5221 94.3478 87.0033
+64.6418 95.6046 82.658
+65.1838 98.9572 84.559
+65.7797 98.2308 85.8623
+60.2766 94.5604 81.4369
+60.6878 92.4386 81.0138
+60.3864 94.4367 79.9063
+60.9881 90.701 80.3679
+60.8946 91.045 82.4714
+59.9558 95.1484 82.9694
+59.7829 96.6588 82.045
+60.2318 96.4433 79.1641
+60.628 94.6464 78.2966
+60.5688 92.1681 83.9461
+59.9177 94.4135 84.2722
+60.158 93.5473 85.588
+59.7606 96.5023 84.5359
+60.3574 95.1537 87.0306
+59.605 98.6651 81.3594
+59.8792 98.5531 79.8557
+59.8483 100.753 80.6821
+60.2577 98.2694 78.4948
+59.686 99.0504 82.6522
+59.7753 102.858 81.351
+60.1323 102.418 79.8983
+60.949 93.6764 77.2664
+61.0304 91.4238 78.5043
+61.0685 92.3523 76.4619
+60.9881 95.7318 76.4428
+61.6119 93.9361 74.7131
+69.9103 115.816 91.5246
+70.7888 116.907 90.0995
+70.5961 114.638 90.884
+71.6535 117.79 88.7265
+71.0229 118.899 89.3328
+69.1597 116.944 92.1174
+69.0632 114.837 92.7684
+70.4063 112.47 91.3051
+71.1062 113.47 90.0958
+70.4329 120.051 89.8153
+69.3446 118.993 91.3644
+69.5838 121.074 90.379
+68.7399 112.634 93.2147
+69.5793 111.342 92.3366
+68.3459 110.264 93.1277
+71.6559 114.031 88.9335
+71.8902 116.404 88.1296
+71.7415 114.828 87.4195
+75.2666 116.923 79.7126
+75.5403 116.362 78.3546
+73.609 116.058 79.5806
+75.5486 115.684 77.1314
+77.2471 116.698 76.8582
+76.0343 118.421 79.7837
+74.9461 118.106 80.9691
+72.4566 115.498 80.6351
+72.2843 114.947 79.7126
+77.7262 118.278 77.2941
+76.7544 119.317 79.0344
+77.1549 120.387 77.6329
+73.7216 117.25 82.0491
+72.2366 116.025 81.624
+71.9678 116.096 82.9216
+71.6126 114.354 79.1744
+73.0903 114.832 77.952
+70.6819 113.491 78.5896
+64.8796 97.268 91.3682
+65.5433 98.2967 90.3946
+64.6743 95.9304 89.7778
+66.1097 99.2829 89.4624
+66.3354 100.382 90.9411
+64.7032 98.6868 92.7647
+63.8784 96.7354 92.1152
+63.8841 93.4967 89.2174
+64.5157 94.7898 88.3681
+66.3721 101.695 91.9876
+65.4352 100.898 93.0105
+66.1958 103.268 92.8948
+62.8134 95.6169 91.6735
+63.1657 93.464 90.3342
+61.7666 94.1882 90.2396
+65.4451 96.6679 87.7348
+66.2786 99.1613 88.2839
+66.0214 98.7746 86.9804
+63.9598 101.08 80.4423
+64.0722 100.021 79.3786
+64.1081 98.4543 80.5109
+64.5597 99.2413 78.1188
+64.5446 101.402 78.4864
+64.5945 103.609 80.4239
+64.3573 101.728 81.5686
+64.3753 96.8572 81.5624
+64.1758 96.2333 80.2095
+64.9146 104.273 78.6522
+65.2405 105.479 79.7816
+66.117 107.014 79.0002
+64.6055 101.029 82.6096
+64.3751 98.2657 82.6144
+64.9604 99.891 83.5429
+64.2042 95.8383 78.7661
+64.6557 97.5059 77.4734
+64.4346 95.5657 77.0508
+64.5284 120.622 88.0003
+63.8618 120.358 86.7512
+65.0875 122.357 86.6475
+63.6662 119.916 85.5498
+63.3073 118.381 86.6107
+64.2581 118.763 89.1432
+64.9848 120.659 89.2078
+66.0808 124.192 86.5333
+65.7272 123.779 85.3095
+63.0797 116.744 87.5699
+63.4161 116.965 89.0407
+62.5292 114.994 88.6707
+65.8948 122.304 89.2641
+66.3657 124.374 87.8717
+66.7619 124.06 89.4608
+65.2889 123.004 84.2518
+64.0864 121.017 84.4475
+64.5123 122.03 83.1317
+68.8856 121.508 76.2743
+70.2963 121.724 75.5984
+69.824 123.448 76.5589
+71.8308 121.458 75.0857
+70.4637 120.025 74.756
+67.9068 119.477 76.2176
+67.7708 121.077 77.2168
+69.3752 124.753 77.8082
+70.8356 124.899 77.025
+69.0983 118.037 75.3087
+67.6406 117.636 75.869
+67.6425 115.709 75.7237
+67.4125 121.798 78.2625
+68.0623 123.928 78.5308
+66.7442 122.565 79.2904
+72.1703 124.728 76.3754
+72.7953 122.621 75.3065
+73.8076 123.978 76.0304
+59.9629 103.679 85.6969
+60.1005 102.414 86.7591
+59.6862 101.228 85.3657
+60.3663 101.384 87.7284
+60.4298 103.537 88.1296
+60.3665 105.965 85.9501
+60.1568 104.87 84.7429
+59.6087 100.158 83.9138
+59.7095 98.789 84.8796
+60.5182 105.811 88.1677
+60.7287 107.217 86.8826
+60.9103 108.245 88.0865
+60.0281 104.447 83.6552
+59.5076 101.739 83.2733
+59.9604 103.735 82.4278
+59.9582 97.9893 85.9795
+60.3365 99.3676 87.574
+60.2351 97.246 87.2864
+62.0328 101.075 75.0272
+61.6621 102.301 75.9728
+61.1514 99.8839 76.0552
+61.5405 103.767 76.9084
+62.5573 104.721 76.4017
+62.9869 101.94 74.4449
+62.3795 99.7788 73.717
+61.1394 97.6625 76.1812
+60.624 98.8373 77.1673
+63.5197 106.5 76.5237
+63.617 104.835 75.561
+64.4318 108.15 75.7625
+61.9955 98.1386 73.3834
+61.6636 97.0002 74.9733
+61.5438 95.8652 73.7059
+60.3797 100.769 77.93
+61.0308 103.397 77.7489
+60.3902 102.906 78.83
+POLYGONS 1280  5120
+3 164 162 163
+3 163 44 164
+3 162 43 163
+3 164 42 162
+3 166 165 163
+3 163 43 166
+3 165 44 163
+3 166 14 165
+3 168 167 162
+3 162 42 168
+3 167 43 162
+3 168 13 167
+3 170 169 164
+3 164 44 170
+3 169 42 164
+3 170 12 169
+3 173 171 172
+3 172 46 173
+3 171 43 172
+3 173 45 171
+3 167 174 172
+3 172 43 167
+3 174 46 172
+3 167 13 174
+3 175 166 171
+3 171 45 175
+3 166 43 171
+3 175 14 166
+3 177 176 173
+3 173 46 177
+3 176 45 173
+3 177 4 176
+3 180 178 179
+3 179 48 180
+3 178 42 179
+3 180 47 178
+3 169 181 179
+3 179 42 169
+3 181 48 179
+3 169 12 181
+3 182 168 178
+3 178 47 182
+3 168 42 178
+3 182 13 168
+3 184 183 180
+3 180 48 184
+3 183 47 180
+3 184 8 183
+3 187 185 186
+3 186 50 187
+3 185 44 186
+3 187 49 185
+3 165 188 186
+3 186 44 165
+3 188 50 186
+3 165 14 188
+3 189 170 185
+3 185 49 189
+3 170 44 185
+3 189 12 170
+3 191 190 187
+3 187 50 191
+3 190 49 187
+3 191 7 190
+3 194 192 193
+3 193 53 194
+3 192 52 193
+3 194 51 192
+3 196 195 193
+3 193 52 196
+3 195 53 193
+3 196 16 195
+3 198 197 192
+3 192 51 198
+3 197 52 192
+3 198 14 197
+3 200 199 194
+3 194 53 200
+3 199 51 194
+3 200 15 199
+3 203 201 202
+3 202 45 203
+3 201 52 202
+3 203 54 201
+3 197 175 202
+3 202 52 197
+3 175 45 202
+3 197 14 175
+3 204 196 201
+3 201 54 204
+3 196 52 201
+3 204 16 196
+3 176 205 203
+3 203 45 176
+3 205 54 203
+3 176 4 205
+3 208 206 207
+3 207 55 208
+3 206 51 207
+3 208 50 206
+3 199 209 207
+3 207 51 199
+3 209 55 207
+3 199 15 209
+3 188 198 206
+3 206 50 188
+3 198 51 206
+3 188 14 198
+3 210 191 208
+3 208 55 210
+3 191 50 208
+3 210 7 191
+3 213 211 212
+3 212 57 213
+3 211 53 212
+3 213 56 211
+3 195 214 212
+3 212 53 195
+3 214 57 212
+3 195 16 214
+3 215 200 211
+3 211 56 215
+3 200 53 211
+3 215 15 200
+3 217 216 213
+3 213 57 217
+3 216 56 213
+3 217 9 216
+3 220 218 219
+3 219 60 220
+3 218 59 219
+3 220 58 218
+3 222 221 219
+3 219 59 222
+3 221 60 219
+3 222 19 221
+3 224 223 218
+3 218 58 224
+3 223 59 218
+3 224 18 223
+3 226 225 220
+3 220 60 226
+3 225 58 220
+3 226 17 225
+3 229 227 228
+3 228 62 229
+3 227 59 228
+3 229 61 227
+3 223 230 228
+3 228 59 223
+3 230 62 228
+3 223 18 230
+3 231 222 227
+3 227 61 231
+3 222 59 227
+3 231 19 222
+3 233 232 229
+3 229 62 233
+3 232 61 229
+3 233 5 232
+3 236 234 235
+3 235 64 236
+3 234 58 235
+3 236 63 234
+3 225 237 235
+3 235 58 225
+3 237 64 235
+3 225 17 237
+3 238 224 234
+3 234 63 238
+3 224 58 234
+3 238 18 224
+3 240 239 236
+3 236 64 240
+3 239 63 236
+3 240 6 239
+3 243 241 242
+3 242 66 243
+3 241 60 242
+3 243 65 241
+3 221 244 242
+3 242 60 221
+3 244 66 242
+3 221 19 244
+3 245 226 241
+3 241 65 245
+3 226 60 241
+3 245 17 226
+3 247 246 243
+3 243 66 247
+3 246 65 243
+3 247 11 246
+3 250 248 249
+3 249 69 250
+3 248 68 249
+3 250 67 248
+3 252 251 249
+3 249 68 252
+3 251 69 249
+3 252 18 251
+3 254 253 248
+3 248 67 254
+3 253 68 248
+3 254 21 253
+3 256 255 250
+3 250 69 256
+3 255 67 250
+3 256 20 255
+3 259 257 258
+3 258 70 259
+3 257 68 258
+3 259 62 257
+3 253 260 258
+3 258 68 253
+3 260 70 258
+3 253 21 260
+3 230 252 257
+3 257 62 230
+3 252 68 257
+3 230 18 252
+3 261 233 259
+3 259 70 261
+3 233 62 259
+3 261 5 233
+3 264 262 263
+3 263 72 264
+3 262 67 263
+3 264 71 262
+3 255 265 263
+3 263 67 255
+3 265 72 263
+3 255 20 265
+3 266 254 262
+3 262 71 266
+3 254 67 262
+3 266 21 254
+3 268 267 264
+3 264 72 268
+3 267 71 264
+3 268 10 267
+3 271 269 270
+3 270 63 271
+3 269 69 270
+3 271 73 269
+3 251 238 270
+3 270 69 251
+3 238 63 270
+3 251 18 238
+3 272 256 269
+3 269 73 272
+3 256 69 269
+3 272 20 256
+3 239 273 271
+3 271 63 239
+3 273 73 271
+3 239 6 273
+3 276 274 275
+3 275 76 276
+3 274 75 275
+3 276 74 274
+3 278 277 275
+3 275 75 278
+3 277 76 275
+3 278 24 277
+3 280 279 274
+3 274 74 280
+3 279 75 274
+3 280 23 279
+3 282 281 276
+3 276 76 282
+3 281 74 276
+3 282 22 281
+3 285 283 284
+3 284 78 285
+3 283 75 284
+3 285 77 283
+3 279 286 284
+3 284 75 279
+3 286 78 284
+3 279 23 286
+3 287 278 283
+3 283 77 287
+3 278 75 283
+3 287 24 278
+3 289 288 285
+3 285 78 289
+3 288 77 285
+3 289 0 288
+3 292 290 291
+3 291 80 292
+3 290 74 291
+3 292 79 290
+3 281 293 291
+3 291 74 281
+3 293 80 291
+3 281 22 293
+3 294 280 290
+3 290 79 294
+3 280 74 290
+3 294 23 280
+3 296 295 292
+3 292 80 296
+3 295 79 292
+3 296 4 295
+3 299 297 298
+3 298 82 299
+3 297 76 298
+3 299 81 297
+3 277 300 298
+3 298 76 277
+3 300 82 298
+3 277 24 300
+3 301 282 297
+3 297 81 301
+3 282 76 297
+3 301 22 282
+3 303 302 299
+3 299 82 303
+3 302 81 299
+3 303 3 302
+3 306 304 305
+3 305 85 306
+3 304 84 305
+3 306 83 304
+3 308 307 305
+3 305 84 308
+3 307 85 305
+3 308 26 307
+3 310 309 304
+3 304 83 310
+3 309 84 304
+3 310 24 309
+3 312 311 306
+3 306 85 312
+3 311 83 306
+3 312 25 311
+3 315 313 314
+3 314 77 315
+3 313 84 314
+3 315 86 313
+3 309 287 314
+3 314 84 309
+3 287 77 314
+3 309 24 287
+3 316 308 313
+3 313 86 316
+3 308 84 313
+3 316 26 308
+3 288 317 315
+3 315 77 288
+3 317 86 315
+3 288 0 317
+3 320 318 319
+3 319 87 320
+3 318 83 319
+3 320 82 318
+3 311 321 319
+3 319 83 311
+3 321 87 319
+3 311 25 321
+3 300 310 318
+3 318 82 300
+3 310 83 318
+3 300 24 310
+3 322 303 320
+3 320 87 322
+3 303 82 320
+3 322 3 303
+3 325 323 324
+3 324 89 325
+3 323 85 324
+3 325 88 323
+3 307 326 324
+3 324 85 307
+3 326 89 324
+3 307 26 326
+3 327 312 323
+3 323 88 327
+3 312 85 323
+3 327 25 312
+3 329 328 325
+3 325 89 329
+3 328 88 325
+3 329 5 328
+3 332 330 331
+3 331 92 332
+3 330 91 331
+3 332 90 330
+3 334 333 331
+3 331 91 334
+3 333 92 331
+3 334 29 333
+3 336 335 330
+3 330 90 336
+3 335 91 330
+3 336 28 335
+3 338 337 332
+3 332 92 338
+3 337 90 332
+3 338 27 337
+3 341 339 340
+3 340 94 341
+3 339 91 340
+3 341 93 339
+3 335 342 340
+3 340 91 335
+3 342 94 340
+3 335 28 342
+3 343 334 339
+3 339 93 343
+3 334 91 339
+3 343 29 334
+3 345 344 341
+3 341 94 345
+3 344 93 341
+3 345 2 344
+3 348 346 347
+3 347 96 348
+3 346 90 347
+3 348 95 346
+3 337 349 347
+3 347 90 337
+3 349 96 347
+3 337 27 349
+3 350 336 346
+3 346 95 350
+3 336 90 346
+3 350 28 336
+3 352 351 348
+3 348 96 352
+3 351 95 348
+3 352 7 351
+3 355 353 354
+3 354 98 355
+3 353 92 354
+3 355 97 353
+3 333 356 354
+3 354 92 333
+3 356 98 354
+3 333 29 356
+3 357 338 353
+3 353 97 357
+3 338 92 353
+3 357 27 338
+3 359 358 355
+3 355 98 359
+3 358 97 355
+3 359 1 358
+3 362 360 361
+3 361 101 362
+3 360 100 361
+3 362 99 360
+3 364 363 361
+3 361 100 364
+3 363 101 361
+3 364 31 363
+3 366 365 360
+3 360 99 366
+3 365 100 360
+3 366 29 365
+3 368 367 362
+3 362 101 368
+3 367 99 362
+3 368 30 367
+3 371 369 370
+3 370 93 371
+3 369 100 370
+3 371 102 369
+3 365 343 370
+3 370 100 365
+3 343 93 370
+3 365 29 343
+3 372 364 369
+3 369 102 372
+3 364 100 369
+3 372 31 364
+3 344 373 371
+3 371 93 344
+3 373 102 371
+3 344 2 373
+3 376 374 375
+3 375 103 376
+3 374 99 375
+3 376 98 374
+3 367 377 375
+3 375 99 367
+3 377 103 375
+3 367 30 377
+3 356 366 374
+3 374 98 356
+3 366 99 374
+3 356 29 366
+3 378 359 376
+3 376 103 378
+3 359 98 376
+3 378 1 359
+3 381 379 380
+3 380 105 381
+3 379 101 380
+3 381 104 379
+3 363 382 380
+3 380 101 363
+3 382 105 380
+3 363 31 382
+3 383 368 379
+3 379 104 383
+3 368 101 379
+3 383 30 368
+3 385 384 381
+3 381 105 385
+3 384 104 381
+3 385 6 384
+3 388 386 387
+3 387 108 388
+3 386 107 387
+3 388 106 386
+3 390 389 387
+3 387 107 390
+3 389 108 387
+3 390 34 389
+3 392 391 386
+3 386 106 392
+3 391 107 386
+3 392 33 391
+3 394 393 388
+3 388 108 394
+3 393 106 388
+3 394 32 393
+3 397 395 396
+3 396 110 397
+3 395 107 396
+3 397 109 395
+3 391 398 396
+3 396 107 391
+3 398 110 396
+3 391 33 398
+3 399 390 395
+3 395 109 399
+3 390 107 395
+3 399 34 390
+3 401 400 397
+3 397 110 401
+3 400 109 397
+3 401 8 400
+3 404 402 403
+3 403 112 404
+3 402 106 403
+3 404 111 402
+3 393 405 403
+3 403 106 393
+3 405 112 403
+3 393 32 405
+3 406 392 402
+3 402 111 406
+3 392 106 402
+3 406 33 392
+3 408 407 404
+3 404 112 408
+3 407 111 404
+3 408 0 407
+3 411 409 410
+3 410 114 411
+3 409 108 410
+3 411 113 409
+3 389 412 410
+3 410 108 389
+3 412 114 410
+3 389 34 412
+3 413 394 409
+3 409 113 413
+3 394 108 409
+3 413 32 394
+3 415 414 411
+3 411 114 415
+3 414 113 411
+3 415 11 414
+3 418 416 417
+3 417 117 418
+3 416 116 417
+3 418 115 416
+3 420 419 417
+3 417 116 420
+3 419 117 417
+3 420 36 419
+3 422 421 416
+3 416 115 422
+3 421 116 416
+3 422 34 421
+3 424 423 418
+3 418 117 424
+3 423 115 418
+3 424 35 423
+3 427 425 426
+3 426 109 427
+3 425 116 426
+3 427 118 425
+3 421 399 426
+3 426 116 421
+3 399 109 426
+3 421 34 399
+3 428 420 425
+3 425 118 428
+3 420 116 425
+3 428 36 420
+3 400 429 427
+3 427 109 400
+3 429 118 427
+3 400 8 429
+3 432 430 431
+3 431 119 432
+3 430 115 431
+3 432 114 430
+3 423 433 431
+3 431 115 423
+3 433 119 431
+3 423 35 433
+3 412 422 430
+3 430 114 412
+3 422 115 430
+3 412 34 422
+3 434 415 432
+3 432 119 434
+3 415 114 432
+3 434 11 415
+3 437 435 436
+3 436 121 437
+3 435 117 436
+3 437 120 435
+3 419 438 436
+3 436 117 419
+3 438 121 436
+3 419 36 438
+3 439 424 435
+3 435 120 439
+3 424 117 435
+3 439 35 424
+3 441 440 437
+3 437 121 441
+3 440 120 437
+3 441 1 440
+3 444 442 443
+3 443 124 444
+3 442 123 443
+3 444 122 442
+3 446 445 443
+3 443 123 446
+3 445 124 443
+3 446 39 445
+3 448 447 442
+3 442 122 448
+3 447 123 442
+3 448 38 447
+3 450 449 444
+3 444 124 450
+3 449 122 444
+3 450 37 449
+3 453 451 452
+3 452 126 453
+3 451 123 452
+3 453 125 451
+3 447 454 452
+3 452 123 447
+3 454 126 452
+3 447 38 454
+3 455 446 451
+3 451 125 455
+3 446 123 451
+3 455 39 446
+3 457 456 453
+3 453 126 457
+3 456 125 453
+3 457 9 456
+3 460 458 459
+3 459 128 460
+3 458 122 459
+3 460 127 458
+3 449 461 459
+3 459 122 449
+3 461 128 459
+3 449 37 461
+3 462 448 458
+3 458 127 462
+3 448 122 458
+3 462 38 448
+3 464 463 460
+3 460 128 464
+3 463 127 460
+3 464 10 463
+3 467 465 466
+3 466 130 467
+3 465 124 466
+3 467 129 465
+3 445 468 466
+3 466 124 445
+3 468 130 466
+3 445 39 468
+3 469 450 465
+3 465 129 469
+3 450 124 465
+3 469 37 450
+3 471 470 467
+3 467 130 471
+3 470 129 467
+3 471 3 470
+3 474 472 473
+3 473 133 474
+3 472 132 473
+3 474 131 472
+3 476 475 473
+3 473 132 476
+3 475 133 473
+3 476 38 475
+3 478 477 472
+3 472 131 478
+3 477 132 472
+3 478 41 477
+3 480 479 474
+3 474 133 480
+3 479 131 474
+3 480 40 479
+3 483 481 482
+3 482 134 483
+3 481 132 482
+3 483 126 481
+3 477 484 482
+3 482 132 477
+3 484 134 482
+3 477 41 484
+3 454 476 481
+3 481 126 454
+3 476 132 481
+3 454 38 476
+3 485 457 483
+3 483 134 485
+3 457 126 483
+3 485 9 457
+3 488 486 487
+3 487 136 488
+3 486 131 487
+3 488 135 486
+3 479 489 487
+3 487 131 479
+3 489 136 487
+3 479 40 489
+3 490 478 486
+3 486 135 490
+3 478 131 486
+3 490 41 478
+3 492 491 488
+3 488 136 492
+3 491 135 488
+3 492 2 491
+3 495 493 494
+3 494 127 495
+3 493 133 494
+3 495 137 493
+3 475 462 494
+3 494 133 475
+3 462 127 494
+3 475 38 462
+3 496 480 493
+3 493 137 496
+3 480 133 493
+3 496 40 480
+3 463 497 495
+3 495 127 463
+3 497 137 495
+3 463 10 497
+3 500 498 499
+3 499 140 500
+3 498 139 499
+3 500 138 498
+3 502 501 499
+3 499 139 502
+3 501 140 499
+3 502 33 501
+3 504 503 498
+3 498 138 504
+3 503 139 498
+3 504 13 503
+3 506 505 500
+3 500 140 506
+3 505 138 500
+3 506 23 505
+3 509 507 508
+3 508 47 509
+3 507 139 508
+3 509 110 507
+3 503 182 508
+3 508 139 503
+3 182 47 508
+3 503 13 182
+3 398 502 507
+3 507 110 398
+3 502 139 507
+3 398 33 502
+3 183 401 509
+3 509 47 183
+3 401 110 509
+3 183 8 401
+3 512 510 511
+3 511 79 512
+3 510 138 511
+3 512 46 510
+3 505 294 511
+3 511 138 505
+3 294 79 511
+3 505 23 294
+3 174 504 510
+3 510 46 174
+3 504 138 510
+3 174 13 504
+3 295 177 512
+3 512 79 295
+3 177 46 512
+3 295 4 177
+3 515 513 514
+3 514 111 515
+3 513 140 514
+3 515 78 513
+3 501 406 514
+3 514 140 501
+3 406 111 514
+3 501 33 406
+3 286 506 513
+3 513 78 286
+3 506 140 513
+3 286 23 506
+3 407 289 515
+3 515 111 407
+3 289 78 515
+3 407 0 289
+3 518 516 517
+3 517 143 518
+3 516 142 517
+3 518 141 516
+3 520 519 517
+3 517 142 520
+3 519 143 517
+3 520 19 519
+3 522 521 516
+3 516 141 522
+3 521 142 516
+3 522 32 521
+3 524 523 518
+3 518 143 524
+3 523 141 518
+3 524 26 523
+3 527 525 526
+3 526 113 527
+3 525 142 526
+3 527 66 525
+3 521 413 526
+3 526 142 521
+3 413 113 526
+3 521 32 413
+3 244 520 525
+3 525 66 244
+3 520 142 525
+3 244 19 520
+3 414 247 527
+3 527 113 414
+3 247 66 527
+3 414 11 247
+3 530 528 529
+3 529 86 530
+3 528 141 529
+3 530 112 528
+3 523 316 529
+3 529 141 523
+3 316 86 529
+3 523 26 316
+3 405 522 528
+3 528 112 405
+3 522 141 528
+3 405 32 522
+3 317 408 530
+3 530 86 317
+3 408 112 530
+3 317 0 408
+3 533 531 532
+3 532 61 533
+3 531 143 532
+3 533 89 531
+3 519 231 532
+3 532 143 519
+3 231 61 532
+3 519 19 231
+3 326 524 531
+3 531 89 326
+3 524 143 531
+3 326 26 524
+3 232 329 533
+3 533 61 232
+3 329 89 533
+3 232 5 329
+3 536 534 535
+3 535 146 536
+3 534 145 535
+3 536 144 534
+3 538 537 535
+3 535 145 538
+3 537 146 535
+3 538 22 537
+3 540 539 534
+3 534 144 540
+3 539 145 534
+3 540 16 539
+3 542 541 536
+3 536 146 542
+3 541 144 536
+3 542 39 541
+3 545 543 544
+3 544 54 545
+3 543 145 544
+3 545 80 543
+3 539 204 544
+3 544 145 539
+3 204 54 544
+3 539 16 204
+3 293 538 543
+3 543 80 293
+3 538 145 543
+3 293 22 538
+3 205 296 545
+3 545 54 205
+3 296 80 545
+3 205 4 296
+3 548 546 547
+3 547 125 548
+3 546 144 547
+3 548 57 546
+3 541 455 547
+3 547 144 541
+3 455 125 547
+3 541 39 455
+3 214 540 546
+3 546 57 214
+3 540 144 546
+3 214 16 540
+3 456 217 548
+3 548 125 456
+3 217 57 548
+3 456 9 217
+3 551 549 550
+3 550 81 551
+3 549 146 550
+3 551 130 549
+3 537 301 550
+3 550 146 537
+3 301 81 550
+3 537 22 301
+3 468 542 549
+3 549 130 468
+3 542 146 549
+3 468 39 542
+3 302 471 551
+3 551 81 302
+3 471 130 551
+3 302 3 471
+3 554 552 553
+3 553 149 554
+3 552 148 553
+3 554 147 552
+3 556 555 553
+3 553 148 556
+3 555 149 553
+3 556 21 555
+3 558 557 552
+3 552 147 558
+3 557 148 552
+3 558 25 557
+3 560 559 554
+3 554 149 560
+3 559 147 554
+3 560 37 559
+3 563 561 562
+3 562 88 563
+3 561 148 562
+3 563 70 561
+3 557 327 562
+3 562 148 557
+3 327 88 562
+3 557 25 327
+3 260 556 561
+3 561 70 260
+3 556 148 561
+3 260 21 556
+3 328 261 563
+3 563 88 328
+3 261 70 563
+3 328 5 261
+3 566 564 565
+3 565 129 566
+3 564 147 565
+3 566 87 564
+3 559 469 565
+3 565 147 559
+3 469 129 565
+3 559 37 469
+3 321 558 564
+3 564 87 321
+3 558 147 564
+3 321 25 558
+3 470 322 566
+3 566 129 470
+3 322 87 566
+3 470 3 322
+3 569 567 568
+3 568 71 569
+3 567 149 568
+3 569 128 567
+3 555 266 568
+3 568 149 555
+3 266 71 568
+3 555 21 266
+3 461 560 567
+3 567 128 461
+3 560 149 567
+3 461 37 560
+3 267 464 569
+3 569 71 267
+3 464 128 569
+3 267 10 464
+3 572 570 571
+3 571 152 572
+3 570 151 571
+3 572 150 570
+3 574 573 571
+3 571 151 574
+3 573 152 571
+3 574 27 573
+3 576 575 570
+3 570 150 576
+3 575 151 570
+3 576 12 575
+3 578 577 572
+3 572 152 578
+3 577 150 572
+3 578 36 577
+3 581 579 580
+3 580 49 581
+3 579 151 580
+3 581 96 579
+3 575 189 580
+3 580 151 575
+3 189 49 580
+3 575 12 189
+3 349 574 579
+3 579 96 349
+3 574 151 579
+3 349 27 574
+3 190 352 581
+3 581 49 190
+3 352 96 581
+3 190 7 352
+3 584 582 583
+3 583 118 584
+3 582 150 583
+3 584 48 582
+3 577 428 583
+3 583 150 577
+3 428 118 583
+3 577 36 428
+3 181 576 582
+3 582 48 181
+3 576 150 582
+3 181 12 576
+3 429 184 584
+3 584 118 429
+3 184 48 584
+3 429 8 184
+3 587 585 586
+3 586 97 587
+3 585 152 586
+3 587 121 585
+3 573 357 586
+3 586 152 573
+3 357 97 586
+3 573 27 357
+3 438 578 585
+3 585 121 438
+3 578 152 585
+3 438 36 578
+3 358 441 587
+3 587 97 358
+3 441 121 587
+3 358 1 441
+3 590 588 589
+3 589 155 590
+3 588 154 589
+3 590 153 588
+3 592 591 589
+3 589 154 592
+3 591 155 589
+3 592 17 591
+3 594 593 588
+3 588 153 594
+3 593 154 588
+3 594 30 593
+3 596 595 590
+3 590 155 596
+3 595 153 590
+3 596 35 595
+3 599 597 598
+3 598 104 599
+3 597 154 598
+3 599 64 597
+3 593 383 598
+3 598 154 593
+3 383 104 598
+3 593 30 383
+3 237 592 597
+3 597 64 237
+3 592 154 597
+3 237 17 592
+3 384 240 599
+3 599 104 384
+3 240 64 599
+3 384 6 240
+3 602 600 601
+3 601 120 602
+3 600 153 601
+3 602 103 600
+3 595 439 601
+3 601 153 595
+3 439 120 601
+3 595 35 439
+3 377 594 600
+3 600 103 377
+3 594 153 600
+3 377 30 594
+3 440 378 602
+3 602 120 440
+3 378 103 602
+3 440 1 378
+3 605 603 604
+3 604 65 605
+3 603 155 604
+3 605 119 603
+3 591 245 604
+3 604 155 591
+3 245 65 604
+3 591 17 245
+3 433 596 603
+3 603 119 433
+3 596 155 603
+3 433 35 596
+3 246 434 605
+3 605 65 246
+3 434 119 605
+3 246 11 434
+3 608 606 607
+3 607 158 608
+3 606 157 607
+3 608 156 606
+3 610 609 607
+3 607 157 610
+3 609 158 607
+3 610 15 609
+3 612 611 606
+3 606 156 612
+3 611 157 606
+3 612 28 611
+3 614 613 608
+3 608 158 614
+3 613 156 608
+3 614 41 613
+3 617 615 616
+3 616 95 617
+3 615 157 616
+3 617 55 615
+3 611 350 616
+3 616 157 611
+3 350 95 616
+3 611 28 350
+3 209 610 615
+3 615 55 209
+3 610 157 615
+3 209 15 610
+3 351 210 617
+3 617 95 351
+3 210 55 617
+3 351 7 210
+3 620 618 619
+3 619 135 620
+3 618 156 619
+3 620 94 618
+3 613 490 619
+3 619 156 613
+3 490 135 619
+3 613 41 490
+3 342 612 618
+3 618 94 342
+3 612 156 618
+3 342 28 612
+3 491 345 620
+3 620 135 491
+3 345 94 620
+3 491 2 345
+3 623 621 622
+3 622 56 623
+3 621 158 622
+3 623 134 621
+3 609 215 622
+3 622 158 609
+3 215 56 622
+3 609 15 215
+3 484 614 621
+3 621 134 484
+3 614 158 621
+3 484 41 614
+3 216 485 623
+3 623 56 216
+3 485 134 623
+3 216 9 485
+3 626 624 625
+3 625 161 626
+3 624 160 625
+3 626 159 624
+3 628 627 625
+3 625 160 628
+3 627 161 625
+3 628 31 627
+3 630 629 624
+3 624 159 630
+3 629 160 624
+3 630 20 629
+3 632 631 626
+3 626 161 632
+3 631 159 626
+3 632 40 631
+3 635 633 634
+3 634 73 635
+3 633 160 634
+3 635 105 633
+3 629 272 634
+3 634 160 629
+3 272 73 634
+3 629 20 272
+3 382 628 633
+3 633 105 382
+3 628 160 633
+3 382 31 628
+3 273 385 635
+3 635 73 273
+3 385 105 635
+3 273 6 385
+3 638 636 637
+3 637 137 638
+3 636 159 637
+3 638 72 636
+3 631 496 637
+3 637 159 631
+3 496 137 637
+3 631 40 496
+3 265 630 636
+3 636 72 265
+3 630 159 636
+3 265 20 630
+3 497 268 638
+3 638 137 497
+3 268 72 638
+3 497 10 268
+3 641 639 640
+3 640 102 641
+3 639 161 640
+3 641 136 639
+3 627 372 640
+3 640 161 627
+3 372 102 640
+3 627 31 372
+3 489 632 639
+3 639 136 489
+3 632 161 639
+3 489 40 632
+3 373 492 641
+3 641 102 373
+3 492 136 641
+3 373 2 492
diff --git a/tests/testdata/test_mesh_data.txt b/tests/testdata/test_mesh_data.txt
new file mode 100644
index 000000000..96b7f4331
--- /dev/null
+++ b/tests/testdata/test_mesh_data.txt
@@ -0,0 +1,642 @@
+26
+14
+39
+12
+31
+60
+82
+98
+62
+44
+4
+92
+73
+36
+15
+30
+64
+54
+86
+98
+64
+80
+8
+85
+47
+63
+63
+47
+19
+96
+62
+32
+23
+76
+96
+72
+68
+69
+87
+46
+43
+84
+88
+70
+44
+85
+57
+78
+18
+6
+70
+16
+36
+25
+91
+81
+94
+56
+4
+48
+41
+88
+99
+66
+69
+97
+32
+57
+61
+77
+75
+30
+15
+57
+20
+15
+59
+4
+61
+17
+80
+27
+92
+67
+39
+79
+56
+96
+34
+24
+68
+2
+9
+27
+35
+59
+28
+3
+55
+3
+84
+14
+15
+78
+53
+99
+18
+52
+60
+60
+92
+46
+9
+19
+81
+59
+58
+93
+17
+20
+77
+33
+87
+17
+83
+34
+26
+9
+90
+37
+52
+10
+46
+45
+27
+84
+25
+63
+30
+78
+55
+10
+46
+3
+58
+35
+49
+42
+36
+60
+36
+22
+78
+97
+5
+51
+38
+95
+93
+89
+57
+51
+93
+61
+14
+80
+74
+54
+40
+44
+5
+21
+41
+63
+80
+19
+11
+57
+35
+39
+48
+11
+66
+17
+80
+82
+24
+22
+4
+29
+34
+32
+32
+5
+68
+43
+42
+17
+88
+56
+61
+59
+85
+91
+27
+5
+44
+66
+25
+88
+61
+10
+57
+65
+21
+10
+61
+62
+40
+42
+21
+62
+16
+6
+37
+21
+38
+37
+60
+29
+23
+91
+60
+81
+60
+81
+91
+38
+55
+1
+61
+85
+18
+22
+86
+35
+29
+79
+29
+34
+79
+91
+1
+73
+30
+12
+74
+8
+32
+7
+8
+7
+90
+75
+47
+52
+39
+17
+44
+18
+67
+72
+83
+83
+85
+40
+22
+53
+39
+86
+9
+96
+49
+80
+96
+80
+72
+9
+15
+28
+14
+37
+23
+94
+79
+94
+90
+69
+84
+15
+60
+42
+39
+45
+91
+63
+53
+29
+5
+87
+20
+54
+89
+45
+57
+15
+20
+21
+42
+2
+59
+19
+91
+51
+95
+55
+20
+53
+64
+3
+13
+88
+19
+92
+62
+92
+48
+92
+78
+40
+62
+9
+15
+75
+17
+77
+19
+38
+31
+3
+51
+24
+36
+93
+15
+58
+61
+9
+2
+16
+71
+10
+20
+48
+43
+67
+81
+94
+42
+30
+92
+75
+30
+97
+13
+64
+56
+98
+29
+89
+83
+57
+96
+85
+10
+76
+27
+51
+87
+84
+91
+41
+76
+96
+5
+85
+57
+74
+94
+8
+7
+80
+24
+25
+63
+27
+43
+4
+56
+94
+10
+79
+72
+84
+12
+41
+61
+34
+40
+44
+94
+21
+16
+82
+89
+57
+18
+73
+22
+51
+80
+75
+31
+5
+5
+59
+77
+48
+47
+80
+2
+2
+52
+90
+51
+69
+71
+68
+68
+57
+34
+96
+11
+10
+88
+81
+79
+22
+18
+82
+27
+39
+79
+91
+41
+86
+27
+64
+20
+53
+76
+67
+53
+32
+89
+43
+98
+76
+62
+65
+41
+37
+69
+44
+59
+14
+84
+54
+94
+55
+5
+73
+12
+5
+4
+99
+47
+65
+73
+42
+40
+58
+94
+71
+36
+69
+46
+20
+88
+2
+3
+98
+31
+34
+41
+67
+2
+55
+41
+73
+4
+11
+53
+82
+92
+98
+20
+60
+56
+54
+32
+78
+93
+85
+59
+20
+24
+96
+56
+8
+53
+26
+9
+29
+70
+42
+10
+69
+88
+25
+15
+2
+21
+41
+65
+53
+32
+79
+36
+74
+91
+29
+88
+75
+86
+57
+33
+41
+94
+50
+96
+5
+31
+71
+13
+75
+5
+98
+32
+38
+46
+59
+77
+61
+51
+25
+82
+72
+42
+50
+89
+90
+70
+98
+45
+16
+64
+73
+65
+8
+87
+72
+24
+80
+93
+11
+37
+4
+56
+77
+26
+42
+92
+37
+55
+81
+1
+64
+97
+60
+51
+82
+57
+39
+18
+72
+19
+85
+95
+77
+80
+84
+87
+78
+83
+87
+47
+47
+66
+62
+30
+57
-- 
GitLab